123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- using UnityEditor;
- using UnityEngine;
-
- using Codice.Client.Common.EventTracking;
- using Codice.CM.Common;
- using PlasticGui.WorkspaceWindow.QueryViews.Changesets;
- using PlasticGui;
- using Unity.PlasticSCM.Editor.Tool;
- using Unity.PlasticSCM.Editor.UI;
-
- namespace Unity.PlasticSCM.Editor.Views.Changesets
- {
- internal class ChangesetsViewMenu
- {
- internal GenericMenu Menu { get { return mMenu; } }
-
- public interface IMenuOperations
- {
- void DiffBranch();
- ChangesetExtendedInfo GetSelectedChangeset();
- }
-
- internal ChangesetsViewMenu(
- WorkspaceInfo wkInfo,
- IChangesetMenuOperations changesetMenuOperations,
- IMenuOperations menuOperations,
- LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
- bool isGluonMode)
- {
- mWkInfo = wkInfo;
- mChangesetMenuOperations = changesetMenuOperations;
- mMenuOperations = menuOperations;
- mShowDownloadPlasticExeWindow = showDownloadPlasticExeWindow;
- mIsGluonMode = isGluonMode;
-
- BuildComponents();
- }
-
- internal void Popup()
- {
- mMenu = new GenericMenu();
-
- UpdateMenuItems(mMenu);
-
- mMenu.ShowAsContext();
- }
-
- internal bool ProcessKeyActionIfNeeded(Event e)
- {
- int selectedChangesetsCount = mChangesetMenuOperations.GetSelectedChangesetsCount();
-
- ChangesetMenuOperations operationToExecute = GetMenuOperations(
- e, selectedChangesetsCount > 1);
-
- if (operationToExecute == ChangesetMenuOperations.None)
- return false;
-
- ChangesetMenuOperations operations = ChangesetMenuUpdater.GetAvailableMenuOperations(
- selectedChangesetsCount,
- mIsGluonMode,
- mMenuOperations.GetSelectedChangeset().BranchId,
- mLoadedBranchId,
- false);
-
- if (!operations.HasFlag(operationToExecute))
- return false;
-
- ProcessMenuOperation(operationToExecute, mChangesetMenuOperations);
- return true;
- }
-
- internal void SetLoadedBranchId(long loadedBranchId)
- {
- mLoadedBranchId = loadedBranchId;
- }
-
- void DiffChangesetMenuItem_Click()
- {
- if (mShowDownloadPlasticExeWindow.Show(
- mWkInfo,
- mIsGluonMode,
- TrackFeatureUseEvent.Features.InstallPlasticCloudFromDiffChangeset,
- TrackFeatureUseEvent.Features.InstallPlasticEnterpriseFromDiffChangeset,
- TrackFeatureUseEvent.Features.CancelPlasticInstallationFromDiffChangeset))
- return;
-
- mChangesetMenuOperations.DiffChangeset();
- }
-
- void DiffSelectedChangesetsMenuItem_Click()
- {
- if (mShowDownloadPlasticExeWindow.Show(
- mWkInfo,
- mIsGluonMode,
- TrackFeatureUseEvent.Features.InstallPlasticCloudFromDiffSelectedChangesets,
- TrackFeatureUseEvent.Features.InstallPlasticEnterpriseFromDiffSelectedChangesets,
- TrackFeatureUseEvent.Features.CancelPlasticInstallationFromDiffSelectedChangesets))
- return;
-
- mChangesetMenuOperations.DiffSelectedChangesets();
- }
-
- void RevertToChangesetMenuItem_Click()
- {
- mChangesetMenuOperations.RevertToChangeset();
- }
-
- void DiffBranchMenuItem_Click()
- {
- mMenuOperations.DiffBranch();
- }
-
- void SwitchToChangesetMenuItem_Click()
- {
- mChangesetMenuOperations.SwitchToChangeset();
- }
-
- internal void UpdateMenuItems(GenericMenu menu)
- {
- ChangesetExtendedInfo singleSelectedChangeset = mMenuOperations.GetSelectedChangeset();
-
- ChangesetMenuOperations operations = ChangesetMenuUpdater.GetAvailableMenuOperations(
- mChangesetMenuOperations.GetSelectedChangesetsCount(),
- mIsGluonMode,
- singleSelectedChangeset.BranchId,
- mLoadedBranchId,
- false);
-
- AddDiffChangesetMenuItem(
- mDiffChangesetMenuItemContent,
- menu,
- singleSelectedChangeset,
- operations,
- DiffChangesetMenuItem_Click);
-
- AddDiffSelectedChangesetsMenuItem(
- mDiffSelectedChangesetsMenuItemContent,
- menu,
- operations,
- DiffSelectedChangesetsMenuItem_Click);
-
- if (!IsOnMainBranch(singleSelectedChangeset))
- {
- menu.AddSeparator(string.Empty);
-
- AddDiffBranchMenuItem(
- mDiffBranchMenuItemContent,
- menu,
- singleSelectedChangeset,
- operations,
- DiffBranchMenuItem_Click);
- }
-
- menu.AddSeparator(string.Empty);
-
- AddSwitchToChangesetMenuItem(
- mSwitchToChangesetMenuItemContent,
- menu,
- operations,
- SwitchToChangesetMenuItem_Click);
-
- if (mIsGluonMode)
- return;
-
- AddBackToMenuItem(
- mRevertToChangesetMenuItemContent,
- menu,
- operations,
- RevertToChangesetMenuItem_Click);
- }
-
- void ProcessMenuOperation(
- ChangesetMenuOperations operationToExecute,
- IChangesetMenuOperations changesetMenuOperations)
- {
- if (operationToExecute == ChangesetMenuOperations.DiffChangeset)
- {
- DiffChangesetMenuItem_Click();
- return;
- }
-
- if (operationToExecute == ChangesetMenuOperations.DiffSelectedChangesets)
- {
- DiffSelectedChangesetsMenuItem_Click();
- return;
- }
- }
-
- static void AddDiffChangesetMenuItem(
- GUIContent menuItemContent,
- GenericMenu menu,
- ChangesetExtendedInfo changeset,
- ChangesetMenuOperations operations,
- GenericMenu.MenuFunction menuFunction)
- {
- string changesetName =
- changeset != null ?
- changeset.ChangesetId.ToString() :
- string.Empty;
-
- menuItemContent.text = string.Format("{0} {1}",
- PlasticLocalization.GetString(
- PlasticLocalization.Name.AnnotateDiffChangesetMenuItem,
- changesetName),
- GetPlasticShortcut.ForDiff());
-
- if (operations.HasFlag(ChangesetMenuOperations.DiffChangeset))
- {
- menu.AddItem(
- menuItemContent,
- false,
- menuFunction);
- return;
- }
-
- menu.AddDisabledItem(
- menuItemContent);
- }
-
- static void AddDiffSelectedChangesetsMenuItem(
- GUIContent menuItemContent,
- GenericMenu menu,
- ChangesetMenuOperations operations,
- GenericMenu.MenuFunction menuFunction)
- {
- if (operations.HasFlag(ChangesetMenuOperations.DiffSelectedChangesets))
- {
- menu.AddItem(
- menuItemContent,
- false,
- menuFunction);
-
- return;
- }
-
- menu.AddDisabledItem(menuItemContent);
- }
-
- static void AddBackToMenuItem(
- GUIContent menuItemContent,
- GenericMenu menu,
- ChangesetMenuOperations operations,
- GenericMenu.MenuFunction menuFunction)
- {
- if (operations.HasFlag(ChangesetMenuOperations.RevertToChangeset))
- {
- menu.AddItem(
- menuItemContent,
- false,
- menuFunction);
-
- return;
- }
-
- menu.AddDisabledItem(menuItemContent);
- }
-
- static void AddDiffBranchMenuItem(
- GUIContent menuItemContent,
- GenericMenu menu,
- ChangesetExtendedInfo changeset,
- ChangesetMenuOperations operations,
- GenericMenu.MenuFunction menuFunction)
- {
- string branchName = GetBranchName(changeset);
-
- menuItemContent.text =
- PlasticLocalization.GetString(PlasticLocalization.Name.AnnotateDiffBranchMenuItem,
- branchName);
-
- if (operations.HasFlag(ChangesetMenuOperations.DiffChangeset))
- {
- menu.AddItem(
- menuItemContent,
- false,
- menuFunction);
- return;
- }
-
- menu.AddDisabledItem(
- menuItemContent);
- }
-
- static void AddSwitchToChangesetMenuItem(
- GUIContent menuItemContent,
- GenericMenu menu,
- ChangesetMenuOperations operations,
- GenericMenu.MenuFunction menuFunction)
- {
- if (operations.HasFlag(ChangesetMenuOperations.SwitchToChangeset))
- {
- menu.AddItem(
- menuItemContent,
- false,
- menuFunction);
-
- return;
- }
-
- menu.AddDisabledItem(menuItemContent);
- }
-
- static string GetBranchName(ChangesetExtendedInfo changesetInfo)
- {
- if (changesetInfo == null)
- return string.Empty;
-
- string branchName = changesetInfo.BranchName;
-
- int lastIndex = changesetInfo.BranchName.LastIndexOf("/");
-
- if (lastIndex == -1)
- return branchName;
-
- return branchName.Substring(lastIndex + 1);
- }
-
- static bool IsOnMainBranch(ChangesetExtendedInfo singleSeletedChangeset)
- {
- if (singleSeletedChangeset == null)
- return false;
-
- return singleSeletedChangeset.BranchName == MAIN_BRANCH_NAME;
- }
-
- static ChangesetMenuOperations GetMenuOperations(
- Event e, bool isMultipleSelection)
- {
- if (Keyboard.IsControlOrCommandKeyPressed(e) &&
- Keyboard.IsKeyPressed(e, KeyCode.D))
- return isMultipleSelection ?
- ChangesetMenuOperations.DiffSelectedChangesets :
- ChangesetMenuOperations.DiffChangeset;
-
- return ChangesetMenuOperations.None;
- }
-
- void BuildComponents()
- {
- mDiffChangesetMenuItemContent = new GUIContent(string.Empty);
- mDiffSelectedChangesetsMenuItemContent = new GUIContent(string.Format("{0} {1}",
- PlasticLocalization.GetString(PlasticLocalization.Name.ChangesetMenuItemDiffSelected),
- GetPlasticShortcut.ForDiff()));
- mDiffBranchMenuItemContent = new GUIContent();
- mSwitchToChangesetMenuItemContent = new GUIContent(
- PlasticLocalization.GetString(PlasticLocalization.Name.ChangesetMenuItemSwitchToChangeset));
- mRevertToChangesetMenuItemContent = new GUIContent(
- PlasticLocalization.GetString(PlasticLocalization.Name.ChangesetMenuItemRevertToChangeset));
- }
-
- GenericMenu mMenu;
-
- GUIContent mDiffChangesetMenuItemContent;
- GUIContent mDiffSelectedChangesetsMenuItemContent;
- GUIContent mDiffBranchMenuItemContent;
- GUIContent mSwitchToChangesetMenuItemContent;
- GUIContent mRevertToChangesetMenuItemContent;
-
- readonly WorkspaceInfo mWkInfo;
- readonly IChangesetMenuOperations mChangesetMenuOperations;
- readonly IMenuOperations mMenuOperations;
- readonly LaunchTool.IShowDownloadPlasticExeWindow mShowDownloadPlasticExeWindow;
- readonly bool mIsGluonMode;
-
- long mLoadedBranchId = -1;
-
- const string MAIN_BRANCH_NAME = "/main";
- }
- }
|