From 89a2634bc5eacc6be22448763d3d29f224e6a57a Mon Sep 17 00:00:00 2001 From: Serge Rider Date: Sat, 24 Dec 2016 17:04:19 +0300 Subject: [PATCH] OLC refactoring Former-commit-id: 51cce0fbb825e9d439eb24abc36c22178aff49b0 --- .../dbeaver/ui/ViewerColumnController.java | 35 ++++++++++++++++--- .../controls/itemlist/ObjectListControl.java | 31 ++++++++++++---- 2 files changed, 56 insertions(+), 10 deletions(-) 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 6f20ac9910..751ae50402 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 @@ -104,12 +104,32 @@ public class ViewerColumnController { } public void addColumn(String name, String description, int style, boolean defaultVisible, boolean required, CellLabelProvider labelProvider) + { + addColumn(name, description, style, defaultVisible, required, null, labelProvider, null); + } + + public void addColumn(String name, String description, int style, boolean defaultVisible, boolean required, Object userData, CellLabelProvider labelProvider, EditingSupport editingSupport) { columns.add( - new ColumnInfo(name, description, style, defaultVisible, required, labelProvider, columns.size())); + new ColumnInfo( + name, + description, + style, + defaultVisible, + required, + userData, + labelProvider, + editingSupport, + columns.size())); } public void clearColumns() { + for (ColumnInfo columnInfo : columns) { + if (columnInfo.column != null) { + columnInfo.column.dispose(); + columnInfo.column = null; + } + } columns.clear(); } @@ -188,8 +208,10 @@ public class ViewerColumnController { boolean hasLazyColumns = false; for (final ColumnInfo columnInfo : getVisibleColumns()) { final Item colItem; + ViewerColumn viewerColumn; if (viewer instanceof TreeViewer) { final TreeViewerColumn item = new TreeViewerColumn((TreeViewer) viewer, columnInfo.style); + viewerColumn = item; final TreeColumn column = item.getColumn(); colItem = column; column.setText(columnInfo.name); @@ -198,7 +220,6 @@ public class ViewerColumnController { if (!CommonUtils.isEmpty(columnInfo.description)) { column.setToolTipText(columnInfo.description); } - item.setLabelProvider(columnInfo.labelProvider); column.addControlListener(new ControlAdapter() { @Override public void controlResized(ControlEvent e) @@ -210,6 +231,7 @@ public class ViewerColumnController { columnInfo.column = column; } else if (viewer instanceof TableViewer) { final TableViewerColumn item = new TableViewerColumn((TableViewer) viewer, columnInfo.style); + viewerColumn = item; final TableColumn column = item.getColumn(); colItem = column; column.setText(columnInfo.name); @@ -218,7 +240,6 @@ public class ViewerColumnController { if (!CommonUtils.isEmpty(columnInfo.description)) { column.setToolTipText(columnInfo.description); } - item.setLabelProvider(columnInfo.labelProvider); column.addControlListener(new ControlAdapter() { @Override public void controlResized(ControlEvent e) @@ -231,6 +252,8 @@ public class ViewerColumnController { } else { continue; } + viewerColumn.setLabelProvider(columnInfo.labelProvider); + viewerColumn.setEditingSupport(columnInfo.editingSupport); colItem.setData(columnInfo); if (columnInfo.labelProvider instanceof ILazyLabelProvider) { hasLazyColumns = true; @@ -329,7 +352,9 @@ public class ViewerColumnController { final int style; final boolean defaultVisible; final boolean required; + final Object userData; final CellLabelProvider labelProvider; + final EditingSupport editingSupport; boolean visible; int order; @@ -337,15 +362,17 @@ public class ViewerColumnController { Item column; SortListener sortListener; - private ColumnInfo(String name, String description, int style, boolean defaultVisible, boolean required, CellLabelProvider labelProvider, int order) + private ColumnInfo(String name, String description, int style, boolean defaultVisible, boolean required, Object userData, CellLabelProvider labelProvider, EditingSupport editingSupport, int order) { this.name = name; this.description = description; this.style = style; this.defaultVisible = defaultVisible; this.required = required; + this.userData = userData; this.visible = defaultVisible; this.labelProvider = labelProvider; + this.editingSupport = editingSupport; this.order = order; } 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 6775aa775e..de64392f65 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 @@ -36,6 +36,7 @@ import org.jkiss.code.Nullable; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.core.CoreMessages; import org.jkiss.dbeaver.core.DBeaverUI; +import org.jkiss.dbeaver.model.DBConstants; import org.jkiss.dbeaver.model.DBPImage; import org.jkiss.dbeaver.model.preferences.DBPPropertyDescriptor; import org.jkiss.dbeaver.model.IDataSourceContainerProvider; @@ -63,7 +64,6 @@ public abstract class ObjectListControl extends ProgressPageControl private static final Log log = Log.getLog(ObjectListControl.class); private final static LazyValue DEF_LAZY_VALUE = new LazyValue("..."); //$NON-NLS-1$ - private final static String DATA_OBJECT_COLUMN = "objectColumn"; //$NON-NLS-1$ private final static int LAZY_LOAD_DELAY = 100; private final static Object NULL_VALUE = new Object(); @@ -189,9 +189,15 @@ public abstract class ObjectListControl extends ProgressPageControl setInfo(status); } }); + } - // Columns controller - columnController = new ViewerColumnController("NodeList", getItemsViewer()); + /** + * Usd to save/load columns configuration. + * Must depend on object types + */ + @NotNull + protected String getListTypeId() { + return getClass().getSimpleName(); } protected int getDefaultListStyle() { @@ -354,13 +360,14 @@ public abstract class ObjectListControl extends ProgressPageControl if (itemsControl.isDisposed()) { return; } - columnController.clearColumns(); + itemsControl.setRedraw(false); try { final boolean reload = !append && (objectList == null) || (columns.isEmpty()); if (reload) { clearListData(); + columnController = new ViewerColumnController(getListTypeId(), getItemsViewer()); } { @@ -482,6 +489,11 @@ public abstract class ObjectListControl extends ProgressPageControl public void clearListData() { + if (columnController != null) { + columnController.clearColumns(); + columnController = null; + } + for (ObjectColumn column : columns) { column.item.dispose(); } @@ -753,10 +765,17 @@ public abstract class ObjectListControl extends ProgressPageControl objectColumn = new ObjectColumn(newColumn, columnItem, prop.getId(), prop.getDisplayName()); objectColumn.addProperty(propClass, prop); this.columns.add(objectColumn); - columnItem.setData(DATA_OBJECT_COLUMN, objectColumn); // Add column in controller - columnController.addColumn(prop.getDisplayName(), prop.getDescription(), numeric ? SWT.RIGHT : SWT.NONE, true, false, labelProvider); + columnController.addColumn( + prop.getDisplayName(), + prop.getDescription(), + numeric ? SWT.RIGHT : SWT.NONE, + prop.isViewable(), + prop.getId().equals(DBConstants.PROP_ID_NAME), + objectColumn, + labelProvider, + editingSupport); } else { objectColumn.addProperty(propClass, prop); String oldTitle = objectColumn.item.getText(); -- GitLab