@@ -13,6 +13,7 @@ internal class AnnotationWindow : EditorWindow
1313 class Styles
1414 {
1515 public GUIStyle toggle = "OL Toggle" ;
16+ public GUIStyle toggleMixed = "OL ToggleMixed" ;
1617 public GUIStyle listEvenBg = "ObjectPickerResultsOdd" ; //"ObjectPickerResultsEven";//
1718 public GUIStyle listOddBg = "ObjectPickerResultsEven" ; //"ObjectPickerResultsEven";//
1819 public GUIStyle background = "grey_border" ;
@@ -22,6 +23,8 @@ class Styles
2223 public GUIStyle listHeaderStyle ;
2324 public GUIStyle texelWorldSizeStyle ;
2425 public GUIStyle columnHeaderStyle ;
26+ public const float k_ToggleSize = 17f ;
27+
2528 public Styles ( )
2629 {
2730 listTextStyle = new GUIStyle ( EditorStyles . label ) ;
@@ -40,6 +43,15 @@ public Styles()
4043 columnHeaderStyle = EditorStyles . miniLabel ;
4144 }
4245 }
46+
47+ private enum EnabledState
48+ {
49+ NotSet = - 1 ,
50+ None = 0 ,
51+ All = 1 ,
52+ Mixed = 2
53+ } ;
54+
4355 const float kWindowWidth = 270 ;
4456 const float scrollBarWidth = 14 ;
4557 const float listElementHeight = 18 ;
@@ -425,7 +437,7 @@ float DrawListSection(float y, string sectionHeader, List<AInfo> listElements, b
425437 if ( doDraw )
426438 {
427439 // Header text
428- DrawListHeader ( sectionHeader , new Rect ( 3 , curY , listElementWidth , headerHeight ) , ref headerDrawn ) ;
440+ DrawListHeader ( sectionHeader , listElements , new Rect ( 3 , curY , listElementWidth , headerHeight ) , ref headerDrawn ) ;
429441 }
430442 curY += headerHeight ;
431443
@@ -458,10 +470,55 @@ float DrawListSection(float y, string sectionHeader, List<AInfo> listElements, b
458470 return curY ;
459471 }
460472
461- void DrawListHeader ( string header , Rect rect , ref bool headerDrawn )
473+ void DrawListHeader ( string header , List < AInfo > elements , Rect rect , ref bool headerDrawn )
462474 {
463475 GUI . Label ( rect , GUIContent . Temp ( header ) , m_Styles . listHeaderStyle ) ;
464476
477+ float toggleSize = Styles . k_ToggleSize ;
478+ EnabledState enabledState = EnabledState . NotSet ;
479+
480+ for ( int i = 0 ; i < elements . Count ; i ++ )
481+ {
482+ var element = elements [ i ] ;
483+
484+ if ( element . HasGizmo ( ) )
485+ {
486+ if ( enabledState == EnabledState . NotSet )
487+ {
488+ enabledState = element . m_GizmoEnabled ? EnabledState . All : EnabledState . None ;
489+ }
490+ else if ( ( enabledState == EnabledState . All ) != element . m_GizmoEnabled )
491+ {
492+ enabledState = EnabledState . Mixed ;
493+ break ;
494+ }
495+ }
496+ }
497+
498+ GUIStyle style = m_Styles . toggle ;
499+ bool enabled = enabledState > EnabledState . None ;
500+
501+ bool setMixed = enabledState == EnabledState . Mixed ;
502+ if ( setMixed )
503+ style = m_Styles . toggleMixed ;
504+
505+ Rect toggleRect = new Rect ( rect . width - gizmoRightAlign - 2 , rect . y + ( rect . height - toggleSize ) * 0.5f , toggleSize , toggleSize ) ;
506+
507+ bool newEnabled = GUI . Toggle ( toggleRect , enabled , GUIContent . none , style ) ;
508+
509+ if ( newEnabled != enabled )
510+ {
511+ for ( int i = 0 ; i < elements . Count ; i ++ )
512+ {
513+ var element = elements [ i ] ;
514+
515+ if ( element . m_GizmoEnabled != newEnabled )
516+ {
517+ element . m_GizmoEnabled = newEnabled ;
518+ SetGizmoState ( element , false ) ;
519+ }
520+ }
521+ }
465522
466523 if ( headerDrawn == false )
467524 {
@@ -490,7 +547,7 @@ void DrawListElement(Rect rect, bool even, AInfo ainfo)
490547 }
491548
492549 string tooltip ;
493- float togglerSize = 17 ;
550+ float togglerSize = Styles . k_ToggleSize ;
494551 float disabledAlpha = 0.3f ;
495552
496553 // We maintain our own gui.changed
@@ -612,9 +669,9 @@ void SetIconState(AInfo ainfo)
612669 SceneView . RepaintAll ( ) ;
613670 }
614671
615- void SetGizmoState ( AInfo ainfo )
672+ void SetGizmoState ( AInfo ainfo , bool addToMostRecentChanged = true )
616673 {
617- AnnotationUtility . SetGizmoEnabled ( ainfo . m_ClassID , ainfo . m_ScriptClass , ainfo . m_GizmoEnabled ? 1 : 0 ) ;
674+ AnnotationUtility . SetGizmoEnabled ( ainfo . m_ClassID , ainfo . m_ScriptClass , ainfo . m_GizmoEnabled ? 1 : 0 , addToMostRecentChanged ) ;
618675 SceneView . RepaintAll ( ) ;
619676 }
620677 }
0 commit comments