提交 d9860948 编写于 作者: S serge-rider

Columns controller refactoring


Former-commit-id: cf84cf94
上级 ac368ff6
......@@ -17,6 +17,7 @@
package org.jkiss.dbeaver.ui.controls;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IContributionManager;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.*;
......@@ -29,10 +30,7 @@ import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.*;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.ui.ILabelProviderEx;
import org.jkiss.dbeaver.ui.ILazyLabelProvider;
import org.jkiss.dbeaver.ui.UIIcon;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.*;
import org.jkiss.dbeaver.ui.dialogs.BaseDialog;
import org.jkiss.dbeaver.utils.RuntimeUtils;
import org.jkiss.utils.CommonUtils;
......@@ -106,9 +104,12 @@ public class ViewerColumnController<COLUMN, ELEMENT> {
return clickOnHeader;
}
public void fillConfigMenu(IMenuManager menuManager)
public void fillConfigMenu(IContributionManager menuManager)
{
menuManager.add(new Action("Configure columns ...") {
menuManager.add(new Action(CoreMessages.obj_editor_properties_control_action_configure_columns, DBeaverIcons.getImageDescriptor(UIIcon.CONFIGURATION)) {
{
setDescription(CoreMessages.obj_editor_properties_control_action_configure_columns_description);
}
@Override
public void run()
{
......@@ -119,7 +120,7 @@ public class ViewerColumnController<COLUMN, ELEMENT> {
public void addColumn(String name, String description, int style, boolean defaultVisible, boolean required, IColumnTextProvider<ELEMENT> labelProvider)
{
addColumn(name, description, style, defaultVisible, required, false, null, new CellLabelProvider() {
addColumn(name, description, style, defaultVisible, required, false, null, new ColumnLabelProvider() {
@Override
public void update(ViewerCell cell) {
cell.setText(labelProvider.getText((ELEMENT) cell.getElement()));
......
......@@ -710,7 +710,7 @@ public abstract class ObjectListControl<OBJECT_TYPE> extends ProgressPageControl
protected void createColumn(ObjectPropertyDescriptor prop) {
ObjectColumn objectColumn = null;
for (ObjectColumn col : columnController.<ObjectColumn>getColumnsData(ObjectColumn.class)) {
for (ObjectColumn col : columnController.getColumnsData(ObjectColumn.class)) {
if (CommonUtils.equalObjects(col.id, prop.getId()) || CommonUtils.equalObjects(col.displayName, prop.getDisplayName())) {
objectColumn = col;
break;
......@@ -1174,6 +1174,7 @@ public abstract class ObjectListControl<OBJECT_TYPE> extends ProgressPageControl
}
protected void addColumnConfigAction(IContributionManager contributionManager) {
// Create lazy action here because columnController might be not instantiated yet
Action configColumnsAction = new Action(
CoreMessages.obj_editor_properties_control_action_configure_columns,
DBeaverIcons.getImageDescriptor(UIIcon.CONFIGURATION)) {
......
......@@ -21,8 +21,6 @@ import org.eclipse.core.resources.IResource;
import org.eclipse.jface.action.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.dnd.*;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.MenuEvent;
import org.eclipse.swt.events.MenuListener;
import org.eclipse.swt.widgets.Control;
......@@ -182,71 +180,62 @@ public class NavigatorUtils {
}
}
});
menuMgr.addMenuListener(new IMenuListener() {
@Override
public void menuAboutToShow(final IMenuManager manager)
{
ViewerColumnController columnController = ViewerColumnController.getFromControl(control);
if (columnController != null && columnController.isClickOnHeader()) {
columnController.fillConfigMenu(manager);
manager.add(new Separator());
return;
}
menuMgr.addMenuListener(manager -> {
ViewerColumnController columnController = ViewerColumnController.getFromControl(control);
if (columnController != null && columnController.isClickOnHeader()) {
columnController.fillConfigMenu(manager);
manager.add(new Separator());
return;
}
manager.add(new GroupMarker(CoreCommands.GROUP_NAVIGATOR_ADDITIONS));
final IStructuredSelection selection = (IStructuredSelection)viewer.getSelection();
final DBNNode selectedNode = getSelectedNode(viewer);
if (selectedNode != null && !selectedNode.isLocked() && workbenchSite != null) {
// Add "Set active object" menu
if (selectedNode.isPersisted() && selectedNode instanceof DBNDatabaseNode && !(selectedNode instanceof DBNDatabaseFolder) && ((DBNDatabaseNode)selectedNode).getObject() != null) {
final DBSObjectSelector activeContainer = DBUtils.getParentAdapter(
DBSObjectSelector.class, ((DBNDatabaseNode) selectedNode).getObject());
if (activeContainer != null && activeContainer.supportsDefaultChange()) {
DBSObject activeChild;
activeChild = activeContainer.getDefaultObject();
if (activeChild != ((DBNDatabaseNode)selectedNode).getObject()) {
DBNDatabaseNode databaseNode = (DBNDatabaseNode)selectedNode;
if (databaseNode.getObject() != null && (activeChild == null || activeChild.getClass() == databaseNode.getObject().getClass())) {
manager.add(ActionUtils.makeCommandContribution(workbenchSite, CoreCommands.CMD_OBJECT_SET_ACTIVE));
}
manager.add(new GroupMarker(CoreCommands.GROUP_NAVIGATOR_ADDITIONS));
final IStructuredSelection selection = (IStructuredSelection)viewer.getSelection();
final DBNNode selectedNode = getSelectedNode(viewer);
if (selectedNode != null && !selectedNode.isLocked() && workbenchSite != null) {
// Add "Set active object" menu
if (selectedNode.isPersisted() && selectedNode instanceof DBNDatabaseNode && !(selectedNode instanceof DBNDatabaseFolder) && ((DBNDatabaseNode)selectedNode).getObject() != null) {
final DBSObjectSelector activeContainer = DBUtils.getParentAdapter(
DBSObjectSelector.class, ((DBNDatabaseNode) selectedNode).getObject());
if (activeContainer != null && activeContainer.supportsDefaultChange()) {
DBSObject activeChild;
activeChild = activeContainer.getDefaultObject();
if (activeChild != ((DBNDatabaseNode)selectedNode).getObject()) {
DBNDatabaseNode databaseNode = (DBNDatabaseNode)selectedNode;
if (databaseNode.getObject() != null && (activeChild == null || activeChild.getClass() == databaseNode.getObject().getClass())) {
manager.add(ActionUtils.makeCommandContribution(workbenchSite, CoreCommands.CMD_OBJECT_SET_ACTIVE));
}
}
}
}
manager.add(new Separator());
manager.add(new Separator());
manager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
manager.add(new GroupMarker(IActionConstants.MB_ADDITIONS_END));
manager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
manager.add(new GroupMarker(IActionConstants.MB_ADDITIONS_END));
// Add properties button
if (PreferencesUtil.hasPropertiesContributors(selection.getFirstElement())) {
manager.add(ActionUtils.makeCommandContribution(workbenchSite, IWorkbenchCommandConstants.FILE_PROPERTIES));
}
// Add properties button
if (PreferencesUtil.hasPropertiesContributors(selection.getFirstElement())) {
manager.add(ActionUtils.makeCommandContribution(workbenchSite, IWorkbenchCommandConstants.FILE_PROPERTIES));
}
if (selectedNode.isPersisted()) {
// Add refresh button
manager.add(ActionUtils.makeCommandContribution(workbenchSite, IWorkbenchCommandConstants.FILE_REFRESH));
}
if (selectedNode.isPersisted()) {
// Add refresh button
manager.add(ActionUtils.makeCommandContribution(workbenchSite, IWorkbenchCommandConstants.FILE_REFRESH));
}
}
manager.add(new GroupMarker(CoreCommands.GROUP_TOOLS));
manager.add(new GroupMarker(CoreCommands.GROUP_TOOLS_END));
manager.add(new GroupMarker(CoreCommands.GROUP_TOOLS));
manager.add(new GroupMarker(CoreCommands.GROUP_TOOLS_END));
if (menuListener != null) {
menuListener.menuAboutToShow(manager);
}
if (menuListener != null) {
menuListener.menuAboutToShow(manager);
}
});
menuMgr.setRemoveAllWhenShown(true);
control.setMenu(menu);
control.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
menuMgr.dispose();
}
});
control.addDisposeListener(e -> menuMgr.dispose());
return menuMgr;
}
......@@ -343,7 +332,7 @@ public class NavigatorUtils {
});
DropTarget dropTarget = new DropTarget(viewer.getControl(), DND.DROP_MOVE);
dropTarget.setTransfer(new Transfer[] {TreeNodeTransfer.getInstance()});
dropTarget.setTransfer(TreeNodeTransfer.getInstance());
dropTarget.addDropListener(new DropTargetListener() {
@Override
public void dragEnter(DropTargetEvent event)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册