diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/DBeaverPreferences.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/DBeaverPreferences.java index 2e426bbbfce30b77fc941fec8929ca89df32c484..1cc44a0beab9f8527ae7dcba38c6c462f59d316c 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/DBeaverPreferences.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/DBeaverPreferences.java @@ -139,5 +139,7 @@ public final class DBeaverPreferences public static final String LOGS_DEBUG_ENABLED = "logs.debug.enabled"; public static final String LOGS_DEBUG_LOCATION = "logs.debug.location"; + + public static final String HEX_DEF_WIDTH ="default.hex.width"; } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverPreferencesInitializer.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverPreferencesInitializer.java index 963b0bd1c09a7df00669dccb7c6da3365da0f8fc..72a3544d30ca70e4557f611207a8dd692908d66b 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverPreferencesInitializer.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverPreferencesInitializer.java @@ -148,6 +148,7 @@ public class DBeaverPreferencesInitializer extends AbstractPreferenceInitializer PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.HEX_FONT_NAME, HexEditControl.DEFAULT_FONT_NAME); PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.HEX_FONT_SIZE, 10); + PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.HEX_DEF_WIDTH, 8); // General UI PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.UI_AUTO_UPDATE_CHECK, true); diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/BinaryPanelEditor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/BinaryPanelEditor.java index 7c761a2aa7a0987016084f788341c4cb6e27cc03..79d01d31617d32752fc89c7b47b7d10472e4dd23 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/BinaryPanelEditor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/BinaryPanelEditor.java @@ -19,14 +19,19 @@ package org.jkiss.dbeaver.ui.data.managers.stream; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IContributionManager; import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.FontData; import org.jkiss.code.NotNull; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.Log; +import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.model.DBValueFormatting; import org.jkiss.dbeaver.model.data.DBDContent; import org.jkiss.dbeaver.model.data.DBDContentStorage; import org.jkiss.dbeaver.model.exec.DBCException; import org.jkiss.dbeaver.model.impl.BytesContentStorage; +import org.jkiss.dbeaver.model.preferences.DBPPreferenceListener; +import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore; +import org.jkiss.dbeaver.model.preferences.DBPPreferenceListener.PreferenceChangeEvent; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.ui.DBeaverIcons; import org.jkiss.dbeaver.ui.UIIcon; @@ -34,6 +39,7 @@ import org.jkiss.dbeaver.ui.data.IStreamValueEditor; import org.jkiss.dbeaver.ui.data.IValueController; import org.jkiss.dbeaver.ui.editors.binary.BinaryContent; import org.jkiss.dbeaver.ui.editors.binary.HexEditControl; +import org.jkiss.dbeaver.ui.editors.binary.pref.HexPreferencesPage; import org.jkiss.dbeaver.utils.ContentUtils; import org.jkiss.dbeaver.utils.GeneralUtils; @@ -50,9 +56,22 @@ public class BinaryPanelEditor implements IStreamValueEditor { private static final Log log = Log.getLog(BinaryPanelEditor.class); @Override - public HexEditControl createControl(IValueController valueController) - { - return new HexEditControl(valueController.getEditPlaceholder(), SWT.BORDER); + public HexEditControl createControl(IValueController valueController){ + + HexEditControl hControl = new HexEditControl(valueController.getEditPlaceholder(), SWT.BORDER); + DBPPreferenceListener preferencesChangeListener = new DBPPreferenceListener() { + @Override + public void preferenceChange(PreferenceChangeEvent event) { + + if (HexPreferencesPage.PROP_DEF_WIDTH.equals(event.getProperty())) { + String defValue = (String) event.getNewValue(); + hControl.setDefWidth(Integer.valueOf(defValue)); + } + } + }; + DBPPreferenceStore store = DBeaverCore.getGlobalPreferenceStore(); + store.addPropertyChangeListener(preferencesChangeListener); + return hControl; } @Override diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/BinaryEditor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/BinaryEditor.java index 69108b56032b0ad9c279c61409140bfe6be2296e..8c510dbaff2f5da428548cc20a6f8e8040bd9fa2 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/BinaryEditor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/BinaryEditor.java @@ -123,6 +123,7 @@ public class BinaryEditor extends EditorPart implements ISelectionProvider, IMen manager = new HexManager(); manager.setTextFont(HexPreferencesPage.getPrefFontData()); + manager.setDefWidth(HexPreferencesPage.getDefaultWidth()); manager.setMenuListener(this); int editorStyle = SWT.NONE; if (storage != null && storage.isReadOnly()) { @@ -162,13 +163,19 @@ public class BinaryEditor extends EditorPart implements ISelectionProvider, IMen @Override public void preferenceChange(PreferenceChangeEvent event) { - if (HexPreferencesPage.PROP_FONT_DATA.equals(event.getProperty())) + if (HexPreferencesPage.PROP_FONT_DATA.equals(event.getProperty())) { manager.setTextFont((FontData) event.getNewValue()); + } + if (HexPreferencesPage.PROP_DEF_WIDTH.equals(event.getProperty())) { + manager.setDefWidth((String) event.getNewValue()); + } + } + }; DBPPreferenceStore store = DBeaverCore.getGlobalPreferenceStore(); store.addPropertyChangeListener(preferencesChangeListener); - + manager.addLongSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/HexEditControl.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/HexEditControl.java index 9018475e3a904e31834f7961f2e30af9ead0bbdc..6a329ab21074eb726457fcbd1ebab62e3546f67f 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/HexEditControl.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/HexEditControl.java @@ -28,6 +28,7 @@ import org.eclipse.swt.widgets.*; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.core.DBeaverUI; import org.jkiss.dbeaver.ui.UIUtils; +import org.jkiss.dbeaver.ui.editors.binary.pref.HexPreferencesPage; import org.jkiss.dbeaver.utils.GeneralUtils; import org.jkiss.utils.CommonUtils; @@ -75,11 +76,6 @@ public class HexEditControl extends Composite { static final int SHIFT_FORWARD = 1; // frame static final int SHIFT_BACKWARD = 2; - static final int BYTE_WIDTH_16 = 16; - static final int BYTE_WIDTH_8 = 8; - static final int BYTE_WIDTH_4 = 4; - static final int BYTE_WIDTH_2 = 2; - static { // Compose header row StringBuilder rowChars = new StringBuilder(); @@ -150,6 +146,8 @@ public class HexEditControl extends Composite { private Text previewTextSeparator = null; private StyledText previewText = null; + private int defWidth = Integer.valueOf(HexPreferencesPage.getDefaultWidth()); + /** * Get long selection start and end points. Helper method for long selection listeners. * The start point is formed by event.width as the most significant int and event.x as the least @@ -307,7 +305,7 @@ public class HexEditControl extends Composite { } private class ControlPaintAdapter implements PaintListener { - boolean hexContent = false; + boolean hexContent = false; ControlPaintAdapter(boolean isHexText) { @@ -327,7 +325,7 @@ public class HexEditControl extends Composite { rightHalfWidth = (lineWidth + 1) / 2; // line spans to both sides of its position } event.gc.setLineWidth(lineWidth); - for (int block = BYTE_WIDTH_16; block <= bytesPerLine; block += BYTE_WIDTH_16) { + for (int block = defWidth; block <= bytesPerLine; block += defWidth) { int xPos = (charLen * block) * fontCharWidth - rightHalfWidth; event.gc.drawLine(xPos, event.y, xPos, event.y + event.height); } @@ -422,7 +420,7 @@ public class HexEditControl extends Composite { public HexEditControl(final Composite parent, int style) { - this(parent, style, 12, 16); + this(parent, style, 12, 16); } /** @@ -2030,29 +2028,8 @@ public class HexEditControl extends Composite { int width = getClientArea().width - linesText.computeSize(SWT.DEFAULT, SWT.DEFAULT).x; int displayedNumberWidth = fontCharWidth * 4; // hexText and previewText int commonWidth = width / displayedNumberWidth; + bytesPerLine = commonWidth; - if (commonWidth >= BYTE_WIDTH_16) { - bytesPerLine = 0; - int comPart = commonWidth / BYTE_WIDTH_16; - int remPart = commonWidth % BYTE_WIDTH_16; - if (remPart >= BYTE_WIDTH_8) { - bytesPerLine = BYTE_WIDTH_8; - remPart = remPart % BYTE_WIDTH_8; - } else if (remPart >= BYTE_WIDTH_4) { - bytesPerLine = BYTE_WIDTH_4; - remPart = remPart % BYTE_WIDTH_4; - } else if (remPart >= BYTE_WIDTH_2) { - bytesPerLine = BYTE_WIDTH_2; - } - bytesPerLine += comPart * BYTE_WIDTH_16; - } else if (commonWidth >= BYTE_WIDTH_8 && commonWidth < BYTE_WIDTH_16) { - bytesPerLine = BYTE_WIDTH_8; - } else if (commonWidth >= BYTE_WIDTH_4 && commonWidth < BYTE_WIDTH_8) { - bytesPerLine = BYTE_WIDTH_4; - } else { - bytesPerLine = BYTE_WIDTH_2; - } - textGridData.widthHint = hexText.computeTrim(0, 0, bytesPerLine * 3 * fontCharWidth, 100).width; previewGridData.widthHint = previewText.computeTrim(0, 0, bytesPerLine * fontCharWidth, 100).width; updateNumberOfLines(); @@ -2063,4 +2040,9 @@ public class HexEditControl extends Composite { redrawTextAreas(true); } + public void setDefWidth(int defValue) { + this.defWidth = defValue ; + } + + } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/HexManager.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/HexManager.java index 2fc8fe0e6ef46bf020a07d6be0cb0de06d2527ec..b0b56baf93142ed620a388b5744b26079af1e13f 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/HexManager.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/HexManager.java @@ -57,6 +57,8 @@ public class HexManager { private HexStatusLine statusLine = null; private Composite textsParent = null; private IMenuListener menuListener; + + private String defWidth; public HexEditControl getControl() { @@ -143,6 +145,9 @@ public class HexManager { fontText = new Font(Display.getCurrent(), fontData); hexEditControl.setFont(fontText); } + if (defWidth != null) { + hexEditControl.setDefWidth(Integer.valueOf(defWidth)); + } //hexEditControl.addLongSelectionListener(new ControlSelectionAdapter(ControlSelectionAdapter.UPDATE_POSITION_TEXT)); hexEditControl.addListener(SWT.Modify, new Listener() { @@ -506,4 +511,13 @@ public class HexManager { this.menuListener = menuListener; } + public void setDefWidth(String defValue) { + this.defWidth = defValue; + + } + public String getDefaultWidth() { + return defWidth; + } + + } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/pref/HexPreferencesManager.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/pref/HexPreferencesManager.java index 155f0c94e5f1b15630a3eaca392d4169f79334ac..f76a040752c69a3339df5202760820ad60d1caeb 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/pref/HexPreferencesManager.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/pref/HexPreferencesManager.java @@ -16,7 +16,16 @@ */ package org.jkiss.dbeaver.ui.editors.binary.pref; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; + import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; @@ -27,15 +36,18 @@ import org.eclipse.swt.graphics.GC; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.*; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.List; +import org.eclipse.swt.widgets.Text; import org.jkiss.dbeaver.core.CoreMessages; import org.jkiss.dbeaver.core.DBeaverUI; import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.editors.binary.HexEditControl; -import java.util.*; - /** * Manager of all preferences-editing widgets, with an optional standalone dialog. * @@ -71,7 +83,10 @@ public class HexPreferencesManager { private List list2 = null; private Font sampleFont = null; private Text sampleText = null; - + private Combo cmbByteWidth = null; + private String defWidthValue; + private static String[] arrDefValuetoIndex = new String[] { "4", "8", "16" }; + static int fontStyleToInt(String styleString) { int style = SWT.NORMAL; @@ -101,10 +116,10 @@ public class HexPreferencesManager { } - public HexPreferencesManager(FontData aFontData) - { + public HexPreferencesManager(FontData aFontData,String defWidth) { sampleFontData = aFontData; fontsSorted = new TreeMap<>(); + defWidthValue = defWidth; } @@ -212,7 +227,29 @@ public class HexPreferencesManager { } } }); + + Composite cmpByteSettings = new Composite(parent, SWT.BORDER); + cmpByteSettings.setLayout(new GridLayout(4, false)); + cmpByteSettings.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + GridData gdLabel = new GridData(SWT.FILL, SWT.FILL, false, false,1,1); + gdLabel.heightHint = 26; + gdLabel.widthHint = 120; + + CLabel lbl = new CLabel(cmpByteSettings, SWT.NONE); + lbl.setText("Default width"); + lbl.setLayoutData(gdLabel); + + cmbByteWidth = new Combo(cmpByteSettings, SWT.BORDER); + cmbByteWidth.setItems(arrDefValuetoIndex); + int index = Arrays.asList(arrDefValuetoIndex).indexOf(defWidthValue); + cmbByteWidth.select(index); + cmbByteWidth.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); } + + public String getDefWidth() { + return cmbByteWidth.getText(); + } /** @@ -406,7 +443,8 @@ public class HexPreferencesManager { sampleFontData = aFontData; refreshWidgets(); } - + + static void showSelected(List aList, String item) { diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/pref/HexPreferencesPage.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/pref/HexPreferencesPage.java index d5b56ea58bb5148f1f9d4dd359559b798226fbca..34f7f09e4cc14eda9869747ab1d14e5916b12a3e 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/pref/HexPreferencesPage.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/binary/pref/HexPreferencesPage.java @@ -38,6 +38,7 @@ import org.jkiss.utils.CommonUtils; public class HexPreferencesPage extends AbstractPrefPage implements IWorkbenchPreferencePage { public static final String PROP_FONT_DATA = "prop.hex.font.data"; + public static final String PROP_DEF_WIDTH = "default.hex.width"; private HexPreferencesManager preferences = null; @@ -59,7 +60,10 @@ public class HexPreferencesPage extends AbstractPrefPage implements IWorkbenchPr return null; } - + public static String getDefaultWidth() { + DBPPreferenceStore store = DBeaverCore.getGlobalPreferenceStore(); + return store.getString(DBeaverPreferences.HEX_DEF_WIDTH); + } /** * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) */ @@ -67,7 +71,8 @@ public class HexPreferencesPage extends AbstractPrefPage implements IWorkbenchPr protected Control createContents(Composite parent) { FontData fontData = getPrefFontData(); - preferences = new HexPreferencesManager(fontData); + String defWidth = getDefaultWidth(); + preferences = new HexPreferencesManager(fontData, defWidth); return preferences.createPreferencesPart(parent); } @@ -106,6 +111,9 @@ public class HexPreferencesPage extends AbstractPrefPage implements IWorkbenchPr store.setValue(DBeaverPreferences.HEX_FONT_SIZE, fontData.getHeight()); store.firePropertyChangeEvent(PROP_FONT_DATA, null, fontData); + store.setValue(DBeaverPreferences.HEX_DEF_WIDTH, preferences.getDefWidth()); + store.firePropertyChangeEvent(PROP_DEF_WIDTH, 0, preferences.getDefWidth()); + PrefUtils.savePreferenceStore(store); return true;