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