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

#2619 RSV drop-down filter UI fix


Former-commit-id: 67eb3e03
上级 a0ea0730
......@@ -280,6 +280,8 @@ command.org.jkiss.dbeaver.core.resultset.cell.save.name=Apply cell value
command.org.jkiss.dbeaver.core.resultset.cell.save.description=Apply cell value
command.org.jkiss.dbeaver.core.resultset.filterMenu.name=Filter menu
command.org.jkiss.dbeaver.core.resultset.filterMenu.description=Filter context menu
command.org.jkiss.dbeaver.core.resultset.filterMenu.distinct.name=Filter by value
command.org.jkiss.dbeaver.core.resultset.filterMenu.distinct.description=Filter by unique attribute values
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
......
......@@ -323,6 +323,7 @@
<command id="org.jkiss.dbeaver.core.resultset.grid.copyColumnNames" name="%command.org.jkiss.dbeaver.core.resultset.grid.copyColumnNames.name" description="%command.org.jkiss.dbeaver.core.resultset.grid.copyColumnNames.description" categoryId="org.jkiss.dbeaver.core.rs"/>
<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.filterMenu.distinct" name="%command.org.jkiss.dbeaver.core.resultset.filterMenu.distinct.name" description="%command.org.jkiss.dbeaver.core.resultset.filterMenu.distinct.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"/>
......@@ -1368,6 +1369,9 @@
<handler commandId="org.jkiss.dbeaver.core.resultset.filterMenu" 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.filterMenu.distinct" 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.referencesMenu" class="org.jkiss.dbeaver.ui.controls.resultset.ResultSetCommandHandler">
<activeWhen><reference definitionId="org.jkiss.dbeaver.core.ui.resultset.part"/></activeWhen>
</handler>
......@@ -2491,6 +2495,7 @@
<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.filterMenu.distinct" contextId="org.jkiss.dbeaver.ui.context.resultset" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="CTRL+F11"/>
<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"/>
......
......@@ -100,6 +100,7 @@ public class ResultSetCommandHandler extends AbstractHandler {
public static final String CMD_GENERATE_SCRIPT = "org.jkiss.dbeaver.core.resultset.generateScript";
public static final String CMD_NAVIGATE_LINK = "org.jkiss.dbeaver.core.resultset.navigateLink";
public static final String CMD_FILTER_MENU = "org.jkiss.dbeaver.core.resultset.filterMenu";
public static final String CMD_FILTER_MENU_DISTINCT = "org.jkiss.dbeaver.core.resultset.filterMenu.distinct";
public static final String CMD_REFERENCES_MENU = "org.jkiss.dbeaver.core.resultset.referencesMenu";
public static final String CMD_COPY_COLUMN_NAMES = "org.jkiss.dbeaver.core.resultset.grid.copyColumnNames";
public static final String CMD_COPY_ROW_NAMES = "org.jkiss.dbeaver.core.resultset.grid.copyRowNames";
......@@ -409,6 +410,13 @@ public class ResultSetCommandHandler extends AbstractHandler {
rsv.showFiltersMenu();
break;
}
case CMD_FILTER_MENU_DISTINCT: {
DBDAttributeBinding curAttribute = rsv.getActivePresentation().getCurrentAttribute();
if (curAttribute != null) {
rsv.showFiltersDistinctMenu(curAttribute, true);
}
break;
}
case CMD_REFERENCES_MENU: {
rsv.showReferencesMenu();
break;
......
......@@ -1590,16 +1590,25 @@ public class ResultSetViewer extends Viewer
}
@Override
public void showDistinctFilter(DBDAttributeBinding curAttribute) {
Collection<ResultSetRow> selectedRows = getSelection().getSelectedRows();
ResultSetRow[] rows = selectedRows.toArray(new ResultSetRow[selectedRows.size()]);
FilterValueEditPopup menu = new FilterValueEditPopup(getSite().getShell(), ResultSetViewer.this, curAttribute, rows);
Point location = getSite().getWorkbenchWindow().getWorkbench().getDisplay().getCursorLocation();
public void showDistinctFilter(DBDAttributeBinding curAttribute) {
showFiltersDistinctMenu(curAttribute, false);
}
void showFiltersDistinctMenu(DBDAttributeBinding curAttribute, boolean atKeyboardCursor) {
Collection<ResultSetRow> selectedRows = getSelection().getSelectedRows();
ResultSetRow[] rows = selectedRows.toArray(new ResultSetRow[selectedRows.size()]);
menu.setLocation(location);
FilterValueEditPopup menu = new FilterValueEditPopup(getSite().getShell(), ResultSetViewer.this, curAttribute, rows);
Point location;
if (atKeyboardCursor) {
location = getKeyboardCursorLocation();
} else {
location = getSite().getWorkbenchWindow().getWorkbench().getDisplay().getCursorLocation();
}
if (location != null) {
menu.setLocation(location);
}
if (menu.open() == IDialogConstants.OK_ID) {
Object value = menu.getValue();
......@@ -1626,16 +1635,22 @@ public class ResultSetViewer extends Viewer
}
private void showContextMenuAtCursor(MenuManager menuManager) {
Point location = getKeyboardCursorLocation();
if (location != null) {
final Menu contextMenu = menuManager.createContextMenu(getActivePresentation().getControl());
contextMenu.setLocation(location);
contextMenu.setVisible(true);
}
}
@Nullable
private Point getKeyboardCursorLocation() {
Control control = getActivePresentation().getControl();
Point cursorLocation = getActivePresentation().getCursorLocation();
if (cursorLocation == null) {
return;
return null;
}
Point location = control.getDisplay().map(control, null, cursorLocation);
final Menu contextMenu = menuManager.createContextMenu(control);
contextMenu.setLocation(location);
contextMenu.setVisible(true);
return control.getDisplay().map(control, null, cursorLocation);
}
@Override
......@@ -2049,6 +2064,8 @@ public class ResultSetViewer extends Viewer
private void fillFiltersMenu(@NotNull DBDAttributeBinding attribute, @NotNull IMenuManager filtersMenu)
{
if (supportsDataFilter()) {
filtersMenu.add(ActionUtils.makeCommandContribution(site, ResultSetCommandHandler.CMD_FILTER_MENU_DISTINCT));
//filtersMenu.add(new FilterByListAction(operator, type, attribute));
DBCLogicalOperator[] operators = attribute.getValueHandler().getSupportedOperators(attribute);
// Operators with multiple inputs
......
......@@ -139,13 +139,14 @@ public class FilterValueEditPopup extends Dialog {
Text filterTextbox = filter.addFilterTextbox(group);
filterTextbox.setFocus();
filterTextbox.addTraverseListener(e -> {
if (e.detail == SWT.TRAVERSE_ARROW_PREVIOUS) {
if (e.detail == SWT.TRAVERSE_ARROW_PREVIOUS || e.detail == SWT.TRAVERSE_ARROW_NEXT) {
if (table.getSelectionIndex() < 0 && table.getItemCount() > 0) {
table.setSelection(0);
}
table.setFocus();
}
});
filterTextbox.addFocusListener(focusListener);
} else {
table.setFocus();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册