123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
-
- using UnityEditor.IMGUI.Controls;
- using UnityEngine;
-
- using PlasticGui;
- using Unity.PlasticSCM.Editor.UI.Tree;
-
- namespace Unity.PlasticSCM.Editor.Views.PendingChanges
- {
- internal enum PendingChangesTreeColumn
- {
- Item,
- Status,
- Size,
- Extension,
- Type,
- DateModififed,
- Repository
- }
-
- [Serializable]
- internal class PendingChangesTreeHeaderState : MultiColumnHeaderState, ISerializationCallbackReceiver
- {
- internal static PendingChangesTreeHeaderState GetDefault(bool isGluonMode)
- {
- PendingChangesTreeHeaderState headerState =
- new PendingChangesTreeHeaderState(BuildColumns());
-
- headerState.visibleColumns = GetDefaultVisibleColumns();
-
- SetMode(headerState, isGluonMode);
-
- return headerState;
- }
-
- internal static List<string> GetColumnNames()
- {
- List<string> result = new List<string>();
- result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.ItemColumn));
- result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.StatusColumn));
- result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.SizeColumn));
- result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.ExtensionColumn));
- result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.TypeColumn));
- result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.DateModifiedColumn));
- result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.RepositoryColumn));
- return result;
- }
-
- internal static string GetColumnName(PendingChangesTreeColumn column)
- {
- switch (column)
- {
- case PendingChangesTreeColumn.Item:
- return PlasticLocalization.GetString(PlasticLocalization.Name.ItemColumn);
- case PendingChangesTreeColumn.Status:
- return PlasticLocalization.GetString(PlasticLocalization.Name.StatusColumn);
- case PendingChangesTreeColumn.Size:
- return PlasticLocalization.GetString(PlasticLocalization.Name.SizeColumn);
- case PendingChangesTreeColumn.Extension:
- return PlasticLocalization.GetString(PlasticLocalization.Name.ExtensionColumn);
- case PendingChangesTreeColumn.Type:
- return PlasticLocalization.GetString(PlasticLocalization.Name.TypeColumn);
- case PendingChangesTreeColumn.DateModififed:
- return PlasticLocalization.GetString(PlasticLocalization.Name.DateModifiedColumn);
- case PendingChangesTreeColumn.Repository:
- return PlasticLocalization.GetString(PlasticLocalization.Name.RepositoryColumn);
- default:
- return null;
- }
- }
-
- internal static void SetMode(MultiColumnHeaderState state, bool isGluonMode)
- {
- List<int> result = state.visibleColumns.ToList();
-
- if (!result.Contains((int)PendingChangesTreeColumn.Item))
- result.Add((int)PendingChangesTreeColumn.Item);
-
- if (isGluonMode)
- result.Remove((int)PendingChangesTreeColumn.Type);
-
- state.columns[(int)PendingChangesTreeColumn.Item].allowToggleVisibility = false;
- state.columns[(int)PendingChangesTreeColumn.Type].allowToggleVisibility = !isGluonMode;
-
- state.visibleColumns = result.ToArray();
- }
-
- internal void UpdateItemColumnHeader(PendingChangesTreeView treeView)
- {
- Column itemColumn = columns[(int)PendingChangesTreeColumn.Item];
- string columnName = GetColumnName(PendingChangesTreeColumn.Item);
- int totalItemCount = treeView.GetTotalItemCount();
-
- if (totalItemCount > 0)
- {
- string columnStatus = string.Format(
- PlasticLocalization.GetString(PlasticLocalization.Name.ItemsSelected),
- treeView.GetCheckedItemCount(),
- totalItemCount);
-
- itemColumn.headerContent.text = string.Format("{0} {1}", columnName, columnStatus);
- }
- else
- {
- itemColumn.headerContent.text = columnName;
- }
- }
-
- void ISerializationCallbackReceiver.OnAfterDeserialize()
- {
- if (mHeaderTitles != null)
- TreeHeaderColumns.SetTitles(columns, mHeaderTitles);
-
- if (mColumsAllowedToggleVisibility != null)
- TreeHeaderColumns.SetVisibilities(columns, mColumsAllowedToggleVisibility);
- }
-
- void ISerializationCallbackReceiver.OnBeforeSerialize()
- {
- }
-
- static int[] GetDefaultVisibleColumns()
- {
- List<int> result = new List<int>();
- result.Add((int)PendingChangesTreeColumn.Item);
- result.Add((int)PendingChangesTreeColumn.Status);
- result.Add((int)PendingChangesTreeColumn.DateModififed);
- return result.ToArray();
- }
-
- static Column[] BuildColumns()
- {
- return new Column[]
- {
- new Column()
- {
- width = 800,
- headerContent = new GUIContent(
- GetColumnName(PendingChangesTreeColumn.Item)),
- minWidth = 200,
- sortingArrowAlignment = TextAlignment.Right
- },
- new Column()
- {
- width = 200,
- headerContent = new GUIContent(
- GetColumnName(PendingChangesTreeColumn.Status)),
- minWidth = 80,
- sortingArrowAlignment = TextAlignment.Right
- },
- new Column()
- {
- width = 80,
- headerContent = new GUIContent(
- GetColumnName(PendingChangesTreeColumn.Size)),
- minWidth = 45,
- sortingArrowAlignment = TextAlignment.Right
- },
- new Column()
- {
- width = 70,
- headerContent = new GUIContent(
- GetColumnName(PendingChangesTreeColumn.Extension)),
- minWidth = 50,
- sortingArrowAlignment = TextAlignment.Right
- },
- new Column()
- {
- width = 60,
- headerContent = new GUIContent(
- GetColumnName(PendingChangesTreeColumn.Type)),
- minWidth = 45,
- sortingArrowAlignment = TextAlignment.Right
- },
- new Column()
- {
- width = 330,
- headerContent = new GUIContent(
- GetColumnName(PendingChangesTreeColumn.DateModififed)),
- minWidth = 100,
- sortingArrowAlignment = TextAlignment.Right
- },
- new Column()
- {
- width = 210,
- headerContent = new GUIContent(
- GetColumnName(PendingChangesTreeColumn.Repository)),
- minWidth = 90,
- sortingArrowAlignment = TextAlignment.Right
- }
- };
- }
-
- PendingChangesTreeHeaderState(Column[] columns)
- : base(columns)
- {
- if (mHeaderTitles == null)
- mHeaderTitles = TreeHeaderColumns.GetTitles(columns);
-
- if (mColumsAllowedToggleVisibility == null)
- mColumsAllowedToggleVisibility = TreeHeaderColumns.GetVisibilities(columns);
- }
-
- [SerializeField]
- string[] mHeaderTitles;
-
- [SerializeField]
- bool[] mColumsAllowedToggleVisibility;
- }
- }
|