/* * DBeaver - Universal Database Manager * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jkiss.dbeaver.ui.navigator.database; import org.eclipse.jface.viewers.*; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import org.jkiss.dbeaver.model.DBPDataSourceContainer; import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration; import org.jkiss.dbeaver.model.navigator.DBNDataSource; import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode; import org.jkiss.dbeaver.model.navigator.DBNNode; import org.jkiss.dbeaver.model.struct.DBSWrapper; import org.jkiss.dbeaver.ui.DBeaverIcons; import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.navigator.NavigatorUtils; import org.jkiss.utils.CommonUtils; /** * DatabaseNavigatorLabelProvider */ class DatabaseNavigatorLabelProvider extends ColumnLabelProvider implements IFontProvider, IColorProvider { private Font normalFont; private Font boldFont; private Font italicFont; //private Font boldItalicFont; private Color lockedForeground; private Color transientForeground; DatabaseNavigatorLabelProvider(Viewer viewer) { //this.view = view; this.normalFont = viewer.getControl().getFont(); this.boldFont = UIUtils.makeBoldFont(normalFont); this.italicFont = UIUtils.modifyFont(normalFont, SWT.ITALIC); //this.boldItalicFont = UIUtils.modifyFont(normalFont, SWT.BOLD | SWT.ITALIC); this.lockedForeground = Display.getDefault().getSystemColor(SWT.COLOR_GRAY); this.transientForeground = Display.getDefault().getSystemColor(SWT.COLOR_DARK_RED); } @Override public void dispose() { UIUtils.dispose(boldFont); boldFont = null; UIUtils.dispose(italicFont); italicFont = null; // UIUtils.dispose(boldItalicFont); // boldItalicFont = null; super.dispose(); } @Override public String getText(Object obj) { String text; if (obj instanceof ILabelProvider) { text = ((ILabelProvider)obj).getText(obj); /* } else if (obj instanceof DBSObject) { text = ((DBSObject) obj).getName(); */ } else if (obj instanceof DBNNode) { text = ((DBNNode) obj).getNodeName(); } else { text = obj.toString(); } if (text == null) { text = "?"; } if (isFilteredElement(obj)) { text += " (...)"; } return text; } @Override public Image getImage(Object obj) { if (obj instanceof ILabelProvider) { return ((ILabelProvider)obj).getImage(obj); } if (obj instanceof DBNNode) { return DBeaverIcons.getImage(((DBNNode) obj).getNodeIconDefault()); } else { return null; } } @Override public Font getFont(Object element) { if (NavigatorUtils.isDefaultElement(element)) { return boldFont; } else { if (element instanceof DBNDataSource) { final DBPDataSourceContainer ds = ((DBNDataSource) element).getDataSourceContainer(); if (ds != null && (ds.isProvided() || ds.isTemporary())) { return italicFont; } } return normalFont; } } @Override public Color getForeground(Object element) { if (element instanceof DBNNode) { DBNNode node = (DBNNode)element; if (node.isLocked()) { return lockedForeground; } if (node instanceof DBSWrapper && ((DBSWrapper)node).getObject() != null && !((DBSWrapper)node).getObject().isPersisted()) { return transientForeground; } } return null; } @Override public Color getBackground(Object element) { if (element instanceof DBNDataSource) { DBPDataSourceContainer ds = ((DBNDatabaseNode) element).getDataSourceContainer(); if (ds != null) { return UIUtils.getConnectionColor(ds.getConnectionConfiguration()); } } return null; } private boolean isFilteredElement(Object element) { return element instanceof DBNNode && ((DBNNode) element).isFiltered(); } @Override public String getToolTipText(Object element) { if (element instanceof DBNDataSource) { final DBPDataSourceContainer ds = ((DBNDataSource) element).getDataSourceContainer(); if (ds != null) { StringBuilder info = new StringBuilder(); info.append("Name: ").append(ds.getName()).append("\n"); final DBPConnectionConfiguration cfg = ds.getConnectionConfiguration(); if (!CommonUtils.isEmpty(cfg.getUrl())) { info.append("URL: ").append(cfg.getUrl()).append("\n"); } else if (!CommonUtils.isEmpty(cfg.getDatabaseName())) { info.append("Database: ").append(cfg.getDatabaseName()).append("\n"); } if (!CommonUtils.isEmpty(cfg.getUserName())) { info.append("User: ").append(cfg.getUserName()).append("\n"); } if (!CommonUtils.isEmpty(ds.getDescription())) { info.append("Description: ").append(ds.getDescription()).append("\n"); } /* if (cfg.getConnectionType() != null) { info.append("Type: ").append(cfg.getConnectionType().getName()).append("\n"); } */ if (ds.isConnectionReadOnly()) { info.append("Read-only connection\n"); } if (ds.isProvided()) { info.append("Provided connection\n"); } return info.toString().trim(); } } else if (element instanceof DBNDatabaseNode) { final String description = ((DBNDatabaseNode) element).getNodeDescription(); if (!CommonUtils.isEmptyTrimmed(description)) { return description; } } return null; } @Override public int getToolTipDisplayDelayTime(Object object) { return 500; } @Override public int getToolTipStyle(Object object) { return super.getToolTipStyle(object); } }