123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534 |
- using System.Collections.Generic;
- using System.Linq;
- using Codice.Client.BaseCommands;
- using UnityEditor;
- using UnityEngine;
-
- using Codice.Client.Commands;
- using Codice.CM.Common;
- using PlasticGui;
- using PlasticGui.WorkspaceWindow.Items;
- using PlasticGui.WorkspaceWindow.Open;
- using PlasticGui.WorkspaceWindow.PendingChanges;
- using PlasticGui.WorkspaceWindow.PendingChanges.Changelists;
- using Unity.PlasticSCM.Editor.UI;
- using Unity.PlasticSCM.Editor.Views.PendingChanges.Changelists;
-
- namespace Unity.PlasticSCM.Editor.Views.PendingChanges
- {
- internal class PendingChangesViewPendingChangeMenu
- {
- internal interface IMetaMenuOperations
- {
- void DiffMeta();
- void OpenMeta();
- void OpenMetaWith();
- void OpenMetaInExplorer();
- void HistoryMeta();
- bool SelectionHasMeta();
- }
-
- internal interface IAdvancedUndoMenuOperations
- {
- void UndoUnchanged();
- void UndoCheckoutsKeepingChanges();
- }
-
- internal PendingChangesViewPendingChangeMenu(
- WorkspaceInfo wkInfo,
- IPendingChangesMenuOperations pendingChangesMenuOperations,
- IChangelistMenuOperations changelistMenuOperations,
- IOpenMenuOperations openMenuOperations,
- IMetaMenuOperations metaMenuOperations,
- IAdvancedUndoMenuOperations advancedUndoMenuOperations,
- IFilesFilterPatternsMenuOperations filterMenuOperations,
- bool isGluonMode)
- {
- mPendingChangesMenuOperations = pendingChangesMenuOperations;
- mChangelistMenuOperations = changelistMenuOperations;
- mOpenMenuOperations = openMenuOperations;
- mMetaMenuOperations = metaMenuOperations;
- mAdvancedUndoMenuOperations = advancedUndoMenuOperations;
- mIsGluonMode = isGluonMode;
-
- mFilterMenuBuilder = new FilesFilterPatternsMenuBuilder(filterMenuOperations);
- mMoveToChangelistMenuBuilder = new MoveToChangelistMenuBuilder(
- wkInfo,
- changelistMenuOperations);
-
- BuildComponents();
- }
-
- internal void Popup()
- {
- GenericMenu menu = new GenericMenu();
-
- UpdateMenuItems(menu);
-
- menu.ShowAsContext();
- }
-
- internal bool ProcessKeyActionIfNeeded(Event e)
- {
- PendingChangesMenuOperations operationToExecute =
- GetPendingChangesMenuOperation(e);
-
- OpenMenuOperations openOperationToExecute =
- GetOpenMenuOperation(e);
-
- if (operationToExecute == PendingChangesMenuOperations.None &&
- openOperationToExecute == OpenMenuOperations.None)
- return false;
-
- SelectedChangesGroupInfo info =
- mPendingChangesMenuOperations.GetSelectedChangesGroupInfo();
-
- if (operationToExecute != PendingChangesMenuOperations.None)
- return ProcessKeyActionForPendingChangesMenu(
- operationToExecute, mPendingChangesMenuOperations, info);
-
- return ProcessKeyActionForOpenMenu(
- openOperationToExecute, mOpenMenuOperations, info);
- }
-
- void OpenMenuItem_Click()
- {
- mOpenMenuOperations.Open();
- }
-
- void OpenWithMenuItem_Click()
- {
- mOpenMenuOperations.OpenWith();
- }
-
- void OpenInExplorerMenuItem_Click()
- {
- mOpenMenuOperations.OpenInExplorer();
- }
-
- void OpenMetaMenuItem_Click()
- {
- mMetaMenuOperations.OpenMeta();
- }
-
- void OpenMetaWithMenuItem_Click()
- {
- mMetaMenuOperations.OpenMetaWith();
- }
-
- void OpenMetaInExplorerMenuItem_Click()
- {
- mMetaMenuOperations.OpenMetaInExplorer();
- }
-
- void DiffMenuItem_Click()
- {
- mPendingChangesMenuOperations.Diff();
- }
-
- void DiffMetaMenuItem_Click()
- {
- mMetaMenuOperations.DiffMeta();
- }
-
- void UndoUnchangedMenuItem_Click()
- {
- mAdvancedUndoMenuOperations.UndoUnchanged();
- }
-
- void UndoCheckoutsKeepingChangesMenuItem_Click()
- {
- mAdvancedUndoMenuOperations.UndoCheckoutsKeepingChanges();
- }
-
- void UndoChangesMenuItem_Click()
- {
- mPendingChangesMenuOperations.UndoChanges();
- }
-
- void CheckoutMenuItem_Click()
- {
- mPendingChangesMenuOperations.ApplyLocalChanges();
- }
-
- void DeleteMenuItem_Click()
- {
- mPendingChangesMenuOperations.Delete();
- }
-
- void HistoryMenuItem_Click()
- {
- mPendingChangesMenuOperations.History();
- }
-
- void HistoryMetaMenuItem_Click()
- {
- mMetaMenuOperations.HistoryMeta();
- }
-
- void UpdateMenuItems(GenericMenu menu)
- {
- SelectedChangesGroupInfo info =
- mPendingChangesMenuOperations.GetSelectedChangesGroupInfo();
-
- PendingChangesMenuOperations operations =
- PendingChangesMenuUpdater.GetAvailableMenuOperations(info);
-
- ChangelistMenuOperations changelistOperations =
- ChangelistMenuOperations.None;
-
- OpenMenuOperations openOperations =
- GetOpenMenuOperations.ForPendingChangesView(info);
-
- bool useChangelists = PlasticGuiConfig.Get().
- Configuration.CommitUseChangeLists;
-
- if (useChangelists)
- {
- List<ChangeListInfo> selectedChangelists =
- mChangelistMenuOperations.GetSelectedChangelistInfos();
-
- changelistOperations = ChangelistMenuUpdater.
- GetAvailableMenuOperations(info, selectedChangelists);
- }
-
- if (operations == PendingChangesMenuOperations.None &&
- changelistOperations == ChangelistMenuOperations.None &&
- openOperations == OpenMenuOperations.None)
- {
- menu.AddDisabledItem(GetNoActionMenuItemContent());
- return;
- }
-
- UpdateOpenMenuItems(menu, openOperations);
-
- menu.AddSeparator(string.Empty);
-
- if (operations.HasFlag(PendingChangesMenuOperations.DiffWorkspaceContent))
- menu.AddItem(mDiffMenuItemContent, false, DiffMenuItem_Click);
- else
- menu.AddDisabledItem(mDiffMenuItemContent);
-
- if (mMetaMenuOperations.SelectionHasMeta())
- {
- if (operations.HasFlag(PendingChangesMenuOperations.DiffWorkspaceContent))
- menu.AddItem(mDiffMetaMenuItemContent, false, DiffMetaMenuItem_Click);
- else
- menu.AddDisabledItem(mDiffMetaMenuItemContent);
- }
-
- menu.AddSeparator(string.Empty);
-
- UpdateUndoMenuItems(operations, menu, info.SelectedChanges);
-
- menu.AddSeparator(string.Empty);
-
- if (operations.HasFlag(PendingChangesMenuOperations.ApplyLocalChanges))
- menu.AddItem(mCheckoutMenuItemContent, false, CheckoutMenuItem_Click);
- else
- menu.AddDisabledItem(mCheckoutMenuItemContent);
-
- if (operations.HasFlag(PendingChangesMenuOperations.Delete))
- menu.AddItem(mDeleteMenuItemContent, false, DeleteMenuItem_Click);
- else
- menu.AddDisabledItem(mDeleteMenuItemContent);
-
- if (useChangelists)
- {
- menu.AddSeparator(string.Empty);
-
- mMoveToChangelistMenuBuilder.UpdateMenuItems(
- menu,
- changelistOperations,
- info.SelectedChanges,
- info.ChangelistsWithSelectedChanges);
- }
-
- menu.AddSeparator(string.Empty);
-
- mFilterMenuBuilder.UpdateMenuItems(
- menu, FilterMenuUpdater.GetMenuActions(info));
-
- menu.AddSeparator(string.Empty);
-
- if (operations.HasFlag(PendingChangesMenuOperations.History))
- menu.AddItem(mViewHistoryMenuItemContent, false, HistoryMenuItem_Click);
- else
- menu.AddDisabledItem(mViewHistoryMenuItemContent, false);
-
- if (mMetaMenuOperations.SelectionHasMeta())
- {
- if (operations.HasFlag(PendingChangesMenuOperations.History))
- menu.AddItem(mViewHistoryMetaMenuItemContent, false, HistoryMetaMenuItem_Click);
- else
- menu.AddDisabledItem(mViewHistoryMetaMenuItemContent);
- }
- }
-
- void UpdateOpenMenuItems(GenericMenu menu, OpenMenuOperations operations)
- {
- if (!operations.HasFlag(OpenMenuOperations.Open) &&
- !operations.HasFlag(OpenMenuOperations.OpenWith) &&
- !operations.HasFlag(OpenMenuOperations.OpenInExplorer))
- {
- menu.AddDisabledItem(mOpenSubmenuItemContent);
- return;
- }
-
- if (operations.HasFlag(OpenMenuOperations.Open))
- menu.AddItem(mOpenMenuItemContent, false, OpenMenuItem_Click);
- else
- menu.AddDisabledItem(mOpenMenuItemContent);
-
- if (operations.HasFlag(OpenMenuOperations.OpenWith))
- menu.AddItem(mOpenWithMenuItemContent, false, OpenWithMenuItem_Click);
- else
- menu.AddDisabledItem(mOpenWithMenuItemContent);
-
- if (operations.HasFlag(OpenMenuOperations.OpenInExplorer))
- menu.AddItem(mOpenInExplorerMenuItemContent, false, OpenInExplorerMenuItem_Click);
- else
- menu.AddDisabledItem(mOpenInExplorerMenuItemContent);
-
- if (!mMetaMenuOperations.SelectionHasMeta())
- return;
-
- menu.AddSeparator(PlasticLocalization.GetString(PlasticLocalization.Name.ItemsMenuItemOpen) + "/");
-
- if (operations.HasFlag(OpenMenuOperations.Open))
- menu.AddItem(mOpenMetaMenuItemContent, false, OpenMetaMenuItem_Click);
- else
- menu.AddDisabledItem(mOpenMetaMenuItemContent);
-
- if (operations.HasFlag(OpenMenuOperations.OpenWith))
- menu.AddItem(mOpenMetaWithMenuItemContent, false, OpenMetaWithMenuItem_Click);
- else
- menu.AddDisabledItem(mOpenMetaWithMenuItemContent);
-
- if (operations.HasFlag(OpenMenuOperations.OpenInExplorer))
- menu.AddItem(mOpenMetaInExplorerMenuItemContent, false, OpenMetaInExplorerMenuItem_Click);
- else
- menu.AddDisabledItem(mOpenMetaInExplorerMenuItemContent);
- }
-
- void UpdateUndoMenuItems(PendingChangesMenuOperations operations, GenericMenu menu, List<ChangeInfo> changes)
- {
- if (!operations.HasFlag(PendingChangesMenuOperations.UndoChanges))
- {
- menu.AddDisabledItem(mUndoChangesMenuItemContent);
- return;
- }
-
- if (mIsGluonMode)
- {
- menu.AddItem(mUndoChangesMenuItemContent, false, UndoChangesMenuItem_Click);
- return;
- }
-
- if (changes.Any(change => !ChangeTypesOperator.AreEquals(change.ChangeTypes, ChangeTypes.CheckedOut)))
- {
- menu.AddItem(mUndoChangesMenuItemContent, false, UndoChangesMenuItem_Click);
- }
-
- if (changes.Any(change => ChangeTypesOperator.AreEquals(change.ChangeTypes, ChangeTypes.CheckedOut)))
- {
- menu.AddItem(mUndoUnchangedMenuItemContent, false, UndoUnchangedMenuItem_Click);
- }
-
- if (changes.Any(change =>
- ChangeTypesOperator.ContainsAny(change.ChangeTypes, ChangeTypes.CheckedOut) &&
- ChangeTypesOperator.ContainsOther(change.ChangeTypes, ChangeTypes.CheckedOut)))
- {
- menu.AddItem(mUndoCheckoutsKeepingChangesMenuItemContent, false, UndoCheckoutsKeepingChangesMenuItem_Click);
- }
- }
-
- GUIContent GetNoActionMenuItemContent()
- {
- if (mNoActionMenuItemContent == null)
- {
- mNoActionMenuItemContent = new GUIContent(PlasticLocalization.GetString(
- PlasticLocalization.Name.NoActionMenuItem));
- }
-
- return mNoActionMenuItemContent;
- }
-
- void BuildComponents()
- {
- mOpenSubmenuItemContent = new GUIContent(
- PlasticLocalization.GetString(PlasticLocalization.Name.ItemsMenuItemOpen));
- mOpenMenuItemContent = new GUIContent(
- UnityMenuItem.GetText(
- PlasticLocalization.GetString(PlasticLocalization.Name.ItemsMenuItemOpen),
- string.Format("{0} {1}",
- PlasticLocalization.GetString(PlasticLocalization.Name.ItemsMenuItemOpen),
- GetPlasticShortcut.ForOpen())));
- mOpenWithMenuItemContent = new GUIContent(
- UnityMenuItem.GetText(
- PlasticLocalization.GetString(PlasticLocalization.Name.ItemsMenuItemOpen),
- PlasticLocalization.GetString(PlasticLocalization.Name.ItemsMenuItemOpenWith)));
- mOpenInExplorerMenuItemContent = new GUIContent(
- UnityMenuItem.GetText(
- PlasticLocalization.GetString(PlasticLocalization.Name.ItemsMenuItemOpen),
- PlasticLocalization.GetString(PlasticLocalization.Name.OpenInExplorerMenuItem)));
- mOpenMetaMenuItemContent = new GUIContent(
- UnityMenuItem.GetText(
- PlasticLocalization.GetString(PlasticLocalization.Name.ItemsMenuItemOpen),
- PlasticLocalization.GetString(PlasticLocalization.Name.OpenMeta)));
- mOpenMetaWithMenuItemContent = new GUIContent(
- UnityMenuItem.GetText(
- PlasticLocalization.GetString(PlasticLocalization.Name.ItemsMenuItemOpen),
- PlasticLocalization.GetString(PlasticLocalization.Name.OpenMetaWith)));
- mOpenMetaInExplorerMenuItemContent = new GUIContent(
- UnityMenuItem.GetText(
- PlasticLocalization.GetString(PlasticLocalization.Name.ItemsMenuItemOpen),
- PlasticLocalization.GetString(PlasticLocalization.Name.OpenMetaInExplorer)));
- mDiffMenuItemContent = new GUIContent(string.Format("{0} {1}",
- PlasticLocalization.GetString(PlasticLocalization.Name.DiffMenuItem),
- GetPlasticShortcut.ForDiff()));
- mDiffMetaMenuItemContent = new GUIContent(
- PlasticLocalization.GetString(PlasticLocalization.Name.DiffMetaMenuItem));
- mUndoChangesMenuItemContent = new GUIContent(
- PlasticLocalization.GetString(PlasticLocalization.Name.PendingChangesMenuItemUndoChanges));
- mUndoUnchangedMenuItemContent = new GUIContent(
- PlasticLocalization.GetString(PlasticLocalization.Name.UndoUnchangedButton));
- mUndoCheckoutsKeepingChangesMenuItemContent = new GUIContent(
- PlasticLocalization.GetString(PlasticLocalization.Name.UndoCheckoutsKeepingChanges));
- mCheckoutMenuItemContent = new GUIContent(
- PlasticLocalization.GetString(PlasticLocalization.Name.PendingChangesMenuItemCheckout));
- mDeleteMenuItemContent = new GUIContent(string.Format("{0} {1}",
- PlasticLocalization.GetString(PlasticLocalization.Name.PendingChangesMenuItemDelete),
- GetPlasticShortcut.ForDelete()));
- mViewHistoryMenuItemContent = new GUIContent(string.Format("{0} {1}",
- PlasticLocalization.GetString(PlasticLocalization.Name.ViewHistoryMenuItem),
- GetPlasticShortcut.ForHistory()));
- mViewHistoryMetaMenuItemContent = new GUIContent(
- PlasticLocalization.GetString(PlasticLocalization.Name.ViewHistoryMetaMenuItem));
-
- mFilterMenuBuilder.BuildIgnoredSubmenuItem();
- mFilterMenuBuilder.BuildHiddenChangesSubmenuItem();
-
- mMoveToChangelistMenuBuilder.BuildComponents();
- }
-
- static bool ProcessKeyActionForPendingChangesMenu(
- PendingChangesMenuOperations operationToExecute,
- IPendingChangesMenuOperations pendingChangesMenuOperations,
- SelectedChangesGroupInfo info)
- {
- PendingChangesMenuOperations operations =
- PendingChangesMenuUpdater.GetAvailableMenuOperations(info);
-
- if (!operations.HasFlag(operationToExecute))
- return false;
-
- ProcessPendingChangesMenuOperation(
- operationToExecute, pendingChangesMenuOperations);
-
- return true;
- }
-
- static bool ProcessKeyActionForOpenMenu(
- OpenMenuOperations openOperationToExecute,
- IOpenMenuOperations openMenuOperations,
- SelectedChangesGroupInfo info)
- {
- OpenMenuOperations openOperations =
- GetOpenMenuOperations.ForPendingChangesView(info);
-
- if (!openOperations.HasFlag(openOperationToExecute))
- return false;
-
- ProcessOpenMenuOperation(
- openOperationToExecute, openMenuOperations);
-
- return true;
- }
-
- static void ProcessPendingChangesMenuOperation(
- PendingChangesMenuOperations operationToExecute,
- IPendingChangesMenuOperations pendingChangesMenuOperations)
- {
- if (operationToExecute == PendingChangesMenuOperations.DiffWorkspaceContent)
- {
- pendingChangesMenuOperations.Diff();
- return;
- }
-
- if (operationToExecute == PendingChangesMenuOperations.Delete)
- {
- pendingChangesMenuOperations.Delete();
- return;
- }
-
- if (operationToExecute == PendingChangesMenuOperations.History)
- {
- pendingChangesMenuOperations.History();
- return;
- }
- }
-
- static void ProcessOpenMenuOperation(
- OpenMenuOperations openOperationToExecute,
- IOpenMenuOperations openMenuOperations)
- {
- if (openOperationToExecute == OpenMenuOperations.Open)
- {
- openMenuOperations.Open();
- return;
- }
- }
-
- static PendingChangesMenuOperations GetPendingChangesMenuOperation(Event e)
- {
- if (Keyboard.IsControlOrCommandKeyPressed(e) && Keyboard.IsKeyPressed(e, KeyCode.D))
- return PendingChangesMenuOperations.DiffWorkspaceContent;
-
- if (Keyboard.IsKeyPressed(e, KeyCode.Delete))
- return PendingChangesMenuOperations.Delete;
-
- if (Keyboard.IsControlOrCommandKeyPressed(e) && Keyboard.IsKeyPressed(e, KeyCode.H))
- return PendingChangesMenuOperations.History;
-
- return PendingChangesMenuOperations.None;
- }
-
- static OpenMenuOperations GetOpenMenuOperation(Event e)
- {
- if (Keyboard.IsShiftPressed(e) && Keyboard.IsKeyPressed(e, KeyCode.O))
- return OpenMenuOperations.Open;
-
- return OpenMenuOperations.None;
- }
-
- GUIContent mNoActionMenuItemContent;
-
- GUIContent mOpenSubmenuItemContent;
- GUIContent mOpenMenuItemContent;
- GUIContent mOpenWithMenuItemContent;
- GUIContent mOpenInExplorerMenuItemContent;
- GUIContent mOpenMetaMenuItemContent;
- GUIContent mOpenMetaWithMenuItemContent;
- GUIContent mOpenMetaInExplorerMenuItemContent;
- GUIContent mDiffMenuItemContent;
- GUIContent mDiffMetaMenuItemContent;
- GUIContent mUndoChangesMenuItemContent;
- GUIContent mUndoUnchangedMenuItemContent;
- GUIContent mUndoCheckoutsKeepingChangesMenuItemContent;
- GUIContent mCheckoutMenuItemContent;
- GUIContent mDeleteMenuItemContent;
- GUIContent mViewHistoryMenuItemContent;
- GUIContent mViewHistoryMetaMenuItemContent;
-
- readonly WorkspaceInfo mWkInfo;
- readonly IMetaMenuOperations mMetaMenuOperations;
- readonly IOpenMenuOperations mOpenMenuOperations;
- readonly IChangelistMenuOperations mChangelistMenuOperations;
- readonly IPendingChangesMenuOperations mPendingChangesMenuOperations;
- readonly IAdvancedUndoMenuOperations mAdvancedUndoMenuOperations;
- readonly FilesFilterPatternsMenuBuilder mFilterMenuBuilder;
- readonly MoveToChangelistMenuBuilder mMoveToChangelistMenuBuilder;
- readonly bool mIsGluonMode;
- }
- }
|