fix #448 - expand all / collapse all for workspace tree

This commit is contained in:
Vadim Lopatin 2017-09-19 14:24:05 +03:00
parent 8705aff7df
commit e0c267080f
7 changed files with 49 additions and 8 deletions

View File

@ -12,7 +12,7 @@
"stringImportPaths": ["views"],
"dependencies": {
"dlangui": "==0.9.139",
"dlangui": "==0.9.140",
"dsymbol": "~>0.2.9",
"dcd": "~>0.9.1"
},

View File

@ -60,6 +60,8 @@ enum IDEActions : int {
ProjectFolderOpenItem,
ProjectFolderRenameItem,
ProjectFolderRefresh,
ProjectFolderExpandAll,
ProjectFolderCollapseAll,
GoToDefinition,
GetCompletionSuggestions,
@ -86,6 +88,9 @@ const Action ACTION_PROJECT_FOLDER_OPEN_ITEM = new Action(IDEActions.ProjectFold
const Action ACTION_PROJECT_FOLDER_REMOVE_ITEM = new Action(IDEActions.ProjectFolderRemoveItem, "MENU_PROJECT_FOLDER_REMOVE_ITEM"c);
const Action ACTION_PROJECT_FOLDER_RENAME_ITEM = new Action(IDEActions.ProjectFolderRenameItem, "MENU_PROJECT_FOLDER_RENAME_ITEM"c);
const Action ACTION_PROJECT_FOLDER_REFRESH = new Action(IDEActions.ProjectFolderRefresh, "MENU_PROJECT_FOLDER_REFRESH"c);
const Action ACTION_PROJECT_FOLDER_EXPAND_ALL = new Action(IDEActions.ProjectFolderExpandAll, "MENU_PROJECT_FOLDER_EXPAND_ALL"c);
const Action ACTION_PROJECT_FOLDER_COLLAPSE_ALL = new Action(IDEActions.ProjectFolderCollapseAll, "MENU_PROJECT_FOLDER_COLLAPSE_ALL"c);
const Action ACTION_FILE_WORKSPACE_CLOSE = new Action(IDEActions.CloseWorkspace, "MENU_FILE_WORKSPACE_CLOSE"c).disableByDefault();
const Action ACTION_FILE_NEW_SOURCE_FILE = new Action(IDEActions.FileNew, "MENU_FILE_NEW_SOURCE_FILE"c, "document-new", KeyCode.KEY_N, KeyFlag.Control);

View File

@ -928,6 +928,10 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
case IDEActions.ViewToggleTabPositionMarks:
a.state = _settings.showTabPositionMarks ? ACTION_STATE_CHECKED : ACTION_STATE_ENABLED;
return true;
case IDEActions.ProjectFolderExpandAll:
case IDEActions.ProjectFolderCollapseAll:
a.state = currentWorkspace !is null ? ACTION_STATE_ENABLED : ACTION_STATE_DISABLE;
return true;
default:
return super.handleActionStateRequest(a);
}
@ -1220,6 +1224,12 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
case IDEActions.ProjectFolderRefresh:
refreshProjectItem(a.objectParam);
return true;
case IDEActions.ProjectFolderExpandAll:
_wsPanel.expandAll(a);
return true;
case IDEActions.ProjectFolderCollapseAll:
_wsPanel.collapseAll(a);
return true;
case IDEActions.CloseWorkspace:
closeWorkspace();
return true;

View File

@ -86,8 +86,11 @@ class WorkspacePanel : DockWindow {
_tree.popupMenu = &onTreeItemPopupMenu;
_workspacePopupMenu = new MenuItem();
_workspacePopupMenu.add(ACTION_PROJECT_FOLDER_REFRESH,
ACTION_FILE_WORKSPACE_CLOSE);
_workspacePopupMenu.add(ACTION_PROJECT_FOLDER_REFRESH,
ACTION_FILE_WORKSPACE_CLOSE,
ACTION_PROJECT_FOLDER_EXPAND_ALL,
ACTION_PROJECT_FOLDER_COLLAPSE_ALL
);
_projectPopupMenu = new MenuItem();
_projectPopupMenu.add(ACTION_PROJECT_SET_STARTUP,
@ -100,19 +103,22 @@ class WorkspacePanel : DockWindow {
ACTION_PROJECT_UPDATE_DEPENDENCIES,
ACTION_PROJECT_REVEAL_IN_EXPLORER,
ACTION_PROJECT_SETTINGS,
ACTION_PROJECT_FOLDER_EXPAND_ALL,
ACTION_PROJECT_FOLDER_COLLAPSE_ALL
//ACTION_PROJECT_FOLDER_REMOVE_ITEM
);
_folderPopupMenu = new MenuItem();
_folderPopupMenu.add(ACTION_FILE_NEW_SOURCE_FILE, ACTION_PROJECT_FOLDER_REFRESH, ACTION_PROJECT_FOLDER_OPEN_ITEM,
_folderPopupMenu.add(ACTION_FILE_NEW_SOURCE_FILE, ACTION_PROJECT_FOLDER_REFRESH, ACTION_PROJECT_FOLDER_OPEN_ITEM,
ACTION_PROJECT_FOLDER_EXPAND_ALL, ACTION_PROJECT_FOLDER_COLLAPSE_ALL
//ACTION_PROJECT_FOLDER_REMOVE_ITEM,
//ACTION_PROJECT_FOLDER_RENAME_ITEM
);
_filePopupMenu = new MenuItem();
_filePopupMenu.add(ACTION_FILE_NEW_SOURCE_FILE, ACTION_PROJECT_FOLDER_REFRESH,
ACTION_PROJECT_FOLDER_OPEN_ITEM,
ACTION_PROJECT_FOLDER_REMOVE_ITEM,
_filePopupMenu.add(ACTION_FILE_NEW_SOURCE_FILE, ACTION_PROJECT_FOLDER_REFRESH,
ACTION_PROJECT_FOLDER_OPEN_ITEM,
ACTION_PROJECT_FOLDER_REMOVE_ITEM,
//ACTION_PROJECT_FOLDER_RENAME_ITEM
);
return _tree;
@ -123,6 +129,7 @@ class WorkspacePanel : DockWindow {
protected MenuItem _folderPopupMenu;
protected MenuItem _filePopupMenu;
protected string _popupMenuSelectedItemId;
protected TreeItem _popupMenuSelectedItem;
protected void onPopupMenuItem(MenuItem item) {
if (item.action)
handleAction(item.action);
@ -131,6 +138,7 @@ class WorkspacePanel : DockWindow {
protected MenuItem onTreeItemPopupMenu(TreeItems source, TreeItem selectedItem) {
MenuItem menu = null;
_popupMenuSelectedItemId = selectedItem.id;
_popupMenuSelectedItem = selectedItem;
if (selectedItem.intParam == ProjectItemType.SourceFolder) {
menu = _folderPopupMenu;
} else if (selectedItem.intParam == ProjectItemType.SourceFile) {
@ -217,6 +225,20 @@ class WorkspacePanel : DockWindow {
_tree.items.setDefaultItem(defaultItem);
}
void expandAll(const Action a) {
if (!_workspace)
return;
if (_popupMenuSelectedItem)
_popupMenuSelectedItem.expandAll();
}
void collapseAll(const Action a) {
if (!_workspace)
return;
if (_popupMenuSelectedItem)
_popupMenuSelectedItem.collapseAll();
}
protected bool[string] _itemStates;
protected bool _itemStatesDirty;
protected void readExpandedStateFromWorkspace() {

View File

@ -1 +1 @@
v0.7.85
v0.7.86

View File

@ -133,6 +133,8 @@ MENU_PROJECT_FOLDER_REMOVE_ITEM=Remove
MENU_PROJECT_FOLDER_RENAME_ITEM=Rename...
MENU_PROJECT_FOLDER_REFRESH=Refresh
MENU_PROJECT_REVEAL_IN_EXPLORER=Reveal in Explorer
MENU_PROJECT_FOLDER_EXPAND_ALL=Expand all
MENU_PROJECT_FOLDER_COLLAPSE_ALL=Collapse all
HEADER_SETTINGS=DlangIDE settings
HEADER_OPEN_WORKSPACE_OR_PROJECT=Open Workspace or Project

View File

@ -133,6 +133,8 @@ MENU_PROJECT_FOLDER_REMOVE_ITEM=Удалить
MENU_PROJECT_FOLDER_RENAME_ITEM=Переименовать...
MENU_PROJECT_FOLDER_REFRESH=Обновить
MENU_PROJECT_REVEAL_IN_EXPLORER=Открыть в проводнике
MENU_PROJECT_FOLDER_EXPAND_ALL=Раскрыть все
MENU_PROJECT_FOLDER_COLLAPSE_ALL=Свернуть все
HEADER_SETTINGS=DlangIDE настройки
HEADER_OPEN_WORKSPACE_OR_PROJECT=Открыть рабочее пространство или проект