From 178d3afe2b7b56305f961dc2cb6836e758be89fd Mon Sep 17 00:00:00 2001 From: serge-rider Date: Wed, 21 Aug 2019 08:43:20 +0300 Subject: [PATCH] #6569 Project explorer columns visibility fix --- .../ui/controls/ViewerColumnController.java | 44 +++++++++++++------ .../project/ProjectExplorerView.java | 30 +++++-------- 2 files changed, 41 insertions(+), 33 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/controls/ViewerColumnController.java b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/controls/ViewerColumnController.java index bdb7a53f74..50cc17ee1a 100644 --- a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/controls/ViewerColumnController.java +++ b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/controls/ViewerColumnController.java @@ -61,6 +61,7 @@ public class ViewerColumnController { private boolean clickOnHeader; private boolean isPacking, isInitializing; private DBIcon defaultIcon; + private boolean forceAutoSize; private transient Listener menuListener; @@ -110,6 +111,10 @@ public class ViewerColumnController { return clickOnHeader; } + public void setForceAutoSize(boolean forceAutoSize) { + this.forceAutoSize = forceAutoSize; + } + public void setDefaultIcon(DBIcon defaultIcon) { this.defaultIcon = defaultIcon; } @@ -212,6 +217,9 @@ public class ViewerColumnController { } } createVisibleColumns(); + if (needRefresh) { + viewer.refresh(); + } if (pack && !isAllSized()) { repackColumns(); control.addControlListener(new ControlAdapter() { @@ -223,16 +231,12 @@ public class ViewerColumnController { } } }); - } - if (needRefresh && pack) { - viewer.refresh(); - if (needRefresh || !isAllSized()) { - for (ColumnInfo columnInfo : getVisibleColumns()) { - if (columnInfo.column instanceof TreeColumn) { - ((TreeColumn) columnInfo.column).pack(); - } else { - ((TableColumn) columnInfo.column).pack(); - } + } else if (needRefresh && pack) { + for (ColumnInfo columnInfo : getVisibleColumns()) { + if (columnInfo.column instanceof TreeColumn) { + ((TreeColumn) columnInfo.column).pack(); + } else { + ((TableColumn) columnInfo.column).pack(); } } } @@ -265,10 +269,10 @@ public class ViewerColumnController { if (((TreeViewer) viewer).getTree().getColumnCount() == 2) { ratios = new float[]{0.6f, 0.4f}; } - UIUtils.packColumns(((TreeViewer) viewer).getTree(), false, ratios); + UIUtils.packColumns(((TreeViewer) viewer).getTree(), forceAutoSize, ratios); } else if (viewer instanceof TableViewer) { itemCount = ((TableViewer) viewer).getTable().getItemCount(); - UIUtils.packColumns(((TableViewer)viewer).getTable()); + UIUtils.packColumns(((TableViewer)viewer).getTable(), forceAutoSize); } if (itemCount == 0) { @@ -293,6 +297,17 @@ public class ViewerColumnController { } } + public void autoSizeColumns() { + UIUtils.asyncExec(() -> { + Control control = this.viewer.getControl(); + if (control instanceof Tree) { + UIUtils.packColumns((Tree) control, true, null); + } else if (control instanceof Table) { + UIUtils.packColumns((Table) control, true); + } + }); + } + public void sortByColumn(int index, int direction) { final ColumnInfo columnInfo = columns.get(index); columnInfo.sortListener.sortViewer(columnInfo.column, direction); @@ -462,13 +477,14 @@ public class ViewerColumnController { return newArray; } - public void configureColumns() + public boolean configureColumns() { ConfigDialog configDialog = new ConfigDialog(); if (configDialog.open() != IDialogConstants.OK_ID) { - return; + return false; } saveColumnConfig(); + return true; } private void updateColumnOrder(Item column, int[] order) { diff --git a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/navigator/project/ProjectExplorerView.java b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/navigator/project/ProjectExplorerView.java index 6b844ad24d..ecf9c21e40 100644 --- a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/navigator/project/ProjectExplorerView.java +++ b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/navigator/project/ProjectExplorerView.java @@ -45,8 +45,7 @@ import java.util.Date; /** * ProjectExplorerView */ -public class ProjectExplorerView extends NavigatorViewBase implements DBPProjectListener -{ +public class ProjectExplorerView extends NavigatorViewBase implements DBPProjectListener { //static final Log log = Log.getLog(ProjectExplorerView.class); @@ -58,18 +57,15 @@ public class ProjectExplorerView extends NavigatorViewBase implements DBPProject } @Override - public DBNNode getRootNode() - { + public DBNNode getRootNode() { DBNProject projectNode = getModel().getRoot().getProjectNode(DBWorkbench.getPlatform().getWorkspace().getActiveProject()); return projectNode != null ? projectNode : getModel().getRoot(); } @Override - public void createPartControl(Composite parent) - { + public void createPartControl(Composite parent) { super.createPartControl(parent); final TreeViewer viewer = getNavigatorViewer(); - assert viewer != null; viewer.getTree().setHeaderVisible(true); createColumns(viewer); UIUtils.setHelp(parent, IHelpContextIds.CTX_PROJECT_EXPLORER); @@ -83,12 +79,12 @@ public class ProjectExplorerView extends NavigatorViewBase implements DBPProject updateTitle(); } - private void createColumns(final TreeViewer viewer) - { + private void createColumns(final TreeViewer viewer) { final Color shadowColor = viewer.getControl().getDisplay().getSystemColor(SWT.COLOR_WIDGET_DARK_SHADOW); final ILabelProvider mainLabelProvider = (ILabelProvider) viewer.getLabelProvider(); columnController = new ViewerColumnController("projectExplorer", viewer); + columnController.setForceAutoSize(true); columnController.addColumn("Name", "Resource name", SWT.LEFT, true, true, new TreeColumnViewerLabelProvider(new LabelProvider() { @Override public String getText(Object element) { @@ -192,18 +188,16 @@ public class ProjectExplorerView extends NavigatorViewBase implements DBPProject return ""; } })); - columnController.createColumns(false); + UIUtils.asyncExec(() -> columnController.createColumns(true)); } @Override - protected int getTreeStyle() - { + protected int getTreeStyle() { return super.getTreeStyle() | SWT.FULL_SELECTION; } @Override - public void dispose() - { + public void dispose() { DBWorkbench.getPlatform().getWorkspace().removeProjectListener(this); super.dispose(); } @@ -219,17 +213,15 @@ public class ProjectExplorerView extends NavigatorViewBase implements DBPProject } @Override - public void handleActiveProjectChange(DBPProject oldValue, DBPProject newValue) - { + public void handleActiveProjectChange(DBPProject oldValue, DBPProject newValue) { UIUtils.asyncExec(() -> { getNavigatorTree().reloadTree(getRootNode()); updateTitle(); - UIUtils.packColumns(getNavigatorTree().getViewer().getTree(), true, null); }); + //columnController.autoSizeColumns(); } - private void updateTitle() - { + private void updateTitle() { setPartName("Project - " + getRootNode().getNodeName()); } -- GitLab