# HG changeset patch # User tz # Date 885070421 -3600 # Node ID cf47d420764a86ed6fe3ff502692620c6528f530 # Parent 2137dff405f0c450b4e3339a15f148c7ef32f3c0 initial checkin diff -r 2137dff405f0 -r cf47d420764a ResourceSelectionBrowser.st --- /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" + + + + ^ + + #(#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$' +! !