SmallSense__AbstractSearchDialog.st
changeset 329 0c0024acfccc
child 330 055633bb5ceb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__AbstractSearchDialog.st	Mon Apr 28 08:36:50 2014 +0100
@@ -0,0 +1,769 @@
+"{ Package: 'jv:smallsense' }"
+
+"{ NameSpace: SmallSense }"
+
+SimpleDialog subclass:#AbstractSearchDialog
+	instanceVariableNames:'acceptEnabledHolder matchingObjectsView matchingObjectsTree
+		matchingObjectsSelectionHolder matchPatternHolder
+		matchingUpdateJob matchPatternView environmentHolder filterHolder
+		filter matchingLabelHolder'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-Search'
+!
+
+AbstractSearchDialog class instanceVariableNames:'lastMatchPattern lastSearchedObjects'
+
+"
+ The following class instance variables are inherited by this class:
+
+	SimpleDialog - 
+	ApplicationModel - ClassResources
+	Model - 
+	Object - 
+"
+!
+
+!AbstractSearchDialog class methodsFor:'accessing'!
+
+lastMatchPattern
+    ^ lastMatchPattern
+!
+
+lastMatchPattern:something
+    lastMatchPattern := something.
+!
+
+lastSearchedObjects
+    ^ lastSearchedObjects
+!
+
+lastSearchedObjects:something
+    lastSearchedObjects := something.
+! !
+
+!AbstractSearchDialog class methodsFor:'interface specs'!
+
+windowSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:SmallSense::AbstractSearchDialog andSelector:#windowSpec
+     SmallSense::AbstractSearchDialog new openInterface:#windowSpec
+     SmallSense::AbstractSearchDialog open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+    #(FullSpec
+       name: windowSpec
+       window: 
+      (WindowSpec
+         label: 'Search...'
+         name: 'Search...'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 708 404)
+         menu: mainMenuSpec
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (VerticalPanelViewSpec
+             name: 'ContentAndOptionsPanel'
+             layout: (LayoutFrame 10 0 0 0 -10 1 -40 1)
+             horizontalLayout: fit
+             verticalLayout: topSpaceFit
+             horizontalSpace: 3
+             verticalSpace: 3
+             component: 
+            (SpecCollection
+               collection: (
+                (UISubSpecification
+                   name: 'SubSpecification1'
+                   minorKey: contentPaneSpec
+                   extent: (Point 688 404)
+                 )
+                (UISubSpecification
+                   name: 'SubSpecification2'
+                   minorKey: optionsPaneSpec
+                   extent: (Point 688 1)
+                 )
+                )
+              
+             )
+           )
+          (UISubSpecification
+             name: 'ButtonsPane'
+             layout: (LayoutFrame 10 0 -40 1 -10 1 0 1)
+             minorKey: buttonsPaneSpec
+           )
+          )
+        
+       )
+     )
+! !
+
+!AbstractSearchDialog class methodsFor:'interface specs-content'!
+
+buttonsPaneSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:SmallSense::AbstractSearchDialog andSelector:#buttonPaneSpec
+     SmallSense::AbstractSearchDialog new openInterface:#buttonPaneSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+    #(FullSpec
+       name: 'buttonPaneSpec'
+       window: 
+      (WindowSpec
+         label: 'Search...'
+         name: 'Search...'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 708 40)
+         menu: mainMenuSpec
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (HorizontalPanelViewSpec
+             name: 'Buttons'
+             layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+             horizontalLayout: right
+             verticalLayout: center
+             horizontalSpace: 3
+             verticalSpace: 3
+             reverseOrderIfOKAtLeft: true
+             component: 
+            (SpecCollection
+               collection: (
+                (ActionButtonSpec
+                   label: 'Close'
+                   name: 'Button2'
+                   translateLabel: true
+                   model: doCancel
+                   extent: (Point 125 22)
+                 )
+                (ActionButtonSpec
+                   label: 'OK'
+                   name: 'Button1'
+                   translateLabel: true
+                   model: doAccept
+                   enableChannel: acceptEnabledHolder
+                   extent: (Point 125 22)
+                 )
+                )
+              
+             )
+           )
+          )
+        
+       )
+     )
+
+    "Created: / 27-04-2014 / 23:33:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+contentPaneSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:SmallSense::AbstractSearchDialog andSelector:#contentPaneSpec
+     SmallSense::AbstractSearchDialog new openInterface:#contentPaneSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+    #(FullSpec
+       name: 'contentPaneSpec'
+       window: 
+      (WindowSpec
+         label: 'Search...'
+         name: 'Search...'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 708 404)
+         menu: mainMenuSpec
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (VerticalPanelViewSpec
+             name: 'Content'
+             layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+             horizontalLayout: fit
+             verticalLayout: topSpaceFit
+             component: 
+            (SpecCollection
+               collection: (
+                (LabelSpec
+                   label: 'Enter name prefix or pattern (*):'
+                   name: 'PatternLabel'
+                   translateLabel: true
+                   adjust: left
+                   extent: (Point 708 30)
+                 )
+                (InputFieldSpec
+                   name: 'Pattern'
+                   model: matchPatternHolder
+                   immediateAccept: true
+                   acceptOnReturn: true
+                   acceptOnTab: true
+                   acceptOnPointerLeave: true
+                   extent: (Point 706 25)
+                   postBuildCallback: postBuilderMatchPatternView:
+                   usePreferredHeight: true
+                 )
+                (LabelSpec
+                   label: 'Matching items:'
+                   name: 'MatchingLabel'
+                   translateLabel: true
+                   labelChannel: matchingLabelHolder
+                   adjust: left
+                   extent: (Point 708 25)
+                 )
+                (HierarchicalListViewSpec
+                   name: 'HierarchicalListView1'
+                   model: matchingObjectsSelectionHolder
+                   hasHorizontalScrollBar: true
+                   hasVerticalScrollBar: true
+                   listModel: matchingObjectsTree
+                   multipleSelectOk: true
+                   useIndex: false
+                   highlightMode: line
+                   doubleClickSelector: doAcceptByDoubleClick
+                   selectConditionSelector: canSelect:
+                   showLines: false
+                   showIndicators: false
+                   showLeftIndicators: false
+                   useDefaultIcons: false
+                   showRoot: false
+                   extent: (Point 708 302)
+                   postBuildCallback: postBuildMatchingObjectsView:
+                 )
+                )
+              
+             )
+           )
+          )
+        
+       )
+     )
+!
+
+optionsPaneSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:SmallSense::AbstractSearchDialog andSelector:#optionsPaneSpec
+     SmallSense::AbstractSearchDialog new openInterface:#optionsPaneSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+    #(FullSpec
+       name: optionsPaneSpec
+       window: 
+      (WindowSpec
+         label: 'Search Options...'
+         name: 'Search Options...'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 634 40)
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (LabelSpec
+             label: 'No options (override #optionsPaneSpec)'
+             name: 'NoOptionsLabel'
+             layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+             translateLabel: true
+           )
+          )
+        
+       )
+     )
+! !
+
+!AbstractSearchDialog class methodsFor:'queries'!
+
+isAbstract
+    "Return if this class is an abstract class.
+     True is returned here for myself only; false for subclasses.
+     Abstract subclasses must redefine again."
+
+    ^ self == SmallSense::AbstractSearchDialog.
+! !
+
+!AbstractSearchDialog methodsFor:'accessing'!
+
+environment
+    ^ self environmentHolder value
+
+    "Created: / 22-04-2014 / 10:45:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+environment: aJavaClassEnvironment
+    ^self environmentHolder value: aJavaClassEnvironment
+
+    "Created: / 22-04-2014 / 10:46:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+filter
+    ^self filterHolder value.
+
+    "Created: / 11-03-2013 / 17:37:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+lastMatchPattern
+    ^ self class lastMatchPattern
+
+    "Created: / 28-04-2014 / 00:08:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+lastMatchPattern: aString
+    self class lastMatchPattern: aString
+
+    "Created: / 28-04-2014 / 00:08:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+pattern
+    ^self matchPatternHolder value.
+
+    "Created: / 11-03-2013 / 14:39:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+pattern: aString
+    ^self matchPatternHolder value: aString
+
+    "Created: / 11-03-2013 / 15:21:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog methodsFor:'aspects'!
+
+acceptEnabledHolder
+    <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 ;-)"
+
+    acceptEnabledHolder isNil ifTrue:[
+        acceptEnabledHolder := true asValue.
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/       acceptEnabledHolder addDependent:self.
+"/       acceptEnabledHolder onChangeSend:#acceptEnabledHolderChanged to:self.
+    ].
+    ^ acceptEnabledHolder.
+!
+
+environmentHolder
+    "return/create the 'registryHolder' value holder (automatically generated)"
+
+    environmentHolder isNil ifTrue:[
+        environmentHolder := Smalltalk asValue.
+        environmentHolder addDependent:self.
+    ].
+    ^ environmentHolder
+
+    "Created: / 22-04-2014 / 10:45:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 28-04-2014 / 00:04:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+environmentHolder:something
+    "set the 'registryHolder' value holder (automatically generated)"
+
+    |oldValue newValue|
+
+    environmentHolder notNil ifTrue:[
+        oldValue := environmentHolder value.
+        environmentHolder removeDependent:self.
+    ].
+    environmentHolder := something.
+    environmentHolder notNil ifTrue:[
+        environmentHolder addDependent:self.
+    ].
+    newValue := environmentHolder value.
+    oldValue ~~ newValue ifTrue:[
+        self update:#value with:newValue from:environmentHolder.
+    ].
+
+    "Created: / 22-04-2014 / 10:45:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+filterHolder
+    "return/create the 'filterHolder' value holder (automatically generated)"
+
+    filterHolder isNil ifTrue:[
+        filterHolder := ValueHolder new.
+        filterHolder addDependent:self.
+    ].
+    ^ filterHolder
+!
+
+filterHolder:something
+    "set the 'filterHolder' value holder (automatically generated)"
+
+    |oldValue newValue|
+
+    filterHolder notNil ifTrue:[
+        oldValue := filterHolder value.
+        filterHolder removeDependent:self.
+    ].
+    filterHolder := something.
+    filterHolder notNil ifTrue:[
+        filterHolder addDependent:self.
+    ].
+    newValue := filterHolder value.
+    oldValue ~~ newValue ifTrue:[
+        self update:#value with:newValue from:filterHolder.
+    ].
+!
+
+matchPatternHolder
+    <resource: #uiAspect>
+
+    matchPatternHolder isNil ifTrue:[
+        matchPatternHolder := ValueHolder new.
+        matchPatternHolder addDependent:self.
+    ].
+    ^ matchPatternHolder.
+
+    "Modified: / 08-03-2013 / 13:00:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 08-03-2013 / 14:05:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingLabelHolder
+    <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 ;-)"
+
+    matchingLabelHolder isNil ifTrue:[
+        matchingLabelHolder := ValueHolder with:(resources string:'Matching items:').
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/       matchingLabelHolder addDependent:self.
+"/       matchingLabelHolder onChangeSend:#matchingLabelHolderChanged to:self.
+    ].
+    ^ matchingLabelHolder.
+
+    "Modified: / 18-03-2013 / 12:54:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectsSelectionHolder
+    "return/create the 'matchingClassesSelectionHolder' value holder (automatically generated)"
+    
+    matchingObjectsSelectionHolder isNil ifTrue:[
+        matchingObjectsSelectionHolder := ValueHolder new.
+        matchingObjectsSelectionHolder addDependent:self.
+    ].
+    ^ matchingObjectsSelectionHolder
+
+    "Modified: / 08-03-2013 / 14:05:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectsSelectionHolder:something 
+    "set the 'matchingClassesSelectionHolder' value holder (automatically generated)"
+    
+    matchingObjectsSelectionHolder := something.
+!
+
+matchingObjectsTree
+    <resource: #uiAspect>
+    matchingObjectsTree isNil ifTrue:[
+        matchingObjectsTree := HierarchicalList new.
+        matchingObjectsTree showRoot:false.
+        matchingObjectsTree root:(HierarchicalItem new).
+        matchingObjectsTree application:self.
+        self updateNoResults:matchingObjectsTree root.
+    ].
+    ^ matchingObjectsTree.
+
+    "Created: / 08-03-2013 / 15:40:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 27-04-2014 / 23:41:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog methodsFor:'aspects-queries'!
+
+hasFilter
+    ^self filterHolder value notNil
+
+    "Created: / 08-03-2013 / 15:43:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-03-2013 / 17:34:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog methodsFor:'change & update'!
+
+savePattern
+    self lastMatchPattern: self pattern.
+
+    "Created: / 11-03-2013 / 15:45:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 28-04-2014 / 00:09:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+update:something with:aParameter from:changedObject
+    "Invoked when an object that I depend upon sends a change notification."
+
+    "stub code automatically generated - please change as required"
+
+    changedObject == matchPatternHolder ifTrue:[
+        matchingUpdateJob restart.
+        ^ self.
+    ].
+    changedObject == matchingObjectsSelectionHolder ifTrue:[
+        self updateAcceptEnabled.
+        ^ self.
+    ].
+    changedObject == accept ifTrue:[
+        accept value ifTrue:[
+            self savePattern.
+            acceptedValue := matchingObjectsSelectionHolder value collect:[:e|e subject].
+        ].
+        ^ self.
+    ].
+    changedObject == filterHolder ifTrue:[
+        filter notNil ifTrue:[filter removeDependent: self].
+        filter := filterHolder value.
+        filter notNil ifTrue:[filter addDependent: self].
+         ^ self.
+    ]    .
+    changedObject == filter ifTrue:[
+        matchingObjectsView invalidate.
+    ].
+    super update:something with:aParameter from:changedObject
+
+    "Modified: / 28-04-2014 / 00:12:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateAcceptEnabled
+    self acceptEnabledHolder value: matchingObjectsSelectionHolder value notEmptyOrNil.
+
+    "Created: / 08-03-2013 / 14:06:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 15-03-2013 / 16:23:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateMatchingLabelToNormal
+    self matchingLabelHolder value: (resources string: 'Matching items:').
+
+    "Created: / 18-03-2013 / 14:02:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 28-04-2014 / 00:22:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateMatchingLabelToSearching
+    self matchingLabelHolder value: (resources string: 'Searching...').
+
+    "Created: / 18-03-2013 / 14:01:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateMatchingObjects
+    [
+        self updateMatchingLabelToSearching.
+        self computeMatchingObjects.
+    ] ensure:[
+        self updateMatchingLabelToNormal.
+    ]
+
+    "Created: / 27-04-2014 / 23:48:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateNoResults: root
+    root children: 
+        (Array with: ((HierarchicalItemWithLabel new parent: root; label:((resources string:'No search results...') asText colorizeAllWith: Color gray)))).
+    root expand.
+    ^self
+
+    "Created: / 11-03-2013 / 14:33:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 27-04-2014 / 23:42:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog methodsFor:'event processing'!
+
+keyPressCursorDownInPatternView
+
+    matchingObjectsView hasSelection ifFalse:[
+        matchingObjectsView selectFirst.
+    ] ifTrue:[
+        matchingObjectsView selectNext.
+    ].
+    matchingObjectsView windowGroup focusView:matchingObjectsView byTab:true.
+
+    "Created: / 22-04-2014 / 11:59:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog methodsFor:'forced actions'!
+
+doAcceptByDoubleClick
+    self acceptEnabledHolder value ifTrue:[
+        self doAccept
+    ].
+
+    "Created: / 08-03-2013 / 14:20:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+doAcceptByReturnKey
+    self acceptEnabledHolder value ifTrue:[
+        super doAcceptByReturnKey
+    ].
+
+    "Created: / 08-03-2013 / 14:14:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog methodsFor:'hooks'!
+
+commonPostOpen
+"/    self updateMatching.
+    self pattern: self lastMatchPattern.
+    matchPatternView selectAll.
+    self updateAcceptEnabled.
+
+    "Created: / 08-03-2013 / 13:15:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 28-04-2014 / 00:22:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+postBuildMatchingObjectsView:aView
+    matchingObjectsView := aView scrolledView.
+    matchingObjectsView delegate: self.
+
+    "Created: / 22-04-2014 / 13:21:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+postBuilderMatchPatternView:aView
+    matchPatternView := aView scrolledView.
+"/    matchPatternView delegate: self.
+    matchPatternView onKey:#CursorDown leaveWith:[ self keyPressCursorDownInPatternView ]
+
+    "Modified: / 22-04-2014 / 11:59:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog methodsFor:'initialization'!
+
+initialize
+    "Invoked when a new instance is created."
+
+    super initialize.
+
+    "/ please change as required (and remove this comment)
+    "/ acceptEnabledHolder := nil.
+    "/ allClassesHolder := nil.
+    "/ matchingClassesList := nil.
+    "/ matchingClassesHolder := nil.
+    "/ matchPatternHolder := nil.
+    "/ matchingUpdateJob := nil.
+
+    self accept addDependent: self.
+    self matchingObjectsTree. "/force its initialization
+    matchingUpdateJob := BackgroundJob named: 'SmallSense search dialog updater' on:[self updateMatchingObjects]
+
+    "Modified: / 27-04-2014 / 23:48:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog methodsFor:'menu actions'!
+
+doCheck: doCheck
+    self matchingObjectsSelectionHolder value ? #() do:[:po|po isJIClassPO ifTrue:[po checked: doCheck]].
+
+    "Created: / 15-03-2013 / 16:34:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+doCheckAll: doCheck
+    self matchingObjectsTree root recursiveDo:[:po|po isJIClassPO ifTrue:[po checked: doCheck]].
+
+    "Created: / 15-03-2013 / 16:34:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+doSelect
+    self doCheck: true
+
+    "Modified: / 15-03-2013 / 16:35:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+doSelectAll
+    self doCheckAll: true
+
+    "Modified: / 15-03-2013 / 16:35:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+doUnselect
+    self doCheck: false
+
+    "Modified: / 15-03-2013 / 16:35:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+doUnselectAll
+    self doCheckAll: false
+
+    "Modified: / 15-03-2013 / 16:35:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog methodsFor:'queries'!
+
+canSelect: selection
+    "raise an error: must be redefined in concrete subclass(es)"
+
+    ^ self subclassResponsibility
+
+    "Modified (format): / 28-04-2014 / 00:11:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+hasFilterAndClassNamedIsNotYetImported: binaryname
+    ^self hasFilter 
+        and:[masterApplication isNil or:[masterApplication hasFilterAndClassNamedIsNotYetImported: binaryname]]
+
+    "Created: / 18-03-2013 / 14:40:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+searchingClasses
+    ^self modeHolder value == #classes
+
+    "Created: / 11-03-2013 / 14:38:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+searchingMethods
+    ^self modeHolder value == #methods
+
+    "Created: / 11-03-2013 / 14:38:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+showOnlyInterfaces
+    ^self showOnlyInterfacesHolder value
+
+    "Created: / 18-03-2013 / 10:40:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-03-2013 / 13:32:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog methodsFor:'searching'!
+
+computeMatchingObjects
+    self subclassResponsibility
+
+    "Created: / 27-04-2014 / 23:48:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+