Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-32 a163f5b50 -> cea0b0864


# IGNITE-32 WIP: Reworking tree to pseudo tree-table.


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/cea0b086
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/cea0b086
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/cea0b086

Branch: refs/heads/ignite-32
Commit: cea0b0864931ca4d44844c8da4233a68c1a3d2c9
Parents: a163f5b
Author: AKuznetsov <akuznet...@gridgain.com>
Authored: Fri Jan 23 01:54:50 2015 +0700
Committer: AKuznetsov <akuznet...@gridgain.com>
Committed: Fri Jan 23 01:54:50 2015 +0700

----------------------------------------------------------------------
 .../schema-load/src/main/java/media/style.css   |   8 ++
 .../org/apache/ignite/schema/ui/Controls.java   | 130 +++++++++++--------
 .../apache/ignite/schema/ui/SchemaLoadApp.java  | 122 +++++++++++++++--
 3 files changed, 198 insertions(+), 62 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cea0b086/modules/schema-load/src/main/java/media/style.css
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/media/style.css 
b/modules/schema-load/src/main/java/media/style.css
index 99f3d68..35ab834 100644
--- a/modules/schema-load/src/main/java/media/style.css
+++ b/modules/schema-load/src/main/java/media/style.css
@@ -35,6 +35,14 @@
     -fx-focus-color: gray;
 }
 
