ResourceSelectionBrowser.st
author ca
Mon, 05 Jan 1998 17:47:02 +0100
changeset 396 e15b7b5bb81b
parent 388 45cf0af38948
permissions -rw-r--r--
checkin from browser

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