提交 b3fa24dd 编写于 作者: S serge-rider

Editor activation enhancements

上级 5a72cd2c
......@@ -126,7 +126,7 @@ public class NavigatorHandlerObjectOpen extends NavigatorHandlerObjectBase imple
@Nullable String defaultPageId,
IWorkbenchWindow workbenchWindow)
{
return openEntityEditor(selectedNode, defaultPageId, null, null, workbenchWindow);
return openEntityEditor(selectedNode, defaultPageId, null, null, workbenchWindow, true);
}
public static IEditorPart openEntityEditor(
......@@ -134,7 +134,8 @@ public class NavigatorHandlerObjectOpen extends NavigatorHandlerObjectBase imple
@Nullable String defaultPageId,
@Nullable String defaultFolderId,
@Nullable Map<String, Object> attributes,
IWorkbenchWindow workbenchWindow)
IWorkbenchWindow workbenchWindow,
boolean activate)
{
if (selectedNode instanceof DBNDataSource) {
final DataSourceDescriptor dataSourceContainer = (DataSourceDescriptor) ((DBNDataSource)selectedNode).getDataSourceContainer();
......@@ -151,19 +152,24 @@ public class NavigatorHandlerObjectOpen extends NavigatorHandlerObjectBase imple
IEditorPart editor = findEntityEditor(workbenchWindow, selectedNode);
if (editor != null) {
boolean settingsChanged = false;
if (editor.getEditorInput() instanceof IDatabaseEditorInput) {
setInputAttributes((DatabaseEditorInput<?>) editor.getEditorInput(), defaultPageId, defaultFolderId, attributes);
settingsChanged = setInputAttributes((DatabaseEditorInput<?>) editor.getEditorInput(), defaultPageId, defaultFolderId, attributes);
}
if (editor instanceof ITabbedFolderContainer && defaultFolderId != null) {
// Activate default folder
((ITabbedFolderContainer) editor).switchFolder(defaultFolderId);
if (((ITabbedFolderContainer) editor).switchFolder(defaultFolderId)) {
settingsChanged = true;
}
}
if (!CommonUtils.isEmpty(attributes)) {
if (settingsChanged) {
if (editor instanceof IRefreshablePart) {
((IRefreshablePart) editor).refreshPart(selectedNode, true);
}
}
workbenchWindow.getActivePage().activate(editor);
if (workbenchWindow.getActivePage().getActiveEditor() != editor || activate) {
workbenchWindow.getActivePage().activate(editor);
}
return editor;
}
......@@ -263,14 +269,26 @@ public class NavigatorHandlerObjectOpen extends NavigatorHandlerObjectBase imple
}
}
private static void setInputAttributes(DatabaseEditorInput<?> editorInput, String defaultPageId, String defaultFolderId, Map<String, Object> attributes) {
editorInput.setDefaultPageId(defaultPageId);
editorInput.setDefaultFolderId(defaultFolderId);
private static boolean setInputAttributes(DatabaseEditorInput<?> editorInput, String defaultPageId, String defaultFolderId, Map<String, Object> attributes) {
boolean changed = false;
if (defaultPageId != null && !CommonUtils.equalObjects(defaultPageId, editorInput.getDefaultPageId())) {
editorInput.setDefaultPageId(defaultPageId);
changed = true;
}
if (defaultFolderId != null && !CommonUtils.equalObjects(defaultFolderId, editorInput.getDefaultFolderId())) {
editorInput.setDefaultFolderId(defaultFolderId);
changed = true;
}
if (!CommonUtils.isEmpty(attributes)) {
for (Map.Entry<String, Object> attr : attributes.entrySet()) {
editorInput.setAttribute(attr.getKey(), attr.getValue());
if (!CommonUtils.equalObjects(editorInput.getAttribute(attr.getKey()), attr.getValue())) {
editorInput.setAttribute(attr.getKey(), attr.getValue());
changed = true;
}
}
}
return changed;
}
@Override
......
......@@ -31,7 +31,7 @@ public interface ITabbedFolderContainer
/**
* Switch to specified folder ID. If folderId isnull then switches to default (fuirst) folder
*/
void switchFolder(@Nullable String folderId);
boolean switchFolder(@Nullable String folderId);
void addFolderListener(ITabbedFolderListener listener);
......
......@@ -368,16 +368,21 @@ public class TabbedFolderComposite extends Composite implements ITabbedFolderCon
}
@Override
public void switchFolder(@Nullable String folderId) {
public boolean switchFolder(@Nullable String folderId) {
for (FolderPane folderPane : folderPanes) {
for (int i = 0; i < folderPane.folderList.getNumberOfElements(); i++) {
if (folderId == null || folderPane.folderList.getElementAt(i).getInfo().getId().equals(folderId)) {
folderPane.folderList.select(i);
lastActiveFolder = folderPane;
break;
if (folderPane.folderList.getSelectionIndex() != i) {
folderPane.folderList.select(i);
lastActiveFolder = folderPane;
return true;
} else {
return false;
}
}
}
}
return false;
}
@Override
......
......@@ -154,7 +154,8 @@ public abstract class AbstractDataEditor<OBJECT_TYPE extends DBSObject> extends
DatabaseDataEditor.class.getName(),
null,
Collections.singletonMap(DatabaseDataEditor.ATTR_DATA_FILTER, newFilter),
DBeaverUI.getActiveWorkbenchWindow());
DBeaverUI.getActiveWorkbenchWindow(),
true);
if (entityEditor instanceof MultiPageEditorPart) {
Object selectedPage = ((MultiPageEditorPart) entityEditor).getSelectedPage();
......
......@@ -632,19 +632,23 @@ public class EntityEditor extends MultiPageDatabaseEditor
}
@Override
public void switchFolder(String folderId)
public boolean switchFolder(String folderId)
{
boolean changed = false;
for (IEditorPart editor : editorMap.values()) {
if (editor instanceof ITabbedFolderContainer) {
if (getActiveEditor() != editor) {
setActiveEditor(editor);
}
((ITabbedFolderContainer)editor).switchFolder(folderId);
if (((ITabbedFolderContainer)editor).switchFolder(folderId)) {
changed = true;
}
}
}
// if (getActiveEditor() instanceof IFolderedPart) {
// ((IFolderedPart)getActiveEditor()).switchFolder(folderId);
// }
return changed;
}
public void setActiveEditor(Class<?> editorInterface) {
......
......@@ -347,11 +347,12 @@ public class ObjectPropertiesEditor extends AbstractDatabaseObjectEditor<DBSObje
}
@Override
public void switchFolder(String folderId)
public boolean switchFolder(String folderId)
{
if (folderComposite != null) {
folderComposite.switchFolder(folderId);
return folderComposite.switchFolder(folderId);
}
return false;
}
@Override
......
......@@ -178,7 +178,7 @@ public class DatabaseDebugModelPresentation extends LabelProvider implements IDe
IEditorPart editorPart = new UITask<IEditorPart>() {
@Override
protected IEditorPart runTask() {
return NavigatorHandlerObjectOpen.openEntityEditor(dbnNode, null, sourceFolderId, editorAttrs, DBeaverUI.getActiveWorkbenchWindow());
return NavigatorHandlerObjectOpen.openEntityEditor(dbnNode, null, sourceFolderId, editorAttrs, DBeaverUI.getActiveWorkbenchWindow(), false);
}
}.execute();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册