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

#2352 Resutls viewer horizontal scrolling with mouse wheel

上级 245b4bf2
......@@ -2518,7 +2518,7 @@
<key commandId="org.jkiss.dbeaver.core.resultset.row.previous" contextId="org.jkiss.dbeaver.ui.context.resultset" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="CTRL+ALT+ARROW_LEFT"/>
<key commandId="org.jkiss.dbeaver.core.resultset.row.next" contextId="org.jkiss.dbeaver.ui.context.resultset" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="CTRL+ALT+ARROW_RIGHT"/>
<key commandId="org.jkiss.dbeaver.core.resultset.row.last" contextId="org.jkiss.dbeaver.ui.context.resultset" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="CTRL+ALT+SHIFT+ARROW_RIGHT"/>
<key commandId="org.jkiss.dbeaver.core.resultset.fetch.page" contextId="org.jkiss.dbeaver.ui.context.resultset" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="CTRL+SHIFT+'"/>
<key commandId="org.jkiss.dbeaver.core.resultset.fetch.page" contextId="org.jkiss.dbeaver.ui.context.resultset" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="CTRL+ALT+'"/>
<key commandId="org.jkiss.dbeaver.core.resultset.fetch.all" contextId="org.jkiss.dbeaver.ui.context.resultset" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="CTRL+ALT+\"/>
<key commandId="org.jkiss.dbeaver.core.resultset.row.edit" contextId="org.jkiss.dbeaver.ui.context.resultset.focused" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="SHIFT+ENTER"/>
<key commandId="org.jkiss.dbeaver.core.resultset.row.edit.inline" contextId="org.jkiss.dbeaver.ui.context.resultset.focused" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="ENTER"/>
......
......@@ -3259,6 +3259,44 @@ public abstract class LightGrid extends Canvas {
redraw();
}
public void scrollHorizontally(int count) {
Rectangle clientArea = getClientArea();
GridColumn leftColumn = null, rightColumn = null;
for (GridColumn column : columns) {
Rectangle bounds = column.getBounds();
if (leftColumn == null) {
if (bounds.x + bounds.width > 0) {
leftColumn = column;
}
} else {
if (bounds.x + bounds.width > clientArea.width) {
rightColumn = column;
break;
}
}
}
GridColumn scrollTo = null;
if (count > 0) {
if (leftColumn != null) {
scrollTo = getPreviousVisibleColumn(leftColumn);
if (scrollTo == null) {
scrollTo = leftColumn;
}
}
} else {
if (rightColumn != null) {
scrollTo = getNextVisibleColumn(rightColumn);
if (scrollTo == null) {
scrollTo = rightColumn;
}
}
}
if (scrollTo != null) {
showColumn(scrollTo);
}
}
/**
* Key down event handler.
*
......
......@@ -22,12 +22,13 @@ import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseWheelListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.contexts.IContextActivation;
import org.eclipse.ui.contexts.IContextService;
......@@ -190,6 +191,18 @@ public abstract class AbstractPresentation implements IResultSetPresentation, IS
});
}
control.addDisposeListener(e -> UIUtils.removeFocusTracker(site, control));
// Enable horizontal scrolling
control.addMouseWheelListener(e -> {
boolean shift = ((e.stateMask & SWT.MOD2) != 0);
if (shift) {
performHorizontalScroll(e.count);
}
});
}
protected void performHorizontalScroll(int scrollCount) {
}
protected void activateTextKeyBindings(@NotNull IResultSetController controller, Control control) {
......
......@@ -31,6 +31,7 @@ import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.printing.PrintDialog;
import org.eclipse.swt.printing.Printer;
......@@ -529,6 +530,25 @@ public class PlainTextPresentation extends AbstractPresentation implements IAdap
}
}
@Override
protected void performHorizontalScroll(int scrollCount) {
ScrollBar hsb = text.getHorizontalBar();
if (hsb != null && hsb.isVisible()) {
int curPosition = text.getHorizontalPixel();
int pageIncrement = UIUtils.getFontHeight(text.getFont()) * 10;
if (scrollCount > 0) {
if (curPosition > 0) {
curPosition -= pageIncrement;
}
} else {
curPosition += pageIncrement;
}
if (curPosition < 0) curPosition = 0;
text.setHorizontalPixel(curPosition);
//text.setHorizontalIndex();
}
}
@Override
public <T> T getAdapter(Class<T> adapter) {
if (adapter == IFindReplaceTarget.class) {
......
......@@ -49,7 +49,10 @@ import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.events.*;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
......@@ -311,6 +314,12 @@ public class SpreadsheetPresentation extends AbstractPresentation implements IRe
return super.getCursorLocation();
}
@Override
protected void performHorizontalScroll(int scrollCount) {
spreadsheet.scrollHorizontally(scrollCount);
}
@Override
public Object saveState() {
return curAttribute;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册