提交 455b3090 编写于 作者: J jurgen

RSV refactoring

上级 6ae1689b
......@@ -25,6 +25,8 @@ import org.eclipse.swt.widgets.Control;
/**
* Result set renderer.
* Visualizes result set viewer/editor.
*
* May additionally implement ISelectionProvider
*/
public interface IResultSetPresentation {
......@@ -33,4 +35,6 @@ public interface IResultSetPresentation {
Control getControl();
void refreshData(boolean refreshMetadata);
// ISelectionProvider
}
......@@ -18,7 +18,6 @@
*/
package org.jkiss.dbeaver.ui.controls.resultset;
import org.jkiss.dbeaver.core.Log;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
......@@ -48,7 +47,9 @@ 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.ui.*;
import org.eclipse.ui.ISaveablePart2;
import org.eclipse.ui.IWorkbenchCommandConstants;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.commands.ICommandService;
import org.eclipse.ui.menus.CommandContributionItem;
import org.eclipse.ui.progress.UIJob;
......@@ -64,6 +65,7 @@ import org.jkiss.dbeaver.DBeaverPreferences;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.core.Log;
import org.jkiss.dbeaver.ext.IDataSourceProvider;
import org.jkiss.dbeaver.model.DBPDataKind;
import org.jkiss.dbeaver.model.DBPDataSource;
......@@ -84,6 +86,7 @@ import org.jkiss.dbeaver.tools.transfer.database.DatabaseTransferProducer;
import org.jkiss.dbeaver.tools.transfer.wizard.DataTransferWizard;
import org.jkiss.dbeaver.ui.*;
import org.jkiss.dbeaver.ui.controls.CImageCombo;
import org.jkiss.dbeaver.ui.controls.PropertyPageStandard;
import org.jkiss.dbeaver.ui.controls.lightgrid.GridCell;
import org.jkiss.dbeaver.ui.controls.lightgrid.GridPos;
import org.jkiss.dbeaver.ui.controls.lightgrid.IGridContentProvider;
......@@ -96,7 +99,6 @@ import org.jkiss.dbeaver.ui.dialogs.sql.ViewSQLDialog;
import org.jkiss.dbeaver.ui.dialogs.struct.EditConstraintDialog;
import org.jkiss.dbeaver.ui.preferences.PrefPageDatabaseGeneral;
import org.jkiss.dbeaver.ui.properties.PropertyCollector;
import org.jkiss.dbeaver.ui.controls.PropertyPageStandard;
import org.jkiss.dbeaver.utils.ContentUtils;
import org.jkiss.utils.CommonUtils;
......@@ -298,7 +300,7 @@ public class ResultSetViewer extends Viewer
}
};
this.themeManager.addPropertyChangeListener(themeChangeListener);
this.spreadsheet.addDisposeListener(new DisposeListener() {
this.viewerPanel.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e)
{
......@@ -314,7 +316,6 @@ public class ResultSetViewer extends Viewer
}
}
});
//this.spreadsheet.setTopLeftRenderer(new TopLeftRenderer(this));
applyThemeSettings();
spreadsheet.addFocusListener(new FocusListener() {
......
......@@ -16,69 +16,36 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.jkiss.dbeaver.ui.controls.spreadsheet;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.jkiss.dbeaver.ui.controls.lightgrid.GridPos;
package org.jkiss.dbeaver.ui.controls.resultset.view;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.jkiss.dbeaver.ui.controls.resultset.IResultSetController;
import org.jkiss.dbeaver.ui.controls.resultset.IResultSetPresentation;
/**
* SpreadsheetSelection
* Empty presentation.
* Used when RSV has no results (initially).
*/
class SpreadsheetSelection implements IStructuredSelection
{
private Spreadsheet grid;
private Collection<GridPos> selection;
public class EmptyPresentation implements IResultSetPresentation {
public SpreadsheetSelection(Spreadsheet grid)
{
this.grid = grid;
this.selection = grid.getSelection();
}
Spreadsheet getGrid()
{
return grid;
}
private Composite placeholder;
@Override
public boolean isEmpty()
{
return selection.isEmpty();
public void createPresentation(IResultSetController controller, Composite parent) {
placeholder = new Composite(parent, SWT.NONE);
}
@Override
public Object getFirstElement()
{
return selection.iterator().next();
public Control getControl() {
return placeholder;
}
@Override
public Iterator<GridPos> iterator()
{
return selection.iterator();
}
public void refreshData(boolean refreshMetadata) {
@Override
public int size()
{
return selection.size();
}
@Override
public Object[] toArray()
{
return selection.toArray();
}
@Override
public List<Object> toList()
{
return new ArrayList<Object>(selection);
}
}
......@@ -60,21 +60,19 @@ public class Spreadsheet extends LightGrid implements Listener {
@NotNull
private final IWorkbenchPartSite site;
@NotNull
private final IResultSetController spreadsheetController;
private final IResultSetController resultSetController;
@NotNull
private final IGridContentProvider contentProvider;
@NotNull
private final IGridLabelProvider labelProvider;
private SpreadsheetSelectionProvider selectionProvider;
private Clipboard clipboard;
public Spreadsheet(
@NotNull final Composite parent,
final int style,
@NotNull final IWorkbenchPartSite site,
@NotNull final IResultSetController spreadsheetController,
@NotNull final IResultSetController resultSetController,
@NotNull final IGridContentProvider contentProvider,
@NotNull final IGridLabelProvider labelProvider)
{
......@@ -87,10 +85,9 @@ public class Spreadsheet extends LightGrid implements Listener {
this.setLayout(layout);
this.site = site;
this.spreadsheetController = spreadsheetController;
this.resultSetController = resultSetController;
this.contentProvider = contentProvider;
this.labelProvider = labelProvider;
this.selectionProvider = new SpreadsheetSelectionProvider(this);
this.clipboard = new Clipboard(getDisplay());
......@@ -131,7 +128,7 @@ public class Spreadsheet extends LightGrid implements Listener {
public IResultSetController getController()
{
return spreadsheetController;
return resultSetController;
}
public Clipboard getClipboard()
......@@ -243,7 +240,7 @@ public class Spreadsheet extends LightGrid implements Listener {
(event.keyCode >= 'a' && event.keyCode <= 'z') ||
(event.keyCode >= '0' && event.keyCode <= '9'))
{
final Control editorControl = spreadsheetController.showCellEditor(true);
final Control editorControl = resultSetController.showCellEditor(true);
if (editorControl != null && event.keyCode != SWT.CR) {
// Forward the same key event to just created control
final Event fwdEvent = new Event();
......@@ -263,7 +260,7 @@ public class Spreadsheet extends LightGrid implements Listener {
Object col = getFocusColumnElement();
Object row = getFocusRowElement();
if (col != null && row != null) {
spreadsheetController.resetCellValue(col, row, false);
resultSetController.resetCellValue(col, row, false);
}
}
break;
......@@ -278,21 +275,21 @@ public class Spreadsheet extends LightGrid implements Listener {
case NONE:
return;
case EDITOR:
spreadsheetController.showCellEditor(false);
resultSetController.showCellEditor(false);
break;
case INLINE_EDITOR:
spreadsheetController.showCellEditor(true);
resultSetController.showCellEditor(true);
break;
}
}
break;
case SWT.MouseDown:
if (event.button == 2) {
spreadsheetController.showCellEditor(true);
resultSetController.showCellEditor(true);
}
break;
case LightGrid.Event_ChangeSort:
spreadsheetController.changeSorting(event.data, event.stateMask);
resultSetController.changeSorting(event.data, event.stateMask);
break;
case LightGrid.Event_NavigateLink:
// Perform navigation async because it may change grid content and
......@@ -300,7 +297,7 @@ public class Spreadsheet extends LightGrid implements Listener {
getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
spreadsheetController.navigateLink((GridCell) event.data, event.stateMask);
resultSetController.navigateLink((GridCell) event.data, event.stateMask);
}
});
break;
......@@ -313,13 +310,6 @@ public class Spreadsheet extends LightGrid implements Listener {
super.refreshData(refreshColumns);
}
public void clearGrid()
{
//spreadsheet.setSelection(new int[0]);
cancelInlineEditor();
super.removeAll();
}
private void hookContextMenu()
{
MenuManager menuMgr = new MenuManager();
......@@ -332,7 +322,7 @@ public class Spreadsheet extends LightGrid implements Listener {
// Let controller to provide it's own menu items
GridPos focusPos = getFocusPos();
spreadsheetController.fillContextMenu(
resultSetController.fillContextMenu(
focusPos.col >= 0 && focusPos.col < columnElements.length ? columnElements[focusPos.col] : null,
focusPos.row >= 0 && focusPos.row < rowElements.length ? rowElements[focusPos.row] : null,
manager);
......@@ -340,7 +330,7 @@ public class Spreadsheet extends LightGrid implements Listener {
});
menuMgr.setRemoveAllWhenShown(true);
super.setMenu(menu);
site.registerContextMenu(menuMgr, selectionProvider);
site.registerContextMenu(menuMgr, null);
}
public void cancelInlineEditor()
......
/*
* Copyright (C) 2010-2015 Serge Rieder
* serge@jkiss.org
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.jkiss.dbeaver.ui.controls.spreadsheet;
import org.jkiss.dbeaver.core.Log;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.jkiss.utils.CommonUtils;
import java.util.List;
/**
* SpreadsheetSelectionProvider
*/
public class SpreadsheetSelectionProvider implements ISelectionProvider
{
static final Log log = Log.getLog(SpreadsheetSelectionProvider.class);
private Spreadsheet grid;
private List<ISelectionChangedListener> listeners;
public SpreadsheetSelectionProvider(Spreadsheet grid)
{
this.grid = grid;
}
@Override
public void addSelectionChangedListener(ISelectionChangedListener listener)
{
listeners.add(listener);
}
@Override
public void removeSelectionChangedListener(ISelectionChangedListener listener)
{
listeners.remove(listener);
}
@Override
public ISelection getSelection()
{
return new SpreadsheetSelection(grid);
}
@Override
public void setSelection(ISelection selection)
{
log.warn("Grid do not supports external selection changes");
}
void onSelectionChange(ISelection selection)
{
if (!CommonUtils.isEmpty(listeners)) {
SelectionChangedEvent event = new SelectionChangedEvent(this, selection);
for (int i = 0; i < listeners.size(); i++) {
listeners.get(i).selectionChanged(event);
}
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册