提交 3e474c16 编写于 作者: J jurgen

Double click behavior, show cell icons + npe fixes

上级 17f1d2e1
......@@ -16,7 +16,7 @@ import org.jkiss.dbeaver.runtime.qm.QMConstants;
import org.jkiss.dbeaver.runtime.qm.QMObjectType;
import org.jkiss.dbeaver.runtime.sql.SQLScriptCommitType;
import org.jkiss.dbeaver.runtime.sql.SQLScriptErrorHandling;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer;
import org.jkiss.dbeaver.ui.controls.spreadsheet.Spreadsheet;
import org.jkiss.dbeaver.ui.editors.binary.HexEditControl;
import org.jkiss.dbeaver.ui.editors.sql.SQLPreferenceConstants;
import org.jkiss.dbeaver.utils.ContentUtils;
......@@ -127,7 +127,7 @@ public class DBeaverPreferencesInitializer extends AbstractPreferenceInitializer
RuntimeUtils.setDefaultPreferenceValue(store, DBeaverPreferences.RESULT_SET_ORDER_SERVER_SIDE, true);
RuntimeUtils.setDefaultPreferenceValue(store, DBeaverPreferences.RESULT_SET_SHOW_ODD_ROWS, true);
RuntimeUtils.setDefaultPreferenceValue(store, DBeaverPreferences.RESULT_SET_SHOW_CELL_ICONS, true);
RuntimeUtils.setDefaultPreferenceValue(store, DBeaverPreferences.RESULT_SET_DOUBLE_CLICK, ResultSetViewer.DoubleClickBehavior.EDITOR.name());
RuntimeUtils.setDefaultPreferenceValue(store, DBeaverPreferences.RESULT_SET_DOUBLE_CLICK, Spreadsheet.DoubleClickBehavior.INLINE_EDITOR.name());
// QM
RuntimeUtils.setDefaultPreferenceValue(store, QMConstants.PROP_HISTORY_DAYS, 90);
......
......@@ -811,7 +811,7 @@ public class UIUtils {
public static void showErrorDialog(
Shell shell,
String title,
String message,
@Nullable String message,
@Nullable Throwable error)
{
if (error instanceof DBException && DBUtils.showDatabaseError(shell, title, message, (DBException)error)) {
......
......@@ -21,6 +21,7 @@ package org.jkiss.dbeaver.ui.controls.resultset;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.osgi.util.NLS;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.model.DBUtils;
......@@ -70,7 +71,7 @@ class ResultSetPersister {
* @param monitor progress monitor
* @param listener value listener
*/
void applyChanges(DBRProgressMonitor monitor, DataUpdateListener listener)
void applyChanges(@Nullable DBRProgressMonitor monitor, @Nullable DataUpdateListener listener)
throws DBException
{
prepareDeleteStatements();
......
......@@ -117,7 +117,6 @@ public class ResultSetViewer extends Viewer implements IDataSourceProvider, ISpr
private static final String VIEW_PANEL_VISIBLE = "viewPanelVisible";
private static final String VIEW_PANEL_RATIO = "viewPanelRatio";
private boolean showOddRows;
public enum GridMode {
GRID,
......@@ -131,12 +130,6 @@ public class ResultSetViewer extends Viewer implements IDataSourceProvider, ISpr
LAST
}
public enum DoubleClickBehavior {
NONE,
EDITOR,
INLINE_EDITOR
}
private final IWorkbenchPartSite site;
private final Composite viewerPanel;
private Composite filtersPanel;
......@@ -176,6 +169,9 @@ public class ResultSetViewer extends Viewer implements IDataSourceProvider, ISpr
private final ResultSetModel model = new ResultSetModel();
private boolean showOddRows = true;
private boolean showCelIcons = true;
public ResultSetViewer(Composite parent, IWorkbenchPartSite site, ResultSetProvider resultSetProvider)
{
super();
......@@ -322,7 +318,7 @@ public class ResultSetViewer extends Viewer implements IDataSourceProvider, ISpr
public void widgetSelected(SelectionEvent e)
{
String queryText = model.getStatistics() == null ? null : model.getStatistics().getQueryText();
if (CommonUtils.isEmpty(queryText)) {
if (queryText == null || queryText.isEmpty()) {
queryText = "<empty>";
}
ViewSQLDialog dialog = new ViewSQLDialog(site, getDataSource(), "Query Text", DBIcon.SQL_TEXT.getImage(), queryText);
......@@ -1704,7 +1700,12 @@ public class ResultSetViewer extends Viewer implements IDataSourceProvider, ISpr
}
}
showOddRows = getPreferenceStore().getBoolean(DBeaverPreferences.RESULT_SET_SHOW_ODD_ROWS);
// Cache preferences
IPreferenceStore preferenceStore = getPreferenceStore();
showOddRows = preferenceStore.getBoolean(DBeaverPreferences.RESULT_SET_SHOW_ODD_ROWS);
showCelIcons = preferenceStore.getBoolean(DBeaverPreferences.RESULT_SET_SHOW_CELL_ICONS);
// Pump data
int oldRowNum = curRowNum;
int oldColNum = curColNum;
......@@ -1781,7 +1782,7 @@ public class ResultSetViewer extends Viewer implements IDataSourceProvider, ISpr
return getPreferenceStore().getInt(DBeaverPreferences.RESULT_SET_MAX_ROWS);
}
private IPreferenceStore getPreferenceStore()
public IPreferenceStore getPreferenceStore()
{
DBPDataSource dataSource = getDataSource();
if (dataSource != null) {
......@@ -1793,8 +1794,8 @@ public class ResultSetViewer extends Viewer implements IDataSourceProvider, ISpr
private synchronized void runDataPump(
final int offset,
final int maxRows,
final GridPos oldPos,
final Runnable finalizer)
@Nullable final GridPos oldPos,
@Nullable final Runnable finalizer)
{
if (dataPumpJob == null) {
dataPumpJob = new ResultSetDataPumpJob(this);
......@@ -2028,9 +2029,14 @@ public class ResultSetViewer extends Viewer implements IDataSourceProvider, ISpr
}
}
@Nullable
private Object getColumnValueFromClipboard(DBDAttributeBinding metaColumn) throws DBCException
{
DBCSession session = getDataSource().openSession(VoidProgressMonitor.INSTANCE, DBCExecutionPurpose.UTIL, "Copy from clipboard");
DBPDataSource dataSource = getDataSource();
if (dataSource == null) {
return null;
}
DBCSession session = dataSource.openSession(VoidProgressMonitor.INSTANCE, DBCExecutionPurpose.UTIL, "Copy from clipboard");
try {
String strValue = (String) getSpreadsheet().getClipboard().getContents(TextTransfer.getInstance());
return metaColumn.getValueHandler().getValueFromObject(
......@@ -2054,6 +2060,11 @@ public class ResultSetViewer extends Viewer implements IDataSourceProvider, ISpr
}
model.shiftRows(rowNum, 1);
final DBPDataSource dataSource = getDataSource();
if (dataSource == null) {
return;
}
// Add new row
final DBDAttributeBinding[] columns = model.getColumns();
final Object[] cells = new Object[columns.length];
......@@ -2065,7 +2076,7 @@ public class ResultSetViewer extends Viewer implements IDataSourceProvider, ISpr
throws InvocationTargetException, InterruptedException
{
// Copy cell values in new context
DBCSession session = getDataSource().openSession(monitor, DBCExecutionPurpose.UTIL, CoreMessages.controls_resultset_viewer_add_new_row_context_name);
DBCSession session = dataSource.openSession(monitor, DBCExecutionPurpose.UTIL, CoreMessages.controls_resultset_viewer_add_new_row_context_name);
try {
if (copyCurrent && currentRowNumber >= 0 && currentRowNumber < model.getRowCount()) {
Object[] origRow = model.getRowData(currentRowNumber);
......@@ -2173,6 +2184,7 @@ public class ResultSetViewer extends Viewer implements IDataSourceProvider, ISpr
//////////////////////////////////
// Virtual identifier management
@Nullable
DBCEntityIdentifier getVirtualEntityIdentifier()
{
if (!model.isSingleSource() || model.getVisibleColumnCount() == 0) {
......@@ -2595,6 +2607,9 @@ public class ResultSetViewer extends Viewer implements IDataSourceProvider, ISpr
@Override
public Image getImage(int col, int row)
{
if (!showCelIcons) {
return null;
}
DBDAttributeBinding attr;
if (gridMode == GridMode.RECORD) {
if (row >= model.getVisibleColumnCount()) {
......
......@@ -20,6 +20,7 @@
package org.jkiss.dbeaver.ui.controls.spreadsheet;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.widgets.Control;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.ui.controls.lightgrid.GridColumn;
......@@ -43,11 +44,9 @@ public interface ISpreadsheetController {
void resetCellValue(GridPos cell, boolean delete);
void fillContextMenu(
GridPos cell,
IMenuManager manager);
void fillContextMenu(GridPos cell, IMenuManager manager);
void changeSorting(
GridColumn column,
int state);
void changeSorting(GridColumn column, int state);
IPreferenceStore getPreferenceStore();
}
......@@ -32,7 +32,6 @@ import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
......@@ -40,6 +39,7 @@ import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchPartSite;
import org.jkiss.dbeaver.DBeaverPreferences;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.lightgrid.*;
......@@ -49,6 +49,12 @@ import org.jkiss.dbeaver.ui.controls.lightgrid.*;
public class Spreadsheet extends LightGrid implements Listener {
static final Log log = LogFactory.getLog(Spreadsheet.class);
public enum DoubleClickBehavior {
NONE,
EDITOR,
INLINE_EDITOR
}
private static final String SPREADSHEET_CONTROL_ID = "org.jkiss.dbeaver.ui.spreadsheet";
public static final int MAX_DEF_COLUMN_WIDTH = 300;
public static final int MAX_INLINE_EDIT_WITH = 300;
......@@ -389,7 +395,19 @@ public class Spreadsheet extends LightGrid implements Listener {
GridPos pos = super.getCell(new Point(event.x, event.y));
GridPos focusPos = super.getFocusCell();
if (pos != null && focusPos != null && pos.equals(super.getFocusCell())) {
spreadsheetController.showCellEditor(false);
DoubleClickBehavior doubleClickBehavior = DoubleClickBehavior.valueOf(
getController().getPreferenceStore().getString(DBeaverPreferences.RESULT_SET_DOUBLE_CLICK));
switch (doubleClickBehavior) {
case NONE:
return;
case EDITOR:
spreadsheetController.showCellEditor(false);
break;
case INLINE_EDITOR:
spreadsheetController.showCellEditor(true);
break;
}
}
break;
case SWT.MouseDown:
......
......@@ -24,6 +24,7 @@ import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbenchPartSite;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.model.DBPDataSource;
......@@ -35,7 +36,7 @@ public class ViewSQLDialog extends BaseSQLDialog {
private boolean enlargeViewPanel = true;
private boolean wordWrap = false;
public ViewSQLDialog(final IWorkbenchPartSite parentSite, DBPDataSource dataSource, String title, Image image, String text)
public ViewSQLDialog(final IWorkbenchPartSite parentSite, @Nullable DBPDataSource dataSource, String title, Image image, String text)
{
super(parentSite, title, image);
this.dataSource = dataSource;
......@@ -106,6 +107,7 @@ public class ViewSQLDialog extends BaseSQLDialog {
}
}
@Nullable
@Override
public DBPDataSource getDataSource()
{
......
......@@ -31,7 +31,7 @@ import org.jkiss.dbeaver.model.data.DBDValueController;
import org.jkiss.dbeaver.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.runtime.RuntimeUtils;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer;
import org.jkiss.dbeaver.ui.controls.spreadsheet.Spreadsheet;
import org.jkiss.dbeaver.utils.AbstractPreferenceStore;
import org.jkiss.utils.CommonUtils;
......@@ -161,9 +161,9 @@ public class PrefPageResultSet extends TargetPrefPage
showOddRows = UIUtils.createLabelCheckbox(uiGroup, "Mark odd/even rows", false);
showCellIcons = UIUtils.createLabelCheckbox(uiGroup, "Show cell icons", false);
doubleClickBehavior = UIUtils.createLabelCombo(uiGroup, "Double-click behavior", SWT.READ_ONLY);
doubleClickBehavior.add("None", ResultSetViewer.DoubleClickBehavior.NONE.ordinal());
doubleClickBehavior.add("Editor", ResultSetViewer.DoubleClickBehavior.EDITOR.ordinal());
doubleClickBehavior.add("Inline Editor", ResultSetViewer.DoubleClickBehavior.INLINE_EDITOR.ordinal());
doubleClickBehavior.add("None", Spreadsheet.DoubleClickBehavior.NONE.ordinal());
doubleClickBehavior.add("Editor", Spreadsheet.DoubleClickBehavior.EDITOR.ordinal());
doubleClickBehavior.add("Inline Editor", Spreadsheet.DoubleClickBehavior.INLINE_EDITOR.ordinal());
}
return composite;
......@@ -199,7 +199,7 @@ public class PrefPageResultSet extends TargetPrefPage
showOddRows.setSelection(store.getBoolean(DBeaverPreferences.RESULT_SET_SHOW_ODD_ROWS));
showCellIcons.setSelection(store.getBoolean(DBeaverPreferences.RESULT_SET_SHOW_CELL_ICONS));
doubleClickBehavior.select(
ResultSetViewer.DoubleClickBehavior.valueOf(store.getString(DBeaverPreferences.RESULT_SET_DOUBLE_CLICK)).ordinal());
Spreadsheet.DoubleClickBehavior.valueOf(store.getString(DBeaverPreferences.RESULT_SET_DOUBLE_CLICK)).ordinal());
} catch (Exception e) {
log.warn(e);
}
......@@ -231,7 +231,7 @@ public class PrefPageResultSet extends TargetPrefPage
store.setValue(DBeaverPreferences.RESULT_SET_SHOW_ODD_ROWS, showOddRows.getSelection());
store.setValue(DBeaverPreferences.RESULT_SET_SHOW_CELL_ICONS, showCellIcons.getSelection());
store.setValue(DBeaverPreferences.RESULT_SET_DOUBLE_CLICK, CommonUtils.fromOrdinal(ResultSetViewer.DoubleClickBehavior.class, doubleClickBehavior.getSelectionIndex()).name());
store.setValue(DBeaverPreferences.RESULT_SET_DOUBLE_CLICK, CommonUtils.fromOrdinal(Spreadsheet.DoubleClickBehavior.class, doubleClickBehavior.getSelectionIndex()).name());
} catch (Exception e) {
log.warn(e);
}
......
......@@ -270,7 +270,7 @@ public class OracleDataSource extends JDBCDataSource
}
}
Object sessionTerritory = connectionInfo.getProperties().get(OracleConstants.PROP_SESSION_TERRITORY);
if (sessionLanguage != null) {
if (sessionTerritory != null) {
try {
JDBCUtils.executeSQL(
session,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册