--- a/SmallSense__AbstractSearchDialog.st Mon Apr 28 08:36:50 2014 +0100
+++ b/SmallSense__AbstractSearchDialog.st Tue Apr 29 00:11:40 2014 +0100
@@ -2,21 +2,23 @@
"{ NameSpace: SmallSense }"
-SimpleDialog subclass:#AbstractSearchDialog
- instanceVariableNames:'acceptEnabledHolder matchingObjectsView matchingObjectsTree
- matchingObjectsSelectionHolder matchPatternHolder
- matchingUpdateJob matchPatternView environmentHolder filterHolder
- filter matchingLabelHolder'
+AbstractDIalog subclass:#AbstractSearchDialog
+ instanceVariableNames:'matchingObjectsView matchingObjectsTree
+ matchingObjectsSelectionHolder matchingObjectsLabelHolder
+ matchingObjectsUpdateJob matchPatternHolder matchPatternView
+ environmentHolder filterHolder filter recentlySearchedPatterns
+ recentlySearchedObjects'
classVariableNames:''
poolDictionaries:''
category:'SmallSense-Core-Interface-Search'
!
-AbstractSearchDialog class instanceVariableNames:'lastMatchPattern lastSearchedObjects'
+AbstractSearchDialog class instanceVariableNames:'recentlySearchedPatterns recentlySearchedObjects'
"
The following class instance variables are inherited by this class:
+ SmallSense::AbstractDIalog -
SimpleDialog -
ApplicationModel - ClassResources
Model -
@@ -26,25 +28,27 @@
!AbstractSearchDialog class methodsFor:'accessing'!
-lastMatchPattern
- ^ lastMatchPattern
+recentlySearchedObjects
+ recentlySearchedObjects isNil ifTrue:[
+ recentlySearchedObjects := OrderedSet new.
+ ].
+ ^ recentlySearchedObjects
+
+ "Created: / 28-04-2014 / 23:13:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
-lastMatchPattern:something
- lastMatchPattern := something.
-!
+recentlySearchedPatterns
+ recentlySearchedPatterns isNil ifTrue:[
+ recentlySearchedPatterns := OrderedSet new.
+ ].
+ ^ recentlySearchedPatterns
-lastSearchedObjects
- ^ lastSearchedObjects
-!
-
-lastSearchedObjects:something
- lastSearchedObjects := something.
+ "Created: / 28-04-2014 / 23:13:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!AbstractSearchDialog class methodsFor:'interface specs'!
-windowSpec
+dialogSpec
"This resource specification was automatically generated
by the UIPainter of ST/X."
@@ -52,16 +56,15 @@
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
+ UIPainter new openOnClass:SmallSense::AbstractSearchDialog andSelector:#dialogSpec
+ SmallSense::AbstractSearchDialog new openInterface:#dialogSpec
"
<resource: #canvas>
^
#(FullSpec
- name: windowSpec
+ name: 'dialogSpec'
window:
(WindowSpec
label: 'Search...'
@@ -75,7 +78,7 @@
collection: (
(VerticalPanelViewSpec
name: 'ContentAndOptionsPanel'
- layout: (LayoutFrame 10 0 0 0 -10 1 -40 1)
+ layout: (LayoutFrame 10 0 0 0 -10 1 0 1)
horizontalLayout: fit
verticalLayout: topSpaceFit
horizontalSpace: 3
@@ -97,11 +100,6 @@
)
)
- (UISubSpecification
- name: 'ButtonsPane'
- layout: (LayoutFrame 10 0 -40 1 -10 1 0 1)
- minorKey: buttonsPaneSpec
- )
)
)
@@ -110,72 +108,6 @@
!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."
@@ -192,7 +124,7 @@
^
#(FullSpec
- name: 'contentPaneSpec'
+ name: contentPaneSpec
window:
(WindowSpec
label: 'Search...'
@@ -226,15 +158,16 @@
acceptOnReturn: true
acceptOnTab: true
acceptOnPointerLeave: true
+ entryCompletionBlock: matchPatternCompletionBlock
extent: (Point 706 25)
- postBuildCallback: postBuilderMatchPatternView:
+ postBuildCallback: postBuildMatchPatternView:
usePreferredHeight: true
)
(LabelSpec
label: 'Matching items:'
name: 'MatchingLabel'
translateLabel: true
- labelChannel: matchingLabelHolder
+ labelChannel: matchingObjectsLabelHolder
adjust: left
extent: (Point 708 25)
)
@@ -358,29 +291,26 @@
^self matchPatternHolder value: aString
"Created: / 11-03-2013 / 15:21:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+recentlySearchedObjects
+ ^ recentlySearchedObjects
+!
+
+recentlySearchedObjects:aCollection
+ recentlySearchedObjects := aCollection.
+!
+
+recentlySearchedPatterns
+ ^ recentlySearchedPatterns
+!
+
+recentlySearchedPatterns:aCollection
+ recentlySearchedPatterns := aCollection.
! !
!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)"
@@ -444,6 +374,12 @@
].
!
+matchPatternCompletionBlock
+ ^ self subclassResponsibility
+
+ "Created: / 28-04-2014 / 22:30:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
matchPatternHolder
<resource: #uiAspect>
@@ -457,7 +393,7 @@
"Modified (format): / 08-03-2013 / 14:05:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
-matchingLabelHolder
+matchingObjectsLabelHolder
<resource: #uiAspect>
"automatically generated by UIPainter ..."
@@ -467,15 +403,15 @@
"*** 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:').
+ matchingObjectsLabelHolder isNil ifTrue:[
+ matchingObjectsLabelHolder := 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.
+ ^ matchingObjectsLabelHolder.
- "Modified: / 18-03-2013 / 12:54:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Created: / 28-04-2014 / 22:29:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
matchingObjectsSelectionHolder
@@ -522,20 +458,13 @@
!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.
+ matchingObjectsUpdateJob restart.
^ self.
].
changedObject == matchingObjectsSelectionHolder ifTrue:[
@@ -544,8 +473,9 @@
].
changedObject == accept ifTrue:[
accept value ifTrue:[
- self savePattern.
+ recentlySearchedPatterns add: self pattern.
acceptedValue := matchingObjectsSelectionHolder value collect:[:e|e subject].
+ recentlySearchedObjects addAll: acceptedValue.
].
^ self.
].
@@ -560,7 +490,7 @@
].
super update:something with:aParameter from:changedObject
- "Modified: / 28-04-2014 / 00:12:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 28-04-2014 / 23:17:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
updateAcceptEnabled
@@ -571,27 +501,35 @@
!
updateMatchingLabelToNormal
- self matchingLabelHolder value: (resources string: 'Matching items:').
+ self matchingObjectsLabelHolder 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>"
+ "Modified: / 28-04-2014 / 22:29:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
updateMatchingLabelToSearching
- self matchingLabelHolder value: (resources string: 'Searching...').
+ self matchingObjectsLabelHolder value: (resources string: 'Searching...').
"Created: / 18-03-2013 / 14:01:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 28-04-2014 / 22:29:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
updateMatchingObjects
- [
- self updateMatchingLabelToSearching.
- self computeMatchingObjects.
- ] ensure:[
- self updateMatchingLabelToNormal.
- ]
+ | pattern environment |
+
+ self matchPatternHolder value notEmptyOrNil ifTrue:[
+ pattern := StringPattern fromString: self matchPatternHolder value.
+ environment := self environment.
+"/ [
+"/ self updateMatchingLabelToSearching.
+ self computeMatchingObjectsForPattern: pattern inEnvironment: environment
+"/ ] ensure:[
+"/ self updateMatchingLabelToNormal.
+"/ ]
+ ].
"Created: / 27-04-2014 / 23:48:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 28-04-2014 / 23:23:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
updateNoResults: root
@@ -618,6 +556,17 @@
"Created: / 22-04-2014 / 11:59:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!AbstractSearchDialog methodsFor:'events'!
+
+closeCancel
+ "cancel was pressed. close the dialog"
+
+ accept setValue: nil.
+ ^ super closeCancel.
+
+ "Created: / 28-04-2014 / 23:56:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!AbstractSearchDialog methodsFor:'forced actions'!
doAcceptByDoubleClick
@@ -640,12 +589,22 @@
commonPostOpen
"/ self updateMatching.
- self pattern: self lastMatchPattern.
+ recentlySearchedPatterns notEmptyOrNil ifTrue:[
+ matchPatternView contents: self recentlySearchedPatterns last.
+ ].
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>"
+ "Modified: / 28-04-2014 / 23:15:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+postBuildMatchPatternView:aView
+ matchPatternView := aView scrolledView.
+"/ matchPatternView delegate: self.
+ matchPatternView onKey:#CursorDown leaveWith:[ self keyPressCursorDownInPatternView ]
+
+ "Created: / 28-04-2014 / 22:27:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
postBuildMatchingObjectsView:aView
@@ -653,14 +612,6 @@
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'!
@@ -680,9 +631,12 @@
self accept addDependent: self.
self matchingObjectsTree. "/force its initialization
- matchingUpdateJob := BackgroundJob named: 'SmallSense search dialog updater' on:[self updateMatchingObjects]
+ matchingObjectsUpdateJob := BackgroundJob named: 'SmallSense search dialog updater' on:[self updateMatchingObjects].
- "Modified: / 27-04-2014 / 23:48:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ recentlySearchedPatterns := self class recentlySearchedPatterns.
+ recentlySearchedObjects := self class recentlySearchedObjects.
+
+ "Modified: / 28-04-2014 / 23:14:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!AbstractSearchDialog methodsFor:'menu actions'!
@@ -761,9 +715,10 @@
!AbstractSearchDialog methodsFor:'searching'!
-computeMatchingObjects
+computeMatchingObjectsForPattern: pattern inEnvironment: environment
+
self subclassResponsibility
- "Created: / 27-04-2014 / 23:48:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Created: / 28-04-2014 / 23:20:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !