#UI_ENHANCEMENT by cg
authorClaus Gittinger <cg@exept.de>
Fri, 13 May 2016 01:59:52 +0200
changeset 3302 413a225308d1
parent 3301 1663b107709f
child 3303 d3836d28d2c0
#UI_ENHANCEMENT by cg class: Tools::ViewTreeInspectorApplication class definition added: #browserVisibleHolder #inspectorVisibleHolder #postBuildBrowserCanvas: #updateBrowser comment/format in: #inspectorModeIndexHolder changed:6 methods
Tools__ViewTreeApplication.st
--- a/Tools__ViewTreeApplication.st	Thu May 12 21:34:25 2016 +0200
+++ b/Tools__ViewTreeApplication.st	Fri May 13 01:59:52 2016 +0200
@@ -17,7 +17,7 @@
 	instanceVariableNames:'model treeView hasSingleSelectionHolder clickedItem clickedPoint
 		motionAction process followFocusChannel showNamesHolder
 		inspectorView inspectorModeIndexHolder path
-		isCatchingEventsChannel'
+		isCatchingEventsChannel browser'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-Smalltalk'
@@ -353,9 +353,22 @@
                          useIndex: true
                          translateLabel: true
                        )
+                      (SubCanvasSpec
+                         name: 'Browser'
+                         layout: (LayoutFrame 0 0 26 0 0 1 0 1)
+                         visibilityChannel: browserVisibleHolder
+                         hasHorizontalScrollBar: true
+                         hasVerticalScrollBar: true
+                         majorKey: #'Tools::NewSystemBrowser'
+                         minorKey: singleClassWithoutVariableListBrowserSpec
+                         createNewApplication: true
+                         createNewBuilder: true
+                         postBuildCallback: postBuildBrowserCanvas:
+                       )
                       (ViewSpec
                          name: 'Inspector'
                          layout: (LayoutFrame 0 0 26 0 0 1 0 1)
+                         visibilityChannel: inspectorVisibleHolder
                          postBuildCallback: postBuildInspectorView:
                          viewClassName: 'InspectorView'
                        )
@@ -878,6 +891,22 @@
 
 !ViewTreeInspectorApplication methodsFor:'aspects'!
 
+browserVisibleHolder
+    "what is shown in the inspector:
+     1->Widget
+     2->Application
+     3->WindowGroup
+     4->Sensor
+     5->Model 
+     6->Widget Class 
+     7->Application Class 
+    "
+
+    ^ BlockValue
+        with:[:v | self inspectorMode == #widgetClass or:[self inspectorMode == #applicationClass] ]
+        argument:self inspectorModeIndexHolder
+!
+
 canBrowseWindowSpecMethod
     ^ self hasSingleSelectionHolder value and:[ self windowSpecMethodOfSelection notNil ]
 !
@@ -911,14 +940,13 @@
      3->WindowGroup
      4->Sensor
      5->Model 
+     6->Widget Class 
+     7->Application Class 
     "
 
-    (inspectorModeIndexHolder value == 1) ifTrue:[ ^#widget].
-    (inspectorModeIndexHolder value == 2) ifTrue:[ ^#application].
-    (inspectorModeIndexHolder value == 3) ifTrue:[ ^#group].
-    (inspectorModeIndexHolder value == 4) ifTrue:[ ^#sensor].
-    (inspectorModeIndexHolder value == 5) ifTrue:[ ^#model].
-    ^ #application
+    |mode|
+    mode := inspectorModeIndexHolder value.
+    ^ #( widget application group sensor model widgetClass applicationClass) at:mode ifAbsent:#widget
 
     "Created: / 30-07-2013 / 07:44:59 / cg"
 !
@@ -930,6 +958,8 @@
      3->WindowGroup
      4->Sensor
      5->Model 
+     6->Widget Class 
+     7->Application Class 
     "
 
     ^ inspectorModeIndexHolder
@@ -938,11 +968,28 @@
 !
 
 inspectorModes
-    ^ #('Widget' 'Application' 'WindowGroup' 'Sensor' 'Model')
+    "/ labels of tabs
+    ^ #('Widget' 'Application' 'WindowGroup' 'Sensor' 'Model' 'Widget Class' 'App Class')
 
     "Created: / 30-07-2013 / 09:42:16 / cg"
 !
 
+inspectorVisibleHolder
+    "what is shown in the inspector:
+     1->Widget
+     2->Application
+     3->WindowGroup
+     4->Sensor
+     5->Model 
+     6->Widget Class 
+     7->Application Class 
+    "
+
+    ^ BlockValue
+        with:[:v | v not ]
+        argument:self browserVisibleHolder
+!
+
 isCatchingEventsChannel
     ^ isCatchingEventsChannel
 !
@@ -1001,7 +1048,8 @@
 !
 
 windowSpecMethodOfSelection
-    |item view app spec builder specSelector implementors|
+    |item view app nonMeta meta masterApp
+     spec builder specSelector implementors|
 
     item := model selectedItem.
     item isNil ifTrue:[^ nil]. 
@@ -1011,7 +1059,7 @@
 
     app := view application.
     app isNil ifTrue:[^ nil]. 
-
+    
     builder := app builder.
     builder isNil ifTrue:[^ nil]. 
 
@@ -1021,20 +1069,20 @@
     specSelector := spec name.
     specSelector isNil ifTrue:[^ nil].
 
-    (app class theNonMetaclass canUnderstand:specSelector) ifTrue:[
-        ^ app class theNonMetaclass lookupMethodFor:specSelector.
+    ((nonMeta := app class theNonMetaclass) canUnderstand:specSelector) ifTrue:[
+        ^ nonMeta lookupMethodFor:specSelector.
     ].
-    (app class theMetaclass canUnderstand:specSelector) ifTrue:[
-        ^ app class theMetaclass lookupMethodFor:specSelector.
+    ((meta := app class theMetaclass) canUnderstand:specSelector) ifTrue:[
+        ^ meta lookupMethodFor:specSelector.
     ].
 
     "/ maybe a simple dialog given a spec
-    app masterApplication notNil ifTrue:[
-        (app masterApplication class theNonMetaclass canUnderstand:specSelector) ifTrue:[     
-            ^ app masterApplication class theNonMetaclass lookupMethodFor:specSelector.
+    (masterApp := app masterApplication) notNil ifTrue:[
+        ((nonMeta := masterApp class theNonMetaclass) canUnderstand:specSelector) ifTrue:[     
+            ^ nonMeta lookupMethodFor:specSelector.
         ].
-        (app masterApplication class theMetaclass canUnderstand:specSelector) ifTrue:[    
-            ^ app masterApplication class theMetaclass lookupMethodFor:specSelector.
+        ((meta := masterApp class theMetaclass) canUnderstand:specSelector) ifTrue:[    
+            ^ meta lookupMethodFor:specSelector.
         ].
     ].
 
@@ -1102,17 +1150,41 @@
     super update:something with:someArgument from:aModel.
 !
 
+updateBrowser
+    |cls widget|
+
+    widget := self selectedView.
+    
+    "/ update the browser
+    self inspectorMode == #widgetClass ifTrue:[
+        cls := widget class.
+    ] ifFalse:[
+        cls := widget application class
+    ].    
+    browser switchToClass:cls selector:nil.
+!
+
 updateInspector
-    |view obj|
+    |view mode obj|
 
     view := self selectedView.
-    (view isNil or:[self inspectorMode == #widget]) ifTrue:[
+    mode := self inspectorMode.
+    
+    ((mode == #widgetClass) or:[(mode == #applicationClass)]) ifTrue:[
+        "/ update the browser
+        view notNil ifTrue:[
+            self updateBrowser.
+        ].
+        ^ self.
+    ].
+    
+    (view isNil or:[mode == #widget]) ifTrue:[
         obj := view.
-    ] ifFalse:[ (self inspectorMode == #group) ifTrue:[
+    ] ifFalse:[ (mode == #group) ifTrue:[
         obj := view windowGroup
-    ] ifFalse:[ (self inspectorMode == #sensor) ifTrue:[
+    ] ifFalse:[ (mode == #sensor) ifTrue:[
         obj := view sensor
-    ] ifFalse:[ (self inspectorMode == #model) ifTrue:[
+    ] ifFalse:[ (mode == #model) ifTrue:[
         obj := view model
     ] ifFalse:[
         obj := view application.
@@ -1366,6 +1438,13 @@
     "Modified: / 30-07-2013 / 09:20:08 / cg"
 !
 
+postBuildBrowserCanvas:aSubCanvas
+    browser := aSubCanvas application.
+
+    "/ browser navigationState meta onChangeEvaluate:(self updateBrowser).
+    "/ self updateBrowser.
+!
+
 postBuildInspectorView:anInspector
     inspectorView := anInspector.
 !
@@ -2143,30 +2222,28 @@
 
 objectToInspectOrBrowse:what
     "return one of:
-        #view           inspect class
+        #view           inspect view/widget
         #group          inspect windowGroup
         #model          inspect model
         #application    inspect application
         #controller     inspect controller
         #process        inspect application's process
+        #widgetClass    browse widget's class
     "
-    |view inst|
+    |view|
 
     view := self selectedView.
     view isNil ifTrue:[^ nil].
 
-             what == #group       ifTrue:[ inst := view windowGroup ]
-    ifFalse:[what == #model       ifTrue:[ inst := view model ]
-    ifFalse:[what == #application ifTrue:[ inst := view application ]
-    ifFalse:[what == #controller  ifTrue:[ inst := view controller  ]
-    ifFalse:[what == #process     ifTrue:[ inst := view windowGroup process  ]
-    ifFalse:[what == #sensor      ifTrue:[ inst := view sensor  ]
-    ifFalse:[inst := view  ]]]]]].
-
-    (inst isNil and:[what == #application]) ifTrue:[
-        inst := view topView
-    ].
-    ^ inst
+    what == #group       ifTrue:[ ^ view windowGroup ].
+    what == #model       ifTrue:[ ^ view model ].
+    what == #controller  ifTrue:[ ^ view controller ].
+    what == #process     ifTrue:[ ^ view windowGroup process ].
+    what == #sensor      ifTrue:[ ^ view sensor ].
+    what == #application ifTrue:[ ^ view application ? view topView ].
+    what == #applicationClass ifTrue:[ ^ view application ? view topView ].
+
+    ^ view
 
     "Modified: / 28-08-2013 / 23:58:27 / cg"
 !