--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ResourceSelectionBrowser.st Sat Jan 17 21:53:41 1998 +0100
@@ -0,0 +1,353 @@
+"
+ 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 177 0 194 0 576 0 493 0)
+ #'label:' 'Resource Browser'
+ #'min:' #(#Point 400 300)
+ #'max:' #(#Point 1152 864)
+ #'bounds:' #(#Rectangle 177 194 577 494)
+ #'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)
+ )
+ #(#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 24)
+ )
+ #(#ActionButtonSpec
+ #'name:' 'actionButton1'
+ #'label:' 'OK'
+ #'model:' #accept
+ #'extent:' #(#Point 99 24)
+ )
+ )
+ )
+ #'level:' 1
+ #'horizontalLayout:' #center
+ #'verticalLayout:' #center
+ #'horizontalSpace:' 3
+ #'verticalSpace:' 3
+ )
+ )
+ )
+ )
+! !
+
+!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$'
+! !