More work on ClassSearchDialog.
"{ Package: 'jv:smallsense' }"
"{ NameSpace: SmallSense }"
AbstractSearchDialog subclass:#ClassSearchDialog
instanceVariableNames:'matchFullyQualifiedClassNameHolder
matchFullyQualifiedClassNameEnabledHolder
showOnlyInterfacesHolder'
classVariableNames:''
poolDictionaries:''
category:'SmallSense-Core-Interface-Search'
!
!ClassSearchDialog methodsFor:'aspects'!
matchFullyQualifiedClassNameEnabledHolder
<resource: #uiAspect>
"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 it in the browser."
"*** (and replace this comment by something more useful ;-)"
matchFullyQualifiedClassNameEnabledHolder isNil ifTrue:[
matchFullyQualifiedClassNameEnabledHolder := true asValue.
"/ if your app needs to be notified of changes, uncomment one of the lines below:
"/ matchFullyQualifiedClassNameEnabledHolder addDependent:self.
"/ matchFullyQualifiedClassNameEnabledHolder onChangeSend:#matchFullyQualifiedClassNameEnabledHolderChanged to:self.
].
^ matchFullyQualifiedClassNameEnabledHolder.
!
matchFullyQualifiedClassNameHolder
<resource: #uiAspect>
"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 it in the browser."
"*** (and replace this comment by something more useful ;-)"
matchFullyQualifiedClassNameHolder isNil ifTrue:[
matchFullyQualifiedClassNameHolder := false asValue.
"/ if your app needs to be notified of changes, uncomment one of the lines below:
matchFullyQualifiedClassNameHolder addDependent:self.
"/ matchFullyQualifiedClassNameHolder onChangeSend:#matchFullyQualifiedClassNameHolderChanged to:self.
].
^ matchFullyQualifiedClassNameHolder.
"Modified: / 18-03-2013 / 11:19:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
matchPatternCompletionBlock
^ DoWhatIMeanSupport classNameEntryCompletionBlock
"Created: / 28-04-2014 / 22:31:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
showOnlyInterfacesHolder
"return/create the 'showOnlyIntefacesHolder' value holder (automatically generated)"
showOnlyInterfacesHolder isNil ifTrue:[
showOnlyInterfacesHolder := false asValue.
showOnlyInterfacesHolder addDependent:self.
].
^ showOnlyInterfacesHolder
"Modified: / 24-04-2014 / 23:42:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
showOnlyInterfacesHolder:something
"set the 'showOnlyIntefacesHolder' value holder (automatically generated)"
| oldValue newValue |
showOnlyInterfacesHolder notNil ifTrue:[
oldValue := showOnlyInterfacesHolder value.
showOnlyInterfacesHolder removeDependent:self.
].
showOnlyInterfacesHolder := something.
showOnlyInterfacesHolder notNil ifTrue:[
showOnlyInterfacesHolder addDependent:self.
].
newValue := showOnlyInterfacesHolder value.
oldValue ~~ newValue ifTrue:[
self
update:#value
with:newValue
from:showOnlyInterfacesHolder.
].
! !
!ClassSearchDialog methodsFor:'change & update'!
update:something with:aParameter from:changedObject
changedObject == matchFullyQualifiedClassNameHolder ifTrue:[
matchingObjectsUpdateJob restart.
^ self.
].
changedObject == showOnlyInterfacesHolder ifTrue:[
matchingObjectsUpdateJob restart.
^ self.
].
^ super update:something with:aParameter from:changedObject
"Created: / 27-04-2014 / 23:45:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!ClassSearchDialog methodsFor:'queries'!
canSelect: selection
| po |
po := selection isInteger ifTrue:[ matchingObjectsTree at: selection ] ifFalse:[ selection ].
^ po askFor: #isSmallSenseClassPO.
"Created: / 22-04-2014 / 13:08:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 28-04-2014 / 23:56:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!ClassSearchDialog methodsFor:'searching'!
computeMatchingObjectsForPattern: pattern inEnvironment: environment
| matching root matchFullyQualifiedClassName |
matching := OrderedCollection new.
root := self matchingObjectsTree root.
matchFullyQualifiedClassName := self matchFullyQualifiedClassNameHolder value.
self matchPatternHolder value notEmptyOrNil ifTrue:[
matchFullyQualifiedClassName ifFalse:[
environment allClassesDo:[:cls|
(pattern match: cls nameWithoutPrefix) ifTrue:[
matching add: cls.
].
].
] ifTrue:[
environment allClassesDo:[:cls|
(pattern match: cls displayString) ifTrue:[
matching add: cls
]
].
]
].
"/ matching isEmpty ifTrue:[
"/ self updateNoResults: root.
"/ ^self
"/ ].
matchFullyQualifiedClassName ifTrue:[
matching sort: [ :a :b | a displayString < b displayString ].
] ifFalse:[
matching sort: [ :a :b | a nameWithoutPrefix < b nameWithoutPrefix ].
].
matching := matching collect: [:each | ClassPO new klass: each; showPrefix: matchFullyQualifiedClassName ].
root children: matching; expand.
matching size == 1 ifTrue:[
self matchingObjectsSelectionHolder value: matching anElement
]
"Created: / 28-04-2014 / 23:20:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !