# HG changeset patch # User tz # Date 881183661 -3600 # Node ID 059ced1c83444c521289ab5797149ad3a684a43d # Parent 395b851346df81b32bd074178cbfe5a734d7865d intitial checkin diff -r 395b851346df -r 059ced1c8344 ResourceSelectionBrowser.st --- /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" + + + + ^ + + #(#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$' +! !