633 lines
21 KiB
C#
633 lines
21 KiB
C#
|
// Amplify Shader Editor - Visual Shader Editing Tool
|
||
|
// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
|
||
|
|
||
|
using UnityEngine;
|
||
|
using UnityEditor;
|
||
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
|
||
|
namespace AmplifyShaderEditor
|
||
|
{
|
||
|
public enum ToolButtonType
|
||
|
{
|
||
|
Update = 0,
|
||
|
Live,
|
||
|
OpenSourceCode,
|
||
|
CleanUnusedNodes,
|
||
|
//SelectShader,
|
||
|
New,
|
||
|
Open,
|
||
|
Save,
|
||
|
Library,
|
||
|
Options,
|
||
|
Help,
|
||
|
MasterNode,
|
||
|
FocusOnMasterNode,
|
||
|
FocusOnSelection,
|
||
|
ShowInfoWindow,
|
||
|
ShowTipsWindow,
|
||
|
ShowConsole,
|
||
|
TakeScreenshot,
|
||
|
Share
|
||
|
}
|
||
|
|
||
|
public enum ToolbarType
|
||
|
{
|
||
|
File,
|
||
|
Help
|
||
|
}
|
||
|
|
||
|
public class ToolbarMenuTab
|
||
|
{
|
||
|
private Rect m_tabArea;
|
||
|
private GenericMenu m_tabMenu;
|
||
|
public ToolbarMenuTab( float x, float y, float width, float height )
|
||
|
{
|
||
|
m_tabMenu = new GenericMenu();
|
||
|
m_tabArea = new Rect( x, y, width, height );
|
||
|
}
|
||
|
|
||
|
public void ShowMenu()
|
||
|
{
|
||
|
m_tabMenu.DropDown( m_tabArea );
|
||
|
}
|
||
|
|
||
|
public void AddItem( string itemName, GenericMenu.MenuFunction callback )
|
||
|
{
|
||
|
m_tabMenu.AddItem( new GUIContent( itemName ), false, callback );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[Serializable]
|
||
|
public sealed class ToolsWindow : MenuParent
|
||
|
{
|
||
|
private static readonly Color RightIconsColorOff = new Color( 1f, 1f, 1f, 0.8f );
|
||
|
private static readonly Color LeftIconsColorOff = new Color( 1f, 1f, 1f, 0.5f );
|
||
|
|
||
|
private static readonly Color RightIconsColorOn = new Color( 1f, 1f, 1f, 1.0f );
|
||
|
private static readonly Color LeftIconsColorOn = new Color( 1f, 1f, 1f, 0.8f );
|
||
|
|
||
|
private const float TabY = 9;
|
||
|
private const float TabX = 5;
|
||
|
private const string ShaderFileTitleStr = "Current Shader";
|
||
|
private const string FileToolbarStr = "File";
|
||
|
private const string HelpToolbarStr = "Help";
|
||
|
private const string LiveShaderStr = "Live Shader";
|
||
|
private const string LoadOnSelectionStr = "Load on selection";
|
||
|
private const string CurrentObjectStr = "Current Object: ";
|
||
|
|
||
|
|
||
|
public ToolsMenuButton.ToolButtonPressed ToolButtonPressedEvt;
|
||
|
//private GUIStyle m_toolbarButtonStyle;
|
||
|
private GUIStyle m_toggleStyle;
|
||
|
private GUIStyle m_borderStyle;
|
||
|
|
||
|
// left
|
||
|
private ToolsMenuButton m_updateButton;
|
||
|
private ToolsMenuButton m_liveButton;
|
||
|
private ToolsMenuButton m_openSourceCodeButton;
|
||
|
|
||
|
//middle right
|
||
|
private ToolsMenuButton m_cleanUnusedNodesButton;
|
||
|
private ToolsMenuButton m_focusOnMasterNodeButton;
|
||
|
private ToolsMenuButton m_focusOnSelectionButton;
|
||
|
|
||
|
// right
|
||
|
private ToolsMenuButton m_shareButton;
|
||
|
private ToolsMenuButton m_takeScreenshotButton;
|
||
|
private ToolsMenuButton m_showInfoWindowButton;
|
||
|
|
||
|
// hidden
|
||
|
private ToolsMenuButton m_showTipsWindowButton;
|
||
|
private ToolsMenuButton m_showConsoleWindowButton;
|
||
|
|
||
|
//Used for collision detection to invalidate inputs on graph area
|
||
|
private Rect m_areaLeft = new Rect( 0, 0, 140, 40 );
|
||
|
private Rect m_areaRight = new Rect( 0, 0, 75, 40 );
|
||
|
private Rect m_boxRect;
|
||
|
private Rect m_borderRect;
|
||
|
|
||
|
public const double InactivityRefreshTime = 0.25;
|
||
|
private int m_currentSelected = 0;
|
||
|
|
||
|
//Search Bar
|
||
|
private const string SearchBarId = "ASE_SEARCH_BAR";
|
||
|
private bool m_searchBarVisible = false;
|
||
|
private bool m_selectSearchBarTextfield = false;
|
||
|
private bool m_refreshSearchResultList = false;
|
||
|
|
||
|
private Rect m_searchBarSize;
|
||
|
private string m_searchBarValue = string.Empty;
|
||
|
private List<ParentNode> m_searchResultNodes = new List<ParentNode>();
|
||
|
|
||
|
// width and height are between [0,1] and represent a percentage of the total screen area
|
||
|
public ToolsWindow( AmplifyShaderEditorWindow parentWindow ) : base( parentWindow, 0, 0, 0, 64, "Tools", MenuAnchor.TOP_LEFT, MenuAutoSize.NONE )
|
||
|
{
|
||
|
m_updateButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.Update, 0, 0, -1, -1, IOUtils.UpdateOutdatedGUID, string.Empty, "Create and apply shader to material.", 5 );
|
||
|
m_updateButton.ToolButtonPressedEvt += OnButtonPressedEvent;
|
||
|
m_updateButton.AddState( IOUtils.UpdateOFFGUID );
|
||
|
m_updateButton.AddState( IOUtils.UpdateUpToDatedGUID );
|
||
|
|
||
|
m_liveButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.Live, 0, 0, -1, -1, IOUtils.LiveOffGUID, string.Empty, "Automatically saves shader when canvas is changed.", 50 );
|
||
|
m_liveButton.ToolButtonPressedEvt += OnButtonPressedEvent;
|
||
|
m_liveButton.AddState( IOUtils.LiveOnGUID );
|
||
|
m_liveButton.AddState( IOUtils.LivePendingGUID );
|
||
|
|
||
|
//ToolsMenuButton cleanUnusedNodesButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.CleanUnusedNodes, 0, 0, -1, -1, IOUtils.CleanupOFFGUID, string.Empty, "Remove all nodes not connected to the master node.", 77 );
|
||
|
//cleanUnusedNodesButton.ToolButtonPressedEvt += OnButtonPressedEvent;
|
||
|
//cleanUnusedNodesButton.AddState( IOUtils.CleanUpOnGUID );
|
||
|
//m_list[ ( int ) ToolButtonType.CleanUnusedNodes ] = cleanUnusedNodesButton;
|
||
|
|
||
|
m_openSourceCodeButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.OpenSourceCode, 0, 0, -1, -1, IOUtils.OpenSourceCodeOFFGUID, string.Empty, "Open shader file in your default shader editor.", 80, false );
|
||
|
m_openSourceCodeButton.ToolButtonPressedEvt += OnButtonPressedEvent;
|
||
|
m_openSourceCodeButton.AddState( IOUtils.OpenSourceCodeONGUID );
|
||
|
|
||
|
|
||
|
// middle right
|
||
|
m_cleanUnusedNodesButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.CleanUnusedNodes, 0, 0, -1, -1, IOUtils.CleanupOFFGUID, string.Empty, "Remove all nodes not connected to the master node.", 77 );
|
||
|
m_cleanUnusedNodesButton.ToolButtonPressedEvt += OnButtonPressedEvent;
|
||
|
m_cleanUnusedNodesButton.AddState( IOUtils.CleanUpOnGUID );
|
||
|
|
||
|
m_focusOnMasterNodeButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.FocusOnMasterNode, 0, 0, -1, -1, IOUtils.FocusNodeGUID, string.Empty, "Focus on active master node.", -1, false );
|
||
|
m_focusOnMasterNodeButton.ToolButtonPressedEvt += OnButtonPressedEvent;
|
||
|
|
||
|
m_focusOnSelectionButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.FocusOnSelection, 0, 0, -1, -1, IOUtils.FitViewGUID, string.Empty, "Focus on selection or fit to screen if none selected." );
|
||
|
m_focusOnSelectionButton.ToolButtonPressedEvt += OnButtonPressedEvent;
|
||
|
|
||
|
|
||
|
// right
|
||
|
m_shareButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.Share, 0, 0, -1, -1, IOUtils.ShareOFFGUID, string.Empty, "Share selection", 100 );
|
||
|
m_shareButton.ToolButtonPressedEvt += OnButtonPressedEvent;
|
||
|
m_shareButton.AddState( IOUtils.ShareONGUID );
|
||
|
|
||
|
m_takeScreenshotButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.TakeScreenshot, 0, 0, -1, -1, IOUtils.TakeScreenshotOFFGUID, string.Empty, "Take ScreenShot (WINDOWS ONLY).", 100 );
|
||
|
m_takeScreenshotButton.ToolButtonPressedEvt += OnButtonPressedEvent;
|
||
|
m_takeScreenshotButton.AddState( IOUtils.TakeScreenshotONGUID );
|
||
|
|
||
|
m_showInfoWindowButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.ShowInfoWindow, 0, 0, -1, -1, IOUtils.ShowInfoWindowGUID, string.Empty, "Open Helper Window." );
|
||
|
m_showInfoWindowButton.ToolButtonPressedEvt += OnButtonPressedEvent;
|
||
|
|
||
|
|
||
|
// hidden
|
||
|
m_showTipsWindowButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.ShowTipsWindow, 0, 0, -1, -1, IOUtils.ShowTipsWindowGUID, string.Empty, "Open Quick Tips!" );
|
||
|
m_showTipsWindowButton.ToolButtonPressedEvt += OnButtonPressedEvent;
|
||
|
|
||
|
m_showConsoleWindowButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.ShowConsole, 0, 0, -1, -1, IOUtils.ShowConsoleWindowGUID, string.Empty, "Show internal console", 74 );
|
||
|
m_showConsoleWindowButton.ToolButtonPressedEvt += OnButtonPressedEvent;
|
||
|
m_showConsoleWindowButton.AddState( IOUtils.ShowConsoleWindowGUID );
|
||
|
|
||
|
m_searchBarSize = new Rect( 0, TabY + 4, 110, 60 );
|
||
|
}
|
||
|
|
||
|
void OnShowPortLegend()
|
||
|
{
|
||
|
ParentWindow.ShowPortInfo();
|
||
|
}
|
||
|
|
||
|
override public void Destroy()
|
||
|
{
|
||
|
base.Destroy();
|
||
|
//for ( int i = 0; i < m_list.Length; i++ )
|
||
|
//{
|
||
|
// m_list[ i ].Destroy();
|
||
|
//}
|
||
|
//m_list = null;
|
||
|
|
||
|
m_searchResultNodes.Clear();
|
||
|
m_searchResultNodes = null;
|
||
|
|
||
|
m_updateButton.Destroy();
|
||
|
m_updateButton = null;
|
||
|
|
||
|
m_liveButton.Destroy();
|
||
|
m_liveButton = null;
|
||
|
|
||
|
m_openSourceCodeButton.Destroy();
|
||
|
m_openSourceCodeButton = null;
|
||
|
|
||
|
m_focusOnMasterNodeButton.Destroy();
|
||
|
m_focusOnMasterNodeButton = null;
|
||
|
|
||
|
m_focusOnSelectionButton.Destroy();
|
||
|
m_focusOnSelectionButton = null;
|
||
|
|
||
|
m_showInfoWindowButton.Destroy();
|
||
|
m_showInfoWindowButton = null;
|
||
|
|
||
|
m_takeScreenshotButton.Destroy();
|
||
|
m_takeScreenshotButton = null;
|
||
|
|
||
|
m_shareButton.Destroy();
|
||
|
m_shareButton = null;
|
||
|
|
||
|
m_showTipsWindowButton.Destroy();
|
||
|
m_showTipsWindowButton = null;
|
||
|
|
||
|
m_cleanUnusedNodesButton.Destroy();
|
||
|
m_cleanUnusedNodesButton = null;
|
||
|
|
||
|
m_showConsoleWindowButton.Destroy();
|
||
|
m_showConsoleWindowButton = null;
|
||
|
}
|
||
|
|
||
|
void OnButtonPressedEvent( ToolButtonType type )
|
||
|
{
|
||
|
if ( ToolButtonPressedEvt != null )
|
||
|
ToolButtonPressedEvt( type );
|
||
|
}
|
||
|
|
||
|
public override void Draw( Rect parentPosition, Vector2 mousePosition, int mouseButtonId, bool hasKeyboadFocus )
|
||
|
{
|
||
|
base.Draw( parentPosition, mousePosition, mouseButtonId, hasKeyboadFocus );
|
||
|
|
||
|
Color bufferedColor = GUI.color;
|
||
|
m_areaLeft.x = m_transformedArea.x + TabX;
|
||
|
m_areaRight.x = m_transformedArea.x + m_transformedArea.width - 75 - TabX;
|
||
|
|
||
|
//if ( m_toolbarButtonStyle == null )
|
||
|
//{
|
||
|
// m_toolbarButtonStyle = new GUIStyle( UIUtils.Button );
|
||
|
// m_toolbarButtonStyle.fixedWidth = 100;
|
||
|
//}
|
||
|
|
||
|
if ( m_toggleStyle == null )
|
||
|
{
|
||
|
m_toggleStyle = UIUtils.Toggle;
|
||
|
}
|
||
|
|
||
|
//for ( int i = 0; i < m_list.Length; i++ )
|
||
|
//{
|
||
|
// GUI.color = m_list[ i ].IsInside( mousePosition ) ? LeftIconsColorOn : LeftIconsColorOff;
|
||
|
// m_list[ i ].Draw( TabX + m_transformedArea.x + m_list[ i ].ButtonSpacing, TabY );
|
||
|
//}
|
||
|
GUI.color = m_updateButton.IsInside( mousePosition ) ? LeftIconsColorOn : LeftIconsColorOff;
|
||
|
m_updateButton.Draw( TabX + m_transformedArea.x + m_updateButton.ButtonSpacing, TabY );
|
||
|
|
||
|
GUI.color = m_liveButton.IsInside( mousePosition ) ? LeftIconsColorOn : LeftIconsColorOff;
|
||
|
m_liveButton.Draw( TabX + m_transformedArea.x + m_liveButton.ButtonSpacing, TabY );
|
||
|
|
||
|
GUI.color = m_openSourceCodeButton.IsInside( mousePosition ) ? LeftIconsColorOn : LeftIconsColorOff;
|
||
|
m_openSourceCodeButton.Draw( TabX + m_transformedArea.x + m_openSourceCodeButton.ButtonSpacing, TabY );
|
||
|
|
||
|
if ( m_searchBarVisible )
|
||
|
{
|
||
|
m_searchBarSize.x = m_transformedArea.x + m_transformedArea.width - 320 - TabX;
|
||
|
string currentFocus = GUI.GetNameOfFocusedControl();
|
||
|
|
||
|
if ( Event.current.type == EventType.KeyDown )
|
||
|
{
|
||
|
KeyCode keyCode = Event.current.keyCode;
|
||
|
if ( Event.current.shift )
|
||
|
{
|
||
|
if ( keyCode == KeyCode.F3 ||
|
||
|
( ( keyCode == KeyCode.KeypadEnter || keyCode == KeyCode.Return ) &&
|
||
|
( currentFocus.Equals( SearchBarId ) || string.IsNullOrEmpty( currentFocus ) ) ) )
|
||
|
SelectPrevious();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ( keyCode == KeyCode.F3 ||
|
||
|
( ( keyCode == KeyCode.KeypadEnter || keyCode == KeyCode.Return ) &&
|
||
|
( currentFocus.Equals( SearchBarId ) || string.IsNullOrEmpty( currentFocus ) ) ) )
|
||
|
SelectNext();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if( currentFocus.Equals( SearchBarId ) || ( m_parentWindow.CameraDrawInfo.CurrentEventType == EventType.MouseDown && m_searchBarSize.Contains( m_parentWindow.CameraDrawInfo.MousePosition ) ) || m_selectSearchBarTextfield )
|
||
|
{
|
||
|
EditorGUI.BeginChangeCheck();
|
||
|
{
|
||
|
GUI.SetNextControlName( SearchBarId );
|
||
|
m_searchBarValue = EditorGUI.TextField( m_searchBarSize, m_searchBarValue, UIUtils.ToolbarSearchTextfield );
|
||
|
}
|
||
|
if ( EditorGUI.EndChangeCheck() )
|
||
|
{
|
||
|
m_refreshSearchResultList = true;
|
||
|
}
|
||
|
} else
|
||
|
{
|
||
|
GUI.Label( m_searchBarSize, m_searchBarValue, UIUtils.ToolbarSearchTextfield );
|
||
|
}
|
||
|
|
||
|
m_searchBarSize.x += m_searchBarSize.width;
|
||
|
if ( m_parentWindow.CameraDrawInfo.CurrentEventType == EventType.MouseDown && m_searchBarSize.Contains( m_parentWindow.CameraDrawInfo.MousePosition ) )
|
||
|
{
|
||
|
if ( string.IsNullOrEmpty( m_searchBarValue ) )
|
||
|
{
|
||
|
m_searchBarVisible = false;
|
||
|
m_refreshSearchResultList = false;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_searchBarValue = string.Empty;
|
||
|
m_searchResultNodes.Clear();
|
||
|
m_currentSelected = -1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
GUI.Label( m_searchBarSize, string.Empty, UIUtils.ToolbarSearchCancelButton );
|
||
|
|
||
|
|
||
|
|
||
|
if ( Event.current.isKey && Event.current.keyCode == KeyCode.Escape )
|
||
|
{
|
||
|
m_searchBarVisible = false;
|
||
|
m_refreshSearchResultList = false;
|
||
|
GUI.FocusControl( null );
|
||
|
m_selectSearchBarTextfield = false;
|
||
|
}
|
||
|
|
||
|
if ( m_refreshSearchResultList && ( m_parentWindow.CurrentInactiveTime > InactivityRefreshTime ) )
|
||
|
{
|
||
|
RefreshList();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( m_selectSearchBarTextfield )
|
||
|
{
|
||
|
m_selectSearchBarTextfield = false;
|
||
|
EditorGUI.FocusTextInControl( SearchBarId );
|
||
|
//GUI.FocusControl( SearchBarId );
|
||
|
}
|
||
|
|
||
|
//if ( Event.current.control && Event.current.isKey && Event.current.keyCode == KeyCode.F && Event.current.type == EventType.KeyDown )
|
||
|
if( m_parentWindow.CurrentCommandName.Equals("Find") )
|
||
|
{
|
||
|
if ( !m_searchBarVisible )
|
||
|
{
|
||
|
m_searchBarVisible = true;
|
||
|
m_refreshSearchResultList = false;
|
||
|
}
|
||
|
m_selectSearchBarTextfield = true;
|
||
|
}
|
||
|
|
||
|
GUI.color = m_shareButton.IsInside( mousePosition ) ? RightIconsColorOn : RightIconsColorOff;
|
||
|
m_shareButton.Draw( m_transformedArea.x + m_transformedArea.width - 195 - TabX, TabY );
|
||
|
|
||
|
GUI.color = m_takeScreenshotButton.IsInside( mousePosition ) ? RightIconsColorOn : RightIconsColorOff;
|
||
|
m_takeScreenshotButton.Draw( m_transformedArea.x + m_transformedArea.width - 165 - TabX, TabY );
|
||
|
|
||
|
|
||
|
|
||
|
GUI.color = m_focusOnSelectionButton.IsInside( mousePosition ) ? RightIconsColorOn : RightIconsColorOff;
|
||
|
m_focusOnSelectionButton.Draw( m_transformedArea.x + m_transformedArea.width - 120 - TabX, TabY );
|
||
|
|
||
|
GUI.color = m_focusOnMasterNodeButton.IsInside( mousePosition ) ? RightIconsColorOn : RightIconsColorOff;
|
||
|
m_focusOnMasterNodeButton.Draw( m_transformedArea.x + m_transformedArea.width - 85 - TabX, TabY );
|
||
|
|
||
|
GUI.color = m_cleanUnusedNodesButton.IsInside( mousePosition ) ? RightIconsColorOn : RightIconsColorOff;
|
||
|
m_cleanUnusedNodesButton.Draw( m_transformedArea.x + m_transformedArea.width - 50 - TabX, TabY );
|
||
|
|
||
|
GUI.color = m_showInfoWindowButton.IsInside( mousePosition ) ? RightIconsColorOn : RightIconsColorOff;
|
||
|
m_showInfoWindowButton.Draw( m_transformedArea.x + m_transformedArea.width - 25 - TabX, TabY );
|
||
|
|
||
|
|
||
|
//GUI.color = m_showTipsWindowButton.IsInside( mousePosition ) ? RightIconsColorOn : RightIconsColorOff;
|
||
|
//m_showTipsWindowButton.Draw( m_transformedArea.x + m_transformedArea.width - 190 - TabX, TabY );
|
||
|
|
||
|
//GUI.color = m_showConsoleWindowButton.IsInside( mousePosition ) ? RightIconsColorOn : RightIconsColorOff;
|
||
|
//m_showConsoleWindowButton.Draw( m_transformedArea.x + m_transformedArea.width - 195 - TabX, TabY );
|
||
|
|
||
|
GUI.color = bufferedColor;
|
||
|
|
||
|
}
|
||
|
|
||
|
public void OnNodeRemovedFromGraph( ParentNode node )
|
||
|
{
|
||
|
m_searchResultNodes.Remove( node );
|
||
|
}
|
||
|
|
||
|
int m_previousNodeCount = 0;
|
||
|
|
||
|
void RefreshList()
|
||
|
{
|
||
|
m_refreshSearchResultList = false;
|
||
|
m_currentSelected = -1;
|
||
|
m_searchResultNodes.Clear();
|
||
|
if ( !string.IsNullOrEmpty( m_searchBarValue ) )
|
||
|
{
|
||
|
List<ParentNode> nodes = m_parentWindow.CurrentGraph.AllNodes;
|
||
|
int count = nodes.Count;
|
||
|
m_previousNodeCount = count;
|
||
|
for ( int i = 0; i < count; i++ )
|
||
|
{
|
||
|
if ( nodes[ i ].CheckFindText( m_searchBarValue ) )
|
||
|
{
|
||
|
m_searchResultNodes.Add( nodes[ i ] );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void SelectNext()
|
||
|
{
|
||
|
if ( m_refreshSearchResultList || m_parentWindow.CurrentGraph.AllNodes.Count != m_previousNodeCount )
|
||
|
{
|
||
|
RefreshList();
|
||
|
}
|
||
|
|
||
|
if ( m_searchResultNodes.Count > 0 )
|
||
|
{
|
||
|
m_currentSelected = ( m_currentSelected + 1 ) % m_searchResultNodes.Count;
|
||
|
m_parentWindow.FocusOnNode( m_searchResultNodes[ m_currentSelected ], 1, true ,true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void SelectPrevious()
|
||
|
{
|
||
|
if ( m_refreshSearchResultList || m_parentWindow.CurrentGraph.AllNodes.Count != m_previousNodeCount )
|
||
|
{
|
||
|
RefreshList();
|
||
|
}
|
||
|
|
||
|
if ( m_searchResultNodes.Count > 0 )
|
||
|
{
|
||
|
m_currentSelected = ( m_currentSelected > 1 ) ? ( m_currentSelected - 1 ) : ( m_searchResultNodes.Count - 1 );
|
||
|
m_parentWindow.FocusOnNode( m_searchResultNodes[ m_currentSelected ], 1, true );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public void SetStateOnButton( ToolButtonType button, int state, string tooltip )
|
||
|
{
|
||
|
switch ( button )
|
||
|
{
|
||
|
case ToolButtonType.New:
|
||
|
case ToolButtonType.Open:
|
||
|
case ToolButtonType.Save:
|
||
|
case ToolButtonType.Library:
|
||
|
case ToolButtonType.Options:
|
||
|
case ToolButtonType.Help:
|
||
|
case ToolButtonType.MasterNode: break;
|
||
|
case ToolButtonType.OpenSourceCode:
|
||
|
{
|
||
|
m_openSourceCodeButton.SetStateOnButton( state, tooltip );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.Update:
|
||
|
{
|
||
|
m_updateButton.SetStateOnButton( state, tooltip );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.Live:
|
||
|
{
|
||
|
m_liveButton.SetStateOnButton( state, tooltip );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.TakeScreenshot:
|
||
|
{
|
||
|
m_takeScreenshotButton.SetStateOnButton( state, tooltip );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.CleanUnusedNodes:
|
||
|
//case eToolButtonType.SelectShader:
|
||
|
{
|
||
|
m_cleanUnusedNodesButton.SetStateOnButton( state, tooltip );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.FocusOnMasterNode:
|
||
|
{
|
||
|
m_focusOnMasterNodeButton.SetStateOnButton( state, tooltip );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.FocusOnSelection:
|
||
|
{
|
||
|
m_focusOnSelectionButton.SetStateOnButton( state, tooltip );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.Share:
|
||
|
{
|
||
|
m_shareButton.SetStateOnButton( state, tooltip );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.ShowInfoWindow:
|
||
|
{
|
||
|
m_showInfoWindowButton.SetStateOnButton( state, tooltip );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.ShowTipsWindow:
|
||
|
{
|
||
|
m_showTipsWindowButton.SetStateOnButton( state, tooltip );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.ShowConsole:
|
||
|
{
|
||
|
m_showConsoleWindowButton.SetStateOnButton( state, tooltip );
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void SetStateOnButton( ToolButtonType button, int state )
|
||
|
{
|
||
|
switch ( button )
|
||
|
{
|
||
|
case ToolButtonType.New:
|
||
|
case ToolButtonType.Open:
|
||
|
case ToolButtonType.Save:
|
||
|
case ToolButtonType.Library:
|
||
|
case ToolButtonType.Options:
|
||
|
case ToolButtonType.Help:
|
||
|
case ToolButtonType.MasterNode: break;
|
||
|
case ToolButtonType.OpenSourceCode:
|
||
|
{
|
||
|
m_openSourceCodeButton.SetStateOnButton( state );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.Update:
|
||
|
{
|
||
|
m_updateButton.SetStateOnButton( state );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.Live:
|
||
|
{
|
||
|
m_liveButton.SetStateOnButton( state );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.TakeScreenshot:
|
||
|
{
|
||
|
m_takeScreenshotButton.SetStateOnButton( state );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.CleanUnusedNodes:
|
||
|
//case eToolButtonType.SelectShader:
|
||
|
{
|
||
|
m_cleanUnusedNodesButton.SetStateOnButton( state );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.FocusOnMasterNode:
|
||
|
{
|
||
|
m_focusOnMasterNodeButton.SetStateOnButton( state );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.FocusOnSelection:
|
||
|
{
|
||
|
m_focusOnSelectionButton.SetStateOnButton( state );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.Share:
|
||
|
{
|
||
|
m_shareButton.SetStateOnButton( state );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.ShowInfoWindow:
|
||
|
{
|
||
|
m_showInfoWindowButton.SetStateOnButton( state );
|
||
|
}
|
||
|
break;
|
||
|
case ToolButtonType.ShowTipsWindow:
|
||
|
{
|
||
|
m_showTipsWindowButton.SetStateOnButton( state );
|
||
|
}break;
|
||
|
case ToolButtonType.ShowConsole:
|
||
|
{
|
||
|
m_showConsoleWindowButton.SetStateOnButton( state );
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void DrawShaderTitle( MenuParent nodeParametersWindow, MenuParent paletteWindow, float availableCanvasWidth, float graphAreaHeight, string shaderName )
|
||
|
{
|
||
|
float leftAdjust = nodeParametersWindow.IsMaximized ? nodeParametersWindow.RealWidth : 0;
|
||
|
float rightAdjust = paletteWindow.IsMaximized ? 0 : paletteWindow.RealWidth;
|
||
|
|
||
|
m_boxRect = new Rect( leftAdjust + rightAdjust, 0, availableCanvasWidth, 35 );
|
||
|
m_boxRect.x += paletteWindow.IsMaximized ? 0 : -paletteWindow.RealWidth;
|
||
|
m_boxRect.width += nodeParametersWindow.IsMaximized ? 0 : nodeParametersWindow.RealWidth;
|
||
|
m_boxRect.width += paletteWindow.IsMaximized ? 0 : paletteWindow.RealWidth;
|
||
|
m_borderRect = new Rect( m_boxRect );
|
||
|
m_borderRect.height = graphAreaHeight;
|
||
|
|
||
|
int extra = m_searchBarVisible ? (int)m_searchBarSize.width + 20: 0;
|
||
|
//m_boxRect.xMax -= ( paletteWindow.IsMaximized ? 195 : 230 ) + extra;
|
||
|
//m_boxRect.xMin += nodeParametersWindow.IsMaximized ? 95 : 145;
|
||
|
|
||
|
UIUtils.ToolbarMainTitle.padding.right = ( paletteWindow.IsMaximized ? 195 : 230 ) + extra;
|
||
|
UIUtils.ToolbarMainTitle.padding.left = nodeParametersWindow.IsMaximized ? 110 : 145;
|
||
|
|
||
|
if ( m_borderStyle == null )
|
||
|
{
|
||
|
m_borderStyle = ( ParentWindow.CurrentGraph.CurrentMasterNode == null ) ? UIUtils.GetCustomStyle( CustomStyle.ShaderFunctionBorder ) : UIUtils.GetCustomStyle( CustomStyle.ShaderBorder );
|
||
|
}
|
||
|
|
||
|
GUI.Label( m_borderRect, shaderName, m_borderStyle );
|
||
|
GUI.Label( m_boxRect, shaderName, UIUtils.ToolbarMainTitle );
|
||
|
}
|
||
|
|
||
|
public override bool IsInside( Vector2 position )
|
||
|
{
|
||
|
if ( !m_isActive )
|
||
|
return false;
|
||
|
|
||
|
return m_boxRect.Contains( position ) || m_areaLeft.Contains( position ) || m_areaRight.Contains( position );
|
||
|
}
|
||
|
|
||
|
public GUIStyle BorderStyle
|
||
|
{
|
||
|
get { return m_borderStyle; }
|
||
|
set { m_borderStyle = value; }
|
||
|
}
|
||
|
}
|
||
|
}
|