Bug 2138

 Resize hex editor.
上级 b6f3aa03
......@@ -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";
}
......@@ -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);
......
......@@ -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<HexEditControl> {
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
......
......@@ -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)
......
......@@ -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 ;
}
}
......@@ -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;
}
}
......@@ -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)
{
......
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册