Tools__ViewTreeApplication.st
changeset 3302 413a225308d1
parent 3217 af9fd0c681e0
child 3319 97fd83492529
equal deleted inserted replaced
3301:1663b107709f 3302:413a225308d1
    15 
    15 
    16 ToolApplicationModel subclass:#ViewTreeInspectorApplication
    16 ToolApplicationModel subclass:#ViewTreeInspectorApplication
    17 	instanceVariableNames:'model treeView hasSingleSelectionHolder clickedItem clickedPoint
    17 	instanceVariableNames:'model treeView hasSingleSelectionHolder clickedItem clickedPoint
    18 		motionAction process followFocusChannel showNamesHolder
    18 		motionAction process followFocusChannel showNamesHolder
    19 		inspectorView inspectorModeIndexHolder path
    19 		inspectorView inspectorModeIndexHolder path
    20 		isCatchingEventsChannel'
    20 		isCatchingEventsChannel browser'
    21 	classVariableNames:''
    21 	classVariableNames:''
    22 	poolDictionaries:''
    22 	poolDictionaries:''
    23 	category:'Interface-Smalltalk'
    23 	category:'Interface-Smalltalk'
    24 !
    24 !
    25 
    25 
   351                          model: inspectorModeIndexHolder
   351                          model: inspectorModeIndexHolder
   352                          menu: inspectorModes
   352                          menu: inspectorModes
   353                          useIndex: true
   353                          useIndex: true
   354                          translateLabel: true
   354                          translateLabel: true
   355                        )
   355                        )
       
   356                       (SubCanvasSpec
       
   357                          name: 'Browser'
       
   358                          layout: (LayoutFrame 0 0 26 0 0 1 0 1)
       
   359                          visibilityChannel: browserVisibleHolder
       
   360                          hasHorizontalScrollBar: true
       
   361                          hasVerticalScrollBar: true
       
   362                          majorKey: #'Tools::NewSystemBrowser'
       
   363                          minorKey: singleClassWithoutVariableListBrowserSpec
       
   364                          createNewApplication: true
       
   365                          createNewBuilder: true
       
   366                          postBuildCallback: postBuildBrowserCanvas:
       
   367                        )
   356                       (ViewSpec
   368                       (ViewSpec
   357                          name: 'Inspector'
   369                          name: 'Inspector'
   358                          layout: (LayoutFrame 0 0 26 0 0 1 0 1)
   370                          layout: (LayoutFrame 0 0 26 0 0 1 0 1)
       
   371                          visibilityChannel: inspectorVisibleHolder
   359                          postBuildCallback: postBuildInspectorView:
   372                          postBuildCallback: postBuildInspectorView:
   360                          viewClassName: 'InspectorView'
   373                          viewClassName: 'InspectorView'
   361                        )
   374                        )
   362                       )
   375                       )
   363                     
   376                     
   876     ].
   889     ].
   877 ! !
   890 ! !
   878 
   891 
   879 !ViewTreeInspectorApplication methodsFor:'aspects'!
   892 !ViewTreeInspectorApplication methodsFor:'aspects'!
   880 
   893 
       
   894 browserVisibleHolder
       
   895     "what is shown in the inspector:
       
   896      1->Widget
       
   897      2->Application
       
   898      3->WindowGroup
       
   899      4->Sensor
       
   900      5->Model 
       
   901      6->Widget Class 
       
   902      7->Application Class 
       
   903     "
       
   904 
       
   905     ^ BlockValue
       
   906         with:[:v | self inspectorMode == #widgetClass or:[self inspectorMode == #applicationClass] ]
       
   907         argument:self inspectorModeIndexHolder
       
   908 !
       
   909 
   881 canBrowseWindowSpecMethod
   910 canBrowseWindowSpecMethod
   882     ^ self hasSingleSelectionHolder value and:[ self windowSpecMethodOfSelection notNil ]
   911     ^ self hasSingleSelectionHolder value and:[ self windowSpecMethodOfSelection notNil ]
   883 !
   912 !
   884 
   913 
   885 canEditWindowSpec
   914 canEditWindowSpec
   909      1->widget
   938      1->widget
   910      2->application
   939      2->application
   911      3->WindowGroup
   940      3->WindowGroup
   912      4->Sensor
   941      4->Sensor
   913      5->Model 
   942      5->Model 
   914     "
   943      6->Widget Class 
   915 
   944      7->Application Class 
   916     (inspectorModeIndexHolder value == 1) ifTrue:[ ^#widget].
   945     "
   917     (inspectorModeIndexHolder value == 2) ifTrue:[ ^#application].
   946 
   918     (inspectorModeIndexHolder value == 3) ifTrue:[ ^#group].
   947     |mode|
   919     (inspectorModeIndexHolder value == 4) ifTrue:[ ^#sensor].
   948     mode := inspectorModeIndexHolder value.
   920     (inspectorModeIndexHolder value == 5) ifTrue:[ ^#model].
   949     ^ #( widget application group sensor model widgetClass applicationClass) at:mode ifAbsent:#widget
   921     ^ #application
       
   922 
   950 
   923     "Created: / 30-07-2013 / 07:44:59 / cg"
   951     "Created: / 30-07-2013 / 07:44:59 / cg"
   924 !
   952 !
   925 
   953 
   926 inspectorModeIndexHolder
   954 inspectorModeIndexHolder
   928      1->Widget
   956      1->Widget
   929      2->Application
   957      2->Application
   930      3->WindowGroup
   958      3->WindowGroup
   931      4->Sensor
   959      4->Sensor
   932      5->Model 
   960      5->Model 
       
   961      6->Widget Class 
       
   962      7->Application Class 
   933     "
   963     "
   934 
   964 
   935     ^ inspectorModeIndexHolder
   965     ^ inspectorModeIndexHolder
   936 
   966 
   937     "Created: / 30-07-2013 / 07:44:07 / cg"
   967     "Created: / 30-07-2013 / 07:44:07 / cg"
   938 !
   968 !
   939 
   969 
   940 inspectorModes
   970 inspectorModes
   941     ^ #('Widget' 'Application' 'WindowGroup' 'Sensor' 'Model')
   971     "/ labels of tabs
       
   972     ^ #('Widget' 'Application' 'WindowGroup' 'Sensor' 'Model' 'Widget Class' 'App Class')
   942 
   973 
   943     "Created: / 30-07-2013 / 09:42:16 / cg"
   974     "Created: / 30-07-2013 / 09:42:16 / cg"
       
   975 !
       
   976 
       
   977 inspectorVisibleHolder
       
   978     "what is shown in the inspector:
       
   979      1->Widget
       
   980      2->Application
       
   981      3->WindowGroup
       
   982      4->Sensor
       
   983      5->Model 
       
   984      6->Widget Class 
       
   985      7->Application Class 
       
   986     "
       
   987 
       
   988     ^ BlockValue
       
   989         with:[:v | v not ]
       
   990         argument:self browserVisibleHolder
   944 !
   991 !
   945 
   992 
   946 isCatchingEventsChannel
   993 isCatchingEventsChannel
   947     ^ isCatchingEventsChannel
   994     ^ isCatchingEventsChannel
   948 !
   995 !
   999 
  1046 
  1000     ^ model testModeChannel
  1047     ^ model testModeChannel
  1001 !
  1048 !
  1002 
  1049 
  1003 windowSpecMethodOfSelection
  1050 windowSpecMethodOfSelection
  1004     |item view app spec builder specSelector implementors|
  1051     |item view app nonMeta meta masterApp
       
  1052      spec builder specSelector implementors|
  1005 
  1053 
  1006     item := model selectedItem.
  1054     item := model selectedItem.
  1007     item isNil ifTrue:[^ nil]. 
  1055     item isNil ifTrue:[^ nil]. 
  1008 
  1056 
  1009     view := item widget.
  1057     view := item widget.
  1010     view isNil ifTrue:[^ nil]. 
  1058     view isNil ifTrue:[^ nil]. 
  1011 
  1059 
  1012     app := view application.
  1060     app := view application.
  1013     app isNil ifTrue:[^ nil]. 
  1061     app isNil ifTrue:[^ nil]. 
  1014 
  1062     
  1015     builder := app builder.
  1063     builder := app builder.
  1016     builder isNil ifTrue:[^ nil]. 
  1064     builder isNil ifTrue:[^ nil]. 
  1017 
  1065 
  1018     spec := builder spec.
  1066     spec := builder spec.
  1019     spec isNil ifTrue:[^ nil].
  1067     spec isNil ifTrue:[^ nil].
  1020 
  1068 
  1021     specSelector := spec name.
  1069     specSelector := spec name.
  1022     specSelector isNil ifTrue:[^ nil].
  1070     specSelector isNil ifTrue:[^ nil].
  1023 
  1071 
  1024     (app class theNonMetaclass canUnderstand:specSelector) ifTrue:[
  1072     ((nonMeta := app class theNonMetaclass) canUnderstand:specSelector) ifTrue:[
  1025         ^ app class theNonMetaclass lookupMethodFor:specSelector.
  1073         ^ nonMeta lookupMethodFor:specSelector.
  1026     ].
  1074     ].
  1027     (app class theMetaclass canUnderstand:specSelector) ifTrue:[
  1075     ((meta := app class theMetaclass) canUnderstand:specSelector) ifTrue:[
  1028         ^ app class theMetaclass lookupMethodFor:specSelector.
  1076         ^ meta lookupMethodFor:specSelector.
  1029     ].
  1077     ].
  1030 
  1078 
  1031     "/ maybe a simple dialog given a spec
  1079     "/ maybe a simple dialog given a spec
  1032     app masterApplication notNil ifTrue:[
  1080     (masterApp := app masterApplication) notNil ifTrue:[
  1033         (app masterApplication class theNonMetaclass canUnderstand:specSelector) ifTrue:[     
  1081         ((nonMeta := masterApp class theNonMetaclass) canUnderstand:specSelector) ifTrue:[     
  1034             ^ app masterApplication class theNonMetaclass lookupMethodFor:specSelector.
  1082             ^ nonMeta lookupMethodFor:specSelector.
  1035         ].
  1083         ].
  1036         (app masterApplication class theMetaclass canUnderstand:specSelector) ifTrue:[    
  1084         ((meta := masterApp class theMetaclass) canUnderstand:specSelector) ifTrue:[    
  1037             ^ app masterApplication class theMetaclass lookupMethodFor:specSelector.
  1085             ^ meta lookupMethodFor:specSelector.
  1038         ].
  1086         ].
  1039     ].
  1087     ].
  1040 
  1088 
  1041     implementors := Smalltalk allImplementorsOf: specSelector.
  1089     implementors := Smalltalk allImplementorsOf: specSelector.
  1042     implementors size == 1 ifTrue:[
  1090     implementors size == 1 ifTrue:[
  1100     ].
  1148     ].
  1101 
  1149 
  1102     super update:something with:someArgument from:aModel.
  1150     super update:something with:someArgument from:aModel.
  1103 !
  1151 !
  1104 
  1152 
       
  1153 updateBrowser
       
  1154     |cls widget|
       
  1155 
       
  1156     widget := self selectedView.
       
  1157     
       
  1158     "/ update the browser
       
  1159     self inspectorMode == #widgetClass ifTrue:[
       
  1160         cls := widget class.
       
  1161     ] ifFalse:[
       
  1162         cls := widget application class
       
  1163     ].    
       
  1164     browser switchToClass:cls selector:nil.
       
  1165 !
       
  1166 
  1105 updateInspector
  1167 updateInspector
  1106     |view obj|
  1168     |view mode obj|
  1107 
  1169 
  1108     view := self selectedView.
  1170     view := self selectedView.
  1109     (view isNil or:[self inspectorMode == #widget]) ifTrue:[
  1171     mode := self inspectorMode.
       
  1172     
       
  1173     ((mode == #widgetClass) or:[(mode == #applicationClass)]) ifTrue:[
       
  1174         "/ update the browser
       
  1175         view notNil ifTrue:[
       
  1176             self updateBrowser.
       
  1177         ].
       
  1178         ^ self.
       
  1179     ].
       
  1180     
       
  1181     (view isNil or:[mode == #widget]) ifTrue:[
  1110         obj := view.
  1182         obj := view.
  1111     ] ifFalse:[ (self inspectorMode == #group) ifTrue:[
  1183     ] ifFalse:[ (mode == #group) ifTrue:[
  1112         obj := view windowGroup
  1184         obj := view windowGroup
  1113     ] ifFalse:[ (self inspectorMode == #sensor) ifTrue:[
  1185     ] ifFalse:[ (mode == #sensor) ifTrue:[
  1114         obj := view sensor
  1186         obj := view sensor
  1115     ] ifFalse:[ (self inspectorMode == #model) ifTrue:[
  1187     ] ifFalse:[ (mode == #model) ifTrue:[
  1116         obj := view model
  1188         obj := view model
  1117     ] ifFalse:[
  1189     ] ifFalse:[
  1118         obj := view application.
  1190         obj := view application.
  1119     ]]]].
  1191     ]]]].
  1120     inspectorView inspect:obj.
  1192     inspectorView inspect:obj.
  1364     showNamesHolder addDependent:self.
  1436     showNamesHolder addDependent:self.
  1365 
  1437 
  1366     "Modified: / 30-07-2013 / 09:20:08 / cg"
  1438     "Modified: / 30-07-2013 / 09:20:08 / cg"
  1367 !
  1439 !
  1368 
  1440 
       
  1441 postBuildBrowserCanvas:aSubCanvas
       
  1442     browser := aSubCanvas application.
       
  1443 
       
  1444     "/ browser navigationState meta onChangeEvaluate:(self updateBrowser).
       
  1445     "/ self updateBrowser.
       
  1446 !
       
  1447 
  1369 postBuildInspectorView:anInspector
  1448 postBuildInspectorView:anInspector
  1370     inspectorView := anInspector.
  1449     inspectorView := anInspector.
  1371 !
  1450 !
  1372 
  1451 
  1373 postBuildTree:aTree
  1452 postBuildTree:aTree
  2141     self setRootItem:nil.
  2220     self setRootItem:nil.
  2142 !
  2221 !
  2143 
  2222 
  2144 objectToInspectOrBrowse:what
  2223 objectToInspectOrBrowse:what
  2145     "return one of:
  2224     "return one of:
  2146         #view           inspect class
  2225         #view           inspect view/widget
  2147         #group          inspect windowGroup
  2226         #group          inspect windowGroup
  2148         #model          inspect model
  2227         #model          inspect model
  2149         #application    inspect application
  2228         #application    inspect application
  2150         #controller     inspect controller
  2229         #controller     inspect controller
  2151         #process        inspect application's process
  2230         #process        inspect application's process
  2152     "
  2231         #widgetClass    browse widget's class
  2153     |view inst|
  2232     "
       
  2233     |view|
  2154 
  2234 
  2155     view := self selectedView.
  2235     view := self selectedView.
  2156     view isNil ifTrue:[^ nil].
  2236     view isNil ifTrue:[^ nil].
  2157 
  2237 
  2158              what == #group       ifTrue:[ inst := view windowGroup ]
  2238     what == #group       ifTrue:[ ^ view windowGroup ].
  2159     ifFalse:[what == #model       ifTrue:[ inst := view model ]
  2239     what == #model       ifTrue:[ ^ view model ].
  2160     ifFalse:[what == #application ifTrue:[ inst := view application ]
  2240     what == #controller  ifTrue:[ ^ view controller ].
  2161     ifFalse:[what == #controller  ifTrue:[ inst := view controller  ]
  2241     what == #process     ifTrue:[ ^ view windowGroup process ].
  2162     ifFalse:[what == #process     ifTrue:[ inst := view windowGroup process  ]
  2242     what == #sensor      ifTrue:[ ^ view sensor ].
  2163     ifFalse:[what == #sensor      ifTrue:[ inst := view sensor  ]
  2243     what == #application ifTrue:[ ^ view application ? view topView ].
  2164     ifFalse:[inst := view  ]]]]]].
  2244     what == #applicationClass ifTrue:[ ^ view application ? view topView ].
  2165 
  2245 
  2166     (inst isNil and:[what == #application]) ifTrue:[
  2246     ^ view
  2167         inst := view topView
       
  2168     ].
       
  2169     ^ inst
       
  2170 
  2247 
  2171     "Modified: / 28-08-2013 / 23:58:27 / cg"
  2248     "Modified: / 28-08-2013 / 23:58:27 / cg"
  2172 !
  2249 !
  2173 
  2250 
  2174 openDocumentation
  2251 openDocumentation