+.table-row-cell:empty {
+    -fx-background-color: white;
+}
+
+.table-row-cell:empty .table-cell {
+    -fx-border-width: 0px;
+}
+
 .tooltip {
     -fx-background-radius: 0 0 0 0;
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cea0b086/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Controls.java
----------------------------------------------------------------------
diff --git 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Controls.java 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Controls.java
index ae006ac..6bed394 100644
--- 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Controls.java
+++ 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Controls.java
@@ -375,19 +375,35 @@ public class Controls {
         return col;
     }
 
+    /**
+     * Create editable boolean table column.
+     *
+     * @param colName Column name to display.
+     * @param propName Property name column is bound to.
+     * @param tip Column tooltip text.
+     * @return New {@code TableColumn} instance.
+     */
     public static <S> TableColumn<S, Boolean> booleanColumn(String colName, 
String propName, String tip) {
         TableColumn<S, Boolean> col = tableColumn(colName, propName, tip, 70, 
70, true);
 
-        col.setCellFactory(CheckBoxTableCellEx.<S>forTableColumn());
+        col.setCellFactory(CheckBoxTableCellEx.<S>cellFactory());
 
         return col;
 
     }
 
+    /**
+     * Create editable text table column.
+     *
+     * @param colName Column name to display.
+     * @param propName Property name column is bound to.
+     * @param tip Column tooltip text.
+     * @return New {@code TableColumn} instance.
+     */
     public static <S> TableColumn<S, String> textColumn(String colName, String 
propName, String tip) {
         TableColumn<S, String> col = tableColumn(colName, propName, tip, 100, 
0, true);
 
-        col.setCellFactory(TextFieldTableCellEx.<S>forTableColumn());
+        col.setCellFactory(TextFieldTableCellEx.<S>cellFactory());
 
         return col;
     }
@@ -466,9 +482,10 @@ public class Controls {
      */
     private static class CheckBoxTableCellEx<S> extends CheckBoxTableCell<S, 
Boolean> {
         /** Creates a ComboBox cell factory for use in TableColumn controls. */
-        public static <S> Callback<TableColumn<S, Boolean>, TableCell<S, 
Boolean>> forTableColumn() {
+        public static <S> Callback<TableColumn<S, Boolean>, TableCell<S, 
Boolean>> cellFactory() {
             return new Callback<TableColumn<S, Boolean>, TableCell<S, 
Boolean>>() {
-                public TableCell<S, Boolean> call(TableColumn<S, Boolean> col) 
{
+                /** {@inheritDoc} */
+                @Override public TableCell<S, Boolean> call(TableColumn<S, 
Boolean> col) {
                     return new CheckBoxTableCellEx<>();
                 }
             };
@@ -478,77 +495,86 @@ public class Controls {
          * Default constructor.
          */
         private CheckBoxTableCellEx() {
-            super();
-
             setAlignment(Pos.CENTER);
         }
     }
 
-    private static class TextFieldTableCellEx<S> extends TableCell<S, String> {
-        /** Text field. */
-        private final TextField textField;
-
-        public static <S> Callback<TableColumn<S, String>, TableCell<S, 
String>> forTableColumn() {
+    /**
+     * Special table text field cell that commit its content on focus lost.
+     */
+    private static class TextFieldTableCellEx<S> extends TextFieldTableCell<S, 
String> {
+        /** */
+        private boolean cancelling;
+        /** */
+        private boolean hardCancel;
+        /** */
+        private String curTxt = "";
+
+        /** Create cell factory. */
+        public static <S> Callback<TableColumn<S, String>, TableCell<S, 
String>> cellFactory() {
             return new Callback<TableColumn<S, String>, TableCell<S, 
String>>() {
+                /** {@inheritDoc} */
                 @Override public TableCell<S, String> call(TableColumn<S, 
String> col) {
                     return new TextFieldTableCellEx<>();
                 }
             };
         }
 
-        private TextFieldTableCellEx() {
-            textField = new TextField();
-
-            textField.setOnKeyReleased(new EventHandler<KeyEvent>() {
-                /** {@inheritDoc} */
-                @Override public void handle(KeyEvent evt) {
-                    if (KeyCode.ENTER == evt.getCode())
-                        commitEdit(textField.getText());
-                    else if (KeyCode.ESCAPE == evt.getCode())
-                        cancelEdit();
-                }
-            });
-
-            textField.focusedProperty().addListener(new 
ChangeListener<Boolean>() {
-                /** {@inheritDoc} */
-                @Override public void changed(ObservableValue<? extends 
Boolean> observable, Boolean oldVal,
-                    Boolean newVal) {
-                    if (!newVal)
-                        commitEdit(textField.getText());
-                }
-            });
-
-            getStyleClass().add("text-field-table-cell");
-        }
-
         /** {@inheritDoc} */
         @Override public void startEdit() {
             super.startEdit();
 
-            setText(null);
-            setGraphic(textField);
+            Node g = getGraphic();
+
+            if (g != null) {
+                final TextField tf = (TextField)g;
+
+                tf.textProperty().addListener(new ChangeListener<String>() {
+                    @Override public void changed(ObservableValue<? extends 
String> val, String oldVal, String newVal) {
+                        curTxt = newVal;
+                    }
+                });
+
+                tf.setOnKeyReleased(new EventHandler<KeyEvent>() {
+                    /** {@inheritDoc} */
+                    @Override public void handle(KeyEvent evt) {
+                        if (KeyCode.ENTER == evt.getCode())
+                            cancelEdit();
+                        else if (KeyCode.ESCAPE == evt.getCode()) {
+                            hardCancel = true;
+
+                            cancelEdit();
+                        }
+                    }
+                });
+            }
         }
 
         /** {@inheritDoc} */
         @Override public void cancelEdit() {
-            super.cancelEdit();
-
-            setText(getItem());
-
-            setGraphic(null);
+            if (!cancelling) {
+                try {
+                    cancelling = true;
+
+                    if (hardCancel || curTxt.trim().isEmpty())
+                        super.cancelEdit();
+                    else
+                        commitEdit(curTxt);
+                }
+                finally {
+                    cancelling = false;
+                }
+            }
+            else
+                super.cancelEdit();
         }
 
         /** {@inheritDoc} */
-        @Override public void updateItem(String item, boolean empty) {
-            super.updateItem(item, empty);
-
-            setGraphic(null);
+        @Override public void commitEdit(String s) {
+            super.commitEdit(s);
 
-            if (!empty) {
-                setText(item);
-
-                textField.setText(item);
-            }
+            hardCancel = false;
+            curTxt = "";
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cea0b086/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
----------------------------------------------------------------------
diff --git 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
index 146c07e..34331df 100644
--- 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
+++ 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
@@ -631,18 +631,18 @@ public class SchemaLoadApp extends Application {
         genPnl.addRow(100, 100, Double.MAX_VALUE, Priority.ALWAYS);
         genPnl.addRows(7);
 
-        TableColumn<SchemaItem, Boolean> useCol = booleanColumn("Use", "use",
-            "If checked then this field will be part of key object");
-
-        TableColumn<SchemaItem, String> schemaCol = tableColumn("Schema", 
"schema", "Schema name in database");
+        TableColumn<SchemaItem, Boolean> useCol = customColumn("Use", "use",
+            "If checked then this field will be part of key object", 
SchemaCell.cellFactory());
 
-        TableColumn<SchemaItem, String> tblCol = tableColumn("Table", "table", 
"Table name in database");
+//        TableColumn<SchemaItem, String> schemaCol = tableColumn("Schema", 
"schema", "Schema name in database");
+//
+//        TableColumn<SchemaItem, String> tblCol = tableColumn("Table", 
"table", "Table name in database");
 
         TableColumn<SchemaItem, String> keyClsCol = textColumn("Key Class", 
"keyClass", "Key class name");
 
         TableColumn<SchemaItem, String> valClsCol = textColumn("Value Class", 
"valueClass", "Value class name");
 
-        schemesTbl = tableView("Tables not found in database", useCol, 
schemaCol, tblCol, keyClsCol, valClsCol);
+        schemesTbl = tableView("Tables not found in database", useCol, /* 
schemaCol, tblCol, */ keyClsCol, valClsCol);
 
         TableColumn<PojoField, Boolean> keyCol = booleanColumn("Key", "key",
             "If checked then this field will be part of key object");
@@ -654,7 +654,7 @@ public class SchemaLoadApp extends Application {
         TableColumn<PojoField, String> javaNameCol = textColumn("Ignite Name", 
"javaName", "Field name in POJO class");
 
         TableColumn<PojoField, String> javaTypeNameCol = customColumn("Java 
Type", "javaTypeName",
-            "Field java type in POJO class", JavaTypeCell.forTableColumn());
+            "Field java type in POJO class", JavaTypeCell.cellFactory());
 
         final TableView<PojoField> fieldsTbl = tableView("Select table to see 
table columns",
             keyCol, dbNameCol, dbTypeNameCol, javaNameCol, javaTypeNameCol);
@@ -983,7 +983,15 @@ public class SchemaLoadApp extends Application {
 
         rootPane = borderPane(createHeaderPane(), createConnectionPane(), 
createButtonsPane(), null, null);
 
-        primaryStage.setScene(scene(rootPane));
+        Scene scene = scene(rootPane);
+
+//        scene.focusOwnerProperty().addListener(new ChangeListener<Node>() {
+//            @Override public void changed(ObservableValue<? extends Node> 
value, Node node, Node t1) {
+//                System.out.println(String.valueOf(value));
+//            }
+//        });
+
+        primaryStage.setScene(scene);
 
         primaryStage.setWidth(600);
         primaryStage.setMinWidth(600);
@@ -1857,9 +1865,10 @@ public class SchemaLoadApp extends Application {
         private final ComboBox<String> comboBox;
 
         /** Creates a ComboBox cell factory for use in TableColumn controls. */
-        public static Callback<TableColumn<PojoField, String>, 
TableCell<PojoField, String>> forTableColumn() {
+        public static Callback<TableColumn<PojoField, String>, 
TableCell<PojoField, String>> cellFactory() {
             return new Callback<TableColumn<PojoField, String>, 
TableCell<PojoField, String>>() {
-                public TableCell<PojoField, String> 
call(TableColumn<PojoField, String> col) {
+                /** {@inheritDoc} */
+                @Override public TableCell<PojoField, String> 
call(TableColumn<PojoField, String> col) {
                     return new JavaTypeCell();
                 }
             };
@@ -1872,6 +1881,7 @@ public class SchemaLoadApp extends Application {
             comboBox = new 
ComboBox<>(FXCollections.<String>emptyObservableList());
 
             comboBox.valueProperty().addListener(new ChangeListener<String>() {
+                /** {@inheritDoc} */
                 @Override public void changed(ObservableValue<? extends 
String> val, String oldVal, String newVal) {
                     if (isEditing())
                         commitEdit(newVal);
@@ -1921,4 +1931,96 @@ public class SchemaLoadApp extends Application {
             }
         }
     }
+
+    /**
+     * Special table cell to select schema or table.
+     */
+    private static class SchemaCell extends TableCell<SchemaItem, Boolean> {
+        private final Pane schemaPnl;
+
+        private final Pane tblPnl;
+
+        /** Combo box. */
+        private final CheckBox ch;
+
+        /** Creates a ComboBox cell factory for use in TableColumn controls. */
+        public static Callback<TableColumn<SchemaItem, Boolean>, 
TableCell<SchemaItem, Boolean>> cellFactory() {
+            return new Callback<TableColumn<SchemaItem, Boolean>, 
TableCell<SchemaItem, Boolean>>() {
+                /** {@inheritDoc} */
+                @Override public TableCell<SchemaItem, Boolean> 
call(TableColumn<SchemaItem, Boolean> col) {
+                    return new SchemaCell();
+                }
+            };
+        }
+
+        /**
+         * Default constructor.
+         */
+        private SchemaCell() {
+            ch = new CheckBox();
+
+            ch.setOnAction(new EventHandler<ActionEvent>() {
+                @Override public void handle(ActionEvent event) {
+//                    int idx = getIndex();
+
+                    getTableView().getSelectionModel().select(getIndex());
+
+//                    TableRow row = getTableRow();
+//
+//                    if (row != null)
+//                        
row.getTableView().getSelectionModel().select(row.getIndex()+1);
+                }
+            });
+
+            schemaPnl = new HBox();
+            schemaPnl.setPadding(new Insets(0, 0, 0, 5));
+
+            tblPnl = new HBox();
+            tblPnl.setPadding(new Insets(0, 0, 0, 15));
+
+            tblPnl.getChildren().add(ch);
+
+            setGraphic(tblPnl);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void startEdit() {
+            super.startEdit();
+        }
+
+        private void setGraphic(String text, Pane pnl) {
+            if (!text.isEmpty()) {
+                ch.setText(text);
+
+                pnl.getChildren().add(ch);
+
+                setGraphic(pnl);
+            }
+        }
+
+        /** {@inheritDoc} */
+        @Override public void updateItem(Boolean item, boolean empty) {
+            super.updateItem(item, empty);
+
+            setGraphic(null);
+
+            if (!empty) {
+                TableRow row = getTableRow();
+
+                if (row != null) {
+                    SchemaItem schema = (SchemaItem)row.getItem();
+
+                    if (schema != null) {
+                        ch.setSelected(item);
+
+                        schemaPnl.getChildren().clear();
+                        tblPnl.getChildren().clear();
+
+                        setGraphic(schema.schemaProperty().get(), schemaPnl);
+                        setGraphic(schema.tableProperty().get(), tblPnl);
+                    }
+                }
+            }
+        }
+    }
 }

Reply via email to