loleaflet/src/control/Control.JSDialogBuilder.js |   77 ++++++++++++++++++++---
 loleaflet/src/control/Control.MobileWizard.js    |    1 
 2 files changed, 71 insertions(+), 7 deletions(-)

New commits:
commit ea71d18825df0422fdd7c7d40839f19dc0e070bd
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Wed Sep 25 16:28:57 2019 +0200
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Fri Sep 27 17:05:06 2019 +0200

    jsdialogs: better grid handling
    
    Change-Id: I497325cb31a9d88a734eebba0046fbffb0505f25
    Reviewed-on: https://gerrit.libreoffice.org/79736
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>
    Tested-by: Szymon Kłos <szymon.k...@collabora.com>

diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js 
b/loleaflet/src/control/Control.JSDialogBuilder.js
index 3bc5c84ea..164f1aaaa 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -29,6 +29,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
                this._controlHandlers['combobox'] = this._comboboxControl;
                this._controlHandlers['listbox'] = this._comboboxControl;
                this._controlHandlers['fixedtext'] = this._fixedtextControl;
+               this._controlHandlers['grid'] = this._gridHandler;
                this._controlHandlers['frame'] = this._frameHandler;
                this._controlHandlers['panel'] = this._panelHandler;
                this._controlHandlers['container'] = this._containerHandler;
@@ -70,6 +71,66 @@ L.Control.JSDialogBuilder = L.Control.extend({
                return false;
        },
 
+       _getGridColumns: function(children) {
+               var columns = 0;
+               for (var index in children) {
+                       if (parseInt(children[index].left) > columns)
+                               columns = parseInt(children[index].left);
+               }
+               return columns + 1;
+       },
+
+       _getGridRows: function(children) {
+               var rows = 0;
+               for (var index in children) {
+                       if (parseInt(children[index].top) > rows)
+                               rows = parseInt(children[index].top);
+               }
+               return rows + 1;
+       },
+
+       _getGridChild: function(children, row, col) {
+               for (var index in children) {
+                       if (parseInt(children[index].top) == row
+                               && parseInt(children[index].left) == col)
+                               return children[index];
+               }
+               return null;
+       },
+
+       _gridHandler: function(parentContainer, data, builder) {
+               var columns = builder._getGridColumns(data.children);
+               var rows = builder._getGridRows(data.children);
+               var index = 0;
+
+               var table = L.DomUtil.create('table', '', parentContainer);
+               for (var row = 0; row < rows; row++) {
+                       var tr = L.DomUtil.create('tr', '', table);
+                       for (var col = 0; col < columns; col++) {
+                               var td = L.DomUtil.create('td', '', tr);
+                               var child = 
builder._getGridChild(data.children, row, col);
+
+                               if (child) {
+                                       var childObject = null;
+                                       if (child.type == 'container')
+                                               childObject = 
L.DomUtil.create('table', '', td);
+                                       else
+                                               childObject = td;
+
+                                       builder.build(childObject, [child], 
data.type);
+                                       index++;
+                               }
+
+                               if (index > data.children.length) {
+                                       console.warn('index > 
data.children.length');
+                                       return false;
+                               }
+                       }
+               }
+
+               return false;
+       },
+
        _explorableEntry: function(parentContainer, title, contentNode, 
builder) {
                var sectionTitle = L.DomUtil.create('div', 'ui-header level-' + 
builder._currentDepth + ' mobile-wizard ui-widget', parentContainer);
                sectionTitle.innerHTML = title;
@@ -171,6 +232,9 @@ L.Control.JSDialogBuilder = L.Control.extend({
        },
 
        _comboboxControl: function(parentContainer, data, builder) {
+               if (!data.entries || data.entries.length == 0)
+                       return false;
+
                var listbox = L.DomUtil.create('select', '', parentContainer);
                listbox.value = builder._cleanText(data.text);
 
@@ -219,9 +283,10 @@ L.Control.JSDialogBuilder = L.Control.extend({
                return false;
        },
 
-       build: function(parent, data, currentIsContainer, currentIsVertival, 
columns) {
+       build: function(parent, data, currentType, currentIsVertival) {
                var currentInsertPlace = parent;
                var currentHorizontalRow = parent;
+               var currentIsContainer = currentType == 'container';
 
                if (currentIsContainer && !currentIsVertival)
                        currentHorizontalRow = L.DomUtil.create('tr', '', 
parent);
@@ -232,18 +297,16 @@ L.Control.JSDialogBuilder = L.Control.extend({
                        var processChildren = true;
 
                        if (currentIsContainer) {
-                               var horizontalOverflow = (childIndex > 0 && 
columns && (childIndex % columns == 0));
-                               var newRow = currentIsVertival || 
horizontalOverflow;
-                               if (newRow) {
+                               if (currentIsVertival) {
                                        currentHorizontalRow = 
L.DomUtil.create('tr', '', parent);
                                        currentInsertPlace = 
L.DomUtil.create('td', '', currentHorizontalRow);
                                } else
                                        currentInsertPlace = 
L.DomUtil.create('td', '', currentHorizontalRow);
                        }
 
-                       var childIsContainer = (childType == 'container' || 
childType == 'borderwindow') && childData.children.length > 1;
+                       var childIsContainer = (childType == 'container' || 
childType == 'borderwindow')
+                               && childData.children.length > 1;
                        var childIsVertical = childData.vertical == 'true';
-                       var childColumns = childData.cols;
 
                        var childObject = null;
                        if (childIsContainer && childType != 'borderwindow')
@@ -259,7 +322,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
                                console.warn('Unsupported control type: \"' + 
childType + '\"');
 
                        if (processChildren && childData.children != undefined)
-                               this.build(childObject, childData.children, 
childIsContainer, childIsVertical, childColumns);
+                               this.build(childObject, childData.children, 
childType, childIsVertical);
                }
        }
 });
commit 08f065733ee1b4391698c1ef5fa3d5598a917952
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Wed Sep 25 13:42:05 2019 +0200
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Fri Sep 27 17:04:57 2019 +0200

    jsdialogs: set current depth to 0 on reset
    
    Change-Id: I8e445d8b22e5f6eec7683588b70599c55c61ed8e
    Reviewed-on: https://gerrit.libreoffice.org/79735
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>
    Tested-by: Szymon Kłos <szymon.k...@collabora.com>

diff --git a/loleaflet/src/control/Control.MobileWizard.js 
b/loleaflet/src/control/Control.MobileWizard.js
index dfbea872d..0a1498e67 100644
--- a/loleaflet/src/control/Control.MobileWizard.js
+++ b/loleaflet/src/control/Control.MobileWizard.js
@@ -56,6 +56,7 @@ L.Control.MobileWizard = L.Control.extend({
        _onMobileWizard: function(data) {
                if (data) {
                        this._isActive = true;
+                       this._currentDepth = 0;
 
                        this._showWizard();
                        this._hideKeyboard();
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to