loleaflet/css/device-mobile.css | 3 + loleaflet/src/control/Control.FormulaBar.js | 15 +++-- loleaflet/src/control/Control.JSDialogBuilder.js | 26 ++++++---- loleaflet/src/control/Control.UIManager.js | 2 loleaflet/src/layer/tile/TileLayer.js | 58 +++++++++++++++++++++-- 5 files changed, 85 insertions(+), 19 deletions(-)
New commits: commit 7f105d02a889e29cbfc806e4f625ec6373348809 Author: Marco Cecchetti <marco.cecche...@collabora.com> AuthorDate: Thu Feb 20 19:09:15 2020 +0100 Commit: Marco Cecchetti <marco.cecche...@collabora.com> CommitDate: Wed Apr 29 13:27:21 2020 +0200 loleaflet: function wizard for all functions subdivided in categories Change-Id: Ib8e6bb4155ab3a0562c7a76a6eeb58c4d725058d Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89200 Tested-by: Marco Cecchetti <marco.cecche...@collabora.com> Reviewed-by: Marco Cecchetti <marco.cecche...@collabora.com> diff --git a/loleaflet/css/device-mobile.css b/loleaflet/css/device-mobile.css index b1b44fd2e..24f26678a 100644 --- a/loleaflet/css/device-mobile.css +++ b/loleaflet/css/device-mobile.css @@ -195,6 +195,9 @@ div#w2ui-overlay-actionbar.w2ui-overlay{ #tb_formulabar_item_formula > div, #tb_formulabar_item_address > div { margin-top: -16px; } +#tb_formulabar_item_functiondialog > div { + margin-top: -20px; +} .inputbar_multiline #tb_formulabar_item_formula > div, .inputbar_multiline #tb_formulabar_item_address > div { margin-top:0px; diff --git a/loleaflet/src/control/Control.FormulaBar.js b/loleaflet/src/control/Control.FormulaBar.js index fe7d8f838..48d8a4f2d 100644 --- a/loleaflet/src/control/Control.FormulaBar.js +++ b/loleaflet/src/control/Control.FormulaBar.js @@ -5,9 +5,6 @@ /* global $ w2ui _ */ L.Control.FormulaBar = L.Control.extend({ - options: { - showfunctionwizard: true - }, onAdd: function (map) { this.map = map; @@ -34,8 +31,8 @@ L.Control.FormulaBar = L.Control.extend({ items: [ {type: 'html', id: 'left'}, {type: 'html', id: 'address', html: '<input id="addressInput" type="text">'}, - {type: 'break', hidden: !this.options.showfunctionwizard}, - {type: 'button', hidden: !this.options.showfunctionwizard, id: 'functiondialog', img: 'functiondialog', hint: _('Function Wizard'), uno: '.uno:FunctionDialog'}, + {type: 'break'}, + {type: 'button', id: 'functiondialog', img: 'functiondialog', hint: _('Function Wizard')}, {type: 'html', id: 'formula', html: '<div id="calc-inputbar-wrapper"><div id="calc-inputbar"></div></div>'} ], onClick: function (e) { @@ -83,6 +80,14 @@ L.Control.FormulaBar = L.Control.extend({ this.map.toggleCommandState(window.getUNOCommand(item.uno)); } } + else if (id === 'functiondialog') { + if (window.mode.isMobile() && this.map._functionWizardData) { + this.map._docLayer._closeMobileWizard(); + this.map._docLayer._openMobileWizard(this.map._functionWizardData); + } else { + this.map.sendUnoCommand('.uno:FunctionDialog'); + } + } }, onDocLayerInit: function() { diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js b/loleaflet/src/control/Control.JSDialogBuilder.js index a9a4fd1aa..7aa3f67d5 100644 --- a/loleaflet/src/control/Control.JSDialogBuilder.js +++ b/loleaflet/src/control/Control.JSDialogBuilder.js @@ -349,7 +349,7 @@ L.Control.JSDialogBuilder = L.Control.extend({ } }, - _explorableEntry: function(parentContainer, data, contentNode, builder, valueNode, iconPath, updateCallback) { + _explorableEntry: function(parentContainer, data, content, builder, valueNode, iconPath, updateCallback) { var sectionTitle = L.DomUtil.create('div', 'ui-header level-' + builder._currentDepth + ' mobile-wizard ui-widget', parentContainer); $(sectionTitle).css('justify-content', 'space-between'); if (data && data.id) @@ -418,8 +418,11 @@ L.Control.JSDialogBuilder = L.Control.extend({ var contentDiv = L.DomUtil.create('div', 'ui-content level-' + builder._currentDepth + ' mobile-wizard', parentContainer); contentDiv.title = data.text; + var contentData = content.length ? content : [content]; + var contentNode = contentData.length === 1 ? contentData[0] : null; + builder._currentDepth++; - builder.build(contentDiv, [contentNode]); + builder.build(contentDiv, contentData); builder._currentDepth--; if (!data.nosubmenu) @@ -471,6 +474,7 @@ L.Control.JSDialogBuilder = L.Control.extend({ }); $(leftDiv).click(function() { that.map._socket.sendMessage('completefunction index=' + data.index); + that.map.fire('closemobilewizard'); }); } else { console.debug('Builder used outside of mobile wizard: please implement the click handler'); @@ -565,17 +569,19 @@ L.Control.JSDialogBuilder = L.Control.extend({ }, _panelHandler: function(parentContainer, data, builder) { - var contentNode = data.children[0]; + var content = data.children; + var contentData = content.length ? content : [content]; + var contentNode = contentData.length === 1 ? contentData[0] : null; - var entryId = contentNode.id; var iconPath = null; - - if (entryId && entryId.length) { - iconPath = builder._createIconPath(entryId); + if (contentNode) { + var entryId = contentNode.id; + if (entryId && entryId.length) { + iconPath = builder._createIconPath(entryId); + } } - builder._explorableEntry(parentContainer, data, contentNode, builder, null, iconPath); - + builder._explorableEntry(parentContainer, data, content, builder, null, iconPath); return false; }, @@ -1316,7 +1322,7 @@ L.Control.JSDialogBuilder = L.Control.extend({ if (builder.wizard) { $(sectionTitle).click(function(event, data) { builder.wizard.goLevelDown(contentDiv, data); - if (contentNode.onshow) + if (contentNode && contentNode.onshow) contentNode.onshow(); }); } else { diff --git a/loleaflet/src/control/Control.UIManager.js b/loleaflet/src/control/Control.UIManager.js index 14c9eb98b..8ac35bb50 100644 --- a/loleaflet/src/control/Control.UIManager.js +++ b/loleaflet/src/control/Control.UIManager.js @@ -71,7 +71,7 @@ L.Control.UIManager = L.Control.extend({ if (docType === 'spreadsheet') { this.map.addControl(L.control.sheetsBar({shownavigation: isDesktop})); - this.map.addControl(L.control.formulaBar({showfunctionwizard: isDesktop})); + this.map.addControl(L.control.formulaBar()); } if (isDesktop && docType === 'presentation') { diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js index df9910230..1650c4def 100644 --- a/loleaflet/src/layer/tile/TileLayer.js +++ b/loleaflet/src/layer/tile/TileLayer.js @@ -789,7 +789,7 @@ L.TileLayer = L.GridLayer.extend({ }, _onCalcFunctionListMsg: function (textMsg) { - var funcList = JSON.parse(textMsg); + var funcData = JSON.parse(textMsg); this._closeMobileWizard(); var data = { @@ -800,6 +800,18 @@ L.TileLayer = L.GridLayer.extend({ children: [] }; + if (funcData.categories) + this._onCalcFunctionListWithCategories(funcData, data); + else + this._onCalcFunctionList(funcData, data); + + if (funcData.wholeList) + this._map._functionWizardData = data; + + this._openMobileWizard(data); + }, + + _onCalcFunctionList: function (funcList, data) { var entries = data.children; for (var idx = 0; idx < funcList.length; ++idx) { var func = funcList[idx]; @@ -808,7 +820,7 @@ L.TileLayer = L.GridLayer.extend({ id: '', type: 'calcfuncpanel', text: name, - index: idx, + index: func.index, enabled: true, children: [] }; @@ -821,8 +833,48 @@ L.TileLayer = L.GridLayer.extend({ style: 'func-info' }; } + }, + + _onCalcFunctionListWithCategories: function (funcData, data) { + var categoryList = funcData.categories; + var categoryEntries = data.children; + for (var idx = 0; idx < categoryList.length; ++idx) { + var category = categoryList[idx]; + var categoryEntry = { + id: '', + type: 'panel', + text: category.name, + index: idx, + enabled: true, + children: [] + }; + categoryEntries.push(categoryEntry); + } - this._openMobileWizard(data); + var funcList = funcData.functions; + for (idx = 0; idx < funcList.length; ++idx) { + var func = funcList[idx]; + var name = func.signature.split('(')[0]; + var funcEntry = { + id: '', + type: 'calcfuncpanel', + text: name, + index: func.index, + category: func.category, + enabled: true, + children: [] + }; + var funcEntries = categoryEntries[func.category].children; + funcEntries.push(funcEntry); + + funcEntries[funcEntries.length-1].children[0] = { + id: '', + type: 'fixedtext', + text: '<div class="func-info-sig">' + func.signature + '</div>' + '<div class="func-info-desc">' + func.description + '</div>', + enabled: true, + style: 'func-info' + }; + } }, _onCursorVisibleMsg: function(textMsg) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits