Initial commit

This commit is contained in:
2026-03-03 00:39:30 +05:00
commit fc01f07d9b
29933 changed files with 5353098 additions and 0 deletions

View File

@@ -0,0 +1,190 @@
using UnityEditor;
using UnityEngine;
using Codice.Client.Common.WebApi.Responses;
using PlasticGui.WorkspaceWindow.NotificationBar;
using Unity.PlasticSCM.Editor.UI;
namespace Unity.PlasticSCM.Editor.StatusBar
{
class NotificationBar : INotificationBar
{
internal bool HasNotification { get; private set; }
internal bool IsVisible { get; private set; }
internal NotificationBar()
{
mSubscriptionPanel = new ActionPanel();
mContactPanel = new ActionPanel();
IsVisible = EditorPrefs.GetBool(
UnityConstants.SHOW_NOTIFICATION_KEY_NAME,
true);
}
internal void SetVisibility(bool isVisible)
{
IsVisible = isVisible;
EditorPrefs.SetBool(
UnityConstants.SHOW_NOTIFICATION_KEY_NAME,
isVisible);
}
internal void OnGUI()
{
GUILayout.BeginVertical();
GUILayout.FlexibleSpace();
GUILayout.BeginHorizontal(UnityStyles.StatusBar.NotificationPanel);
if (mSubscriptionPanel.HasNotification)
mSubscriptionPanel.OnGUI();
GUILayout.FlexibleSpace();
if (mContactPanel.HasNotification)
mContactPanel.OnGUI();
DrawCloseButton(this);
GUILayout.EndHorizontal();
GUILayout.FlexibleSpace();
GUILayout.EndVertical();
}
void INotificationBar.SetActions(
CloudServerInfo cloudServerInfo,
CloudOrganizationHelpActionsResponse.Action subscriptionAction,
CloudOrganizationHelpActionsResponse.Action contactAction)
{
mSubscriptionPanel.SetAction(cloudServerInfo, subscriptionAction, false);
mContactPanel.SetAction(cloudServerInfo, contactAction, true);
HasNotification = mSubscriptionPanel.HasNotification || mContactPanel.HasNotification;
}
void INotificationBar.CleanActions()
{
HasNotification = false;
mSubscriptionPanel.SetAction(null, null, false);
mContactPanel.SetAction(null, null, false);
}
static void DrawCloseButton(NotificationBar notificationBar)
{
GUILayout.BeginVertical();
GUILayout.FlexibleSpace();
if (GUILayout.Button(
new GUIContent(Images.GetCloseIcon()),
UnityStyles.StatusBar.NotificationPanelCloseButton))
{
notificationBar.SetVisibility(false);
}
GUILayout.FlexibleSpace();
GUILayout.EndVertical();
}
class ActionPanel
{
internal bool HasNotification { get; private set; }
internal void SetAction(
CloudServerInfo cloudServerInfo,
CloudOrganizationHelpActionsResponse.Action action,
bool isContactSupportAction)
{
if (action == null)
{
HasNotification = false;
return;
}
mCloudServerInfo = cloudServerInfo;
mActionButton = action.Button;
mIsContactSupportAction = isContactSupportAction;
HasNotification = true;
mLabelText = action.Message;
SetButton(action.Button);
}
internal void OnGUI()
{
DrawLabel(mLabelText);
if (!mIsButtonVisible)
return;
DrawButton(
mCloudServerInfo, mActionButton.Url,
mIsContactSupportAction, mButtonText);
}
void SetButton(
CloudOrganizationHelpActionsResponse.ActionButton actionButton)
{
if (actionButton == null)
{
mButtonText = string.Empty;
mIsButtonVisible = false;
return;
}
mButtonText = actionButton.Caption;
mIsButtonVisible = true;
}
static void DrawLabel(string text)
{
GUILayout.BeginVertical();
GUILayout.FlexibleSpace();
GUILayout.Label(
text,
UnityStyles.StatusBar.Label);
GUILayout.FlexibleSpace();
GUILayout.EndVertical();
}
static void DrawButton(
CloudServerInfo cloudServerInfo,
string actionButtonUrl,
bool isContactSupportAction,
string buttonText)
{
GUILayout.BeginVertical();
GUILayout.FlexibleSpace();
if (GUILayout.Button(
buttonText,
UnityStyles.StatusBar.NotificationPanelLink))
{
LaunchNotificationAction.For(
cloudServerInfo,
actionButtonUrl,
isContactSupportAction);
}
GUILayout.FlexibleSpace();
GUILayout.EndVertical();
}
bool mIsButtonVisible;
string mButtonText;
string mLabelText;
bool mIsContactSupportAction;
CloudOrganizationHelpActionsResponse.ActionButton mActionButton;
CloudServerInfo mCloudServerInfo;
}
ActionPanel mSubscriptionPanel;
ActionPanel mContactPanel;
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f8fb5a27b8554a74b8c566355a3c50f9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,178 @@
using System;
using UnityEditor;
using UnityEngine;
using PlasticGui;
using Unity.PlasticSCM.Editor.UI;
namespace Unity.PlasticSCM.Editor.StatusBar
{
internal class WindowStatusBar
{
internal void Notify(INotificationContent content, MessageType type, Texture2D image)
{
mNotification = new Notification(
content,
type,
image);
mDelayedNotificationClearAction.Run();
}
internal NotificationBar NotificationBar { get; private set; }
internal WindowStatusBar()
{
mDelayedNotificationClearAction = new DelayedActionBySecondsRunner(
DelayedClearNotification,
UnityConstants.NOTIFICATION_CLEAR_INTERVAL);
NotificationBar = new NotificationBar();
}
void DelayedClearNotification()
{
mNotification = null;
}
internal void OnGUI()
{
if (NotificationBar.HasNotification &&
NotificationBar.IsVisible)
{
DrawBar(NotificationBar.OnGUI);
}
DrawBar(DoContentArea);
Rect lastRect = GUILayoutUtility.GetLastRect();
if (MouseEntered(mIsMouseOver, lastRect))
{
mIsMouseOver = true;
mDelayedNotificationClearAction.Pause();
}
if (MouseExited(mIsMouseOver, lastRect))
{
mIsMouseOver = false;
mDelayedNotificationClearAction.Resume();
}
}
void DrawBar(Action doContentArea)
{
using (new EditorGUILayout.VerticalScope(
UnityStyles.StatusBar.Bar,
GUILayout.Height(UnityConstants.STATUS_BAR_HEIGHT)))
{
GUILayout.FlexibleSpace();
using (new EditorGUILayout.HorizontalScope())
{
doContentArea();
}
GUILayout.FlexibleSpace();
}
}
void DoContentArea()
{
if (NotificationBar.HasNotification)
{
DrawNotificationAvailablePanel(NotificationBar);
}
if (mNotification != null)
DrawNotification(mNotification);
GUILayout.FlexibleSpace();
}
static void DrawNotification(INotificationContent notification)
{
GUILayout.BeginVertical();
GUILayout.FlexibleSpace();
notification.OnGUI();
GUILayout.FlexibleSpace();
GUILayout.EndVertical();
}
static void DrawNotificationAvailablePanel(
NotificationBar notificationBar)
{
GUILayout.BeginVertical();
GUILayout.FlexibleSpace();
if (GUILayout.Button(PlasticLocalization.GetString(
notificationBar.IsVisible ?
PlasticLocalization.Name.HideNotification :
PlasticLocalization.Name.ShowNotification)))
{
notificationBar.SetVisibility(!notificationBar.IsVisible);
}
GUILayout.FlexibleSpace();
GUILayout.EndVertical();
}
static void DrawNotification(Notification notification)
{
DrawIcon(notification.Image);
DrawNotification(notification.Content);
}
static void DrawIcon(Texture2D icon, int size = UnityConstants.STATUS_BAR_ICON_SIZE)
{
GUILayout.BeginVertical();
GUILayout.FlexibleSpace();
GUILayout.Label(
icon,
UnityStyles.StatusBar.Icon,
GUILayout.Height(size),
GUILayout.Width(size));
GUILayout.FlexibleSpace();
GUILayout.EndVertical();
}
static bool MouseEntered(
bool isMouseOver,
Rect lastRect)
{
bool isInside = lastRect.Contains(Event.current.mousePosition);
return isInside && !isMouseOver;
}
static bool MouseExited(
bool isMouseOver,
Rect lastRect)
{
bool isInside = lastRect.Contains(Event.current.mousePosition);
return !isInside && isMouseOver;
}
class Notification
{
internal INotificationContent Content { get; private set; }
internal MessageType MessageType { get; private set; }
internal Texture2D Image { get; private set; }
internal Notification(INotificationContent content, MessageType messageType, Texture2D image)
{
Content = content;
MessageType = messageType;
Image = image;
}
}
Notification mNotification;
bool mIsMouseOver = false;
readonly DelayedActionBySecondsRunner mDelayedNotificationClearAction;
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2dae17e8419667e46a2a476dd2cd18e0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: