diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/ViewerColumnController.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/ViewerColumnController.java index 0f29877c056247c9a52399839a1664d3a9c5f4c5..c06300b77bbdc90268a9c235c97a6f1a22b0d2d3 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/ViewerColumnController.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/ViewerColumnController.java @@ -109,6 +109,35 @@ public class ViewerColumnController { new ColumnInfo(name, description, style, defaultVisible, required, labelProvider, columns.size())); } + public void addColumn(Item columnItem, CellLabelProvider labelProvider) { + final ColumnInfo columnInfo; + if (columnItem instanceof TableColumn) { + columnInfo = new ColumnInfo( + columnItem.getText(), + ((TableColumn) columnItem).getToolTipText(), + columnItem.getStyle(), + true, + false, + labelProvider, + columns.size()); + } else { + columnInfo = new ColumnInfo( + columnItem.getText(), + ((TreeColumn) columnItem).getToolTipText(), + columnItem.getStyle(), + true, + false, + labelProvider, + columns.size()); + } + columnInfo.column = columnItem; + columns.add(columnInfo); + } + + public void clearColumns() { + columns.clear(); + } + public void createColumns() { try { diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/itemlist/ObjectListControl.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/itemlist/ObjectListControl.java index faedff3be2a612c5a509f01b3969a0f254d97828..7eb54ff7b40e1671534454e5d8623635340dc31f 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/itemlist/ObjectListControl.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/itemlist/ObjectListControl.java @@ -45,6 +45,7 @@ import org.jkiss.dbeaver.runtime.properties.*; import org.jkiss.dbeaver.ui.DBeaverIcons; import org.jkiss.dbeaver.ui.LoadingJob; import org.jkiss.dbeaver.ui.UIUtils; +import org.jkiss.dbeaver.ui.ViewerColumnController; import org.jkiss.dbeaver.ui.controls.ObjectViewerRenderer; import org.jkiss.dbeaver.ui.controls.ProgressPageControl; import org.jkiss.dbeaver.utils.GeneralUtils; @@ -76,6 +77,7 @@ public abstract class ObjectListControl extends ProgressPageControl private PropertySourceAbstract listPropertySource; private ObjectViewerRenderer renderer; + private ViewerColumnController columnController; // Sample flag. True only when initial content is packed. Used to provide actual cell data to Tree/Table pack() methods // After content is loaded is always false (and all hyperlink cells have empty text) @@ -187,6 +189,9 @@ public abstract class ObjectListControl extends ProgressPageControl setInfo(status); } }); + + // Columns controller + columnController = new ViewerColumnController("NodeList", getItemsViewer()); } protected int getDefaultListStyle() { @@ -349,6 +354,7 @@ public abstract class ObjectListControl extends ProgressPageControl if (itemsControl.isDisposed()) { return; } + columnController.clearColumns(); itemsControl.setRedraw(false); try { final boolean reload = !append && (objectList == null) || (columns.isEmpty()); @@ -738,7 +744,8 @@ public abstract class ObjectListControl extends ProgressPageControl newColumn = viewerColumn; columnItem = viewerColumn.getColumn(); } - newColumn.setLabelProvider(getColumnLabelProvider(columns.size())); + final CellLabelProvider labelProvider = getColumnLabelProvider(columns.size()); + newColumn.setLabelProvider(labelProvider); final EditingSupport editingSupport = makeEditingSupport(newColumn, columns.size()); if (editingSupport != null) { newColumn.setEditingSupport(editingSupport); @@ -747,6 +754,9 @@ public abstract class ObjectListControl extends ProgressPageControl objectColumn.addProperty(propClass, prop); this.columns.add(objectColumn); columnItem.setData(DATA_OBJECT_COLUMN, objectColumn); + + // Add column in controller + columnController.addColumn(columnItem, labelProvider); } else { objectColumn.addProperty(propClass, prop); String oldTitle = objectColumn.item.getText();