| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- using UnityEditor;
- using UnityEngine;
- using Codice.CM.Common;
- using PlasticGui.WorkspaceWindow.QueryViews.Changesets;
- using PlasticGui;
- using Unity.PlasticSCM.Editor.Tool;
- namespace Unity.PlasticSCM.Editor.Views.Changesets
- {
- internal class ChangesetsViewMenu
- {
- internal interface IMenuOperations
- {
- void DiffBranch();
- ChangesetExtendedInfo GetSelectedChangeset();
- }
- internal ChangesetsViewMenu(
- IChangesetMenuOperations changesetMenuOperations,
- IMenuOperations menuOperations,
- bool isGluonMode)
- {
- mChangesetMenuOperations = changesetMenuOperations;
- mMenuOperations = menuOperations;
- mIsGluonMode = isGluonMode;
- BuildComponents();
- }
- internal void Popup()
- {
- GenericMenu menu = new GenericMenu();
- UpdateMenuItems(menu);
- menu.ShowAsContext();
- }
- void DiffChangesetMenuItem_Click()
- {
- if (LaunchTool.ShowDownloadPlasticExeWindow(mIsGluonMode))
- return;
- mChangesetMenuOperations.DiffChangeset();
- }
- void DiffSelectedChangesetsMenuItem_Click()
- {
- if (LaunchTool.ShowDownloadPlasticExeWindow(mIsGluonMode))
- return;
- mChangesetMenuOperations.DiffSelectedChangesets();
- }
- void DiffBranchMenuItem_Click()
- {
- mMenuOperations.DiffBranch();
- }
- void UpdateMenuItems(GenericMenu menu)
- {
- ChangesetExtendedInfo singleSeletedChangeset = mMenuOperations.GetSelectedChangeset();
- ChangesetMenuOperations operations = ChangesetMenuUpdater.GetAvailableMenuOperations(
- mChangesetMenuOperations.GetSelectedChangesetsCount());
- AddDiffChangesetMenuItem(
- mDiffChangesetMenuItemContent,
- menu,
- singleSeletedChangeset,
- operations,
- DiffChangesetMenuItem_Click);
- AddDiffSelectedChangesetsMenuItem(
- mDiffSelectedChangesetsMenuItemContent,
- menu,
- operations,
- DiffSelectedChangesetsMenuItem_Click);
- if (IsOnMainBranch(singleSeletedChangeset))
- return;
- menu.AddSeparator(string.Empty);
- AddDiffBranchMenuItem(
- mDiffBranchMenuItemContent,
- menu,
- singleSeletedChangeset,
- operations,
- DiffBranchMenuItem_Click);
- }
- 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 =
- PlasticLocalization.GetString(PlasticLocalization.Name.AnnotateDiffChangesetMenuItem,
- changesetName);
- 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 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);
- }
- void BuildComponents()
- {
- mDiffChangesetMenuItemContent = new GUIContent();
- mDiffSelectedChangesetsMenuItemContent = new GUIContent(
- PlasticLocalization.GetString(PlasticLocalization.Name.ChangesetMenuItemDiffSelected));
- mDiffBranchMenuItemContent = new GUIContent();
- }
- 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;
- }
- GUIContent mDiffChangesetMenuItemContent;
- GUIContent mDiffSelectedChangesetsMenuItemContent;
- GUIContent mDiffBranchMenuItemContent;
- readonly IChangesetMenuOperations mChangesetMenuOperations;
- readonly IMenuOperations mMenuOperations;
- readonly bool mIsGluonMode;
- const string MAIN_BRANCH_NAME = "/main";
- }
- }
|