diff --git a/src/kiri-mode/cam/client.js b/src/kiri-mode/cam/client.js index 9b4d4c91..5f0c0b3c 100644 --- a/src/kiri-mode/cam/client.js +++ b/src/kiri-mode/cam/client.js @@ -123,7 +123,7 @@ CAM.init = function(kiri, api) { // wire up animate button in ui api.event.on("function.animate", (mode) => { - if (isAnimate) { + if (isAnimate || !isCamMode) { return; } api.function.prepare(() => { @@ -1809,6 +1809,7 @@ function animate() { API.hide.slider(); STACKS.clear(); animFn().animate(API); + API.view.set_animate(); } function updateStock() { diff --git a/src/kiri/consts.js b/src/kiri/consts.js index d44364ad..6fc68808 100644 --- a/src/kiri/consts.js +++ b/src/kiri/consts.js @@ -133,7 +133,8 @@ const MODES = { const VIEWS = { ARRANGE: 1, SLICE: 2, - PREVIEW: 3 + PREVIEW: 3, + ANIMATE: 4 }; // preview modes diff --git a/src/kiri/function.js b/src/kiri/function.js index 246326e2..8e608714 100644 --- a/src/kiri/function.js +++ b/src/kiri/function.js @@ -380,8 +380,7 @@ function prepareAnimation() { api.alerts.show("window prevents animations"); return; } - const settings = api.conf.get(); - api.event.emit("function.animate", {mode: settings.mode}); + api.event.emit("function.animate", {mode: api.conf.get().mode}); } function prepareExport() { diff --git a/src/kiri/init.js b/src/kiri/init.js index 0b9784d7..96cca351 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -1633,7 +1633,7 @@ gapp.register("kiri.init", [], (root, exports) => { ltact: $('lt-start'), edit: $('lt-tools'), nozzle: $('menu-nozzle'), - render: $('menu-render'), + // render: $('menu-render'), modal: $('modal'), modalBox: $('modal-box'), @@ -1794,7 +1794,7 @@ gapp.register("kiri.init", [], (root, exports) => { shiny: newBoolean(LANG.op_shny_s, booleanSave, {title:LANG.op_shny_l, modes:FDM}), lineType: newSelect(LANG.op_line_s, {title: LANG.op_line_l, action: lineTypeSave, modes:FDM}, "linetype"), animesh: newSelect(LANG.op_anim_s, {title: LANG.op_anim_l, action: aniMeshSave, modes:CAM}, "animesh"), - units: newSelect(LANG.op_unit_s, {title: LANG.op_unit_l, action: unitsSave, modes:CAM, trace:true}, "units"), + units: newSelect(LANG.op_unit_s, {title: LANG.op_unit_l, action: unitsSave, modes:CAM, trace:false}, "units"), layout: newGroup(LANG.lo_menu, $('prefs-lay'), {inline: true}), autoSave: newBoolean(LANG.op_save_s, booleanSave, {title:LANG.op_save_l}), autoLayout: newBoolean(LANG.op_auto_s, booleanSave, {title:LANG.op_auto_l}), @@ -1819,7 +1819,7 @@ gapp.register("kiri.init", [], (root, exports) => { _____: newGroup(LANG.sl_menu, $('fdm-layers'), { modes:FDM, driven, separator }), sliceHeight: newInput(LANG.sl_lahi_s, { title:LANG.sl_lahi_l, convert:toFloat }), - sliceMinHeight: newInput(LANG.ad_minl_s, { title:LANG.ad_minl_l, convert:toFloat, bound:bound(0,3.0), show:() => ui.sliceAdaptive.checked, trace2:true }), + sliceMinHeight: newInput(LANG.ad_minl_s, { title:LANG.ad_minl_l, convert:toFloat, bound:bound(0,3.0), show:() => ui.sliceAdaptive.checked }), sliceTopLayers: newInput(LANG.sl_ltop_s, { title:LANG.sl_ltop_l, convert:toInt }), sliceBottomLayers: newInput(LANG.sl_lbot_s, { title:LANG.sl_lbot_l, convert:toInt }), separator: newBlank({ class:"set-sep", driven }), @@ -1858,7 +1858,7 @@ gapp.register("kiri.init", [], (root, exports) => { sliceSupportExtra: newInput(LANG.sp_xpnd_s, {title:LANG.sp_xpnd_l, convert:toFloat, bound:bound(0.0,10.0)}), sliceSupportGrow: newInput(LANG.sp_grow_s, {title:LANG.sp_grow_l, convert:toFloat, bound:bound(0.0,10.0)}), sliceSupportAngle: newInput(LANG.sp_angl_s, {title:LANG.sp_angl_l, convert:toFloat, bound:bound(0.0,90.0)}), - sliceSupportSpan: newInput(LANG.sp_span_s, {title:LANG.sp_span_l, convert:toFloat, bound:bound(0.0,200.0), show:() => ui.sliceSupportEnable.checked, trace2:false }), + sliceSupportSpan: newInput(LANG.sp_span_s, {title:LANG.sp_span_l, convert:toFloat, bound:bound(0.0,200.0), show:() => ui.sliceSupportEnable.checked }), separator: newBlank({ class:"set-sep", driven }), sliceSupportEnable: newBoolean(LANG.sp_auto_s, onBooleanClick, {title:LANG.sp_auto_l, show:isNotBelt}), sliceSupportOutline: newBoolean(LANG.sp_outl_s, onBooleanClick, {title:LANG.sp_outl_l}), @@ -1955,7 +1955,7 @@ gapp.register("kiri.init", [], (root, exports) => { camStockIndexed: newBoolean(LANG.cs_indx_s, onBooleanClick, {title:LANG.cs_indx_l}), camStockIndexGrid: newBoolean(LANG.cs_ishg_s, onBooleanClick, {title:LANG.cs_ishg_l, show:() => ui.camStockIndexed.checked}), camLimits: newGroup(LANG.cc_menu, $('cam-limits'), { modes:CAM, driven, separator }), - camZAnchor: newSelect(LANG.ou_zanc_s, {title: LANG.ou_zanc_l, action:zAnchorSave, trace:true, show:() => !ui.camStockIndexed.checked}, "zanchor"), + camZAnchor: newSelect(LANG.ou_zanc_s, {title: LANG.ou_zanc_l, action:zAnchorSave, trace:false, show:() => !ui.camStockIndexed.checked}, "zanchor"), camZOffset: newInput(LANG.ou_ztof_s, {title:LANG.ou_ztof_l, convert:toFloat, units:true}), camZBottom: newInput(LANG.ou_zbot_s, {title:LANG.ou_zbot_l, convert:toFloat, units:true, trigger: true}), camZThru: newInput(LANG.ou_ztru_s, {title:LANG.ou_ztru_l, convert:toFloat, bound:bound(0.0,100), units:true, show:() => { return ui.camZBottom.value == 0 }}), @@ -2769,7 +2769,7 @@ gapp.register("kiri.init", [], (root, exports) => { $('view-back').onclick = space.view.back; $('view-left').onclick = space.view.left; $('view-right').onclick = space.view.right; - $('view-clear').onclick = api.platform.clear; + // $('view-clear').onclick = api.platform.clear; $('unrotate').onclick = () => { api.widgets.for(w => w.unrotate()); api.selection.update_info(); @@ -2784,7 +2784,7 @@ gapp.register("kiri.init", [], (root, exports) => { $('rot_z_lt').onclick = () => { api.selection.rotate(0,0, d) }; $('rot_z_gt').onclick = () => { api.selection.rotate(0,0,-d) }; // rendering options - $('render-hide').onclick = () => { api.view.wireframe(false, 0, 0); }; + // $('render-hide').onclick = () => { api.view.wireframe(false, 0, 0); }; $('render-ghost').onclick = () => { api.view.wireframe(false, 0, api.view.is_arrange() ? 0.4 : 0.25); }; $('render-wire').onclick = () => { api.view.wireframe(true, 0, api.space.is_dark() ? 0.25 : 0.5); }; $('render-solid').onclick = () => { api.view.wireframe(false, 0, 1); }; diff --git a/src/kiri/main.js b/src/kiri/main.js index b28c0276..d046ba26 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -186,9 +186,11 @@ gapp.register("kiri.main", [], (root, exports) => { set_arrange() { api.view.set(VIEWS.ARRANGE) }, set_slice() { api.view.set(VIEWS.SLICE) }, set_preview() { api.view.set(VIEWS.PREVIEW) }, + set_animate() { api.view.set(VIEWS.ANIMATE) }, is_arrange() { return viewMode === VIEWS.ARRANGE }, is_slice() { return viewMode === VIEWS.SLICE }, is_preview() { return viewMode === VIEWS.PREVIEW }, + is_animate() { return viewMode === VIEWS.ANIMATE }, update_stack_labels: updateStackLabelState, update_slider_max: updateSliderMax, update_slider: updateSlider, @@ -840,12 +842,13 @@ gapp.register("kiri.main", [], (root, exports) => { platform.deselect(); selection.update_info(); // disable clear in non-arrange modes - $('view-clear').style.display = mode === VIEWS.ARRANGE ? '' : 'none'; + ['view-arrange','act-slice','act-preview','act-animate'].forEach(el => { + $(el).classList.remove('selected') + }); switch (mode) { case VIEWS.ARRANGE: + $('view-arrange').classList.add('selected'); api.function.clear_progress(); - // UI.back.style.display = ''; - UI.render.style.display = ''; kiri.client.clear(); STACKS.clear(); hideSlider(); @@ -855,17 +858,18 @@ gapp.register("kiri.main", [], (root, exports) => { api.widgets.opacity(1); break; case VIEWS.SLICE: - if (isCAM) UI.render.classList.add('hide'); - else UI.render.classList.remove('hide'); + $('act-slice').classList.add('selected'); updateSpeeds(); updateSliderMax(); setWidgetVisibility(true); break; case VIEWS.PREVIEW: - if (isCAM) UI.render.classList.add('hide'); - else UI.render.classList.remove('hide'); + $('act-preview').classList.add('selected'); setWidgetVisibility(true); break; + case VIEWS.ANIMATE: + $('act-animate').classList.add('selected'); + break; default: console.log("invalid view mode: "+mode); return; diff --git a/src/kiri/ui.js b/src/kiri/ui.js index b7674af5..7711b2f9 100644 --- a/src/kiri/ui.js +++ b/src/kiri/ui.js @@ -15,7 +15,6 @@ gapp.register("kiri.ui", [], (root, exports) => { addTo = null, bindTo = null, groups = {}, - groupShow = {}, groupSticky = false, groupName = undefined, hasModes = [], @@ -24,10 +23,7 @@ gapp.register("kiri.ui", [], (root, exports) => { lastMode = null, lastExpert = true, letHoverPop = true, - exitimer = undefined, - NOMODE = "nomode", prefix = "tab", - state = {}, units = 1, lastChange = null, lastBtn = null, @@ -167,8 +163,8 @@ gapp.register("kiri.ui", [], (root, exports) => { }); } - function refresh(all) { - setMode(lastMode, all ? false : true); + function refresh() { + setMode(lastMode); setters.forEach(input => { if (input.setv) { input.setv(input.real); @@ -176,21 +172,9 @@ gapp.register("kiri.ui", [], (root, exports) => { }); } - function setMode(mode, nohide) { -console.log({ gs: groupShow }); - Object.keys(groupShow).forEach(group => { - updateGroupShow(group); - }); + function setMode(mode) { lastMode = mode; - if (nohide) { - for (let div of hasModes.filter(d => d.isBlank)) { - div.setMode(div._group && !groupShow[div._group] ? NOMODE : mode); - } - return; - } - hasModes.forEach(function(div) { - div.setMode(div._group && !groupShow[div._group] ? NOMODE : mode); - }); + hasModes.forEach(div => div.setMode(mode)); hidePoppers(); } @@ -200,7 +184,7 @@ console.log({ gs: groupShow }); } function setHoverPop(bool) { - letHoverPop = bool; + // letHoverPop = bool; } function checkpoint(at) { @@ -274,14 +258,6 @@ console.log({ gs: groupShow }); lastGroup = groups[group] = []; lastGroup.key = dbkey; groupName = group; - groupShow[group] = state[dbkey] !== 'false'; - row.onclick = function(ev) { - if (ev.target !== link && ev.target !== row) { - return; - } - console.log({ toggleGroup: group, dbkey }); - toggleGroup(group, dbkey); - }; return row; } @@ -294,33 +270,7 @@ console.log({ gs: groupShow }); } function hidePoppers() { - showGroup(undefined); - } - - function showGroup(groupname) { - Object.keys(groups).forEach(name => { - let group = groups[name]; - groupShow[name] = true;//state[group.key] = (groupname === name); - updateGroupShow(name); - }); - groupSticky = false; - } - - function toggleGroup(groupname, dbkey) { - let show = state[dbkey] === 'true' || state[dbkey] === true; - groupShow[groupname] = state[dbkey] = !show; - // console.log({ state, show }); - updateGroupShow(groupname); - } - - function updateGroupShow(groupname) { - let show = groupShow[groupname] ?? true; - // console.log({ updateGroupShow: groupname, show: groupShow[groupname] }); - let group = groups[groupname]; - group.forEach(div => { - if (show) div.setMode(lastMode); - else div.setMode(NOMODE); - }); + // showGroup(undefined); } function bound(low,high) { @@ -344,10 +294,8 @@ console.log({ gs: groupShow }); function toFloat() { let nv = this.value !== '' ? parseFloat(this.value) : null; if (nv !== null && this.bound) nv = this.bound(nv); - // this.value = nv; if (this.setv) { return this.setv(nv * units); - // return this.real = (nv * units); } else { this.value = nv; } @@ -381,6 +329,14 @@ console.log({ gs: groupShow }); } } + function safecall(fn) { + try { + return fn(); + } catch (e) { + return true; + } + } + function addModeControls(el, opt = {}) { if (opt.trace2) { console.log({ AMC: el, opt, groupName }); @@ -399,20 +355,16 @@ console.log({ gs: groupShow }); }; el.setMode = function(mode) { let xprt = opt.expert === undefined || (opt.expert === lastExpert); - let show = opt.show ? opt.show() : true; + let show = opt.show ? safecall(opt.show) : true; let disp = opt.visible ? opt.visible() : true; - if (opt.trace2) console.log({ setMode: el, xprt, show, disp, fn: el.__opt.show }); + if (opt.trace2) console.log({ setMode: el, mode, modes: el.modes, xprt, show, disp, fn: el.__opt.show }); el.setVisible(el.hasMode(mode) && show && xprt && disp); } el.hasMode = function(mode) { - if (mode === NOMODE) return false; - if (!el.modes) return true; - return el.modes.contains(mode); - } - if (opt.modes) { - el.modes = opt.modes; - hasModes.push(el); + return el.modes.length === 0 || el.modes.contains(mode); } + el.modes = opt.modes || []; + hasModes.push(el); } function newDiv(opt = {}) { @@ -449,7 +401,6 @@ console.log({ gs: groupShow }); function newGCode(label, options) { let opt = options || {}, - // row = lastDiv, btn = DOC.createElement("button"), txt = DOC.createElement("textarea"), area = opt.area; diff --git a/web/kiri/index.css b/web/kiri/index.css index 2646e33b..8cd09438 100644 --- a/web/kiri/index.css +++ b/web/kiri/index.css @@ -19,6 +19,12 @@ --menu-border: #555; --dark-menu-text: #111; --menu-hover: #ddd; + --blue-1: rgb(96,127,164); + --blue-2: rgb(126,153,183); + --blue-3: rgb(190, 204, 219); + --blue-4: rgb(221, 228, 234); + --blue-5: rgb(240, 243, 245); + --blue-6: rgb(247, 249, 250); } /* surface size configuration and font import */ @@ -241,9 +247,12 @@ th, tr, td, label { color: black; } .top-menu > span:hover { - background-color: var(--row-hover); - border-left: 1px solid var(--menu-border); - border-right: 1px solid var(--menu-border); + background-color: var(--blue-4); + border-left: 1px solid var(--blue-2); + border-right: 1px solid var(--blue-2); +} +.top-menu > span.selected { + background-color: var(--blue-3); } .top-menu > span:hover .top-menu-drop { display: flex; @@ -278,11 +287,11 @@ th, tr, td, label { display: flex; align-items: center; flex-direction: column; - background-color: var(--menu); - border-top: 1px dashed var(--menu-border); - border-left: 1px solid var(--menu-border); - border-right: 1px solid var(--menu-border); - border-bottom: 1px solid var(--menu-border); + background-color: #fff; + border-top: 1px dashed var(--blue-2); + border-left: 1px solid var(--blue-2); + border-right: 1px solid var(--blue-2); + border-bottom: 1px solid var(--blue-2); border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; } @@ -315,7 +324,7 @@ th, tr, td, label { border-radius: 3px; } #top .content > div:hover { - background-color: var(--menu-hover); + background-color: var(--blue-4); } #app-name { @@ -648,8 +657,8 @@ th, tr, td, label { text-align: right; align-items: stretch; white-space: nowrap; - background-color: var(--menu); - border: 1px solid var(--menu-border); + background-color: #fff; + border: 1px solid var(--blue-2); border-radius: 4px; flex-direction: column; } @@ -657,7 +666,7 @@ th, tr, td, label { padding: 2px 7px 2px 7px; } #lang-pop > div:hover { - background-color: var(--menu-hover); + background-color: var(--blue-4); } #mid { @@ -857,25 +866,32 @@ th, tr, td, label { #ft-mesh { min-width: 200px; } -#menu-render { +.render-tools { + display: grid; margin: 4px 0 0 0; - gap: 3px; - flex-direction: row;; + /* gap: 3px; */ + grid-template-columns: 1fr 1fr 1fr; } -#menu-render > span { - width: 20px; - height: 20px; +.render-tools > span { + justify-self: center; + width: 25px; + height: 25px; display: flex; flex-shrink: 0; flex-direction: column; } -#menu-render > span > * { +.render-tools > span > * { padding: 0; margin: 0; - width: 20px; - height: 20px; - align-items: stretch; - justify-content: stretch; +} +.render-tools svg { + border: 1px solid transparent; + border-radius: 3px; + padding: 3px; +} +.render-tools svg:hover { + border: 1px solid blue; + background-color: var(--blue-4); } #render-hide > a { border: 0.5px dashed black; @@ -1927,10 +1943,8 @@ th, tr, td, label { border-right: 3px solid transparent; } .set2-group .var-row:hover { - /* border-left: 3px solid var(--main-color-hover); */ - border-right: 3px solid var(--main-color-hover); - /* background-color: #f8f8f8 !important; */ - background-color: var(--row-hover) !important; + border-right: 3px solid var(--blue-1); + background-color: var(--blue-4) !important; } .set2-group .var-row label { margin-right: 25px; @@ -1953,8 +1967,7 @@ th, tr, td, label { white-space: nowrap; border-radius: 2px; justify-content: left; - background-color: var(--header); - /* /* border-top: 0.5px solid #888; */ + background-color: var(--blue-3); border-left: 3px solid transparent; border-right: 3px solid var(--main-color-hover); border-bottom: 0.5px solid var(--main-color-hover); diff --git a/web/kiri/index.html b/web/kiri/index.html index f1304e5c..4786e695 100644 --- a/web/kiri/index.html +++ b/web/kiri/index.html @@ -99,31 +99,6 @@ - - - -
-
-
- - -
-
- - -
-
- - -
-
-
- - -
-
-
-
@@ -295,36 +270,27 @@
-
- workspace -
+
-
-
- ranges -
+