--- /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$'
+! !