bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h | 8 + kit/ChildSession.cpp | 3 loleaflet/css/mobilewizard.css | 25 +++ loleaflet/css/toolbar-mobile.css | 14 + loleaflet/css/toolbar.css | 13 + loleaflet/src/control/Control.JSDialogBuilder.js | 43 +++++ loleaflet/src/control/Control.LokDialog.js | 151 ++++++++++++++++++- loleaflet/src/control/Control.MobileWizard.js | 4 loleaflet/src/control/Control.Toolbar.js | 9 - loleaflet/src/layer/tile/CalcTileLayer.js | 9 - loleaflet/src/layer/tile/TileLayer.js | 40 +++++ loleaflet/src/map/Map.js | 16 ++ 12 files changed, 314 insertions(+), 21 deletions(-)
New commits: commit 4574a98bff207e6f89504aab5f81d08847d1f086 Author: Marco Cecchetti <marco.cecche...@collabora.com> AuthorDate: Mon Nov 25 21:55:18 2019 +0100 Commit: Marco Cecchetti <marco.cecche...@collabora.com> CommitDate: Mon Nov 25 22:02:50 2019 +0100 formula bar tunneling: function list wizard Change-Id: I63670151a009ce0a67ba64cebf326e13219f2ded diff --git a/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h b/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h index 244a8ea20..e620fb6c3 100644 --- a/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h +++ b/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h @@ -710,6 +710,12 @@ typedef enum * the description. */ LOK_CALLBACK_JSDIALOG = 46, + + /** + * Send the list of functions whose name starts with the characters entered + * by the user. + */ + LOK_CALLBACK_CALC_FUNCTION_LIST = 47 } LibreOfficeKitCallbackType; @@ -832,6 +838,8 @@ static inline const char* lokCallbackTypeToString(int nType) return "LOK_CALLBACK_REFERENCE_MARKS"; case LOK_CALLBACK_JSDIALOG: return "LOK_CALLBACK_JSDIALOG"; + case LOK_CALLBACK_CALC_FUNCTION_LIST: + return "LOK_CALLBACK_CALC_FUNCTION_LIST"; } assert(!"Unknown LibreOfficeKitCallbackType type."); diff --git a/kit/ChildSession.cpp b/kit/ChildSession.cpp index 677505ad9..e254b94de 100644 --- a/kit/ChildSession.cpp +++ b/kit/ChildSession.cpp @@ -2470,6 +2470,9 @@ void ChildSession::loKitCallback(const int type, const std::string& payload) case LOK_CALLBACK_JSDIALOG: sendTextFrame("jsdialog: " + payload); break; + case LOK_CALLBACK_CALC_FUNCTION_LIST: + sendTextFrame("calcfunctionlist: " + payload); + break; #if !ENABLE_DEBUG // we want a compilation-time failure in the debug builds; but ERR in the diff --git a/loleaflet/css/mobilewizard.css b/loleaflet/css/mobilewizard.css index 22279d1ff..783d63d1e 100644 --- a/loleaflet/css/mobilewizard.css +++ b/loleaflet/css/mobilewizard.css @@ -314,7 +314,7 @@ .sub-menu-arrow { display: table-cell; padding-left: 10px; - padding-right: 20px; + padding-right: 10px; background: transparent; font-size: 1.5em; font-weight: bold; @@ -322,6 +322,28 @@ vertical-align: middle; } + .func-info-icon { + display: table-cell; + padding-left: 8px; + padding-right: 8px; + background: transparent; + font-size: 1.2em; + font-weight: bold; + color: #aaa !important; + vertical-align: middle; + border-radius: 100px; + border: solid 2px #aaa; + } + + .func-info-sig { + margin-left: 1em; + margin-bottom: 2em; + } + + .func-info-desc { + margin-left: 1em; + } + .entry-value { display: table-cell; vertical-align: middle; @@ -329,6 +351,7 @@ .ui-header-right { display: table; + margin-right: 10px; } .ui-header.level-1.mobile-wizard.ui-widget .ui-header-left span.menu-entry-with-icon { diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js b/loleaflet/src/control/Control.JSDialogBuilder.js index 61befb59a..ba39f3d2d 100644 --- a/loleaflet/src/control/Control.JSDialogBuilder.js +++ b/loleaflet/src/control/Control.JSDialogBuilder.js @@ -42,6 +42,7 @@ L.Control.JSDialogBuilder = L.Control.extend({ this._controlHandlers['grid'] = this._gridHandler; this._controlHandlers['frame'] = this._frameHandler; this._controlHandlers['panel'] = this._panelHandler; + this._controlHandlers['calcfuncpanel'] = this._calcFuncListPanelHandler; this._controlHandlers['paneltabs'] = this._panelTabsHandler; this._controlHandlers['container'] = this._containerHandler; this._controlHandlers['window'] = this._containerHandler; @@ -270,6 +271,40 @@ L.Control.JSDialogBuilder = L.Control.extend({ } }, + _calcFunctionEntry: function(parentContainer, data, contentNode, builder) { + var sectionTitle = L.DomUtil.create('div', 'func-entry ui-header level-' + builder._currentDepth + ' mobile-wizard ui-widget', parentContainer); + $(sectionTitle).css('justify-content', 'space-between'); + if (data && data.id) + sectionTitle.id = data.id; + + var leftDiv = L.DomUtil.create('div', 'ui-header-left', sectionTitle); + var titleClass = 'func-name'; + var titleSpan = L.DomUtil.create('span', titleClass, leftDiv); + titleSpan.innerHTML = data.text; + + var rightDiv = L.DomUtil.create('div', 'ui-header-right', sectionTitle); + var arrowSpan = L.DomUtil.create('span', 'func-info-icon', rightDiv); + arrowSpan.innerHTML = 'i'; + + var contentDiv = L.DomUtil.create('div', 'ui-content level-' + builder._currentDepth + ' mobile-wizard', parentContainer); + contentDiv.title = data.text; + + builder._currentDepth++; + builder.build(contentDiv, [contentNode]); + builder._currentDepth--; + + $(contentDiv).hide(); + if (builder.wizard) { + $(rightDiv).click(function() { + builder.wizard.goLevelDown(contentDiv); + if (contentNode.onshow) + contentNode.onshow(); + }); + } else { + console.debug('Builder used outside of mobile wizard: please implement the click handler'); + } + }, + _explorableMenu: function(parentContainer, title, children, builder, customContent) { var sectionTitle = L.DomUtil.create('div', 'ui-header level-' + builder._currentDepth + ' mobile-wizard ui-widget', parentContainer); $(sectionTitle).css('justify-content', 'space-between'); @@ -317,6 +352,14 @@ L.Control.JSDialogBuilder = L.Control.extend({ return false; }, + _calcFuncListPanelHandler: function(parentContainer, data, builder) { + var contentNode = data.children[0]; + + builder._calcFunctionEntry(parentContainer, data, contentNode, builder); + + return false; + }, + _panelTabsHandler: function(parentContainer, data, builder) { var tabsContainer = L.DomUtil.create('div', 'ui-tabs mobile-wizard ui-widget'); var contentsContainer = L.DomUtil.create('div', 'ui-tabs-content mobile-wizard ui-widget', parentContainer); diff --git a/loleaflet/src/control/Control.MobileWizard.js b/loleaflet/src/control/Control.MobileWizard.js index d8ff8a61a..69205e60f 100644 --- a/loleaflet/src/control/Control.MobileWizard.js +++ b/loleaflet/src/control/Control.MobileWizard.js @@ -191,6 +191,10 @@ L.Control.MobileWizard = L.Control.extend({ $('#mobile-wizard').css('top', $('#spreadsheet-row-column-frame').css('top')); else $('#mobile-wizard').css('top', $('#document-container').css('top')); + } else if (data.id === 'funclist') { + $('#mobile-wizard').height('100%'); + $('#mobile-wizard').css('top', $('#spreadsheet-row-column-frame').css('top')); + $('#mobile-wizard').addClass('funcwizard'); } else { $('#mobile-wizard').height(this.options.maxHeight); $('#mobile-wizard').css('top', ''); diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js index 85c82b826..707a4d601 100644 --- a/loleaflet/src/layer/tile/TileLayer.js +++ b/loleaflet/src/layer/tile/TileLayer.js @@ -680,6 +680,9 @@ L.TileLayer = L.GridLayer.extend({ else if (textMsg.startsWith('jsdialog:')) { this._onJSDialogMsg(textMsg); } + else if (textMsg.startsWith('calcfunctionlist:')) { + this._onCalcFunctionListMsg(textMsg.substring('calcfunctionlist:'.length + 1)); + } }, toggleTileDebugModeImpl: function() { @@ -747,6 +750,43 @@ L.TileLayer = L.GridLayer.extend({ this._map.fire('cellformula', {formula: formula}); }, + _onCalcFunctionListMsg: function (textMsg) { + console.log('_onCalcFunctionList: textMsg: ' + textMsg); + var funcList = JSON.parse(textMsg); + this._closeMobileWizard(); + + var data = { + id: 'funclist', + type: '', + text: 'Functions', + enabled: true, + children: [] + }; + + var entries = data.children; + for (var idx in funcList) { + var func = funcList[idx]; + var name = func.signature.split('(')[0]; + var entry = { + id: '', + type: 'calcfuncpanel', + text: name, + enabled: true, + children: [] + } + entries.push(entry); + entries[entries.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' + }; + } + + this._openMobileWizard(data); + }, + _onCursorVisibleMsg: function(textMsg) { var command = textMsg.match('cursorvisible: true'); this._isCursorVisible = command ? true : false; commit b7743930cde9b9583490bbdc6d7b6b09d32cdccd Author: Marco Cecchetti <marco.cecche...@collabora.com> AuthorDate: Mon Nov 4 17:12:19 2019 +0100 Commit: Marco Cecchetti <marco.cecche...@collabora.com> CommitDate: Mon Nov 25 21:57:16 2019 +0100 loleaflet: calc formula bar tunneling Change-Id: I1e9de5eee5ce8992f37cdee4928476954b84b299 diff --git a/loleaflet/css/toolbar-mobile.css b/loleaflet/css/toolbar-mobile.css index 8bbdb3dd2..a749a845a 100644 --- a/loleaflet/css/toolbar-mobile.css +++ b/loleaflet/css/toolbar-mobile.css @@ -47,6 +47,20 @@ border-right: none; height: 35px !important; } + + #calc-inputbar-wrapper { + display: block; + border: none; + } + + #calc-inputbar { + display: block; + width: 100%; + position: relative; + padding:0px; + margin: 0px; + } + #tb_actionbar_item_undo .w2ui-tb-image, #tb_actionbar_item_redo .w2ui-tb-image, #tb_actionbar_item_mobile_wizard .w2ui-tb-image, #tb_actionbar_item_prev .w2ui-tb-image, #tb_actionbar_item_next .w2ui-tb-image, #tb_actionbar_item_insertion_mobile_wizard .w2ui-tb-image, #tb_actionbar_item_insertcomment .w2ui-tb-image, #tb_actionbar_item_fullscreen-presentation .w2ui-tb-image{ min-width: 38px; } diff --git a/loleaflet/css/toolbar.css b/loleaflet/css/toolbar.css index 146490d58..f4ca398c5 100644 --- a/loleaflet/css/toolbar.css +++ b/loleaflet/css/toolbar.css @@ -119,6 +119,19 @@ w2ui-toolbar { width: 100%; } +#calc-inputbar-wrapper { + display: block; + border: none; +} + +#calc-inputbar { + display: block; + width: 100%; + position: relative; + padding:0px; + margin: 0px; +} + #tb_formulabar_item_formula { width: 100%; } diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index 97e105874..0d3c3f420 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -153,6 +153,10 @@ L.Control.LokDialog = L.Control.extend({ return (id in this._dialogs) && this._dialogs[id].isSidebar; }, + _isCalcInputBar: function(id) { + return (id in this._dialogs) && this._dialogs[id].isCalcInputBar; + }, + // Given a prefixed dialog id like 'lokdialog-323', gives a raw id, 323. _toIntId: function(id) { if (typeof(id) === 'string') @@ -231,7 +235,7 @@ L.Control.LokDialog = L.Control.extend({ _onDialogMsg: function(e) { console.log('onDialogMsg: id: ' + e.id + ', winType: ' + e.winType + ', action: ' + e.action + ', size: ' + e.size + ', rectangle: ' + e.rectangle); - if (e.winType != undefined && e.winType !== 'dialog' && e.winType !== 'child' && e.winType !== 'deck') { + if (e.winType != undefined && e.winType !== 'dialog' && e.winType !== 'calc-input-win' && e.winType !== 'child' && e.winType !== 'deck') { return; } @@ -261,6 +265,8 @@ L.Control.LokDialog = L.Control.extend({ if (e.winType === 'dialog') { // When left/top are invalid, the dialog shows in the center. this._launchDialog(e.id, left, top, width, height, e.title); + } else if (e.winType === 'calc-input-win') { + this._launchCalcInputBar(e.id, width, height); } else if (e.winType === 'deck') { if (!window.mode.isMobile()) { this._launchSidebar(e.id, width, height); @@ -319,6 +325,8 @@ L.Control.LokDialog = L.Control.extend({ $('#' + strId).remove(); if (e.winType === 'deck' || this._isSidebar(e.id)) this._launchSidebar(e.id, width, height); + else if (e.winType === 'calc-input-win' || this._isCalcInputBar(e.id)) + this._launchCalcInputBar(e.id, width, height); else this._launchDialog(e.id, null, null, width, height, this._dialogs[parseInt(e.id)].title); } else if (e.action === 'cursor_invalidate') { @@ -350,6 +358,8 @@ L.Control.LokDialog = L.Control.extend({ this._onDialogChildClose(parent); else if (this._isSidebar(e.id)) this._onSidebarClose(e.id); + else if (this._isCalcInputBar(e.id)) + this._onCalcInputBarClose(e.id); else this._onDialogClose(e.id, false); } else if (e.action === 'hide') { @@ -395,6 +405,9 @@ L.Control.LokDialog = L.Control.extend({ return; } } + else if (this._isCalcInputBar(dlgId) && (!this._isOpen(dlgId) || !this._dialogs[dlgId].cursorVisible)) { + return; + } this._map.setWinId(dlgId); var inputContainer = this._map.getTextInput(); @@ -483,6 +496,7 @@ L.Control.LokDialog = L.Control.extend({ id: id, strId: strId, isSidebar: false, + isCalcInputBar: false, width: width, height: height, cursor: null, @@ -500,6 +514,110 @@ L.Control.LokDialog = L.Control.extend({ this._sendPaintWindow(id, this._createRectStr(id)); }, + _launchCalcInputBar: function(id, width, height) { + + if (false && this._map._permission !== 'edit') + return; + + console.log('_launchCalcInputBar: start: id: ' + id + ', width: ' + width); + if (this._calcInputBar) { + var oldHeight = this._calcInputBar.height; + var delta = height - oldHeight; + this._onCalcInputBarClose(this._calcInputBar.id); + if (delta !== 0) { + var documentContainer = L.DomUtil.get('document-container'); + if (documentContainer) { + var top = documentContainer.offsetTop; + var noTopProp = true; + var props = documentContainer.style.cssText.split(';'); + for (var i = 0; i < props.length; ++i) { + if (props[i].startsWith('top')) { + props[i] = 'top: ' + (top + delta).toString() + 'px !important'; + documentContainer.setAttribute('style', props.join(';')); + noTopProp = false; + break; + } + } + if (noTopProp) { + var styleAttr = documentContainer.style.cssText; + styleAttr += '; top: ' + (top + delta).toString() + 'px !important'; + documentContainer.setAttribute('style', styleAttr); + } + } + + var spreadsheetRowColumnFrame = L.DomUtil.get('spreadsheet-row-column-frame'); + if (spreadsheetRowColumnFrame) { + top = spreadsheetRowColumnFrame.offsetTop; + noTopProp = true; + props = spreadsheetRowColumnFrame.style.cssText.split(';'); + for (i = 0; i < props.length; ++i) { + if (props[i].startsWith('top')) { + props[i] = 'top: ' + (top + delta).toString() + 'px !important'; + spreadsheetRowColumnFrame.setAttribute('style', props.join(';')); + noTopProp = false; + break; + } + } + if (noTopProp) { + styleAttr = spreadsheetRowColumnFrame.style.cssText; + styleAttr += '; top: ' + (top + delta).toString() + 'px !important'; + spreadsheetRowColumnFrame.setAttribute('style', styleAttr); + } + } + } + } + + var strId = this._toStrId(id); + + $('#calc-inputbar-wrapper').css({display: 'block'}); + + var container = L.DomUtil.create('div', 'inputbar_container', L.DomUtil.get('calc-inputbar')); + container.id = strId; + L.DomUtil.setStyle(container, 'width', '100%'); + L.DomUtil.setStyle(container, 'height', height + 'px'); + + // Create the canvas. + var canvas = L.DomUtil.create('canvas', 'inputbar_canvas', container); + L.DomUtil.setStyle(canvas, 'position', 'absolute'); + this._setCanvasWidthHeight(canvas, width, height); + canvas.id = strId + '-canvas'; + + // Don't show the inputbar until we get the contents. + $(container).parent().hide(); + + this._dialogs[id] = { + open: true, + id: id, + strId: strId, + isSidebar: false, + isCalcInputBar: true, + left: 0, + top: 0, + width: width, + height: height, + cursor: null, + child: null, // never used for inputbar + title: null // never used for inputbar + }; + + this._createDialogCursor(strId); + this._setupWindowEvents(id, canvas/*, dlgInput*/); + + L.DomEvent.on(container, 'mouseleave', function() { + // Move the mouse off-screen when we leave the inputbar + // so we don't leave edge-elements highlighted as if + // the mouse is still over them. + this._map.lastActiveTime = Date.now(); + this._postWindowMouseEvent('move', id, -1, -1, 1, 0, 0); + }, this); + + // Render window. + this._sendPaintWindowRect(id); + + this._calcInputBar = this._dialogs[id]; + console.log('_launchCalcInputBar: end'); + }, + _launchSidebar: function(id, width, height) { if ((window.mode.isMobile() || window.mode.isTablet()) @@ -617,6 +735,7 @@ L.Control.LokDialog = L.Control.extend({ // 'mousedown' -> 'buttondown' var lokEventType = e.type.replace('mouse', 'button'); this._postWindowMouseEvent(lokEventType, id, e.offsetX, e.offsetY, 1, buttons, 0); + this._map.setWinId(id); //dlgInput.focus(); }, this); @@ -753,6 +872,17 @@ L.Control.LokDialog = L.Control.extend({ $('#sidebar-dock-wrapper').css({display: ''}); }, + _onCalcInputBarClose: function(dialogId) { + console.log('_onCalcInputBarClose: start: id: ' + dialogId); + $('#' + this._calcInputBar.strId).remove(); + this._map.focus(); + delete this._dialogs[dialogId]; + this._calcInputBar = null; + + $('#calc-inputbar-wrapper').css({display: ''}); + console.log('_onCalcInputBarClose: end'); + }, + _onDialogClose: function(dialogId, notifyBackend) { if (window.ThisIsTheiOSApp) w2ui['editbar'].enable('closemobile'); @@ -773,7 +903,7 @@ L.Control.LokDialog = L.Control.extend({ _onClosePopups: function() { for (var dialogId in this._dialogs) { - if (!this._isSidebar(dialogId)) { + if (!this._isSidebar(dialogId) && !this._isCalcInputBar(dialogId)) { this._onDialogClose(dialogId, true); } } @@ -782,7 +912,7 @@ L.Control.LokDialog = L.Control.extend({ onCloseCurrentPopUp: function() { // for title-less dialog only (context menu, pop-up) if (this._currentId && this._isOpen(this._currentId) && - !this._dialogs[this._currentId].title && !this._isSidebar(this._currentId)) + !this._dialogs[this._currentId].title && !this._isSidebar(this._currentId) && !this._isCalcInputBar(this._currentId)) this._onDialogClose(this._currentId, true); }, @@ -809,6 +939,7 @@ L.Control.LokDialog = L.Control.extend({ if (!canvas) return; // no window to paint to + this._dialogs[parentId].isPainting = true; var ctx = canvas.getContext('2d'); var that = this; @@ -832,6 +963,12 @@ L.Control.LokDialog = L.Control.extend({ that._setCanvasWidthHeight(panelCanvas, that._currentDeck.width, that._currentDeck.height); } + var isCalcInputBar = that._isCalcInputBar(parentId); + if (isCalcInputBar) { + var canvas = L.DomUtil.get(that._calcInputBar.strId + '-canvas'); + that._setCanvasWidthHeight(canvas, that._calcInputBar.width, that._calcInputBar.height); + } + ctx.drawImage(img, x, y); // if dialog is hidden, show it @@ -839,6 +976,12 @@ L.Control.LokDialog = L.Control.extend({ if (container) $(container).parent().show(); that.focus(parentId); + that._dialogs[parentId].isPainting = false; + + if (isCalcInputBar && container && that._calcInputBar.width !== container.clientWidth) { + console.log('_paintDialog: container width: ' + container.clientWidth + ', _calcInputBar width: ' + that._calcInputBar.width); + that._map._socket.sendMessage('resizewindow ' + parentId + ' size=' + container.clientWidth + ',' + that._calcInputBar.height); + } }; img.src = imgData; }, @@ -904,7 +1047,7 @@ L.Control.LokDialog = L.Control.extend({ _onDialogChildClose: function(dialogId) { $('#' + this._toStrId(dialogId) + '-floating').remove(); - if (!this._isSidebar(dialogId)) { + if (!this._isSidebar(dialogId) && !this._isCalcInputBar(dialogId)) { // Remove any extra height allocated for the parent container (only for floating dialogs). var canvas = document.getElementById(dialogId + '-canvas'); if (!canvas) { diff --git a/loleaflet/src/control/Control.Toolbar.js b/loleaflet/src/control/Control.Toolbar.js index b27fa584e..b40023cf8 100644 --- a/loleaflet/src/control/Control.Toolbar.js +++ b/loleaflet/src/control/Control.Toolbar.js @@ -964,11 +964,7 @@ function initNormalToolbar() { {type: 'html', id: 'address', html: '<input id="addressInput" type="text">'}, {type: 'break'}, {type: 'button', id: 'functiondialog', img: 'functiondialog', hint: _UNO('.uno:FunctionDialog', '', true), uno: '.uno:FunctionDialog'}, - {type: 'button', id: 'sum', img: 'autosum', hint: _('Sum')}, - {type: 'button', id: 'function', img: 'equal', hint: _('Function')}, - {type: 'button', hidden: true, id: 'cancelformula', img: 'cancel', hint: _('Cancel')}, - {type: 'button', hidden: true, id: 'acceptformula', img: 'accepttrackedchanges', hint: _('Accept')}, - {type: 'html', id: 'formula', html: '<input id="formulaInput" type="text">'} + {type: 'html', id: 'formula', html: '<div id="calc-inputbar-wrapper"><div id="calc-inputbar"></div></div>'} ], onClick: function (e) { onClick(e, e.target); @@ -976,9 +972,6 @@ function initNormalToolbar() { }, onRefresh: function() { $('#addressInput').off('keyup', onAddressInput).on('keyup', onAddressInput); - $('#formulaInput').off('keyup', onFormulaInput).on('keyup', onFormulaInput); - $('#formulaInput').off('blur', onFormulaBarBlur).on('blur', onFormulaBarBlur); - $('#formulaInput').off('focus', onFormulaBarFocus).on('focus', onFormulaBarFocus); } }); toolbar.bind('touchstart', function() { diff --git a/loleaflet/src/layer/tile/CalcTileLayer.js b/loleaflet/src/layer/tile/CalcTileLayer.js index 37c6f9b0a..6963e04a9 100644 --- a/loleaflet/src/layer/tile/CalcTileLayer.js +++ b/loleaflet/src/layer/tile/CalcTileLayer.js @@ -160,11 +160,7 @@ L.CalcTileLayer = L.TileLayer.extend({ items: [ {type: 'html', id: 'left'}, {type: 'html', id: 'address', html: '<input id="addressInput" type="text">'}, - {type: 'button', id: 'sum', img: 'autosum', hint: _('Sum')}, - {type: 'button', id: 'function', img: 'equal', hint: _('Function')}, - {type: 'button', hidden: true, id: 'cancelformula', img: 'cancel', hint: _('Cancel')}, - {type: 'button', hidden: true, id: 'acceptformula', img: 'accepttrackedchanges', hint: _('Accept')}, - {type: 'html', id: 'formula', html: '<input id="formulaInput" type="text">'} + {type: 'html', id: 'formula', html: '<div id="calc-inputbar-wrapper"><div id="calc-inputbar"></div></div>'} ], onClick: function (e) { window.onClick(e, e.target); @@ -172,9 +168,6 @@ L.CalcTileLayer = L.TileLayer.extend({ }, onRefresh: function() { $('#addressInput').off('keyup', window.onAddressInput).on('keyup', window.onAddressInput); - $('#formulaInput').off('keyup', window.onFormulaInput).on('keyup', window.onFormulaInput); - $('#formulaInput').off('blur', window.onFormulaBarBlur).on('blur', window.onFormulaBarBlur); - $('#formulaInput').off('focus', window.onFormulaBarFocus).on('focus', window.onFormulaBarFocus); } }); toolbar.bind('touchstart', function(e) { diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js index 9db28ab4c..b0530df28 100644 --- a/loleaflet/src/map/Map.js +++ b/loleaflet/src/map/Map.js @@ -1117,6 +1117,22 @@ L.Map = L.Evented.extend({ } } } + + if (this.dialog._calcInputBar && !this.dialog._calcInputBar.isPainting) { + var id = this.dialog._calcInputBar.id; + var calcInputbar = L.DomUtil.get('calc-inputbar'); + if (calcInputbar) { + var calcInputbarContainer = calcInputbar.children[0]; + if (calcInputbarContainer) { + var width = calcInputbarContainer.clientWidth; + var height = calcInputbarContainer.clientHeight; + if (width !== 0 && height !== 0) { + console.log('_onResize: container width: ' + width + ', container height: ' + height + ', _calcInputBar width: ' + this.dialog._calcInputBar.width); + this._socket.sendMessage('resizewindow ' + id + ' size=' + width + ',' + height); + } + } + } + } }, makeActive: function() { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits