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

#4618 Data editor: panels toggle command shortcuts support

上级 e69d46b0
......@@ -1355,6 +1355,7 @@
<!--<activeWhen><reference definitionId="org.jkiss.dbeaver.core.ui.resultset.part"/></activeWhen>-->
</handler>
<handler commandId="org.jkiss.dbeaver.core.resultset.grid.togglePanel" class="org.jkiss.dbeaver.ui.controls.resultset.ResultSetHandlerTogglePanel">
<activeWhen><reference definitionId="org.jkiss.dbeaver.core.ui.resultset.part"/></activeWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.core.resultset.grid.toggleLayout" class="org.jkiss.dbeaver.ui.controls.resultset.ResultSetHandlerMain">
<!--<activeWhen><reference definitionId="org.jkiss.dbeaver.core.ui.resultset.part"/></activeWhen>-->
......
......@@ -19,7 +19,7 @@ package org.jkiss.dbeaver.ui.controls.resultset;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.commands.IElementUpdater;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.menus.UIElement;
......@@ -33,7 +33,7 @@ import java.util.Map;
public class ResultSetHandlerTogglePanel extends AbstractHandler implements IElementUpdater {
public static final String CMD_TOGGLE_PANEL = "org.jkiss.dbeaver.core.resultset.grid.togglePanel";
private static final String PARAM_PANEL_ID = "panelId";
public static final String PARAM_PANEL_ID = "panelId";
@Override
public Object execute(ExecutionEvent event) throws ExecutionException
......@@ -42,23 +42,23 @@ public class ResultSetHandlerTogglePanel extends AbstractHandler implements IEle
if (resultSet == null) {
return null;
}
String panelId = event.getParameter(PARAM_PANEL_ID);
if (panelId == null) {
return null;
}
switch (event.getCommand().getId()) {
case CMD_TOGGLE_PANEL:
toggleResultsPanel(resultSet, HandlerUtil.getActiveShell(event), event.getParameter(PARAM_PANEL_ID));
toggleResultsPanel(resultSet, panelId);
break;
}
return null;
}
private static void toggleResultsPanel(IResultSetController resultSet, Shell shell, String panelId) {
boolean isVisible = false;
IResultSetPanel visiblePanel = resultSet.getVisiblePanel();
if (visiblePanel != null) {
String activePanelId = ((ResultSetViewer) resultSet).getActivePanelId();
isVisible = CommonUtils.equalObjects(activePanelId, panelId);
}
private static void toggleResultsPanel(IResultSetController resultSet, String panelId) {
boolean isVisible = ((ResultSetViewer)resultSet).isPanelVisible(panelId);
if (isVisible) {
((ResultSetViewer)resultSet).closeActivePanel();
((ResultSetViewer)resultSet).closePanel(panelId);
} else {
resultSet.activatePanel(panelId, true, true);
}
......@@ -67,5 +67,22 @@ public class ResultSetHandlerTogglePanel extends AbstractHandler implements IEle
@Override
public void updateElement(UIElement element, Map parameters) {
// Put panel name in command label
String panelId = (String) parameters.get(PARAM_PANEL_ID);
if (panelId != null) {
ResultSetPanelDescriptor panel = ResultSetPresentationRegistry.getInstance().getPanel(panelId);
if (panel != null) {
element.setText(panel.getLabel());
if (!CommonUtils.isEmpty(panel.getDescription())) {
element.setTooltip(panel.getDescription());
}
}
IWorkbenchPart workbenchPart = element.getServiceLocator().getService(IWorkbenchPart.class);
if (workbenchPart != null) {
IResultSetController resultSet = ResultSetHandlerMain.getActiveResultSet(workbenchPart);
if (resultSet != null) {
element.setChecked(((ResultSetViewer)resultSet).isPanelVisible(panelId));
}
}
}
}
}
......@@ -109,6 +109,15 @@ public class ResultSetPresentationRegistry {
return panels;
}
public ResultSetPanelDescriptor getPanel(String panelId) {
for (ResultSetPanelDescriptor panel : panels) {
if (panel.getId().equals(panelId)) {
return panel;
}
}
return null;
}
public List<ResultSetPanelDescriptor> getSupportedPanels(DBPDataSource dataSource, String presentationId, IResultSetPresentation.PresentationType presentationType) {
List<ResultSetPanelDescriptor> result = new ArrayList<>();
for (ResultSetPanelDescriptor panel : panels) {
......
......@@ -969,6 +969,18 @@ public class ResultSetViewer extends Viewer
}
}
boolean isPanelVisible(String panelId) {
return getPanelTab(panelId) != null;
}
void closePanel(String panelId) {
CTabItem panelTab = getPanelTab(panelId);
if (panelTab != null) {
panelTab.dispose();
removePanel(panelId);
}
}
void toggleVerticalLayout() {
PresentationSettings settings = getPresentationSettings();
settings.verticalLayout = !settings.verticalLayout;
......@@ -980,7 +992,16 @@ public class ResultSetViewer extends Viewer
List<IContributionItem> items = new ArrayList<>();
for (final ResultSetPanelDescriptor panel : availablePanels) {
items.add(new ActionContributionItem(new PanelToggleAction(panel)));
CommandContributionItemParameter params = new CommandContributionItemParameter(
site,
panel.getId(),
ResultSetHandlerTogglePanel.CMD_TOGGLE_PANEL,
CommandContributionItem.STYLE_CHECK
);
Map<String, String> parameters = new HashMap<>();
parameters.put(ResultSetHandlerTogglePanel.PARAM_PANEL_ID, panel.getId());
params.parameters = parameters;
items.add(new CommandContributionItem(params));
}
items.add(new Separator());
items.add(ActionUtils.makeCommandContribution(site, ResultSetHandlerMain.CMD_TOGGLE_LAYOUT));
......@@ -3996,86 +4017,4 @@ public class ResultSetViewer extends Viewer
boolean verticalLayout;
}
private class PanelToggleAction extends Action {
private final ResultSetPanelDescriptor panel;
public PanelToggleAction(ResultSetPanelDescriptor panel) {
super(panel.getLabel(), Action.AS_CHECK_BOX);
this.panel = panel;
setToolTipText(panel.getDescription());
// Icons turns menu into mess - checkboxes are much better
//setImageDescriptor(DBeaverIcons.getImageDescriptor(panel.getIcon()));
}
@Override
public boolean isChecked() {
return activePanels.containsKey(panel.getId());
}
@Override
public void run() {
if (isPanelsVisible() && isChecked()) {
CTabItem panelTab = getPanelTab(panel.getId());
if (panelTab != null) {
panelTab.dispose();
removePanel(panel.getId());
}
} else {
activatePanel(panel.getId(), true, true);
}
}
}
private class ToolbarToggleAction extends Action {
private final String toolbarId;
public ToolbarToggleAction(String toolbarId, String toolbarLabel) {
super(toolbarLabel, Action.AS_CHECK_BOX);
this.toolbarId = toolbarId;
//setToolTipText(panel.getDescription());
}
@Override
public boolean isChecked() {
return activePanels.containsKey(toolbarId);
}
@Override
public void run() {
/*
if (isPanelsVisible() && isChecked()) {
CTabItem panelTab = getPanelTab(panel.getId());
if (panelTab != null) {
panelTab.dispose();
removePanel(panel.getId());
}
} else {
activatePanel(panel.getId(), true, true);
}
*/
}
}
/*
public static void openNewDataEditor(DBNDatabaseNode targetNode, DBDDataFilter newFilter) {
IEditorPart entityEditor = NavigatorHandlerObjectOpen.openEntityEditor(
targetNode,
DatabaseDataEditor.class.getName(),
Collections.<String, Object>singletonMap(DatabaseDataEditor.ATTR_DATA_FILTER, newFilter),
DBeaverUI.getActiveWorkbenchWindow()
);
if (entityEditor instanceof MultiPageEditorPart) {
Object selectedPage = ((MultiPageEditorPart) entityEditor).getSelectedPage();
if (selectedPage instanceof IResultSetContainer) {
ResultSetViewer rsv = (ResultSetViewer) ((IResultSetContainer) selectedPage).getResultSetController();
if (rsv != null && !rsv.isRefreshInProgress() && !newFilter.equals(rsv.getModel().getDataFilter())) {
// Set filter directly
rsv.refreshWithFilter(newFilter);
}
}
}
}
*/
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册