"
COPYRIGHT (c) 1997 by eXept Software AG / Thomas Zwick
All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
"
SelectionBrowser subclass:#ResourceSelectionBrowser
instanceVariableNames:'resourceMethod resourceClass resourceSuperclass resourceTypes'
classVariableNames:''
poolDictionaries:''
category:'Interface-Advanced-Tools'
!
!ResourceSelectionBrowser class methodsFor:'documentation'!
copyright
"
COPYRIGHT (c) 1997 by eXept Software AG / Thomas Zwick
All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
"
!
documentation
"
documentation to be added.
"
!
history
"Created: / 10.1.1998 / 10:59:18 / tz"
! !
!ResourceSelectionBrowser class methodsFor:'instance creation'!
request: aTitle onSuperclass: aSuperclass andClass: aClass andSelector: aSelector withResourceTypes: aResourceTypes
"self
request: 'Select A Resource Selector'
onSuperclass: #ApplicationModel
andClass: #ToolApplicationModel
andSelector: #saveIcon
withResourceTypes: #(canvas menu image)
"
^self new
title: aTitle;
openOnSuperclass: aSuperclass
andClass: aClass
andSelector: aSelector
withResourceTypes: 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:ResourceSelectionBrowser andSelector:#windowSpec
ResourceSelectionBrowser new openInterface:#windowSpec
"
"ResourceSelectionBrowser open"
<resource: #canvas>
^
#(#FullSpec
#'window:'
#(#WindowSpec
#'name:' 'Resource Browser'
#'layout:' #(#LayoutFrame 279 0 387 0 690 0 686 0)
#'label:' 'Resource Browser'
#'min:' #(#Point 400 300)
#'max:' #(#Point 1152 864)
#'bounds:' #(#Rectangle 279 387 691 687)
#'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
#'height:' 24
#'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)
)
#(#UISubSpecification
#'name:' 'SubSpecification'
#'layout:' #(#LayoutFrame 2 0.0 -32 1 -2 1.0 -8 1.0)
#'majorKey:' #ToolApplicationModel
#'minorKey:' #windowSpecForCommitWithoutChannels
)
)
)
)
! !
!ResourceSelectionBrowser methodsFor:'accessing - views'!
listOfClassesView
^builder componentAt: #listOfClassesView
! !
!ResourceSelectionBrowser methodsFor:'aspects'!
listOfClasses
|holder|
(holder := builder bindingAt:#listOfClasses) isNil ifTrue:[
builder aspectAt:#listOfClasses put:
(holder :=
(TreeItem name: resourceSuperclass)
children: (OrderedCollection with:
(TreeItem newAsTreeFromSmalltalkClass: (Smalltalk at:resourceSuperclass))))
].
^ holder
!
listOfResources
|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 := '' asValue).
].
^ holder
!
valueOfSelector
|holder|
(holder := builder bindingAt:#valueOfSelector) isNil ifTrue:[
builder aspectAt:#valueOfSelector put:(holder := '' asValue).
].
^ holder
! !
!ResourceSelectionBrowser methodsFor:'callbacks'!
classSelected: anIndex
self selectionOfClass value isNil ifTrue: [^nil].
self withWaitCursorDo:
[
|clsName|
resourceTypes isNil ifTrue: [resourceTypes := #(canvas menu image fileImage)].
clsName := self 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]]).
]
!
resourceDoubleClicked
resourceMethod := self selectionOfResource value.
accept value: true.
self close
!
resourceSelected
resourceMethod := self selectionOfResource value.
self valueOfSelector value: self selectionOfResource value selector
! !
!ResourceSelectionBrowser methodsFor:'initialization'!
postBuildWith:aBuilder
self 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: aSuperclassOrSymbol andClass: aClassOrSymbol andSelector: aSelector withResourceTypes: aResourceTypes
|cls sel|
resourceTypes := aResourceTypes.
resourceSuperclass := aSuperclassOrSymbol isClass ifTrue: [aSuperclassOrSymbol name] ifFalse: [aSuperclassOrSymbol].
resourceClass := aClassOrSymbol isClass ifTrue: [aClassOrSymbol name] ifFalse: [aClassOrSymbol].
self valueOfSelector value: aSelector.
self open.
(self selectionOfClass value notNil and: [
(cls := Smalltalk at: self selectionOfClass value name) isClass &
(cls class implements: (sel := self valueOfSelector value)) &
accept value])
ifTrue:
[
^cls name, ' ', sel
].
^nil
! !
!ResourceSelectionBrowser methodsFor:'startup / release'!
closeCancel
resourceMethod := nil.
super closeCancel
! !
!ResourceSelectionBrowser class methodsFor:'documentation'!
version
^ '$Header$'
! !