From 6022390cb9cf67f6985898a8469604f976477c5b Mon Sep 17 00:00:00 2001 From: jurgen Date: Mon, 23 Mar 2015 20:47:58 +0000 Subject: [PATCH] PlaintText UI --- .../controls/resultset/ResultSetViewer.java | 1 - .../{spreadsheet => }/ThemeConstants.java | 4 +- .../plaintext/PlainTextPresentation.java | 40 +++++++++++++++---- 3 files changed, 34 insertions(+), 11 deletions(-) rename plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/{spreadsheet => }/ThemeConstants.java (94%) diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java index d917ee7229..58d5ae3a1e 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java @@ -92,7 +92,6 @@ import java.util.List; * ResultSetViewer * * TODO: fix presentation contributions to toolbar - * TODO: fix plaint text shortcuts. Use special focus control handler * * TODO: fix copy multiple cells - tabulation broken * TODO: links in both directions, multiple links support (context menu) diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/spreadsheet/ThemeConstants.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ThemeConstants.java similarity index 94% rename from plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/spreadsheet/ThemeConstants.java rename to plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ThemeConstants.java index 9ff3567642..a0f987eca8 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/spreadsheet/ThemeConstants.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ThemeConstants.java @@ -17,12 +17,12 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -package org.jkiss.dbeaver.ui.controls.resultset.spreadsheet; +package org.jkiss.dbeaver.ui.controls.resultset; /** * ThemeConstants */ -class ThemeConstants +public class ThemeConstants { public static final String RESULTS_PROP_PREFIX = "org.jkiss.dbeaver.sql.resultset."; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/plaintext/PlainTextPresentation.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/plaintext/PlainTextPresentation.java index 67a4610099..67c8324279 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/plaintext/PlainTextPresentation.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/plaintext/PlainTextPresentation.java @@ -29,15 +29,14 @@ import org.eclipse.jface.text.IFindReplaceTarget; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CaretEvent; import org.eclipse.swt.custom.CaretListener; +import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.FocusEvent; -import org.eclipse.swt.events.FocusListener; +import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; +import org.eclipse.ui.themes.IThemeManager; import org.jkiss.code.NotNull; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.model.data.DBDAttributeBinding; @@ -48,6 +47,7 @@ import org.jkiss.dbeaver.ui.controls.resultset.IResultSetController; import org.jkiss.dbeaver.ui.controls.resultset.IResultSetPresentation; import org.jkiss.dbeaver.ui.controls.resultset.ResultSetModel; import org.jkiss.dbeaver.ui.controls.resultset.ResultSetRow; +import org.jkiss.dbeaver.ui.controls.resultset.ThemeConstants; import java.util.List; @@ -64,6 +64,8 @@ public class PlainTextPresentation implements IResultSetPresentation, IAdaptable private DBDAttributeBinding curAttribute; private StyledTextFindReplaceTarget findReplaceTarget; public boolean activated; + private StyleRange curLineRange; + private Color curLineColor; @Override public void createPresentation(@NotNull final IResultSetController controller, @NotNull Composite parent) { @@ -84,6 +86,7 @@ public class PlainTextPresentation implements IResultSetPresentation, IAdaptable }); findReplaceTarget = new StyledTextFindReplaceTarget(text); UIUtils.enableHostEditorKeyBindingsSupport(controller.getSite(), text); + applyThemeSettings(); // Register context menu MenuManager menuMgr = new MenuManager(); @@ -103,18 +106,27 @@ public class PlainTextPresentation implements IResultSetPresentation, IAdaptable controller.getSite().registerContextMenu(menuMgr, null); } + private void applyThemeSettings() { + IThemeManager themeManager = controller.getSite().getWorkbenchWindow().getWorkbench().getThemeManager(); + curLineColor = themeManager.getCurrentTheme().getColorRegistry().get(ThemeConstants.COLOR_SQL_RESULT_CELL_ODD_BACK); + } + private void onCursorChange(int offset) { ResultSetModel model = controller.getModel(); int lineNum = text.getLineAtOffset(offset); - int lineOffset = offset - text.getOffsetAtLine(lineNum); + int lineOffset = text.getOffsetAtLine(lineNum); + int horizontalOffset = offset - lineOffset; + + int lineCount = text.getLineCount(); int rowNum = lineNum - FIRST_ROW_LINE; //First 2 lines is header int colNum = 0; - int tmpWidth = 0; + int horOffsetBegin = 0, horOffsetEnd = 0; for (int i = 0; i < colWidths.length; i++) { - tmpWidth += colWidths[i]; - if (lineOffset < tmpWidth) { + horOffsetBegin = horOffsetEnd; + horOffsetEnd += colWidths[i] + 1; + if (horizontalOffset < horOffsetEnd) { colNum = i; break; } @@ -127,6 +139,18 @@ public class PlainTextPresentation implements IResultSetPresentation, IAdaptable curAttribute = model.getVisibleAttribute(colNum); } controller.updateEditControls(); + + { + // Highlight row + if (curLineRange == null || curLineRange.start != lineOffset + horOffsetBegin) { + curLineRange = new StyleRange( + lineOffset + horOffsetBegin, + horOffsetEnd - horOffsetBegin - 1, + null, + curLineColor); + text.setStyleRanges(new StyleRange[]{curLineRange}); + } + } } @Override -- GitLab