提交 e4451155 编写于 作者: S serge@jkiss.org

Navigator view: handle preferences changes (refresh view on valuable props change)

上级 19cddf8e
......@@ -33,6 +33,8 @@ import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.utils.ArrayUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
......@@ -126,6 +128,20 @@ public class DBNProject extends DBNResource
}
}
@Override
public DBNNode[] getChildren(DBRProgressMonitor monitor) throws DBException {
if (!DBWorkbench.getPlatform().getPreferenceStore().getBoolean(ModelPreferences.NAVIGATOR_SHOW_FOLDER_PLACEHOLDERS)) {
// Remove non-existing resources (placeholders)
List<DBNNode> children = new ArrayList<>();
Collections.addAll(children, super.getChildren(monitor));
children.removeIf(node ->
node instanceof DBNResource && !((DBNResource) node).getResource().exists());
return children.toArray(new DBNNode[0]);
}
return super.getChildren(monitor);
}
@Override
protected DBNNode[] readChildNodes(DBRProgressMonitor monitor) throws DBException
{
......@@ -148,15 +164,12 @@ public class DBNProject extends DBNResource
@Override
protected IResource[] addImplicitMembers(IResource[] members) {
if (DBWorkbench.getPlatform().getPreferenceStore().getBoolean(ModelPreferences.NAVIGATOR_SHOW_FOLDER_PLACEHOLDERS)) {
// Add non-existing folders
DBPProjectManager projectManager = getModel().getPlatform().getProjectManager();
for (DBPResourceHandlerDescriptor rh : projectManager.getAllResourceHandlers()) {
IFolder rhDefaultRoot = projectManager.getResourceDefaultRoot(getProject(), rh, false);
if (rhDefaultRoot != null && !rhDefaultRoot.exists()) {
// Add as explicit member
members = ArrayUtils.add(IResource.class, members, rhDefaultRoot);
}
DBPProjectManager projectManager = getModel().getPlatform().getProjectManager();
for (DBPResourceHandlerDescriptor rh : projectManager.getAllResourceHandlers()) {
IFolder rhDefaultRoot = projectManager.getResourceDefaultRoot(getProject(), rh, false);
if (rhDefaultRoot != null && !rhDefaultRoot.exists()) {
// Add as explicit member
members = ArrayUtils.add(IResource.class, members, rhDefaultRoot);
}
}
return super.addImplicitMembers(members);
......
......@@ -22,6 +22,7 @@ import org.eclipse.core.runtime.NullProgressMonitor;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ModelPreferences;
import org.jkiss.dbeaver.model.DBConstants;
import org.jkiss.dbeaver.model.DBIcon;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
......@@ -29,6 +30,7 @@ import org.jkiss.dbeaver.model.DBPImage;
import org.jkiss.dbeaver.model.app.DBPResourceHandler;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.utils.ArrayUtils;
import org.jkiss.utils.CommonUtils;
......
......@@ -25,11 +25,13 @@ import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.views.properties.IPropertySheetPage;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.ModelPreferences;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.IDataSourceContainerProvider;
import org.jkiss.dbeaver.model.navigator.*;
import org.jkiss.dbeaver.model.navigator.meta.DBXTreeNodeHandler;
import org.jkiss.dbeaver.model.preferences.DBPPreferenceListener;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.runtime.ui.UIServiceConnections;
import org.jkiss.dbeaver.runtime.ui.UIServiceSQL;
......@@ -46,8 +48,8 @@ import org.jkiss.utils.CommonUtils;
import java.util.Collection;
public abstract class NavigatorViewBase extends ViewPart implements INavigatorModelView, IDataSourceContainerProvider
{
public abstract class NavigatorViewBase extends ViewPart implements INavigatorModelView, IDataSourceContainerProvider, DBPPreferenceListener {
public enum DoubleClickBehavior {
EDIT,
CONNECT,
......@@ -174,6 +176,8 @@ public abstract class NavigatorViewBase extends ViewPart implements INavigatorMo
// Add drag and drop support
NavigatorUtils.addDragAndDropSupport(navigatorTree.getViewer());
DBWorkbench.getPlatform().getPreferenceStore().addPropertyChangeListener(this);
return navigatorTree;
}
......@@ -215,6 +219,8 @@ public abstract class NavigatorViewBase extends ViewPart implements INavigatorMo
@Override
public void dispose()
{
DBWorkbench.getPlatform().getPreferenceStore().removePropertyChangeListener(this);
model = null;
super.dispose();
}
......@@ -264,4 +270,20 @@ public abstract class NavigatorViewBase extends ViewPart implements INavigatorMo
}
@Override
public void preferenceChange(PreferenceChangeEvent event) {
String property = event.getProperty();
if (CommonUtils.equalObjects(event.getOldValue(), event.getNewValue())) {
return;
}
switch (property) {
case ModelPreferences.NAVIGATOR_SHOW_FOLDER_PLACEHOLDERS:
case NavigatorPreferences.NAVIGATOR_SORT_ALPHABETICALLY:
case NavigatorPreferences.NAVIGATOR_SORT_FOLDERS_FIRST:
case NavigatorPreferences.NAVIGATOR_GROUP_BY_DRIVER:
tree.getViewer().refresh();
break;
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册