* Bug #11625 fixed - uicontrol table would not update object strings when edited... 94/17994/6
Caio SOUZA [Tue, 29 Mar 2016 00:47:46 +0000 (21:47 -0300)]
Change-Id: I966f0ca450a24b19293a11d7d628af8dfea2980c

scilab/CHANGES
scilab/modules/graphic_objects/tests/nonreg_tests/bug_11625.tst [new file with mode: 0644]
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/uitable/SwingScilabUiTable.java

index 0e7dd2f..e768c5c 100644 (file)
@@ -318,6 +318,8 @@ In 6.0.0:
 
 * Bug #9456 fixed  - bench_run did not work on a path or in a toolbox
 
+* Bug #11625 fixed - uicontrol table would not update object strings when edited interactively in the plot window
+
 * Bug #12559       - Fixed some memory leaks in FFTW
 
 * Bug #12872       - help pages of else, elseif, end, try, sciargs, global, halt, empty and power were in wrong help sections
diff --git a/scilab/modules/graphic_objects/tests/nonreg_tests/bug_11625.tst b/scilab/modules/graphic_objects/tests/nonreg_tests/bug_11625.tst
new file mode 100644 (file)
index 0000000..c842fe5
--- /dev/null
@@ -0,0 +1,29 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Caio SOUZA
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- INTERACTIVE TEST -->
+// <-- TEST WITH GRAPHIC -->
+
+// <-- Non-regression test for bug 11625 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/11625
+//
+// <-- Short Description -->
+// uicontrol table did not update its object string, the graphic window show the new
+// string but the command line property shows the old string.
+
+// Example:
+clf, f = gcf(); as = f.axes_size;
+table = string(rand(3,3))
+ut = uicontrol("style","table",..
+"string",table,..
+"position",[5 as(2)-100 300 60]);
+
+// Then, modify some values in the table. Then:
+t2 = matrix(ut.string, size(table))
+// The initial table should have its strings updated to the new ones, enterend in the graphic window.
index 7fe61ef..e972407 100644 (file)
@@ -28,6 +28,10 @@ import javax.swing.JTable;
 import javax.swing.UIManager;
 import javax.swing.border.Border;
 
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.TableModel;
+
 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
 import org.scilab.modules.gui.SwingViewObject;
 import org.scilab.modules.gui.SwingViewWidget;
@@ -284,7 +288,7 @@ public class SwingScilabUiTable extends JScrollPane implements SwingViewObject,
      */
     private JTable getUiTable() {
         if (uiTable == null) {
-            uiTable = new JTable(data, colNames);
+            uiTable = createTable(data, colNames);
             uiTable.setFillsViewportHeight(true);
             if (uiTable.getGridColor().equals(Color.WHITE)) {
                 uiTable.setGridColor(new Color(128, 128, 128));
@@ -351,7 +355,7 @@ public class SwingScilabUiTable extends JScrollPane implements SwingViewObject,
         //updates table with new column names
         nCol = names.length;
         colNames = names;
-        uiTable = new JTable(data, names);
+        uiTable = createTable(data, names);
         getViewport().add(uiTable);
         uiTable.doLayout();
     }
@@ -412,7 +416,7 @@ public class SwingScilabUiTable extends JScrollPane implements SwingViewObject,
         }
 
         //adds and updates table with new data
-        uiTable = new JTable(data, colNames);
+        uiTable = createTable(data, colNames);
         getViewport().add(uiTable);
         uiTable.doLayout();
     }
@@ -500,4 +504,25 @@ public class SwingScilabUiTable extends JScrollPane implements SwingViewObject,
             setForeground(color);
         }
     }
+
+    /* Create a JTable and adds an event listener for updating table data */
+    private JTable createTable(Object[][] data, Object[] names) {
+        JTable table = new JTable(data, names);
+
+        table.getModel().addTableModelListener(new TableModelListener() {
+            public void tableChanged(TableModelEvent e) {
+                int row = e.getFirstRow();
+                int column = e.getColumn();
+                Object data = ((TableModel)e.getSource()).getValueAt(row, column);
+
+                String[] tableData = (String[]) GraphicController.getController().getProperty(uid, __GO_UI_STRING__);
+                int ncols = (Integer) GraphicController.getController().getProperty(uid, __GO_UI_STRING_COLNB__);
+                int nrows = tableData.length / ncols;
+                tableData[(column + 1) * nrows + row + 1] = data.toString();
+                GraphicController.getController().setProperty(uid, __GO_UI_STRING__, tableData);
+            }
+        });
+
+        return table;
+    }
 }