123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- using System.Collections.Generic;
- using System.Linq;
-
- using UnityEditor;
- using UnityEditor.IMGUI.Controls;
- using UnityEngine;
-
- using Codice.CM.Common;
- using PlasticGui;
- using PlasticGui.Help.Actions;
- using PlasticGui.WorkspaceWindow.Locks;
- using Unity.PlasticSCM.Editor.AssetUtils;
- using Unity.PlasticSCM.Editor.UI;
- using Unity.PlasticSCM.Editor.UI.Progress;
-
- namespace Unity.PlasticSCM.Editor.Views.Locks
- {
- internal sealed class LocksTab :
- IRefreshableView,
- ILockMenuOperations
- {
- internal LocksListView Table { get { return mLocksListView; } }
-
- internal ILockMenuOperations Operations { get { return this; } }
-
- internal LocksTab(
- RepositorySpec repSpec,
- IRefreshView refreshView,
- EditorWindow parentWindow)
- {
- mRepSpec = repSpec;
- mRefreshView = refreshView;
- mParentWindow = parentWindow;
- mProgressControls = new ProgressControlsForViews();
- mFillLocksTable = new FillLocksTable();
-
- BuildComponents(mRepSpec);
-
- ((IRefreshableView) this).Refresh();
- }
-
- internal void DrawSearchFieldForLocksTab()
- {
- DrawSearchField.For(
- mSearchField,
- mLocksListView,
- UnityConstants.SEARCH_FIELD_WIDTH);
- }
-
- internal void OnDisable()
- {
- mSearchField.downOrUpArrowKeyPressed -=
- SearchField_OnDownOrUpArrowKeyPressed;
-
- mLocksListView.OnDisable();
- }
-
- internal void Update()
- {
- mProgressControls.UpdateProgress(mParentWindow);
- }
-
- internal void OnGUI()
- {
- DoActionsToolbar(
- mRepSpec.Server,
- mProgressControls,
- this,
- mIsReleaseLocksButtonEnabled,
- mIsRemoveLocksButtonEnabled);
-
- DoLocksArea(
- mLocksListView,
- mProgressControls.IsOperationRunning());
- }
-
- void IRefreshableView.Refresh()
- {
- mFillLocksTable.FillTable(
- mRepSpec,
- null,
- mLocksListView,
- mLocksListView,
- mProgressControls);
- }
-
- List<LockInfo.LockStatus> ILockMenuOperations.GetSelectedLocksStatus()
- {
- return mLocksListView.GetSelectedLocks().
- Select(lockInfo => lockInfo.Status).ToList();
- }
-
- void ILockMenuOperations.ReleaseLocks()
- {
- LockOperations.ReleaseLocks(
- mRepSpec,
- mLocksListView.GetSelectedLocks(),
- this,
- mRefreshView,
- mProgressControls,
- RefreshAsset.VersionControlCache);
- }
-
- void ILockMenuOperations.RemoveLocks()
- {
- LockOperations.RemoveLocks(
- mRepSpec,
- mLocksListView.GetSelectedLocks(),
- this,
- mRefreshView,
- mProgressControls,
- RefreshAsset.VersionControlCache);
- }
-
- void SearchField_OnDownOrUpArrowKeyPressed()
- {
- mLocksListView.SetFocusAndEnsureSelectedItem();
- }
-
- void OnSelectionChanged()
- {
- LockMenuOperations operations = LockMenuUpdater.GetAvailableMenuOperations(
- ((ILockMenuOperations)this).GetSelectedLocksStatus());
-
- mIsReleaseLocksButtonEnabled = operations.HasFlag(
- LockMenuOperations.Release);
- mIsRemoveLocksButtonEnabled = operations.HasFlag(
- LockMenuOperations.Remove);
- }
-
- static void DoActionsToolbar(
- string server,
- ProgressControlsForViews progressControls,
- ILockMenuOperations lockMenuOperations,
- bool isReleaseLocksButtonEnabled,
- bool isRemoveLocksButtonEnabled)
- {
- EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
-
- DoReleaseLocksButton(
- lockMenuOperations,
- isReleaseLocksButtonEnabled);
-
- DoRemoveLocksButton(
- lockMenuOperations,
- isRemoveLocksButtonEnabled);
-
- if (progressControls.IsOperationRunning())
- {
- DrawProgressForViews.ForIndeterminateProgress(
- progressControls.ProgressData);
- }
-
- GUILayout.FlexibleSpace();
-
- DoConfigureLockRulesButton(server);
-
- EditorGUILayout.EndHorizontal();
- }
-
- static void DoLocksArea(
- LocksListView locksListView,
- bool isOperationRunning)
- {
- GUI.enabled = !isOperationRunning;
-
- var rect = GUILayoutUtility.GetRect(0, 100000, 0, 100000);
-
- locksListView.OnGUI(rect);
-
- GUI.enabled = true;
- }
-
- static void DoReleaseLocksButton(
- ILockMenuOperations lockMenuOperations,
- bool isEnabled)
- {
- GUI.enabled = isEnabled;
-
- if (DrawActionButton.For(
- PlasticLocalization.Name.ReleaseLocksButton.GetString(),
- PlasticLocalization.Name.ReleaseLocksButtonTooltip.GetString()))
- {
- lockMenuOperations.ReleaseLocks();
- }
-
- GUI.enabled = true;
- }
-
- static void DoRemoveLocksButton(
- ILockMenuOperations lockMenuOperations,
- bool isEnabled)
- {
- GUI.enabled = isEnabled;
-
- if (DrawActionButton.For(
- PlasticLocalization.Name.RemoveLocksButton.GetString(),
- PlasticLocalization.Name.RemoveLocksButtonTooltip.GetString()))
- {
- lockMenuOperations.RemoveLocks();
- }
-
- GUI.enabled = true;
- }
-
- static void DoConfigureLockRulesButton(string server)
- {
- if (DrawActionButton.For(PlasticLocalization.Name.
- ConfigureLockRules.GetString()))
- {
- OpenConfigureLockRulesPage.Run(server);
- }
- }
-
- void BuildComponents(RepositorySpec repSpec)
- {
- mSearchField = new SearchField();
- mSearchField.downOrUpArrowKeyPressed +=
- SearchField_OnDownOrUpArrowKeyPressed;
-
- mLocksListView = new LocksListView(
- repSpec,
- LocksListHeaderState.GetDefault(),
- LocksListHeaderState.GetColumnNames(),
- new LocksViewMenu(this),
- OnSelectionChanged);
-
- mLocksListView.Reload();
- }
-
- bool mIsReleaseLocksButtonEnabled;
- bool mIsRemoveLocksButtonEnabled;
-
- SearchField mSearchField;
- LocksListView mLocksListView;
-
- readonly ProgressControlsForViews mProgressControls;
- readonly FillLocksTable mFillLocksTable;
- readonly EditorWindow mParentWindow;
- readonly IRefreshView mRefreshView;
- readonly RepositorySpec mRepSpec;
- }
- }
|