using System;
using Codice.CM.Common;
using PlasticGui;
using PlasticGui.WorkspaceWindow;
using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
using Unity.PlasticSCM.Editor.Tool;
using Unity.PlasticSCM.Editor.UI;
using Unity.PlasticSCM.Editor.Views.Diff;
using Unity.PlasticSCM.Editor.Views.Properties;
using UnityEditor;
using UnityEngine;
namespace Unity.PlasticSCM.Editor.Inspector.Properties.Branch
{
internal class BranchPropertiesPanel
{
internal bool IsChangesetByChangesetModeForTesting
{
get { return mToolbarIndex == 1; }
set { mToolbarIndex = value ? 1 : 0; }
}
internal DiffPanel DiffPanel => mDiffPanel;
internal BranchPropertiesPanel(
Action repaint,
WorkspaceInfo wkInfo,
IWorkspaceWindow workspaceWindow,
IViewSwitcher viewSwitcher,
IHistoryViewLauncher historyViewLauncher,
IRefreshView refreshView,
IAssetStatusCache assetStatusCache,
LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
IPendingChangesUpdater pendingChangesUpdater,
IIncomingChangesUpdater developerIncomingChangesUpdater,
IIncomingChangesUpdater gluonIncomingChangesUpdater,
EditorWindow parentWindow,
bool isGluonMode)
{
mRepaint = repaint;
mToolbarIndex = SessionState.GetInt(TOOLBAR_INDEX_KEY, defaultValue: 0);
mPropertiesPanel = new PropertiesPanel(repaint, workspaceWindow, parentWindow);
mDiffPanel = new DiffPanel(
repaint,
wkInfo,
workspaceWindow,
viewSwitcher,
historyViewLauncher,
refreshView,
assetStatusCache,
showDownloadPlasticExeWindow,
pendingChangesUpdater,
developerIncomingChangesUpdater,
gluonIncomingChangesUpdater,
parentWindow,
isGluonMode);
mChangesetByChangesetDiffPanel = new ChangesetByChangesetDiffPanel(
repaint,
wkInfo,
workspaceWindow,
viewSwitcher,
historyViewLauncher,
refreshView,
assetStatusCache,
showDownloadPlasticExeWindow,
pendingChangesUpdater,
developerIncomingChangesUpdater,
gluonIncomingChangesUpdater,
parentWindow,
isGluonMode);
}
internal void OnEnable()
{
mDiffPanel.OnEnable();
mChangesetByChangesetDiffPanel.OnEnable();
}
internal void OnDisable()
{
mDiffPanel.OnDisable();
mChangesetByChangesetDiffPanel.OnDisable();
}
internal void Update()
{
mDiffPanel.Update();
mPropertiesPanel.Update();
mChangesetByChangesetDiffPanel.Update();
}
internal void ResetForTesting()
{
ClearInfo();
mToolbarIndex = 0;
}
internal void ClearInfo()
{
mSelectedRepObjectInfoData = null;
mPropertiesPanel.ClearInfo();
mDiffPanel.ClearInfo();
mChangesetByChangesetDiffPanel.ClearInfo();
}
internal void SetSelectedObject(SelectedRepObjectInfoData selectedRepObjectInfoData)
{
mSelectedRepObjectInfoData = selectedRepObjectInfoData;
BranchInfo selectedBranchInfo = (BranchInfo)selectedRepObjectInfoData.ObjectInfo;
if (mToolbarIndex == 1)
{
mChangesetByChangesetDiffPanel.UpdateInfo(selectedRepObjectInfoData.MountPoint, selectedBranchInfo);
}
else
{
mPropertiesPanel.UpdateInfo(selectedBranchInfo, selectedRepObjectInfoData.RepSpec);
mDiffPanel.UpdateInfo(selectedRepObjectInfoData.MountPoint, selectedBranchInfo);
}
}
internal void OnInspectorGUI()
{
if (mToolbarIndex == 1)
mChangesetByChangesetDiffPanel.OnGUI();
else
{
mDiffPanel.OnGUI();
}
}
internal void OnHeaderGUI()
{
EditorGUILayout.BeginVertical();
DoDiffModeButtons();
DrawSeparator();
if (mToolbarIndex == 1)
{
EditorGUILayout.EndVertical();
return;
}
mPropertiesPanel.OnGUI();
DrawSeparator();
EditorGUILayout.EndVertical();
}
void DoDiffModeButtons()
{
EditorGUILayout.BeginVertical();
EditorGUILayout.Space(0.5f);
EditorGUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
//GUI.enabled = !mProgressControls.IsOperationRunning();
int previousToolbarIndex = mToolbarIndex;
string[] options = new string[]
{
PlasticLocalization.Name.DiffEntireBranch.GetString(),
PlasticLocalization.Name.DiffByChangeset.GetString()
};
mToolbarIndex = GUILayout.Toolbar(
mToolbarIndex,
options,
UnityStyles.LargeButton,
GUI.ToolbarButtonSize.FitToContents);
GUILayout.FlexibleSpace();
//GUI.enabled = true;
EditorGUILayout.EndHorizontal();
EditorGUILayout.Space(0.5f);
EditorGUILayout.EndVertical();
// If mode changed, update the panel with the currently selected branch
if (previousToolbarIndex != mToolbarIndex)
{
SessionState.SetInt(TOOLBAR_INDEX_KEY, mToolbarIndex);
SetSelectedObject(mSelectedRepObjectInfoData);
}
}
static void DrawSeparator()
{
Rect bottomSeparatorRect = GUILayoutUtility.GetRect(
0,
1,
GUILayout.ExpandWidth(true));
EditorGUI.DrawRect(bottomSeparatorRect, UnityStyles.Colors.BarBorder);
}
int mToolbarIndex;
DiffPanel mDiffPanel;
PropertiesPanel mPropertiesPanel;
ChangesetByChangesetDiffPanel mChangesetByChangesetDiffPanel;
SelectedRepObjectInfoData mSelectedRepObjectInfoData;
readonly Action mRepaint;
const string TOOLBAR_INDEX_KEY = "BranchPropertiesPanel.ToolbarIndex";
}
}