ResourceSelectionBrowser.st
changeset 385 059ced1c8344
child 388 45cf0af38948
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ResourceSelectionBrowser.st	Wed Dec 03 22:14:21 1997 +0100
@@ -0,0 +1,304 @@
+SelectionBrowser subclass:#ResourceSelectionBrowser
+	instanceVariableNames:'resourceMethod resourceClass resourceSuperclass resourceSelector
+		resourceTypes'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Advanced-Tools'
+!
+
+
+!ResourceSelectionBrowser class methodsFor:'instance creation'!
+
+openOnSuperclass: aSuperclass class: aClass selector: aSelector resourceTypes: aResourceTypes
+
+    ^self new openOnSuperclass: aSuperclass class: aClass selector: aSelector resourceTypes: aResourceTypes
+! !
+
+!ResourceSelectionBrowser class methodsFor:'interface specs'!
+
+windowSpec
+    "this window spec was automatically generated by the ST/X UIPainter"
+
+    "do not manually edit this - the painter/builder may not be able to
+     handle the specification if its corrupted."
+
+    "
+     UIPainter new openOnClass:ResourceBrowser andSelector:#windowSpec
+     ResourceBrowser new openInterface:#windowSpec
+    "
+    "ResourceBrowser open"
+
+    <resource: #canvas>
+
+    ^
+     
+       #(#FullSpec
+          #'window:' 
+           #(#WindowSpec
+              #'name:' 'Resource Browser'
+              #'layout:' #(#LayoutFrame 541 0 280 0 940 0 579 0)
+              #'label:' 'Resource Browser'
+              #'min:' #(#Point 400 300)
+              #'max:' #(#Point 1152 864)
+              #'bounds:' #(#Rectangle 541 280 941 580)
+              #'usePreferredExtent:' false
+          )
+          #'component:' 
+           #(#SpecCollection
+              #'collection:' 
+               #(
+                 #(#VariableHorizontalPanelSpec
+                    #'name:' 'variableHorizontalPanel'
+                    #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 -40 1.0)
+                    #'component:' 
+                     #(#SpecCollection
+                        #'collection:' 
+                         #(
+                           #(#ViewSpec
+                              #'name:' 'view1'
+                              #'component:' 
+                               #(#SpecCollection
+                                  #'collection:' 
+                                   #(
+                                     #(#SelectionInTreeViewSpec
+                                        #'name:' 'listOfClassesView'
+                                        #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+                                        #'model:' #selectionOfClass
+                                        #'hasHorizontalScrollBar:' true
+                                        #'hasVerticalScrollBar:' true
+                                        #'miniScrollerHorizontal:' true
+                                        #'showRoot:' false
+                                        #'valueChangeSelector:' #'classSelected:'
+                                        #'hierarchicalList:' #listOfClasses
+                                    )
+                                  )
+                              )
+                              #'level:' -1
+                          )
+                           #(#ViewSpec
+                              #'name:' 'view2'
+                              #'component:' 
+                               #(#SpecCollection
+                                  #'collection:' 
+                                   #(
+                                     #(#DataSetSpec
+                                        #'name:' 'resourcesDataSetView'
+                                        #'layout:' #(#LayoutFrame 2 0.0 0 0.0 2 1.0 -22 1.0)
+                                        #'model:' #selectionOfResource
+                                        #'hasHorizontalScrollBar:' true
+                                        #'hasVerticalScrollBar:' true
+                                        #'miniScrollerHorizontal:' true
+                                        #'dataList:' #listOfResources
+                                        #'useIndex:' false
+                                        #'doubleClickSelector:' #resourceDoubleClicked
+                                        #'valueChangeSelector:' #resourceSelected
+                                        #'verticalSpacing:' 1
+                                        #'columns:' 
+                                         #(
+                                           #(#DataSetColumnSpec
+                                              #'width:' 20
+                                              #'model:' #icon
+                                              #'printSelector:' #'iconOn:'
+                                              #'canSelect:' false
+                                          )
+                                           #(#DataSetColumnSpec
+                                              #'label:' 'selector'
+                                              #'model:' #selector
+                                              #'canSelect:' false
+                                          )
+                                           #(#DataSetColumnSpec
+                                              #'label:' 'resource'
+                                              #'model:' #resourceType
+                                              #'canSelect:' false
+                                          )
+                                        )
+                                    )
+                                     #(#InputFieldSpec
+                                        #'name:' 'selectorInputField'
+                                        #'layout:' #(#LayoutFrame 2 0.0 -22 1 2 1.0 0 1)
+                                        #'model:' #valueOfSelector
+                                    )
+                                  )
+                              )
+                              #'level:' -1
+                          )
+                        )
+                    )
+                    #'handles:' #(#Any 0.5 1.0)
+                )
+                 #(#HorizontalPanelViewSpec
+                    #'name:' 'horizontalPanelView'
+                    #'layout:' #(#LayoutFrame 0 0.0 -40 1 0 1.0 0 1.0)
+                    #'component:' 
+                     #(#SpecCollection
+                        #'collection:' 
+                         #(
+                           #(#ActionButtonSpec
+                              #'name:' 'actionButton2'
+                              #'label:' 'cancel'
+                              #'model:' #cancel
+                              #'extent:' #(#Point 99 22)
+                          )
+                           #(#ActionButtonSpec
+                              #'name:' 'actionButton1'
+                              #'label:' 'ok'
+                              #'model:' #accept
+                              #'extent:' #(#Point 99 22)
+                          )
+                        )
+                    )
+                    #'level:' 1
+                    #'horizontalLayout:' #center
+                    #'verticalLayout:' #center
+                    #'horizontalSpace:' 3
+                    #'verticalSpace:' 3
+                )
+              )
+          )
+      )
+! !
+
+!ResourceSelectionBrowser methodsFor:'actions'!
+
+classSelected
+    |a|
+    self selectionOfClass value isNil ifTrue: [^nil].
+    self listOfResources contents:
+    (a := (Smalltalk at: self selectionOfClass value name ) class methodDictionary
+asOrderedCollection select: [:m| m resources notNil]).
+     
+!
+
+classSelected: anIndex
+    
+    self selectionOfClass value isNil ifTrue: [^nil].
+    self withWaitCursorDo:
+    [
+        |clsName|
+        clsName := ((builder componentAt: #listOfClassesView) list at: anIndex).
+        self class lastSelection: clsName.
+        self listOfResources contents:
+        ((Smalltalk at: clsName) 
+        class methodDictionary
+        asOrderedCollection select: 
+        [:m| m resources notNil and: [resourceTypes includes: m resourceType]]).
+    ]
+!
+
+closeCancel
+
+    resourceMethod := nil.
+    super closeCancel
+!
+
+resourceDoubleClicked
+
+    resourceMethod := self selectionOfResource value.
+    accept value: true.
+    self close
+!
+
+resourceSelected
+
+    resourceMethod := self selectionOfResource value.
+    self valueOfSelector value: self selectionOfResource value selector
+! !
+
+!ResourceSelectionBrowser methodsFor:'aspects'!
+
+listOfClasses
+
+    |holder|
+    (holder := builder bindingAt:#listOfClasses) isNil ifTrue:[
+        builder aspectAt:#listOfClasses put:(holder := TreeItem newAsTreeFromSmalltalkClass: 
+        (Smalltalk at: resourceSuperclass)).
+    ].
+    ^ holder
+
+
+!
+
+listOfResources
+    "automatically generated by UIPainter ..."
+
+    "*** the code below creates a default model when invoked."
+    "*** (which may not be the one you wanted)"
+    "*** Please change as required and accept in the browser."
+
+    |holder|
+
+    (holder := builder bindingAt:#listOfResources) isNil ifTrue:[
+        builder aspectAt:#listOfResources put:(holder :=  List new).
+    ].
+    ^ holder
+!
+
+selectionOfClass
+
+    |holder|
+
+    (holder := builder bindingAt:#selectionOfClass) isNil ifTrue:[
+        builder aspectAt:#selectionOfClass put:(holder :=  ValueHolder new).
+    ].
+    ^ holder
+!
+
+selectionOfResource
+
+    |holder|
+
+    (holder := builder bindingAt:#selectionOfResource) isNil ifTrue:[
+        builder aspectAt:#selectionOfResource put:(holder :=  ValueHolder new).
+    ].
+    ^ holder
+!
+
+valueOfSelector
+    "automatically generated by UIPainter ..."
+
+    "*** the code below creates a default model when invoked."
+    "*** (which may not be the one you wanted)"
+    "*** Please change as required and accept in the browser."
+
+    |holder|
+
+    (holder := builder bindingAt:#valueOfSelector) isNil ifTrue:[
+        builder aspectAt:#valueOfSelector put:(holder :=  ValueHolder new).
+    ].
+    ^ holder
+! !
+
+!ResourceSelectionBrowser methodsFor:'initialization'!
+
+postBuildWith:aBuilder
+
+    resourceClass notNil ifTrue:
+    [(builder componentAt: #listOfClassesView) selectFromListOfNames: 
+        (((Smalltalk at: self class lastSelection ? resourceClass ifAbsent: [Object])) withAllSuperclasses reverse collect: [:cls| cls name asString])].
+    ^super postBuildWith:aBuilder
+
+! !
+
+!ResourceSelectionBrowser methodsFor:'instance creation'!
+
+openOnSuperclass: aSuperclass class: aClass selector: aSelector resourceTypes: aResourceTypes
+
+    resourceTypes := aResourceTypes.
+    resourceSuperclass := aSuperclass.
+    resourceClass := aClass.
+    resourceSelector := aSelector.
+
+    self open.
+    accept value
+    ifTrue:
+    [
+        ^self selectionOfClass value name, ' ', self valueOfSelector value
+    ].
+    ^nil
+! !
+
+!ResourceSelectionBrowser class methodsFor:'documentation'!
+
+version
+    ^ '$Header$'
+! !