properly enable/disable commands when appropriate

This commit is contained in:
Michael Becker 2021-02-20 14:24:39 -05:00
parent 9872518396
commit c838d4be27
No known key found for this signature in database
GPG Key ID: 98C333A81F18C22C
2 changed files with 111 additions and 0 deletions

View File

@ -110,6 +110,9 @@ namespace UniversalEditor.UserInterface
// we have to process key shortcuts manually if we do not use a traditional menu bar
foreach (Command cmd in ((UIApplication)Application.Instance).Commands)
{
if (!cmd.Enabled)
continue;
if (cmd is UICommand)
{
if (((UICommand)cmd).Shortcut == null) continue;
@ -386,10 +389,95 @@ namespace UniversalEditor.UserInterface
tmToolbox.Rows.Clear();
}
pnlDocumentExplorer.CurrentEditor = editor;
UpdateMenuItems();
}
_prevEditor = editor;
}
private void UpdateMenuItems()
{
Editor editor = GetCurrentEditor();
bool hasEditor = (editor != null);
bool hasProject = CurrentProject != null;
KeyValuePair<string, object>[] kvps = new KeyValuePair<string, object>[]
{
new KeyValuePair<string, object>("Document.Title", editor?.Title),
new KeyValuePair<string, object>("Application.Title", Application.Instance.Title)
};
Application.Instance.Commands["FileSaveDocument"].Enabled = hasEditor;
Application.Instance.Commands["FileSaveDocumentAs"].Enabled = hasEditor;
Application.Instance.Commands["FileSaveProject"].Enabled = hasProject;
Application.Instance.Commands["FileSaveProjectAs"].Enabled = hasProject;
Application.Instance.Commands["FilePrint"].Enabled = hasEditor;
Application.Instance.Commands["FileCloseDocument"].Enabled = hasEditor;
Application.Instance.Commands["FileCloseProject"].Enabled = hasProject;
Application.Instance.Commands["ProjectAddNew"].Enabled = hasProject;
Application.Instance.Commands["ProjectAddExisting"].Enabled = hasProject;
Application.Instance.Commands["ProjectExclude"].Enabled = hasProject;
Application.Instance.Commands["ProjectShowAllFiles"].Enabled = hasProject;
Application.Instance.Commands["ProjectProperties"].Enabled = hasProject;
Application.Instance.Commands["BookmarksAddAll"].Enabled = GetEditorPages().Length > 0;
if (editor != null)
{
Application.Instance.Commands["FileProperties"].Enabled = editor.Selections.Count > 0;
Application.Instance.Commands["EditUndo"].Enabled = editor.UndoItemCount > 0;
Application.Instance.Commands["EditRedo"].Enabled = editor.RedoItemCount > 0;
Application.Instance.Commands["EditCut"].Enabled = editor.Selections.Count > 0;
Application.Instance.Commands["EditCopy"].Enabled = editor.Selections.Count > 0;
Application.Instance.Commands["EditPaste"].Enabled = true; // TODO: figure out whether the clipboard has a supported format
Application.Instance.Commands["EditDelete"].Enabled = editor.Selections.Count > 0;
Application.Instance.Commands["EditSelectAll"].Enabled = true;
Application.Instance.Commands["EditInvertSelection"].Enabled = editor.Selections.Count > 0;
Application.Instance.Commands["EditFindReplace"].Enabled = true;
Application.Instance.Commands["EditBatchFindReplace"].Enabled = true;
Application.Instance.Commands["EditGoTo"].Enabled = true;
Application.Instance.Commands["BookmarksAdd"].Enabled = true;
string fmt = "$(Document.Title) - $(Application.Title)"; // FIXME: replace with call to get main window title with document
Text = fmt.ReplaceVariables(kvps);
}
else
{
Application.Instance.Commands["FileProperties"].Enabled = false;
Application.Instance.Commands["EditUndo"].Enabled = false;
Application.Instance.Commands["EditRedo"].Enabled = false;
Application.Instance.Commands["EditCut"].Enabled = false;
Application.Instance.Commands["EditCopy"].Enabled = false;
Application.Instance.Commands["EditPaste"].Enabled = false;
Application.Instance.Commands["EditDelete"].Enabled = false;
Application.Instance.Commands["EditSelectAll"].Enabled = false;
Application.Instance.Commands["EditInvertSelection"].Enabled = false;
Application.Instance.Commands["EditFindReplace"].Enabled = false;
Application.Instance.Commands["EditBatchFindReplace"].Enabled = false;
Application.Instance.Commands["EditGoTo"].Enabled = false;
Application.Instance.Commands["BookmarksAdd"].Enabled = false;
string fmt = "$(Application.Title)"; // FIXME: replace with call to get main window title without document
Text = fmt.ReplaceVariables(kvps);
}
foreach (UserInterfacePlugin pl in UserInterfacePlugin.Get())
{
pl.UpdateMenuItems();
}
}
public void NewProject(bool combineObjects = false)
{
NewDialog dlg = new NewDialog();
@ -795,6 +883,8 @@ namespace UniversalEditor.UserInterface
Engine.CurrentEngine.Windows.Add(this);
Engine.CurrentEngine.LastWindow = this;
UpdateMenuItems();
}
protected override void OnGotFocus(EventArgs e)
@ -1442,6 +1532,7 @@ namespace UniversalEditor.UserInterface
set
{
pnlSolutionExplorer.Project = value;
UpdateMenuItems();
}
}

View File

@ -61,5 +61,25 @@ namespace UniversalEditor.Plugins.Collaboration
}
});
}
protected override void UpdateMenuItemsInternal()
{
base.UpdateMenuItemsInternal();
Editor ed = (Application.Instance as IHostApplication).CurrentWindow?.GetCurrentEditor();
// not sure why this is registered (in Plugins/UniversalEditor.Plugins.Collaboration/Commands/Review.uexml) as a global command, but whatever
Application.Instance.Commands["Collaboration_Comments_New"].Enabled = ed != null;
Application.Instance.Commands["Collaboration_Comments_Delete"].Enabled = ed != null;
Application.Instance.Commands["Collaboration_Comments_Previous"].Enabled = ed != null;
Application.Instance.Commands["Collaboration_Comments_Next"].Enabled = ed != null;
Application.Instance.Commands["Collaboration_Comments_ShowHideComments"].Enabled = ed != null;
Application.Instance.Commands["Collaboration_Tracking_Track"].Enabled = ed != null;
Application.Instance.Commands["Collaboration_Tracking_PreviousChange"].Enabled = ed != null;
Application.Instance.Commands["Collaboration_Tracking_NextChange"].Enabled = ed != null;
Application.Instance.Commands["Collaboration_Tracking_Lock"].Enabled = ed != null;
Application.Instance.Commands["Collaboration_Tracking_AcceptAll"].Enabled = ed != null;
}
}
}