This is an automated email from the ASF dual-hosted git repository.

hansva pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hop.git


The following commit(s) were added to refs/heads/main by this push:
     new fb5ec7a509 static schema dialog improvements, fixes #6421 (#6422)
fb5ec7a509 is described below

commit fb5ec7a5090565977bb28bfacf88594736421bee
Author: Hans Van Akelyen <[email protected]>
AuthorDate: Mon Jan 19 15:52:45 2026 +0100

    static schema dialog improvements, fixes #6421 (#6422)
    
    final fix
---
 .../metadata/SchemaDefinitionEditor.java           |  7 +-
 .../transforms/excelinput/ExcelInputDialog.java    | 72 ++++++++++------
 .../excelwriter/ExcelWriterTransformDialog.java    | 81 +++++++++++-------
 .../fileinput/text/TextFileInputDialog.java        | 27 ++++--
 .../textfileoutput/TextFileOutputDialog.java       | 98 ++++++++++++++--------
 .../org/apache/hop/ui/core/widget/TableView.java   | 34 ++++----
 6 files changed, 197 insertions(+), 122 deletions(-)

diff --git 
a/plugins/misc/static-schema/src/main/java/org/apache/hop/staticschema/metadata/SchemaDefinitionEditor.java
 
b/plugins/misc/static-schema/src/main/java/org/apache/hop/staticschema/metadata/SchemaDefinitionEditor.java
index 1fc4b5bef2..05437ea0f3 100644
--- 
a/plugins/misc/static-schema/src/main/java/org/apache/hop/staticschema/metadata/SchemaDefinitionEditor.java
+++ 
b/plugins/misc/static-schema/src/main/java/org/apache/hop/staticschema/metadata/SchemaDefinitionEditor.java
@@ -161,8 +161,7 @@ public class SchemaDefinitionEditor extends 
MetadataEditor<SchemaDefinition> {
           new ColumnInfo(
               BaseMessages.getString(PKG, 
"SchemaDefinitionDialog.Fields.Column.FieldType"),
               ColumnInfo.COLUMN_TYPE_CCOMBO,
-              ValueMetaFactory.getValueMetaNames(),
-              false),
+              ValueMetaFactory.getValueMetaNames()),
           new ColumnInfo(
               BaseMessages.getString(PKG, 
"SchemaDefinitionDialog.Fields.Column.FieldFormat"),
               ColumnInfo.COLUMN_TYPE_FORMAT,
@@ -213,7 +212,7 @@ public class SchemaDefinitionEditor extends 
MetadataEditor<SchemaDefinition> {
         new TableView(
             new Variables(),
             parent,
-            SWT.BORDER,
+            SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI,
             columnInfos,
             this.getMetadata().getFieldDefinitions().size(),
             null,
@@ -290,7 +289,7 @@ public class SchemaDefinitionEditor extends 
MetadataEditor<SchemaDefinition> {
       sfd.setIfNullValue(item.getText(9));
       sfd.setTrimType(ValueMetaString.getTrimTypeByDesc(item.getText(10)));
       sfd.setComment(item.getText(11));
-      sfd.setRoundingType(ValueMetaBase.getRoundingTypeCode(item.getText(11)));
+      sfd.setRoundingType(ValueMetaBase.getRoundingTypeCode(item.getText(12)));
       SchemaDefinition.getFieldDefinitions().add(sfd);
     }
   }
diff --git 
a/plugins/transforms/excel/src/main/java/org/apache/hop/pipeline/transforms/excelinput/ExcelInputDialog.java
 
b/plugins/transforms/excel/src/main/java/org/apache/hop/pipeline/transforms/excelinput/ExcelInputDialog.java
index b49fa2fcd6..18b5729719 100644
--- 
a/plugins/transforms/excel/src/main/java/org/apache/hop/pipeline/transforms/excelinput/ExcelInputDialog.java
+++ 
b/plugins/transforms/excel/src/main/java/org/apache/hop/pipeline/transforms/excelinput/ExcelInputDialog.java
@@ -958,6 +958,8 @@ public class ExcelInputDialog extends BaseTransformDialog {
             if (r != null) {
               String[] fieldNames = r.getFieldNames();
               if (fieldNames != null) {
+                // Close any active editors to clear cached combo values
+                wFields.closeActiveEditors();
                 wFields.clearAll();
                 for (int i = 0; i < fieldNames.length; i++) {
                   IValueMeta valueMeta = r.getValueMeta(i);
@@ -992,6 +994,10 @@ public class ExcelInputDialog extends BaseTransformDialog {
         wFields.removeEmptyRows();
         wFields.setRowNums();
         wFields.optWidth(true);
+
+        // Force table to redraw to update combo dropdowns with correct values
+        wFields.table.redraw();
+        wFields.table.update();
       }
     }
   }
@@ -1106,6 +1112,13 @@ public class ExcelInputDialog extends 
BaseTransformDialog {
     wAccFilenames.setSelection(meta.isAcceptingFilenames());
     wSchemaDefinition.setText(Const.NVL(meta.getSchemaDefinition(), ""));
     wIgnoreFields.setSelection(meta.isIgnoreFields());
+
+    // Apply the ignore fields state (fill from schema and disable/enable 
controls)
+    if (meta.isIgnoreFields()) {
+      fillFieldsLayoutFromSchema(false);
+      setFlags();
+    }
+
     if (meta.getAcceptingField() != null && 
!meta.getAcceptingField().isEmpty()) {
       wAccField.select(wAccField.indexOf(meta.getAcceptingField()));
     }
@@ -1129,33 +1142,38 @@ public class ExcelInputDialog extends 
BaseTransformDialog {
     if (isDebug()) {
       logDebug("getting fields info...");
     }
-    for (int i = 0; i < meta.getFields().size(); i++) {
-      ExcelInputField f = meta.getFields().get(i);
-      TableItem item = wFields.table.getItem(i);
-      String field = f.getName();
-      String type = f.getTypeDesc();
-      String length = "" + f.getLength();
-      String prec = "" + f.getPrecision();
-      String trim = f.getTrimType().getDescription();
-      String rep =
-          f.isRepeat()
-              ? BaseMessages.getString(PKG, CONST_COMBO_YES)
-              : BaseMessages.getString(PKG, CONST_COMBO_NO);
-      String format = f.getFormat();
-      String currency = f.getCurrencySymbol();
-      String decimal = f.getDecimalSymbol();
-      String grouping = f.getGroupSymbol();
-
-      item.setText(1, Const.NVL(field, ""));
-      item.setText(2, Const.NVL(type, ""));
-      item.setText(3, Const.NVL(length, ""));
-      item.setText(4, Const.NVL(prec, ""));
-      item.setText(5, Const.NVL(trim, ""));
-      item.setText(6, Const.NVL(rep, ""));
-      item.setText(7, Const.NVL(format, ""));
-      item.setText(8, Const.NVL(currency, ""));
-      item.setText(9, Const.NVL(decimal, ""));
-      item.setText(10, Const.NVL(grouping, ""));
+
+    // Only populate fields from metadata if NOT ignoring fields (will be 
filled from schema
+    // instead)
+    if (!meta.isIgnoreFields()) {
+      for (int i = 0; i < meta.getFields().size(); i++) {
+        ExcelInputField f = meta.getFields().get(i);
+        TableItem item = wFields.table.getItem(i);
+        String field = f.getName();
+        String type = f.getTypeDesc();
+        String length = "" + f.getLength();
+        String prec = "" + f.getPrecision();
+        String trim = f.getTrimType().getDescription();
+        String rep =
+            f.isRepeat()
+                ? BaseMessages.getString(PKG, CONST_COMBO_YES)
+                : BaseMessages.getString(PKG, CONST_COMBO_NO);
+        String format = f.getFormat();
+        String currency = f.getCurrencySymbol();
+        String decimal = f.getDecimalSymbol();
+        String grouping = f.getGroupSymbol();
+
+        item.setText(1, Const.NVL(field, ""));
+        item.setText(2, Const.NVL(type, ""));
+        item.setText(3, Const.NVL(length, ""));
+        item.setText(4, Const.NVL(prec, ""));
+        item.setText(5, Const.NVL(trim, ""));
+        item.setText(6, Const.NVL(rep, ""));
+        item.setText(7, Const.NVL(format, ""));
+        item.setText(8, Const.NVL(currency, ""));
+        item.setText(9, Const.NVL(decimal, ""));
+        item.setText(10, Const.NVL(grouping, ""));
+      }
     }
 
     wFields.removeEmptyRows();
diff --git 
a/plugins/transforms/excel/src/main/java/org/apache/hop/pipeline/transforms/excelwriter/ExcelWriterTransformDialog.java
 
b/plugins/transforms/excel/src/main/java/org/apache/hop/pipeline/transforms/excelwriter/ExcelWriterTransformDialog.java
index d3d370671f..3fc7f2c91d 100644
--- 
a/plugins/transforms/excel/src/main/java/org/apache/hop/pipeline/transforms/excelwriter/ExcelWriterTransformDialog.java
+++ 
b/plugins/transforms/excel/src/main/java/org/apache/hop/pipeline/transforms/excelwriter/ExcelWriterTransformDialog.java
@@ -1678,6 +1678,8 @@ public class ExcelWriterTransformDialog extends 
BaseTransformDialog {
             if (r != null) {
               String[] fieldNames = r.getFieldNames();
               if (fieldNames != null) {
+                // Close any active editors to clear cached combo values
+                wFields.closeActiveEditors();
                 wFields.clearAll();
                 for (int i = 0; i < fieldNames.length; i++) {
                   IValueMeta valueMeta = r.getValueMeta(i);
@@ -1698,6 +1700,10 @@ public class ExcelWriterTransformDialog extends 
BaseTransformDialog {
         wFields.removeEmptyRows();
         wFields.setRowNums();
         wFields.optWidth(true);
+
+        // Force table to redraw to update combo dropdowns with correct values
+        wFields.table.redraw();
+        wFields.table.update();
       }
     }
   }
@@ -1791,6 +1797,13 @@ public class ExcelWriterTransformDialog extends 
BaseTransformDialog {
 
     wSchemaDefinition.setText(Const.NVL(input.getSchemaDefinition(), ""));
     wIgnoreFields.setSelection(input.isIgnoreFields());
+
+    // Apply the ignore fields state (fill from schema and disable/enable 
controls)
+    if (input.isIgnoreFields()) {
+      fillFieldsLayoutFromSchema(false);
+      enableIgnorefiedls();
+    }
+
     wStreamData.setSelection(file.isStreamingData());
     wSplitEvery.setText("" + file.getSplitEvery());
     wEmptyRows.setText("" + input.getAppendEmpty());
@@ -1857,41 +1870,45 @@ public class ExcelWriterTransformDialog extends 
BaseTransformDialog {
 
     logDebug("Getting fields info...");
 
-    for (int i = 0; i < input.getOutputFields().size(); i++) {
-      ExcelWriterOutputField field = input.getOutputFields().get(i);
+    // Only populate fields from metadata if NOT ignoring fields (will be 
filled from schema
+    // instead)
+    if (!input.isIgnoreFields()) {
+      for (int i = 0; i < input.getOutputFields().size(); i++) {
+        ExcelWriterOutputField field = input.getOutputFields().get(i);
 
-      TableItem item = wFields.table.getItem(i);
-      if (field.getName() != null) {
-        item.setText(1, field.getName());
-      }
-      item.setText(2, field.getType());
+        TableItem item = wFields.table.getItem(i);
+        if (field.getName() != null) {
+          item.setText(1, field.getName());
+        }
+        item.setText(2, field.getType());
 
-      if (field.getFormat() != null) {
-        item.setText(3, field.getFormat());
-      }
-      if (field.getStyleCell() != null) {
-        item.setText(4, field.getStyleCell());
-      }
-      if (field.getTitle() != null) {
-        item.setText(5, field.getTitle());
-      }
-      if (field.getTitleStyleCell() != null) {
-        item.setText(6, field.getTitleStyleCell());
-      }
-      if (field.isFormula()) {
-        item.setText(7, "Y");
-      } else {
-        item.setText(7, "N");
-      }
+        if (field.getFormat() != null) {
+          item.setText(3, field.getFormat());
+        }
+        if (field.getStyleCell() != null) {
+          item.setText(4, field.getStyleCell());
+        }
+        if (field.getTitle() != null) {
+          item.setText(5, field.getTitle());
+        }
+        if (field.getTitleStyleCell() != null) {
+          item.setText(6, field.getTitleStyleCell());
+        }
+        if (field.isFormula()) {
+          item.setText(7, "Y");
+        } else {
+          item.setText(7, "N");
+        }
 
-      if (field.getHyperlinkField() != null) {
-        item.setText(8, field.getHyperlinkField());
-      }
-      if (field.getCommentField() != null) {
-        item.setText(9, field.getCommentField());
-      }
-      if (field.getCommentAuthorField() != null) {
-        item.setText(10, field.getCommentAuthorField());
+        if (field.getHyperlinkField() != null) {
+          item.setText(8, field.getHyperlinkField());
+        }
+        if (field.getCommentField() != null) {
+          item.setText(9, field.getCommentField());
+        }
+        if (field.getCommentAuthorField() != null) {
+          item.setText(10, field.getCommentAuthorField());
+        }
       }
     }
 
diff --git 
a/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/fileinput/text/TextFileInputDialog.java
 
b/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/fileinput/text/TextFileInputDialog.java
index 773fa00d0e..cc2894831d 100644
--- 
a/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/fileinput/text/TextFileInputDialog.java
+++ 
b/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/fileinput/text/TextFileInputDialog.java
@@ -2064,13 +2064,11 @@ public class TextFileInputDialog extends 
BaseTransformDialog
         new ColumnInfo[] {
           new ColumnInfo(
               BaseMessages.getString(PKG, 
"TextFileInputDialog.NameColumn.Column"),
-              ColumnInfo.COLUMN_TYPE_TEXT,
-              false),
+              ColumnInfo.COLUMN_TYPE_TEXT),
           new ColumnInfo(
               BaseMessages.getString(PKG, 
"TextFileInputDialog.TypeColumn.Column"),
               ColumnInfo.COLUMN_TYPE_CCOMBO,
-              ValueMetaFactory.getValueMetaNames(),
-              true),
+              ValueMetaFactory.getValueMetaNames()),
           new ColumnInfo(
               BaseMessages.getString(PKG, 
"TextFileInputDialog.FormatColumn.Column"),
               ColumnInfo.COLUMN_TYPE_FORMAT,
@@ -2110,8 +2108,7 @@ public class TextFileInputDialog extends 
BaseTransformDialog
           new ColumnInfo(
               BaseMessages.getString(PKG, 
"TextFileInputDialog.TrimTypeColumn.Column"),
               ColumnInfo.COLUMN_TYPE_CCOMBO,
-              ValueMetaBase.trimTypeDesc,
-              true),
+              ValueMetaBase.trimTypeDesc),
           new ColumnInfo(
               BaseMessages.getString(PKG, 
"TextFileInputDialog.RepeatColumn.Column"),
               ColumnInfo.COLUMN_TYPE_CCOMBO,
@@ -2182,6 +2179,8 @@ public class TextFileInputDialog extends 
BaseTransformDialog
             if (r != null) {
               String[] fieldNames = r.getFieldNames();
               if (fieldNames != null) {
+                // Close any active editors to clear cached combo values
+                wFields.closeActiveEditors();
                 wFields.clearAll();
                 for (int i = 0; i < fieldNames.length; i++) {
                   IValueMeta valueMeta = r.getValueMeta(i);
@@ -2216,6 +2215,10 @@ public class TextFileInputDialog extends 
BaseTransformDialog
         wFields.removeEmptyRows();
         wFields.setRowNums();
         wFields.optWidth(true);
+
+        // Force table to redraw to update combo dropdowns with correct values
+        wFields.table.redraw();
+        wFields.table.update();
       }
     }
   }
@@ -2334,6 +2337,12 @@ public class TextFileInputDialog extends 
BaseTransformDialog
     wSchemaDefinition.setText(Const.NVL(meta.getSchemaDefinition(), ""));
     wIgnoreFields.setSelection(meta.ignoreFields);
 
+    // Apply the ignore fields state (fill from schema and disable/enable 
controls)
+    if (meta.ignoreFields) {
+      fillFieldsLayoutFromSchema(false);
+    }
+    setFlags();
+
     if (meta.getFileName() != null) {
       wFilenameList.removeAll();
 
@@ -2399,7 +2408,11 @@ public class TextFileInputDialog extends 
BaseTransformDialog
     wLimit.setText("" + meta.content.rowLimit);
 
     logDebug("getting fields info...");
-    getFieldsData(meta, false, reloadAllFields, newFieldNames);
+    // Only populate fields from metadata if NOT ignoring fields (will be 
filled from schema
+    // instead)
+    if (!meta.ignoreFields) {
+      getFieldsData(meta, false, reloadAllFields, newFieldNames);
+    }
 
     if (meta.getEncoding() != null) {
       wEncoding.setText(meta.getEncoding());
diff --git 
a/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/textfileoutput/TextFileOutputDialog.java
 
b/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/textfileoutput/TextFileOutputDialog.java
index 391c9b1519..e262686eb5 100644
--- 
a/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/textfileoutput/TextFileOutputDialog.java
+++ 
b/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/textfileoutput/TextFileOutputDialog.java
@@ -160,6 +160,8 @@ public class TextFileOutputDialog extends 
BaseTransformDialog {
   private MetaSelectionLine<SchemaDefinition> wSchemaDefinition;
   private Button wIgnoreFields;
 
+  private Button wMinWidth;
+
   private ColumnInfo[] colinf;
 
   private final List<String> inputFields = new ArrayList<>();
@@ -1101,7 +1103,7 @@ public class TextFileOutputDialog extends 
BaseTransformDialog {
     wGet.setText(BaseMessages.getString(PKG, "System.Button.GetFields"));
     wGet.setToolTipText(BaseMessages.getString(PKG, 
"System.Tooltip.GetFields"));
 
-    Button wMinWidth = new Button(wFieldsComp, SWT.PUSH);
+    wMinWidth = new Button(wFieldsComp, SWT.PUSH);
     wMinWidth.setText(BaseMessages.getString(PKG, 
"TextFileOutputDialog.MinWidth.Button"));
     wMinWidth.setToolTipText(BaseMessages.getString(PKG, 
"TextFileOutputDialog.MinWidth.Tooltip"));
     wMinWidth.addSelectionListener(
@@ -1302,6 +1304,8 @@ public class TextFileOutputDialog extends 
BaseTransformDialog {
             if (r != null) {
               String[] fieldNames = r.getFieldNames();
               if (fieldNames != null) {
+                // Close any active editors to clear cached combo values
+                wFields.closeActiveEditors();
                 wFields.clearAll();
                 for (int i = 0; i < fieldNames.length; i++) {
                   IValueMeta valueMeta = r.getValueMeta(i);
@@ -1327,7 +1331,10 @@ public class TextFileOutputDialog extends 
BaseTransformDialog {
                   item.setText(10, 
Const.NVL(schemaFieldDefinition.getIfNullValue(), ""));
                   item.setText(
                       11,
-                      
ValueMetaBase.getRoundingTypeDesc(schemaFieldDefinition.getRoundingType()));
+                      Const.NVL(
+                          ValueMetaBase.getRoundingTypeDesc(
+                              schemaFieldDefinition.getRoundingType()),
+                          ""));
                 }
               }
             }
@@ -1340,6 +1347,10 @@ public class TextFileOutputDialog extends 
BaseTransformDialog {
         wFields.removeEmptyRows();
         wFields.setRowNums();
         wFields.optWidth(true);
+
+        // Force table to redraw to update combo dropdowns with correct values
+        wFields.table.redraw();
+        wFields.table.update();
       }
     }
   }
@@ -1498,6 +1509,15 @@ public class TextFileOutputDialog extends 
BaseTransformDialog {
     wServletOutput.setSelection(input.isServletOutput());
     wSchemaDefinition.setText(Const.NVL(input.getSchemaDefinition(), ""));
     wIgnoreFields.setSelection(input.isIgnoreFields());
+
+    // Apply the ignore fields state (fill from schema and disable/enable 
controls)
+    if (input.isIgnoreFields()) {
+      fillFieldsLayoutFromSchema(false);
+    }
+    wFields.setEnabled(!input.isIgnoreFields());
+    wGet.setEnabled(!input.isIgnoreFields());
+    wMinWidth.setEnabled(!input.isIgnoreFields());
+
     setFlagsServletOption();
     wDoNotOpenNewFileInit.setSelection(input.isDoNotOpenNewFileInit());
     wCreateParentFolder.setSelection(input.isCreateParentFolder());
@@ -1550,42 +1570,46 @@ public class TextFileOutputDialog extends 
BaseTransformDialog {
 
     logDebug("getting fields info...");
 
-    for (int i = 0; i < input.getOutputFields().length; i++) {
-      TextFileField field = input.getOutputFields()[i];
+    // Only populate fields from metadata if NOT ignoring fields (will be 
filled from schema
+    // instead)
+    if (!input.isIgnoreFields()) {
+      for (int i = 0; i < input.getOutputFields().length; i++) {
+        TextFileField field = input.getOutputFields()[i];
 
-      TableItem item = wFields.table.getItem(i);
-      if (field.getName() != null) {
-        item.setText(1, field.getName());
-      }
-      item.setText(2, field.getTypeDesc());
-      if (field.getFormat() != null) {
-        item.setText(3, field.getFormat());
-      }
-      if (field.getLength() >= 0) {
-        item.setText(4, "" + field.getLength());
-      }
-      if (field.getPrecision() >= 0) {
-        item.setText(5, "" + field.getPrecision());
-      }
-      if (field.getCurrencySymbol() != null) {
-        item.setText(6, field.getCurrencySymbol());
-      }
-      if (field.getDecimalSymbol() != null) {
-        item.setText(7, field.getDecimalSymbol());
-      }
-      if (field.getGroupingSymbol() != null) {
-        item.setText(8, field.getGroupingSymbol());
-      }
-      String trim = field.getTrimTypeDesc();
-      if (trim != null) {
-        item.setText(9, trim);
-      }
-      if (field.getNullString() != null) {
-        item.setText(10, field.getNullString());
-      }
-      String roundingType = 
ValueMetaBase.getRoundingTypeDesc(field.getRoundingType());
-      if (roundingType != null) {
-        item.setText(11, roundingType);
+        TableItem item = wFields.table.getItem(i);
+        if (field.getName() != null) {
+          item.setText(1, field.getName());
+        }
+        item.setText(2, field.getTypeDesc());
+        if (field.getFormat() != null) {
+          item.setText(3, field.getFormat());
+        }
+        if (field.getLength() >= 0) {
+          item.setText(4, "" + field.getLength());
+        }
+        if (field.getPrecision() >= 0) {
+          item.setText(5, "" + field.getPrecision());
+        }
+        if (field.getCurrencySymbol() != null) {
+          item.setText(6, field.getCurrencySymbol());
+        }
+        if (field.getDecimalSymbol() != null) {
+          item.setText(7, field.getDecimalSymbol());
+        }
+        if (field.getGroupingSymbol() != null) {
+          item.setText(8, field.getGroupingSymbol());
+        }
+        String trim = field.getTrimTypeDesc();
+        if (trim != null) {
+          item.setText(9, trim);
+        }
+        if (field.getNullString() != null) {
+          item.setText(10, field.getNullString());
+        }
+        String roundingType = 
ValueMetaBase.getRoundingTypeDesc(field.getRoundingType());
+        if (roundingType != null) {
+          item.setText(11, roundingType);
+        }
       }
     }
 
diff --git a/ui/src/main/java/org/apache/hop/ui/core/widget/TableView.java 
b/ui/src/main/java/org/apache/hop/ui/core/widget/TableView.java
index b101984d45..cb30d31ae3 100644
--- a/ui/src/main/java/org/apache/hop/ui/core/widget/TableView.java
+++ b/ui/src/main/java/org/apache/hop/ui/core/widget/TableView.java
@@ -117,11 +117,6 @@ public class TableView extends Composite {
       toolbar.setEnabled(enabled);
     }
 
-    // Cleanup active editors when disabling the table
-    if (!enabled) {
-      closeActiveEditors();
-    }
-
     this.table.setEnabled(enabled);
   }
 
@@ -1525,15 +1520,15 @@ public class TableView extends Composite {
     }
   }
 
-  private void safelyDisposeControl(Control combo) {
-    if (combo == null) {
+  private void safelyDisposeControl(Control control) {
+    if (control == null) {
       return;
     }
-    synchronized (combo) {
-      if (combo.isDisposed()) {
+    synchronized (control) {
+      if (control.isDisposed()) {
         return;
       }
-      combo.dispose();
+      control.dispose();
     }
   }
 
@@ -2441,11 +2436,20 @@ public class TableView extends Composite {
   }
 
   public void edit(int rowNr, int colNr) {
+    // Don't create editors if the table is disabled
+    if (!table.isEnabled() || !this.isEnabled()) {
+      return;
+    }
     setPosition(rowNr, colNr);
     edit(rowNr, colNr, true, (char) 0);
   }
 
   private void edit(int rowNr, int colNr, boolean selectText, char extra) {
+    // Don't create editors if the table is disabled
+    if (!table.isEnabled() || !this.isEnabled()) {
+      return;
+    }
+
     selectionStart = -1;
 
     TableItem row = table.getItem(rowNr);
@@ -2763,13 +2767,13 @@ public class TableView extends Composite {
 
       safelyDisposeControl(comboVar);
 
+      int comboStyle = SWT.SINGLE | SWT.LEFT;
+      if (columnInfo.isReadOnly()) {
+        comboStyle |= SWT.READ_ONLY;
+      }
       comboVar =
           new ComboVar(
-              variables,
-              table,
-              SWT.SINGLE | SWT.LEFT,
-              getCaretPositionInterface,
-              insertTextInterface);
+              variables, table, comboStyle, getCaretPositionInterface, 
insertTextInterface);
       if (lsFocusInTabItem != null) {
         comboVar.getCComboWidget().addListener(SWT.FocusIn, lsFocusInTabItem);
       } else {

Reply via email to