未验证 提交 4c7c1aed 编写于 作者: S Serge Rider 提交者: GitHub

Merge pull request #2476 from serjiokov/hex_view_resize

Bug  2138
...@@ -139,5 +139,7 @@ public final class DBeaverPreferences ...@@ -139,5 +139,7 @@ public final class DBeaverPreferences
public static final String LOGS_DEBUG_ENABLED = "logs.debug.enabled"; public static final String LOGS_DEBUG_ENABLED = "logs.debug.enabled";
public static final String LOGS_DEBUG_LOCATION = "logs.debug.location"; public static final String LOGS_DEBUG_LOCATION = "logs.debug.location";
public static final String HEX_DEF_WIDTH ="default.hex.width";
} }
...@@ -148,6 +148,7 @@ public class DBeaverPreferencesInitializer extends AbstractPreferenceInitializer ...@@ -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_NAME, HexEditControl.DEFAULT_FONT_NAME);
PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.HEX_FONT_SIZE, 10); PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.HEX_FONT_SIZE, 10);
PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.HEX_DEF_WIDTH, 8);
// General UI // General UI
PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.UI_AUTO_UPDATE_CHECK, true); PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.UI_AUTO_UPDATE_CHECK, true);
......
...@@ -19,14 +19,19 @@ package org.jkiss.dbeaver.ui.data.managers.stream; ...@@ -19,14 +19,19 @@ package org.jkiss.dbeaver.ui.data.managers.stream;
import org.eclipse.jface.action.Action; import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IContributionManager; import org.eclipse.jface.action.IContributionManager;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.FontData;
import org.jkiss.code.NotNull; import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.model.DBValueFormatting; import org.jkiss.dbeaver.model.DBValueFormatting;
import org.jkiss.dbeaver.model.data.DBDContent; import org.jkiss.dbeaver.model.data.DBDContent;
import org.jkiss.dbeaver.model.data.DBDContentStorage; import org.jkiss.dbeaver.model.data.DBDContentStorage;
import org.jkiss.dbeaver.model.exec.DBCException; import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.impl.BytesContentStorage; 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.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.ui.DBeaverIcons; import org.jkiss.dbeaver.ui.DBeaverIcons;
import org.jkiss.dbeaver.ui.UIIcon; import org.jkiss.dbeaver.ui.UIIcon;
...@@ -34,6 +39,7 @@ import org.jkiss.dbeaver.ui.data.IStreamValueEditor; ...@@ -34,6 +39,7 @@ import org.jkiss.dbeaver.ui.data.IStreamValueEditor;
import org.jkiss.dbeaver.ui.data.IValueController; import org.jkiss.dbeaver.ui.data.IValueController;
import org.jkiss.dbeaver.ui.editors.binary.BinaryContent; import org.jkiss.dbeaver.ui.editors.binary.BinaryContent;
import org.jkiss.dbeaver.ui.editors.binary.HexEditControl; 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.ContentUtils;
import org.jkiss.dbeaver.utils.GeneralUtils; import org.jkiss.dbeaver.utils.GeneralUtils;
...@@ -50,9 +56,22 @@ public class BinaryPanelEditor implements IStreamValueEditor<HexEditControl> { ...@@ -50,9 +56,22 @@ public class BinaryPanelEditor implements IStreamValueEditor<HexEditControl> {
private static final Log log = Log.getLog(BinaryPanelEditor.class); private static final Log log = Log.getLog(BinaryPanelEditor.class);
@Override @Override
public HexEditControl createControl(IValueController valueController) public HexEditControl createControl(IValueController valueController){
{
return new HexEditControl(valueController.getEditPlaceholder(), SWT.BORDER); 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 @Override
......
...@@ -123,6 +123,7 @@ public class BinaryEditor extends EditorPart implements ISelectionProvider, IMen ...@@ -123,6 +123,7 @@ public class BinaryEditor extends EditorPart implements ISelectionProvider, IMen
manager = new HexManager(); manager = new HexManager();
manager.setTextFont(HexPreferencesPage.getPrefFontData()); manager.setTextFont(HexPreferencesPage.getPrefFontData());
manager.setDefWidth(HexPreferencesPage.getDefaultWidth());
manager.setMenuListener(this); manager.setMenuListener(this);
int editorStyle = SWT.NONE; int editorStyle = SWT.NONE;
if (storage != null && storage.isReadOnly()) { if (storage != null && storage.isReadOnly()) {
...@@ -162,13 +163,19 @@ public class BinaryEditor extends EditorPart implements ISelectionProvider, IMen ...@@ -162,13 +163,19 @@ public class BinaryEditor extends EditorPart implements ISelectionProvider, IMen
@Override @Override
public void preferenceChange(PreferenceChangeEvent event) 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()); manager.setTextFont((FontData) event.getNewValue());
}
if (HexPreferencesPage.PROP_DEF_WIDTH.equals(event.getProperty())) {
manager.setDefWidth((String) event.getNewValue());
}
} }
}; };
DBPPreferenceStore store = DBeaverCore.getGlobalPreferenceStore(); DBPPreferenceStore store = DBeaverCore.getGlobalPreferenceStore();
store.addPropertyChangeListener(preferencesChangeListener); store.addPropertyChangeListener(preferencesChangeListener);
manager.addLongSelectionListener(new SelectionAdapter() { manager.addLongSelectionListener(new SelectionAdapter() {
@Override @Override
public void widgetSelected(SelectionEvent e) public void widgetSelected(SelectionEvent e)
......
...@@ -28,6 +28,7 @@ import org.eclipse.swt.widgets.*; ...@@ -28,6 +28,7 @@ import org.eclipse.swt.widgets.*;
import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.DBeaverUI; import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.editors.binary.pref.HexPreferencesPage;
import org.jkiss.dbeaver.utils.GeneralUtils; import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils; import org.jkiss.utils.CommonUtils;
...@@ -75,11 +76,6 @@ public class HexEditControl extends Composite { ...@@ -75,11 +76,6 @@ public class HexEditControl extends Composite {
static final int SHIFT_FORWARD = 1; // frame static final int SHIFT_FORWARD = 1; // frame
static final int SHIFT_BACKWARD = 2; 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 { static {
// Compose header row // Compose header row
StringBuilder rowChars = new StringBuilder(); StringBuilder rowChars = new StringBuilder();
...@@ -150,6 +146,8 @@ public class HexEditControl extends Composite { ...@@ -150,6 +146,8 @@ public class HexEditControl extends Composite {
private Text previewTextSeparator = null; private Text previewTextSeparator = null;
private StyledText previewText = 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. * 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 * 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 { ...@@ -307,7 +305,7 @@ public class HexEditControl extends Composite {
} }
private class ControlPaintAdapter implements PaintListener { private class ControlPaintAdapter implements PaintListener {
boolean hexContent = false; boolean hexContent = false;
ControlPaintAdapter(boolean isHexText) ControlPaintAdapter(boolean isHexText)
{ {
...@@ -327,7 +325,7 @@ public class HexEditControl extends Composite { ...@@ -327,7 +325,7 @@ public class HexEditControl extends Composite {
rightHalfWidth = (lineWidth + 1) / 2; // line spans to both sides of its position rightHalfWidth = (lineWidth + 1) / 2; // line spans to both sides of its position
} }
event.gc.setLineWidth(lineWidth); 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; int xPos = (charLen * block) * fontCharWidth - rightHalfWidth;
event.gc.drawLine(xPos, event.y, xPos, event.y + event.height); event.gc.drawLine(xPos, event.y, xPos, event.y + event.height);
} }
...@@ -422,7 +420,7 @@ public class HexEditControl extends Composite { ...@@ -422,7 +420,7 @@ public class HexEditControl extends Composite {
public HexEditControl(final Composite parent, int style) 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 { ...@@ -2030,29 +2028,8 @@ public class HexEditControl extends Composite {
int width = getClientArea().width - linesText.computeSize(SWT.DEFAULT, SWT.DEFAULT).x; int width = getClientArea().width - linesText.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
int displayedNumberWidth = fontCharWidth * 4; // hexText and previewText int displayedNumberWidth = fontCharWidth * 4; // hexText and previewText
int commonWidth = width / displayedNumberWidth; 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; textGridData.widthHint = hexText.computeTrim(0, 0, bytesPerLine * 3 * fontCharWidth, 100).width;
previewGridData.widthHint = previewText.computeTrim(0, 0, bytesPerLine * fontCharWidth, 100).width; previewGridData.widthHint = previewText.computeTrim(0, 0, bytesPerLine * fontCharWidth, 100).width;
updateNumberOfLines(); updateNumberOfLines();
...@@ -2063,4 +2040,9 @@ public class HexEditControl extends Composite { ...@@ -2063,4 +2040,9 @@ public class HexEditControl extends Composite {
redrawTextAreas(true); redrawTextAreas(true);
} }
public void setDefWidth(int defValue) {
this.defWidth = defValue ;
}
} }
...@@ -57,6 +57,8 @@ public class HexManager { ...@@ -57,6 +57,8 @@ public class HexManager {
private HexStatusLine statusLine = null; private HexStatusLine statusLine = null;
private Composite textsParent = null; private Composite textsParent = null;
private IMenuListener menuListener; private IMenuListener menuListener;
private String defWidth;
public HexEditControl getControl() public HexEditControl getControl()
{ {
...@@ -143,6 +145,9 @@ public class HexManager { ...@@ -143,6 +145,9 @@ public class HexManager {
fontText = new Font(Display.getCurrent(), fontData); fontText = new Font(Display.getCurrent(), fontData);
hexEditControl.setFont(fontText); hexEditControl.setFont(fontText);
} }
if (defWidth != null) {
hexEditControl.setDefWidth(Integer.valueOf(defWidth));
}
//hexEditControl.addLongSelectionListener(new ControlSelectionAdapter(ControlSelectionAdapter.UPDATE_POSITION_TEXT)); //hexEditControl.addLongSelectionListener(new ControlSelectionAdapter(ControlSelectionAdapter.UPDATE_POSITION_TEXT));
hexEditControl.addListener(SWT.Modify, new Listener() { hexEditControl.addListener(SWT.Modify, new Listener() {
...@@ -506,4 +511,13 @@ public class HexManager { ...@@ -506,4 +511,13 @@ public class HexManager {
this.menuListener = menuListener; this.menuListener = menuListener;
} }
public void setDefWidth(String defValue) {
this.defWidth = defValue;
}
public String getDefaultWidth() {
return defWidth;
}
} }
...@@ -16,7 +16,16 @@ ...@@ -16,7 +16,16 @@
*/ */
package org.jkiss.dbeaver.ui.editors.binary.pref; 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.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionAdapter;
...@@ -27,15 +36,18 @@ import org.eclipse.swt.graphics.GC; ...@@ -27,15 +36,18 @@ import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout; 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.List;
import org.eclipse.swt.widgets.Text;
import org.jkiss.dbeaver.core.CoreMessages; import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.core.DBeaverUI; import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.editors.binary.HexEditControl; import org.jkiss.dbeaver.ui.editors.binary.HexEditControl;
import java.util.*;
/** /**
* Manager of all preferences-editing widgets, with an optional standalone dialog. * Manager of all preferences-editing widgets, with an optional standalone dialog.
* *
...@@ -71,7 +83,10 @@ public class HexPreferencesManager { ...@@ -71,7 +83,10 @@ public class HexPreferencesManager {
private List list2 = null; private List list2 = null;
private Font sampleFont = null; private Font sampleFont = null;
private Text sampleText = 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) static int fontStyleToInt(String styleString)
{ {
int style = SWT.NORMAL; int style = SWT.NORMAL;
...@@ -101,10 +116,10 @@ public class HexPreferencesManager { ...@@ -101,10 +116,10 @@ public class HexPreferencesManager {
} }
public HexPreferencesManager(FontData aFontData) public HexPreferencesManager(FontData aFontData,String defWidth) {
{
sampleFontData = aFontData; sampleFontData = aFontData;
fontsSorted = new TreeMap<>(); fontsSorted = new TreeMap<>();
defWidthValue = defWidth;
} }
...@@ -212,7 +227,29 @@ public class HexPreferencesManager { ...@@ -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 { ...@@ -406,7 +443,8 @@ public class HexPreferencesManager {
sampleFontData = aFontData; sampleFontData = aFontData;
refreshWidgets(); refreshWidgets();
} }
static void showSelected(List aList, String item) static void showSelected(List aList, String item)
{ {
......
...@@ -38,6 +38,7 @@ import org.jkiss.utils.CommonUtils; ...@@ -38,6 +38,7 @@ import org.jkiss.utils.CommonUtils;
public class HexPreferencesPage extends AbstractPrefPage implements IWorkbenchPreferencePage { public class HexPreferencesPage extends AbstractPrefPage implements IWorkbenchPreferencePage {
public static final String PROP_FONT_DATA = "prop.hex.font.data"; 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; private HexPreferencesManager preferences = null;
...@@ -59,7 +60,10 @@ public class HexPreferencesPage extends AbstractPrefPage implements IWorkbenchPr ...@@ -59,7 +60,10 @@ public class HexPreferencesPage extends AbstractPrefPage implements IWorkbenchPr
return null; 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) * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
*/ */
...@@ -67,7 +71,8 @@ public class HexPreferencesPage extends AbstractPrefPage implements IWorkbenchPr ...@@ -67,7 +71,8 @@ public class HexPreferencesPage extends AbstractPrefPage implements IWorkbenchPr
protected Control createContents(Composite parent) protected Control createContents(Composite parent)
{ {
FontData fontData = getPrefFontData(); FontData fontData = getPrefFontData();
preferences = new HexPreferencesManager(fontData); String defWidth = getDefaultWidth();
preferences = new HexPreferencesManager(fontData, defWidth);
return preferences.createPreferencesPart(parent); return preferences.createPreferencesPart(parent);
} }
...@@ -106,6 +111,9 @@ public class HexPreferencesPage extends AbstractPrefPage implements IWorkbenchPr ...@@ -106,6 +111,9 @@ public class HexPreferencesPage extends AbstractPrefPage implements IWorkbenchPr
store.setValue(DBeaverPreferences.HEX_FONT_SIZE, fontData.getHeight()); store.setValue(DBeaverPreferences.HEX_FONT_SIZE, fontData.getHeight());
store.firePropertyChangeEvent(PROP_FONT_DATA, null, fontData); 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); PrefUtils.savePreferenceStore(store);
return true; return true;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册