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

#2044 Referencing tables menus/shortcuts.

Results sort toggle command.


Former-commit-id: 616e855e
上级 7298968d
......@@ -268,6 +268,11 @@ command.org.jkiss.dbeaver.core.resultset.cell.save.name=Save cell value
command.org.jkiss.dbeaver.core.resultset.cell.save.description=Save cell value
command.org.jkiss.dbeaver.core.resultset.filterMenu.name=Filter menu
command.org.jkiss.dbeaver.core.resultset.filterMenu.description=Filer context menu
command.org.jkiss.dbeaver.core.resultset.referencesMenu.name=Referencing tables
command.org.jkiss.dbeaver.core.resultset.referencesMenu.description=Tables referencing current table (with foreign keys)
command.org.jkiss.dbeaver.core.resultset.toggleOrder.name=Toggle results soft order
command.org.jkiss.dbeaver.core.resultset.toggleOrder.description=Toggle results soft order (ascending/descending/default)
command.org.jkiss.dbeaver.core.edit.copy.adv_info=Copy Advanced Info
command.org.jkiss.dbeaver.core.edit.copy.special.label = Advanced copy
......
......@@ -315,6 +315,7 @@
<command id="org.jkiss.dbeaver.core.resultset.grid.copyRowNames" name="%command.org.jkiss.dbeaver.core.resultset.grid.copyRowNames.name" description="%command.org.jkiss.dbeaver.core.resultset.grid.copyRowNames.description" categoryId="org.jkiss.dbeaver.core.rs"/>
<command id="org.jkiss.dbeaver.core.resultset.filterMenu" name="%command.org.jkiss.dbeaver.core.resultset.filterMenu.name" description="%command.org.jkiss.dbeaver.core.resultset.filterMenu.description" categoryId="org.jkiss.dbeaver.core.rs"/>
<command id="org.jkiss.dbeaver.core.resultset.referencesMenu" name="%command.org.jkiss.dbeaver.core.resultset.referencesMenu.name" description="%command.org.jkiss.dbeaver.core.resultset.referencesMenu.description" categoryId="org.jkiss.dbeaver.core.rs"/>
<command id="org.jkiss.dbeaver.core.resultset.toggleOrder" name="%command.org.jkiss.dbeaver.core.resultset.toggleOrder.name" description="%command.org.jkiss.dbeaver.core.resultset.toggleOrder.description" categoryId="org.jkiss.dbeaver.core.rs"/>
<command id="org.jkiss.dbeaver.core.resultset.export" name="%command.org.jkiss.dbeaver.core.resultset.export.name" description="%command.org.jkiss.dbeaver.core.resultset.export.description" categoryId="org.jkiss.dbeaver.core.rs"/>
<command id="org.jkiss.dbeaver.core.edit.copy.special" name="%command.org.jkiss.dbeaver.core.edit.copy.special.name" description="%command.org.jkiss.dbeaver.core.edit.copy.special.description" categoryId="org.jkiss.dbeaver.core.util"/>
......@@ -1343,6 +1344,9 @@
<handler commandId="org.jkiss.dbeaver.core.resultset.referencesMenu" class="org.jkiss.dbeaver.ui.controls.resultset.ResultSetCommandHandler">
<activeWhen><reference definitionId="org.jkiss.dbeaver.core.ui.resultset.part"/></activeWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.core.resultset.toggleOrder" class="org.jkiss.dbeaver.ui.controls.resultset.ResultSetCommandHandler">
<activeWhen><reference definitionId="org.jkiss.dbeaver.core.ui.resultset.part"/></activeWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.core.resultset.export" class="org.jkiss.dbeaver.ui.controls.resultset.ResultSetCommandHandler">
<activeWhen><reference definitionId="org.jkiss.dbeaver.core.ui.resultset.part"/></activeWhen>
</handler>
......@@ -2425,8 +2429,9 @@
<key commandId="org.jkiss.dbeaver.core.resultset.switchPresentation" contextId="org.jkiss.dbeaver.ui.context.resultset" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="CTRL+`"/>
<key commandId="org.jkiss.dbeaver.core.resultset.navigateLink" contextId="org.jkiss.dbeaver.ui.context.resultset" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="ALT+SPACE"/>
<key commandId="org.jkiss.dbeaver.core.resultset.filterMenu" contextId="org.jkiss.dbeaver.ui.context.resultset" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="F11"/>
<key commandId="org.jkiss.dbeaver.core.resultset.referencesMenu" contextId="org.jkiss.dbeaver.ui.context.resultset" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="CTRL+ARROW_DOWN"/>
<key commandId="org.jkiss.dbeaver.core.resultset.referencesMenu" contextId="org.jkiss.dbeaver.ui.context.resultset" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="F4"/>
<key commandId="org.jkiss.dbeaver.core.resultset.referencesMenu" contextId="org.jkiss.dbeaver.ui.context.resultset.focused" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="CTRL+ARROW_DOWN"/>
<key commandId="org.jkiss.dbeaver.core.resultset.referencesMenu" contextId="org.jkiss.dbeaver.ui.context.resultset" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="CTRL+1"/>
<key commandId="org.jkiss.dbeaver.core.resultset.toggleOrder" contextId="org.jkiss.dbeaver.ui.context.resultset" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="CTRL+2"/>
<key commandId="org.jkiss.dbeaver.core.resultset.row.first" contextId="org.jkiss.dbeaver.ui.context.resultset.focused" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="CTRL+SHIFT+ARROW_LEFT"/>
<key commandId="org.jkiss.dbeaver.core.resultset.row.previous" contextId="org.jkiss.dbeaver.ui.context.resultset.focused" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="CTRL+ARROW_LEFT"/>
<key commandId="org.jkiss.dbeaver.core.resultset.row.next" contextId="org.jkiss.dbeaver.ui.context.resultset.focused" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="CTRL+ARROW_RIGHT"/>
......
......@@ -237,7 +237,6 @@ public class CoreMessages extends NLS {
public static String controls_resultset_viewer_action_edit;
public static String controls_resultset_viewer_action_order_filter;
public static String controls_resultset_viewer_action_custom_filter;
public static String controls_resultset_viewer_action_referencing_tables;
public static String controls_resultset_viewer_action_refresh;
public static String controls_resultset_viewer_action_panels;
public static String controls_resultset_viewer_action_options;
......
......@@ -238,7 +238,6 @@ controls_resultset_filter_label_where = Where
controls_resultset_filter_title = Result Set Order/Filter Settings
controls_resultset_filter_warning_custom_order_disabled = Data filters and custom orderings are disabled for custom queries
controls_resultset_viewer_action_custom_filter = Advanced ...
controls_resultset_viewer_action_referencing_tables = Referencing tables
controls_resultset_viewer_action_edit = Edit ...
#controls_resultset_viewer_action_export = Export Resultset ...
controls_resultset_viewer_action_options = Configure
......
......@@ -85,6 +85,8 @@ public interface IResultSetController extends DBPContextProvider {
List<DBEPersistAction> generateChangesScript(@NotNull DBRProgressMonitor monitor);
void toggleSortOrder(DBDAttributeBinding columnElement, boolean forceAscending, boolean forceDescending);
boolean checkForChanges();
/**
......
......@@ -108,6 +108,8 @@ public class ResultSetCommandHandler extends AbstractHandler {
public static final String CMD_ZOOM_IN = "org.eclipse.ui.edit.text.zoomIn";
public static final String CMD_ZOOM_OUT = "org.eclipse.ui.edit.text.zoomOut";
public static final String CMD_TOGGLE_ORDER = "org.jkiss.dbeaver.core.resultset.toggleOrder";
public static IResultSetController getActiveResultSet(IWorkbenchPart activePart) {
if (activePart instanceof IResultSetContainer) {
return ((IResultSetContainer) activePart).getResultSetController();
......@@ -335,7 +337,7 @@ public class ResultSetCommandHandler extends AbstractHandler {
rsv.getAdapter(IFindReplaceTarget.class));
action.run();
break;
case CMD_NAVIGATE_LINK:
case CMD_NAVIGATE_LINK: {
final ResultSetRow row = rsv.getCurrentRow();
final DBDAttributeBinding attr = rsv.getActivePresentation().getCurrentAttribute();
if (row != null && attr != null) {
......@@ -352,6 +354,7 @@ public class ResultSetCommandHandler extends AbstractHandler {
}.schedule();
}
break;
}
case CMD_COUNT:
rsv.updateRowCount();
break;
......@@ -438,6 +441,14 @@ public class ResultSetCommandHandler extends AbstractHandler {
break;
}
case CMD_TOGGLE_ORDER: {
final DBDAttributeBinding attr = rsv.getActivePresentation().getCurrentAttribute();
if (attr != null) {
rsv.toggleSortOrder(attr, false, false);
}
break;
}
}
......
......@@ -1363,6 +1363,63 @@ public class ResultSetViewer extends Viewer
}
}
///////////////////////////////////////
// Ordering
@Override
public void toggleSortOrder(DBDAttributeBinding columnElement, boolean forceAscending, boolean forceDescending) {
DBDDataFilter dataFilter = getModel().getDataFilter();
if (forceAscending) {
dataFilter.resetOrderBy();
}
DBDAttributeBinding metaColumn = columnElement;
DBDAttributeConstraint constraint = dataFilter.getConstraint(metaColumn);
assert constraint != null;
//int newSort;
if (constraint.getOrderPosition() == 0) {
if (ResultSetUtils.isServerSideFiltering(this) && supportsDataFilter()) {
if (ConfirmationDialog.showConfirmDialogEx(
viewerPanel.getShell(),
DBeaverPreferences.CONFIRM_ORDER_RESULTSET,
ConfirmationDialog.QUESTION,
ConfirmationDialog.WARNING,
metaColumn.getName()) != IDialogConstants.YES_ID)
{
return;
}
}
constraint.setOrderPosition(dataFilter.getMaxOrderingPosition() + 1);
constraint.setOrderDescending(forceDescending);
} else if (!constraint.isOrderDescending()) {
constraint.setOrderDescending(true);
} else {
for (DBDAttributeConstraint con2 : dataFilter.getConstraints()) {
if (con2.getOrderPosition() > constraint.getOrderPosition()) {
con2.setOrderPosition(con2.getOrderPosition() - 1);
}
}
constraint.setOrderPosition(0);
constraint.setOrderDescending(false);
}
if (!ResultSetUtils.isServerSideFiltering(this) || !this.isHasMoreData()) {
if (!this.checkForChanges()) {
return;
}
reorderLocally();
} else {
this.refreshData(null);
}
}
private void reorderLocally()
{
this.rejectChanges();
this.getModel().resetOrdering();
this.getActivePresentation().refreshData(false, false, true);
}
///////////////////////////////////////
// Data & metadata
......@@ -1762,11 +1819,7 @@ public class ResultSetViewer extends Viewer
if (singleSource == null) {
return null;
}
String refsShortcut = ActionUtils.findCommandDescription(ResultSetCommandHandler.CMD_REFERENCES_MENU, getSite(), true);
String menuName = CoreMessages.controls_resultset_viewer_action_referencing_tables;
if (!CommonUtils.isEmpty(refsShortcut)) {
menuName += " (" + refsShortcut + ")";
}
String menuName = ActionUtils.findCommandDescription(ResultSetCommandHandler.CMD_REFERENCES_MENU, getSite(), false);
MenuManager refTablesMenu = new MenuManager(menuName, null, "ref-tables");
refTablesMenu.add(NOREFS_ACTION);
......@@ -2007,6 +2060,7 @@ public class ResultSetViewer extends Viewer
}
}
filtersMenu.add(new Separator());
filtersMenu.add(ActionUtils.makeCommandContribution(site, ResultSetCommandHandler.CMD_TOGGLE_ORDER));
filtersMenu.add(new ToggleServerSideOrderingAction());
filtersMenu.add(new ShowFiltersAction(true));
}
......
......@@ -298,11 +298,13 @@ public class SpreadsheetPresentation extends AbstractPresentation implements IRe
@Override
public Point getCursorLocation() {
GridPos focusPos = spreadsheet.getFocusPos();
Rectangle columnBounds = spreadsheet.getColumnBounds(focusPos.col);
if (columnBounds != null) {
columnBounds.y += spreadsheet.getHeaderHeight() +
(focusPos.row - spreadsheet.getTopIndex()) * (spreadsheet.getItemHeight() + 1) + spreadsheet.getItemHeight() / 2;
return new Point(columnBounds.x + 20, columnBounds.y);
if (focusPos.col >= 0) {
Rectangle columnBounds = spreadsheet.getColumnBounds(focusPos.col);
if (columnBounds != null) {
columnBounds.y += spreadsheet.getHeaderHeight() +
(focusPos.row - spreadsheet.getTopIndex()) * (spreadsheet.getItemHeight() + 1) + spreadsheet.getItemHeight() / 2;
return new Point(columnBounds.x + 20, columnBounds.y);
}
}
return super.getCursorLocation();
}
......@@ -659,7 +661,6 @@ public class SpreadsheetPresentation extends AbstractPresentation implements IRe
@Override
public void formatData(boolean refreshData) {
reorderLocally();
spreadsheet.refreshData(false, true);
}
......@@ -1009,13 +1010,6 @@ public class SpreadsheetPresentation extends AbstractPresentation implements IRe
(dataContainer.getSupportedFeatures() & DBSDataContainer.DATA_FILTER) == DBSDataContainer.DATA_FILTER;
}
private void reorderLocally()
{
controller.rejectChanges();
controller.getModel().resetOrdering();
refreshData(false, false, true);
}
public void changeSorting(Object columnElement, final int state)
{
if (columnElement == null) {
......@@ -1024,53 +1018,11 @@ public class SpreadsheetPresentation extends AbstractPresentation implements IRe
spreadsheet.redrawGrid();
return;
}
DBDDataFilter dataFilter = controller.getModel().getDataFilter();
boolean ctrlPressed = (state & SWT.CTRL) == SWT.CTRL;
boolean altPressed = (state & SWT.ALT) == SWT.ALT;
if (ctrlPressed) {
dataFilter.resetOrderBy();
}
DBDAttributeBinding metaColumn = (DBDAttributeBinding)columnElement;
DBDAttributeConstraint constraint = dataFilter.getConstraint(metaColumn);
assert constraint != null;
//int newSort;
if (constraint.getOrderPosition() == 0) {
if (ResultSetUtils.isServerSideFiltering(controller) && supportsDataFilter()) {
if (ConfirmationDialog.showConfirmDialogEx(
spreadsheet.getShell(),
DBeaverPreferences.CONFIRM_ORDER_RESULTSET,
ConfirmationDialog.QUESTION,
ConfirmationDialog.WARNING,
metaColumn.getName()) != IDialogConstants.YES_ID)
{
return;
}
}
constraint.setOrderPosition(dataFilter.getMaxOrderingPosition() + 1);
constraint.setOrderDescending(altPressed);
} else if (!constraint.isOrderDescending()) {
constraint.setOrderDescending(true);
} else {
for (DBDAttributeConstraint con2 : dataFilter.getConstraints()) {
if (con2.getOrderPosition() > constraint.getOrderPosition()) {
con2.setOrderPosition(con2.getOrderPosition() - 1);
}
}
constraint.setOrderPosition(0);
constraint.setOrderDescending(false);
}
if (!ResultSetUtils.isServerSideFiltering(controller) || !controller.isHasMoreData()) {
if (!controller.checkForChanges()) {
return;
}
reorderLocally();
} else {
controller.refreshData(null);
}
controller.toggleSortOrder((DBDAttributeBinding) columnElement, ctrlPressed, altPressed);
}
///////////////////////////////////////////////
// Misc
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册