提交 447be5ee 编写于 作者: S Serge Rider

Image combo refactoring (label provider)

上级 db9a1873
......@@ -26,6 +26,8 @@ import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
......@@ -36,15 +38,16 @@ import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.model.DBIcon;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode;
import org.jkiss.dbeaver.model.navigator.DBNNode;
import org.jkiss.dbeaver.model.navigator.DBNResource;
import org.jkiss.dbeaver.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.registry.DataSourceRegistry;
import org.jkiss.dbeaver.utils.RuntimeUtils;
import org.jkiss.dbeaver.ui.DBeaverIcons;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.CImageCombo;
import org.jkiss.dbeaver.ui.navigator.database.DatabaseNavigatorTree;
import org.jkiss.dbeaver.utils.RuntimeUtils;
import org.jkiss.utils.CommonUtils;
import java.io.File;
......@@ -128,10 +131,9 @@ class ScriptsImportWizardPage extends WizardPage {
extensionsText.setLayoutData(gd);
UIUtils.createControlLabel(generalSettings, CoreMessages.dialog_scripts_import_wizard_label_default_connection);
scriptsDataSources = new CImageCombo<>(generalSettings, SWT.BORDER | SWT.DROP_DOWN | SWT.READ_ONLY);
scriptsDataSources = new CImageCombo<>(generalSettings, SWT.BORDER | SWT.DROP_DOWN | SWT.READ_ONLY, new ConnectionLabelProvider());
for (DataSourceDescriptor dataSourceDescriptor : DataSourceRegistry.getAllDataSources()) {
scriptsDataSources.add(dataSourceDescriptor.getObjectImage(), dataSourceDescriptor.getName(),
UIUtils.getConnectionColor(dataSourceDescriptor.getConnectionConfiguration()), dataSourceDescriptor);
scriptsDataSources.addItem(dataSourceDescriptor);
}
if (scriptsDataSources.getItemCount() > 0) {
......@@ -201,4 +203,28 @@ class ScriptsImportWizardPage extends WizardPage {
(DBNResource) importRoot,
dataSourceContainer);
}
private static class ConnectionLabelProvider extends LabelProvider implements IColorProvider {
@Override
public Image getImage(Object element) {
final DBNDatabaseNode node = DBeaverCore.getInstance().getNavigatorModel().findNode((DataSourceDescriptor) element);
return node == null ? null : DBeaverIcons.getImage(node.getNodeIcon());
}
@Override
public String getText(Object element) {
return ((DataSourceDescriptor) element).getName();
}
@Override
public Color getForeground(Object element) {
return null;
}
@Override
public Color getBackground(Object element) {
return element == null ? null : UIUtils.getConnectionColor(((DataSourceDescriptor) element).getConnectionConfiguration());
}
}
}
......@@ -17,6 +17,8 @@
*/
package org.jkiss.dbeaver.ui.controls;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.events.*;
......@@ -26,8 +28,6 @@ import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.DBPImage;
import org.jkiss.dbeaver.ui.DBeaverIcons;
import java.util.ArrayList;
import java.util.List;
......@@ -35,17 +35,9 @@ import java.util.List;
/**
* Image combo
*/
public class CImageCombo<ITEM_TYPE extends Object> extends Composite {
public interface DropDownRenderer<T extends Control> {
T createControl(Composite parent, T oldControl);
void setSelection(T control, int selectionIndex);
void addItem(@Nullable Object parent, @Nullable DBPImage icon, String string, @Nullable Color background, @Nullable Object data);
}
public class CImageCombo<ITEM_TYPE> extends Composite {
private final ILabelProvider labelProvider;
private Label imageLabel;
private Text text;
private Table table;
......@@ -58,9 +50,10 @@ public class CImageCombo<ITEM_TYPE extends Object> extends Composite {
private Font font;
private Point sizeHint;
public CImageCombo(Composite parent, int style)
public CImageCombo(Composite parent, int style, ILabelProvider labelProvider)
{
super(parent, style = checkStyle(style));
this.labelProvider = labelProvider;
this.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_CENTER));
GridLayout gridLayout = new GridLayout(3, false);
......@@ -189,37 +182,30 @@ public class CImageCombo<ITEM_TYPE extends Object> extends Composite {
}
/**
* Adds the argument to the end of the receiver's list.
*
*
* @param string the new item
* @param background item background color
* @throws IllegalArgumentException <ul>
* <li>ERROR_NULL_ARGUMENT - if the string is null</li>
* </ul>
* @throws SWTException <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
* </ul>
* Adds element
*/
public void add(@Nullable DBPImage icon, String string, @Nullable Color background, @Nullable ITEM_TYPE data)
public void addItem(@Nullable ITEM_TYPE element)
{
checkWidget();
String string = labelProvider.getText(element);
if (string == null) {
SWT.error(SWT.ERROR_NULL_ARGUMENT);
}
Image image = icon == null ? null : DBeaverIcons.getImage(icon);
Image image = labelProvider.getImage(element);
TableItem newItem = new TableItem(this.table, SWT.NONE);
newItem.setText(string);
newItem.setData(data);
newItem.setData(element);
if (image != null) {
newItem.setImage(image);
if (imageLabel.getImage() == null) {
imageLabel.setImage(image);
}
}
if (background != null) {
newItem.setBackground(background);
if (labelProvider instanceof IColorProvider) {
Color background= ((IColorProvider) labelProvider).getBackground(element);
if (background != null) {
newItem.setBackground(background);
}
}
}
......
......@@ -20,13 +20,17 @@ package org.jkiss.dbeaver.ui.dialogs.connection;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
......@@ -319,7 +323,7 @@ class ConnectionPageGeneral extends ActiveWizardPage<ConnectionWizard> {
UIUtils.createControlLabel(group, "Connection type");
Composite ctGroup = UIUtils.createPlaceholder(group, 2, 5);
connectionTypeCombo = new CImageCombo<>(ctGroup, SWT.BORDER | SWT.DROP_DOWN | SWT.READ_ONLY);
connectionTypeCombo = new CImageCombo<>(ctGroup, SWT.BORDER | SWT.DROP_DOWN | SWT.READ_ONLY, new ConnectionTypeLabelProvider());
loadConnectionTypes();
connectionTypeCombo.select(0);
connectionTypeCombo.addSelectionListener(new SelectionAdapter() {
......@@ -335,8 +339,7 @@ class ConnectionPageGeneral extends ActiveWizardPage<ConnectionWizard> {
pickerButton.setText("Edit");
pickerButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
public void widgetSelected(SelectionEvent e) {
DataSourceDescriptor dataSource = getActiveDataSource();
UIUtils.showPreferencesFor(
getControl().getShell(),
......@@ -353,13 +356,12 @@ class ConnectionPageGeneral extends ActiveWizardPage<ConnectionWizard> {
{
UIUtils.createControlLabel(group, "Connection folder");
connectionFolderCombo = new CImageCombo<>(group, SWT.BORDER | SWT.DROP_DOWN | SWT.READ_ONLY);
connectionFolderCombo = new CImageCombo<>(group, SWT.BORDER | SWT.DROP_DOWN | SWT.READ_ONLY, new ConnectionFolderLabelProvider());
//connectionFolderCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
loadConnectionFolders();
connectionFolderCombo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
public void widgetSelected(SelectionEvent e) {
dataSourceFolder = connectionFolderCombo.getItem(connectionFolderCombo.getSelectionIndex());
}
});
......@@ -524,23 +526,21 @@ class ConnectionPageGeneral extends ActiveWizardPage<ConnectionWizard> {
{
connectionTypeCombo.removeAll();
for (DBPConnectionType ct : DataSourceProviderRegistry.getInstance().getConnectionTypes()) {
connectionTypeCombo.add(null, ct.getName(), UIUtils.getConnectionTypeColor(ct), ct);
connectionTypeCombo.addItem(ct);
}
}
private void loadConnectionFolders()
{
connectionFolderCombo.removeAll();
connectionFolderCombo.add(null, CoreMessages.toolbar_datasource_selector_empty, null, null);
connectionFolderCombo.addItem(null);
for (DBPDataSourceFolder folder : getWizard().getDataSourceRegistry().getRootFolders()) {
loadConnectionFolder(0, folder);
}
}
private void loadConnectionFolder(int level, DBPDataSourceFolder folder) {
String prefix = "";
for (int i = 0; i < level; i++) prefix += " ";
connectionFolderCombo.add(DBIcon.TREE_DATABASE_CATEGORY, prefix + folder.getName(), null, folder);
connectionFolderCombo.addItem(folder);
for (DBPDataSourceFolder child : folder.getChildren()) {
loadConnectionFolder(level + 1, child);
}
......@@ -629,6 +629,44 @@ class ConnectionPageGeneral extends ActiveWizardPage<ConnectionWizard> {
this.dataSourceFolder = dataSourceFolder;
}
private static class ConnectionTypeLabelProvider extends LabelProvider implements IColorProvider {
@Override
public String getText(Object element) {
return ((DBPConnectionType)element).getName();
}
@Override
public Color getForeground(Object element) {
return null;
}
@Override
public Color getBackground(Object element) {
return UIUtils.getConnectionTypeColor((DBPConnectionType)element);
}
}
private static class ConnectionFolderLabelProvider extends LabelProvider {
@Override
public Image getImage(Object element) {
return element == null ?
null :
DBeaverIcons.getImage(DBIcon.TREE_DATABASE_CATEGORY);
}
@Override
public String getText(Object element) {
if (element == null) {
return CoreMessages.toolbar_datasource_selector_empty;
}
String prefix = "";
for (DBPDataSourceFolder folder = ((DBPDataSourceFolder) element).getParent(); folder != null; folder = folder.getParent()) {
prefix += " ";
}
return prefix + ((DBPDataSourceFolder)element).getName();
}
}
private class SchemaReadJob extends AbstractJob {
private DBSObjectContainer objectContainer;
public SchemaReadJob(DBSObjectContainer objectContainer) {
......
......@@ -24,6 +24,7 @@ import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
......@@ -178,12 +179,22 @@ public class DriverEditDialog extends HelpEnabledDialog {
});
UIUtils.createControlLabel(propsGroup, "Driver Type");
final CImageCombo<DataSourceProviderDescriptor> providerCombo = new CImageCombo<>(propsGroup, SWT.BORDER | SWT.READ_ONLY | SWT.DROP_DOWN);
final CImageCombo<DataSourceProviderDescriptor> providerCombo = new CImageCombo<>(propsGroup, SWT.BORDER | SWT.READ_ONLY | SWT.DROP_DOWN, new LabelProvider() {
@Override
public Image getImage(Object element) {
return DBeaverIcons.getImage(((DataSourceProviderDescriptor) element).getIcon());
}
@Override
public String getText(Object element) {
return ((DataSourceProviderDescriptor) element).getName();
}
});
providerCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
if (newDriver) {
for (DataSourceProviderDescriptor p : DataSourceProviderRegistry.getInstance().getDataSourceProviders()) {
if (p.isDriversManagable()) {
providerCombo.add(p.getIcon(), p.getName(), null, p);
for (DataSourceProviderDescriptor provider : DataSourceProviderRegistry.getInstance().getDataSourceProviders()) {
if (provider.isDriversManagable()) {
providerCombo.addItem(provider);
}
}
providerCombo.select(provider);
......@@ -195,7 +206,7 @@ public class DriverEditDialog extends HelpEnabledDialog {
}
});
} else {
providerCombo.add(provider.getIcon(), provider.getName(), null, provider);
providerCombo.addItem(provider);
providerCombo.select(provider);
}
......@@ -244,8 +255,8 @@ public class DriverEditDialog extends HelpEnabledDialog {
driverCategoryCombo.setEnabled(false);
}
Set<String> categories = new TreeSet<>();
for (DataSourceProviderDescriptor p : DataSourceProviderRegistry.getInstance().getDataSourceProviders()) {
for (DriverDescriptor drv : p.getEnabledDrivers()) {
for (DataSourceProviderDescriptor provider : DataSourceProviderRegistry.getInstance().getDataSourceProviders()) {
for (DriverDescriptor drv : provider.getEnabledDrivers()) {
if (!CommonUtils.isEmpty(drv.getCategory())) {
categories.add(drv.getCategory());
}
......
......@@ -24,10 +24,14 @@ import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
......@@ -62,6 +66,7 @@ import org.jkiss.dbeaver.model.struct.DBSObjectSelector;
import org.jkiss.dbeaver.registry.DataSourceProviderRegistry;
import org.jkiss.dbeaver.registry.DataSourceRegistry;
import org.jkiss.dbeaver.runtime.jobs.DataSourceJob;
import org.jkiss.dbeaver.ui.DBeaverIcons;
import org.jkiss.dbeaver.ui.IActionConstants;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.actions.DataSourcePropertyTester;
......@@ -333,26 +338,20 @@ public class DataSourceManagementToolbar implements DBPRegistryListener, DBPEven
try {
if (update) {
connectionCombo.removeAll();
connectionCombo.add(DBIcon.TREE_DATABASE, EMPTY_SELECTION_TEXT, null, null);
connectionCombo.addItem(null);
}
int selectionIndex = 0;
if (activePart != null) {
final DBPDataSourceContainer dataSourceContainer = getDataSourceContainer();
if (!CommonUtils.isEmpty(dataSources)) {
DBNModel navigatorModel = DBeaverCore.getInstance().getNavigatorModel();
for (int i = 0; i < dataSources.size(); i++) {
DBPDataSourceContainer ds = dataSources.get(i);
if (ds == null) {
continue;
}
if (update) {
DBNDatabaseNode dsNode = navigatorModel.getNodeByObject(ds);
connectionCombo.add(
dsNode == null ? DBIcon.TREE_DATABASE : dsNode.getNodeIconDefault(),
ds.getName(),
UIUtils.getConnectionColor(ds.getConnectionConfiguration()),
ds);
connectionCombo.addItem(ds);
}
if (dataSourceContainer == ds) {
selectionIndex = i + 1;
......@@ -487,7 +486,7 @@ public class DataSourceManagementToolbar implements DBPRegistryListener, DBPEven
DBeaverUI.syncExec(new Runnable() {
@Override
public void run() {
fillDatabaseList((DatabaseListReader) event.getJob(), dsContainer);
fillDatabaseList((DatabaseListReader) event.getJob());
}
});
}
......@@ -505,7 +504,7 @@ public class DataSourceManagementToolbar implements DBPRegistryListener, DBPEven
}
}
private synchronized void fillDatabaseList(DatabaseListReader reader, DBPDataSourceContainer dsContainer) {
private synchronized void fillDatabaseList(DatabaseListReader reader) {
synchronized (dbListReads) {
dbListReads.remove(reader);
}
......@@ -522,11 +521,7 @@ public class DataSourceManagementToolbar implements DBPRegistryListener, DBPEven
Collection<DBNDatabaseNode> dbList = reader.nodeList;
if (dbList != null && !dbList.isEmpty()) {
for (DBNDatabaseNode node : dbList) {
databaseCombo.add(
node.getNodeIconDefault(),
node.getName(),
UIUtils.getConnectionColor(node.getObject().getDataSource().getContainer().getConnectionConfiguration()),
node);
databaseCombo.addItem(node);
}
}
if (reader.active != null) {
......@@ -709,7 +704,7 @@ public class DataSourceManagementToolbar implements DBPRegistryListener, DBPEven
final int fontHeight = UIUtils.getFontHeight(parent);
int comboWidth = fontHeight * 20;
connectionCombo = new CImageCombo<>(comboGroup, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER);
connectionCombo = new CImageCombo<>(comboGroup, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER, new ConnectionLabelProvider());
GridData gd = new GridData();
gd.widthHint = comboWidth;
gd.minimumWidth = comboWidth;
......@@ -718,7 +713,7 @@ public class DataSourceManagementToolbar implements DBPRegistryListener, DBPEven
connectionCombo.setVisibleItemCount(15);
connectionCombo.setWidthHint(comboWidth);
connectionCombo.setToolTipText(CoreMessages.toolbar_datasource_selector_combo_datasource_tooltip);
connectionCombo.add(DBIcon.TREE_DATABASE, EMPTY_SELECTION_TEXT, null, null);
connectionCombo.addItem(null);
connectionCombo.select(0);
connectionCombo.addSelectionListener(new SelectionListener() {
@Override
......@@ -733,7 +728,7 @@ public class DataSourceManagementToolbar implements DBPRegistryListener, DBPEven
});
comboWidth = fontHeight * 16;
databaseCombo = new CImageCombo<>(comboGroup, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER);
databaseCombo = new CImageCombo<>(comboGroup, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER, new DatabaseLabelProvider());
gd = new GridData();
gd.widthHint = comboWidth;
gd.minimumWidth = comboWidth;
......@@ -742,7 +737,7 @@ public class DataSourceManagementToolbar implements DBPRegistryListener, DBPEven
databaseCombo.setVisibleItemCount(15);
databaseCombo.setWidthHint(comboWidth);
databaseCombo.setToolTipText(CoreMessages.toolbar_datasource_selector_combo_database_tooltip);
databaseCombo.add(DBIcon.TREE_DATABASE, EMPTY_SELECTION_TEXT, null, null);
databaseCombo.addItem(null);
databaseCombo.select(0);
databaseCombo.addSelectionListener(new SelectionListener() {
@Override
......@@ -846,4 +841,68 @@ public class DataSourceManagementToolbar implements DBPRegistryListener, DBPEven
return toolbar.createControl(parent);
}
}
private static class ConnectionLabelProvider extends LabelProvider implements IColorProvider {
@Override
public Image getImage(Object element) {
if (element == null) {
return DBeaverIcons.getImage(DBIcon.TREE_DATABASE);
}
final DBNDatabaseNode node = DBeaverCore.getInstance().getNavigatorModel().findNode((DBPDataSourceContainer) element);
return node == null ? null : DBeaverIcons.getImage(node.getNodeIcon());
}
@Override
public String getText(Object element) {
if (element == null) {
return EMPTY_SELECTION_TEXT;
}
return ((DBPDataSourceContainer) element).getName();
}
@Override
public Color getForeground(Object element) {
return null;
}
@Override
public Color getBackground(Object element) {
return element == null ? null : UIUtils.getConnectionColor(((DBPDataSourceContainer) element).getConnectionConfiguration());
}
}
private static class DatabaseLabelProvider extends LabelProvider implements IColorProvider {
@Override
public Image getImage(Object element) {
if (element == null) {
return DBeaverIcons.getImage(DBIcon.TREE_DATABASE);
}
return DBeaverIcons.getImage(((DBNDatabaseNode)element).getNodeIconDefault());
}
@Override
public String getText(Object element) {
if (element == null) {
return EMPTY_SELECTION_TEXT;
}
return ((DBNDatabaseNode)element).getNodeName();
}
@Override
public Color getForeground(Object element) {
return null;
}
@Override
public Color getBackground(Object element) {
if (element instanceof DBNDatabaseNode) {
final DBPDataSourceContainer container = ((DBNDatabaseNode) element).getDataSourceContainer();
if (container != null) {
return UIUtils.getConnectionColor((container.getConnectionConfiguration()));
}
}
return null;
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册