提交 25f44ab4 编写于 作者: J jurgen

Checkbox tree

上级 73ab3733
......@@ -247,4 +247,8 @@ public class DBNDataSource extends DBNDatabaseNode implements IAdaptable, IDataS
return node;
}
@Override
public String toString() {
return dataSource.toString();
}
}
......@@ -155,4 +155,8 @@ public class DBNDatabaseFolder extends DBNDatabaseNode implements DBNContainer,
return childObjects;
}
@Override
public String toString() {
return meta.getChildrenType(getDataSource());
}
}
......@@ -1152,4 +1152,8 @@ public class DataSourceDescriptor
folderPath = descriptor.folderPath;
}
@Override
public String toString() {
return name + " [" + driver + "]";
}
}
......@@ -1275,6 +1275,11 @@ public class DriverDescriptor extends AbstractDescriptor implements DBPDriver
return divPos == -1 ? sourcesString : sourcesString.substring(0, divPos);
}
@Override
public String toString() {
return name;
}
static class DriversParser implements SAXListener
{
DataSourceProviderDescriptor curProvider;
......
......@@ -106,6 +106,8 @@ public abstract class AbstractSearchPage extends DialogPage implements IObjectSe
Object[] nodes = tree.getViewer() instanceof CheckboxTreeViewer ?
((CheckboxTreeViewer) tree.getViewer()).getCheckedElements() :
((IStructuredSelection)tree.getViewer().getSelection()).toArray();
Object[] grayed = tree.getViewer() instanceof CheckboxTreeViewer ?
((CheckboxTreeViewer) tree.getViewer()).getGrayedElements() : null;
for (Object obj : nodes) {
DBNNode node = (DBNNode) obj;
if (sourcesString.length() > 0) {
......
......@@ -35,12 +35,10 @@ import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.model.navigator.*;
import org.jkiss.dbeaver.model.runtime.DBRProcessListener;
import org.jkiss.dbeaver.model.struct.DBSEntity;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.DBSObjectContainer;
import org.jkiss.dbeaver.model.struct.DBSWrapper;
import org.jkiss.dbeaver.model.struct.*;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.search.AbstractSearchPage;
import org.jkiss.dbeaver.ui.views.navigator.database.CheckboxTreeManager;
import org.jkiss.dbeaver.ui.views.navigator.database.DatabaseNavigatorTree;
import org.jkiss.dbeaver.ui.views.navigator.database.load.TreeLoadNode;
import org.jkiss.utils.CommonUtils;
......@@ -145,32 +143,10 @@ public class SearchDataPage extends AbstractSearchPage {
return false;
}
});
viewer.addCheckStateListener(new CheckboxTreeManager(viewer, new Class[] {DBSDataSearcher.class}));
viewer.addCheckStateListener(new ICheckStateListener() {
@Override
public void checkStateChanged(CheckStateChangedEvent event) {
if (event.getChecked()) {
final DBNNode node = (DBNNode) event.getElement();
if (node instanceof DBNDataSource) {
DBNDataSource dsNode = (DBNDataSource) node;
dsNode.initializeNode(null, new DBRProcessListener() {
@Override
public void onProcessFinish(IStatus status)
{
if (status.isOK()) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run()
{
if (!dataSourceTree.isDisposed()) {
updateEnablement();
}
}
});
}
}
});
}
}
updateEnablement();
}
});
......
......@@ -64,7 +64,7 @@ public class SearchDataQuery implements IObjectSearchQuery {
try {
String searchString = params.getSearchString();
monitor.subTask("Collect tables");
//monitor.subTask("Collect tables");
List<DBSDataSearcher> searchers = new ArrayList<DBSDataSearcher>();
for (DBSObject object : params.sources) {
addSearchers(monitor, searchers, object);
......
/*
* Copyright (C) 2010-2014 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.views.navigator.database;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.navigator.DBNContainer;
import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.utils.CommonUtils;
import java.util.ArrayList;
import java.util.List;
public class CheckboxTreeManager implements ICheckStateListener {
private final CheckboxTreeViewer viewer;
private final Class<?>[] targetTypes;
public CheckboxTreeManager(CheckboxTreeViewer viewer, Class<?>[] targetTypes) {
this.viewer = viewer;
this.targetTypes = targetTypes;
}
@Override
public void checkStateChanged(CheckStateChangedEvent event) {
try {
VoidProgressMonitor monitor = VoidProgressMonitor.INSTANCE;
List<DBNDatabaseNode> targetChildren = new ArrayList<DBNDatabaseNode>();
List<DBNDatabaseNode> targetContainers = new ArrayList<DBNDatabaseNode>();
collectChildren(monitor, event.getElement(), targetChildren, targetContainers);
for (DBNDatabaseNode child : targetChildren) {
viewer.setChecked(child, event.getChecked());
}
for (DBNDatabaseNode container : targetContainers) {
viewer.setChecked(container, event.getChecked());
if (event.getChecked()) {
boolean missing = false;
List<DBNDatabaseNode> directChildren = container.getChildren(monitor);
if (directChildren != null) {
for (DBNDatabaseNode node : directChildren) {
if (!targetChildren.contains(node)) {
missing = true;
break;
}
}
}
viewer.setGrayed(container, missing);
} else {
viewer.setGrayed(container, false);
}
}
} catch (DBException e) {
UIUtils.showErrorDialog(viewer.getControl().getShell(), "Error", "Can't collect child nodes", e);
}
}
private boolean collectChildren(DBRProgressMonitor monitor, final Object element, List<DBNDatabaseNode> targetChildren, List<DBNDatabaseNode> targetContainers) throws DBException {
if (element instanceof DBNDatabaseNode) {
for (Class<?> type : targetTypes) {
if (type.isInstance(((DBNDatabaseNode) element).getObject())) {
targetChildren.add((DBNDatabaseNode) element);
return true;
}
}
((DBNDatabaseNode) element).initializeNode(monitor, null);
List<DBNDatabaseNode> children = ((DBNDatabaseNode) element).getChildren(monitor);
if (!CommonUtils.isEmpty(children)) {
boolean foundChild = false;
for (DBNDatabaseNode child : children) {
if (collectChildren(monitor, child, targetChildren, targetContainers)) {
foundChild = true;
}
}
if (foundChild) {
targetContainers.add((DBNDatabaseNode) element);
}
return foundChild;
}
}
return false;
}
}
......@@ -91,18 +91,18 @@ public class DatabaseNavigatorTree extends Composite implements IDBNListener
int treeStyle = SWT.H_SCROLL | SWT.V_SCROLL | style;
if (checkEnabled) {
this.viewer = new CheckboxTreeViewer(this, treeStyle);
((CheckboxTreeViewer)this.viewer).setCheckStateProvider(new ICheckStateProvider() {
@Override
public boolean isChecked(Object element) {
TreeItem widget = (TreeItem) viewer.testFindItem(element);
return widget.getChecked();
}
@Override
public boolean isGrayed(Object element) {
return element instanceof DBNContainer;
}
});
// ((CheckboxTreeViewer)this.viewer).setCheckStateProvider(new ICheckStateProvider() {
// @Override
// public boolean isChecked(Object element) {
// TreeItem widget = (TreeItem) viewer.testFindItem(element);
// return widget.getChecked();
// }
//
// @Override
// public boolean isGrayed(Object element) {
// return element instanceof DBNContainer;
// }
// });
} else {
this.viewer = new TreeViewer(this, treeStyle) {
@Override
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册