AbstractSearchDialog splitted into AbstractListDialog and AbstractSearchDialog.
authorJan Vrany <jan.vrany@fit.cvut.cz>
Mon, 08 Dec 2014 02:42:33 +0000
changeset 365 58f383e9a862
parent 364 12e523308dba
child 366 e2083bc62428
AbstractSearchDialog splitted into AbstractListDialog and AbstractSearchDialog. * AbstractListDialog has no history and may allow to create a new object (package, category...) * AbstractSearchDIalog maintains a list of recent searches and does not allow creation of a new object.
Make.proto
Make.spec
SmallSense__AbstractListDialog.st
SmallSense__AbstractSearchDialog.st
SmallSense__ClassSearchDialog.st
SmallSense__MethodSearchDialog.st
SmallSense__PackageSearchDialog.st
abbrev.stc
bc.mak
bmake.bat
extensions.st
libInit.cc
smallsense.rc
stx_goodies_smallsense.st
--- a/Make.proto	Sat Dec 06 22:27:37 2014 +0000
+++ b/Make.proto	Mon Dec 08 02:42:33 2014 +0000
@@ -194,7 +194,7 @@
 $(OUTDIR)SmallSense__TypeHolder.$(O) SmallSense__TypeHolder.$(H): SmallSense__TypeHolder.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)stx_goodies_smallsense.$(O) stx_goodies_smallsense.$(H): stx_goodies_smallsense.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__AbstractJavaCompletionEngine.$(O) SmallSense__AbstractJavaCompletionEngine.$(H): SmallSense__AbstractJavaCompletionEngine.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)SmallSense__AbstractSearchDialog.$(O) SmallSense__AbstractSearchDialog.$(H): SmallSense__AbstractSearchDialog.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libview2/SimpleDialog.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__AbstractListDialog.$(O) SmallSense__AbstractListDialog.$(H): SmallSense__AbstractListDialog.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libview2/SimpleDialog.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__ClassInfo.$(O) SmallSense__ClassInfo.$(H): SmallSense__ClassInfo.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__Info.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__ClassPO.$(O) SmallSense__ClassPO.$(H): SmallSense__ClassPO.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__PO.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__ClassType.$(O) SmallSense__ClassType.$(H): SmallSense__ClassType.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__Type.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -216,16 +216,17 @@
 $(OUTDIR)SmallSense__VariableBindingPO.$(O) SmallSense__VariableBindingPO.$(H): SmallSense__VariableBindingPO.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__PO.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__VariablePO.$(O) SmallSense__VariablePO.$(H): SmallSense__VariablePO.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__PO.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__AbstractJavaCompletionEngineSimple.$(O) SmallSense__AbstractJavaCompletionEngineSimple.$(H): SmallSense__AbstractJavaCompletionEngineSimple.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractJavaCompletionEngine.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)SmallSense__ClassSearchDialog.$(O) SmallSense__ClassSearchDialog.$(H): SmallSense__ClassSearchDialog.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractSearchDialog.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libview2/SimpleDialog.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__AbstractSearchDialog.$(O) SmallSense__AbstractSearchDialog.$(H): SmallSense__AbstractSearchDialog.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractListDialog.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libview2/SimpleDialog.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__GroovyEditSupport.$(O) SmallSense__GroovyEditSupport.$(H): SmallSense__GroovyEditSupport.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__EditSupport.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__JavaEditSupport.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__JavaCompletionEngine.$(O) SmallSense__JavaCompletionEngine.$(H): SmallSense__JavaCompletionEngine.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractJavaCompletionEngine.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__JavaConstructorPO.$(O) SmallSense__JavaConstructorPO.$(H): SmallSense__JavaConstructorPO.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__MethodPO.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__PO.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__MethodKeywordRestPO.$(O) SmallSense__MethodKeywordRestPO.$(H): SmallSense__MethodKeywordRestPO.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__MethodPO.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__PO.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
-$(OUTDIR)SmallSense__MethodSearchDialog.$(O) SmallSense__MethodSearchDialog.$(H): SmallSense__MethodSearchDialog.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractSearchDialog.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libview2/SimpleDialog.$(H) $(STCHDR)
-$(OUTDIR)SmallSense__PackageSearchDialog.$(O) SmallSense__PackageSearchDialog.$(H): SmallSense__PackageSearchDialog.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractSearchDialog.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libview2/SimpleDialog.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__PackageSearchDialog.$(O) SmallSense__PackageSearchDialog.$(H): SmallSense__PackageSearchDialog.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractListDialog.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libview2/SimpleDialog.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__ClassSearchDialog.$(O) SmallSense__ClassSearchDialog.$(H): SmallSense__ClassSearchDialog.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractListDialog.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractSearchDialog.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libview2/SimpleDialog.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__JavaCompletionEngineSimple.$(O) SmallSense__JavaCompletionEngineSimple.$(H): SmallSense__JavaCompletionEngineSimple.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractJavaCompletionEngine.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractJavaCompletionEngineSimple.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__MethodSearchDialog.$(O) SmallSense__MethodSearchDialog.$(H): SmallSense__MethodSearchDialog.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractListDialog.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractSearchDialog.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libview2/SimpleDialog.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__GroovyCompletionEngineSimple.$(O) SmallSense__GroovyCompletionEngineSimple.$(H): SmallSense__GroovyCompletionEngineSimple.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractJavaCompletionEngine.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractJavaCompletionEngineSimple.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__JavaCompletionEngineSimple.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/lint/RBBasicLintRule.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/lint/RBBlockLintRule.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/lint/RBContainsSmalltalkXEOLCommentRule.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/lint/RBLintRule.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/lint/RBTransformationRule.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBBlockNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBMethodNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBStatementNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBValueNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/CompiledCode.$(H) $(INCLUDE_TOP)/stx/libbasic/ConfigurableFeatures.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutableFunction.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Method.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/UserPreferences.$(H) $(INCLUDE_TOP)/stx/libcomp/AssignmentNode.$(H) $(INCLUDE_TOP)/stx/libcomp/BlockNode.$(H) $(INCLUDE_TOP)/stx/libcomp/MessageNode.$(H) $(INCLUDE_TOP)/stx/libcomp/ParseErrorNode.$(H) $(INCLUDE_TOP)/stx/libcomp/ParseNode.$(H) $(INCLUDE_TOP)/stx/libcomp/Parser.$(H) $(INCLUDE_TOP)/stx/libcomp/PrimaryNode.$(H) $(INCLUDE_TOP)/stx/libcomp/PrimitiveNode.$(H) $(INCLUDE_TOP)/stx/libcomp/ReturnNode.$(H) $(INCLUDE_TOP)/stx/libcomp/Scanner.$(H) $(INCLUDE_TOP)/stx/libcomp/StatementNode.$(H) $(INCLUDE_TOP)/stx/libcomp/VariableNode.$(H) $(INCLUDE_TOP)/stx/libhtml/HTMLDocumentFrame.$(H) $(INCLUDE_TOP)/stx/libhtml/HTMLDocumentView.$(H) $(INCLUDE_TOP)/stx/libtool/SystemBrowser.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__BackgroundSourceProcessingService.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__CodeCompletionService.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__CodeHighlightingService.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__CodeNavigationService.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__CodeViewService.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__LintService.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__NavigationState.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__NewSystemBrowser.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libwidg/EditTextView.$(H) $(INCLUDE_TOP)/stx/libwidg/EditTextViewCompletionSupport.$(H) $(INCLUDE_TOP)/stx/libwidg/ListView.$(H) $(INCLUDE_TOP)/stx/libwidg/TextView.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/lint/RBBasicLintRule.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/lint/RBBlockLintRule.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/lint/RBContainsSmalltalkXEOLCommentRule.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/lint/RBLintRule.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/lint/RBTransformationRule.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBBlockNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBMethodNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBStatementNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBValueNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/CompiledCode.$(H) $(INCLUDE_TOP)/stx/libbasic/ConfigurableFeatures.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutableFunction.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Method.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/UserPreferences.$(H) $(INCLUDE_TOP)/stx/libcomp/AssignmentNode.$(H) $(INCLUDE_TOP)/stx/libcomp/BlockNode.$(H) $(INCLUDE_TOP)/stx/libcomp/MessageNode.$(H) $(INCLUDE_TOP)/stx/libcomp/ParseErrorNode.$(H) $(INCLUDE_TOP)/stx/libcomp/ParseNode.$(H) $(INCLUDE_TOP)/stx/libcomp/Parser.$(H) $(INCLUDE_TOP)/stx/libcomp/PrimaryNode.$(H) $(INCLUDE_TOP)/stx/libcomp/PrimitiveNode.$(H) $(INCLUDE_TOP)/stx/libcomp/ReturnNode.$(H) $(INCLUDE_TOP)/stx/libcomp/Scanner.$(H) $(INCLUDE_TOP)/stx/libcomp/StatementNode.$(H) $(INCLUDE_TOP)/stx/libcomp/VariableNode.$(H) $(INCLUDE_TOP)/stx/libhtml/HTMLDocumentFrame.$(H) $(INCLUDE_TOP)/stx/libhtml/HTMLDocumentView.$(H) $(INCLUDE_TOP)/stx/libtool/SystemBrowser.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__BackgroundSourceProcessingService.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__CodeCompletionService.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__CodeHighlightingService.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__CodeNavigationService.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__CodeViewService.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__LintService.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__NavigationState.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__NewSystemBrowser.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/ModalBox.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/StandardSystemView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libwidg/DialogBox.$(H) $(INCLUDE_TOP)/stx/libwidg/EditTextView.$(H) $(INCLUDE_TOP)/stx/libwidg/EditTextViewCompletionSupport.$(H) $(INCLUDE_TOP)/stx/libwidg/ListView.$(H) $(INCLUDE_TOP)/stx/libwidg/TextView.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
 
--- a/Make.spec	Sat Dec 06 22:27:37 2014 +0000
+++ b/Make.spec	Mon Dec 08 02:42:33 2014 +0000
@@ -87,7 +87,7 @@
 	SmallSense::TypeHolder \
 	stx_goodies_smallsense \
 	SmallSense::AbstractJavaCompletionEngine \
-	SmallSense::AbstractSearchDialog \
+	SmallSense::AbstractListDialog \
 	SmallSense::ClassInfo \
 	SmallSense::ClassPO \
 	SmallSense::ClassType \
@@ -109,14 +109,15 @@
 	SmallSense::VariableBindingPO \
 	SmallSense::VariablePO \
 	SmallSense::AbstractJavaCompletionEngineSimple \
-	SmallSense::ClassSearchDialog \
+	SmallSense::AbstractSearchDialog \
 	SmallSense::GroovyEditSupport \
 	SmallSense::JavaCompletionEngine \
 	SmallSense::JavaConstructorPO \
 	SmallSense::MethodKeywordRestPO \
+	SmallSense::PackageSearchDialog \
+	SmallSense::ClassSearchDialog \
+	SmallSense::JavaCompletionEngineSimple \
 	SmallSense::MethodSearchDialog \
-	SmallSense::PackageSearchDialog \
-	SmallSense::JavaCompletionEngineSimple \
 	SmallSense::GroovyCompletionEngineSimple \
 
 
@@ -159,7 +160,7 @@
     $(OUTDIR_SLASH)SmallSense__TypeHolder.$(O) \
     $(OUTDIR_SLASH)stx_goodies_smallsense.$(O) \
     $(OUTDIR_SLASH)SmallSense__AbstractJavaCompletionEngine.$(O) \
-    $(OUTDIR_SLASH)SmallSense__AbstractSearchDialog.$(O) \
+    $(OUTDIR_SLASH)SmallSense__AbstractListDialog.$(O) \
     $(OUTDIR_SLASH)SmallSense__ClassInfo.$(O) \
     $(OUTDIR_SLASH)SmallSense__ClassPO.$(O) \
     $(OUTDIR_SLASH)SmallSense__ClassType.$(O) \
@@ -181,14 +182,15 @@
     $(OUTDIR_SLASH)SmallSense__VariableBindingPO.$(O) \
     $(OUTDIR_SLASH)SmallSense__VariablePO.$(O) \
     $(OUTDIR_SLASH)SmallSense__AbstractJavaCompletionEngineSimple.$(O) \
-    $(OUTDIR_SLASH)SmallSense__ClassSearchDialog.$(O) \
+    $(OUTDIR_SLASH)SmallSense__AbstractSearchDialog.$(O) \
     $(OUTDIR_SLASH)SmallSense__GroovyEditSupport.$(O) \
     $(OUTDIR_SLASH)SmallSense__JavaCompletionEngine.$(O) \
     $(OUTDIR_SLASH)SmallSense__JavaConstructorPO.$(O) \
     $(OUTDIR_SLASH)SmallSense__MethodKeywordRestPO.$(O) \
+    $(OUTDIR_SLASH)SmallSense__PackageSearchDialog.$(O) \
+    $(OUTDIR_SLASH)SmallSense__ClassSearchDialog.$(O) \
+    $(OUTDIR_SLASH)SmallSense__JavaCompletionEngineSimple.$(O) \
     $(OUTDIR_SLASH)SmallSense__MethodSearchDialog.$(O) \
-    $(OUTDIR_SLASH)SmallSense__PackageSearchDialog.$(O) \
-    $(OUTDIR_SLASH)SmallSense__JavaCompletionEngineSimple.$(O) \
     $(OUTDIR_SLASH)SmallSense__GroovyCompletionEngineSimple.$(O) \
     $(OUTDIR_SLASH)extensions.$(O) \
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__AbstractListDialog.st	Mon Dec 08 02:42:33 2014 +0000
@@ -0,0 +1,851 @@
+"
+stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
+Copyright (C) 2013-2014 Jan Vrany
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+"
+"{ Package: 'stx:goodies/smallsense' }"
+
+"{ NameSpace: SmallSense }"
+
+AbstractDIalog subclass:#AbstractListDialog
+	instanceVariableNames:'matchingObjects matchingObjectsView matchingObjectsMultiselect
+		matchingObjectsTree matchingObjectsSelectionHolder
+		matchingObjectsLabelHolder matchingObjectsUpdateJob
+		matchPatternHolder matchPatternView environmentHolder
+		filterHolder filter'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-Search'
+!
+
+!AbstractListDialog class methodsFor:'documentation'!
+
+copyright
+"
+stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
+Copyright (C) 2013-2014 Jan Vrany
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+"
+! !
+
+!AbstractListDialog class methodsFor:'interface specs-content'!
+
+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: (
+                (ViewSpec
+                   name: 'Box1'
+                   component:
+                  (SpecCollection
+                     collection: (
+                      (LabelSpec
+                         label: 'Enter name prefix or pattern (*):'
+                         name: 'PatternLabel'
+                         layout: (LayoutFrame 0 0 0 0 -100 1 0 1)
+                         translateLabel: true
+                         adjust: left
+                       )
+                      (UISubSpecification
+                         name: 'SubSpecification1'
+                         layout: (LayoutFrame -100 1 0 0 0 1 0 1)
+                         visibilityChannel: hasOptions
+                         minorKey: optionsShowHideRightAlignedPaneSpec
+                       )
+                      )
+
+                   )
+                   extent: (Point 708 30)
+                 )
+                (InputFieldSpec
+                   name: 'Pattern'
+                   model: matchPatternHolder
+                   immediateAccept: true
+                   acceptOnReturn: true
+                   acceptOnTab: true
+                   acceptOnPointerLeave: true
+                   entryCompletionBlock: matchPatternCompletionBlock
+                   extent: (Point 706 25)
+                   postBuildCallback: postBuildMatchPatternView:
+                   usePreferredHeight: true
+                 )
+                (LabelSpec
+                   label: 'Matching items:'
+                   name: 'MatchingLabel'
+                   translateLabel: true
+                   labelChannel: matchingObjectsLabelHolder
+                   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: canSelectIndex:
+                   showLines: false
+                   showIndicators: false
+                   showLeftIndicators: false
+                   useDefaultIcons: false
+                   showRoot: false
+                   extent: (Point 708 302)
+                   postBuildCallback: postBuildMatchingObjectsView:
+                 )
+                )
+
+             )
+           )
+          )
+
+       )
+     )
+! !
+
+!AbstractListDialog 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::AbstractListDialog.
+! !
+
+!AbstractListDialog 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>"
+!
+
+filter: aBlock
+    self filterHolder value: aBlock
+
+    "Created: / 10-05-2014 / 00:41:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectsSelection
+    ^ self matchingObjectsSelectionHolder value
+
+    "Created: / 10-05-2014 / 00:47:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectsSelection: selection
+    self matchingObjectsSelectionHolder value: selection withoutNotifying:self.
+    self updateAcceptEnabled.
+
+    "Created: / 02-05-2014 / 12:26:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 25-11-2014 / 13:59:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+multiselect
+    ^ matchingObjectsMultiselect
+
+    "Created: / 10-05-2014 / 11:22:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+multiselect: aBoolean
+    matchingObjectsMultiselect := aBoolean.
+    matchingObjectsView notNil ifTrue:[
+        matchingObjectsView multipleSelectOk: aBoolean
+    ].
+
+    "Created: / 10-05-2014 / 11:22:32 / 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>"
+!
+
+selection: selection
+    | matchingObjectsSelection |
+
+    matchingObjectsMultiselect ifTrue:[
+        matchingObjectsSelection := selection collect:[ :each | matchingObjectsTree root recursiveDetect: [ :po | po subject = each ] ].
+        matchingObjectsSelection := matchingObjectsSelection reject:[:each | each isNil ].
+    ] ifFalse:[
+        matchingObjectsSelection := matchingObjectsTree root recursiveDetect: [ :po | po subject = selection ]
+    ].
+    self matchingObjectsSelection: matchingObjectsSelection.
+
+    "Created: / 10-05-2014 / 00:50:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-05-2014 / 11:42:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+title
+    ^ self titleHolder value.
+
+    "Created: / 05-05-2014 / 23:35:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+title: aString
+    | title |
+
+
+    title := aString.
+    (title includes: Character cr) ifTrue:[
+        title := title upTo:Character cr.
+    ].
+    self titleHolder value: title
+
+    "Created: / 05-05-2014 / 23:36:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-05-2014 / 01:22:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractListDialog methodsFor:'accessing - private'!
+
+matchingObjectForString: aString
+    "Creates a new object from given string. Called only when
+     #canCreateMatchingObjectFromString: returns true"
+
+    (self canCreateMatchingObjectFromString:aString) ifFalse:[
+        self shouldNeverBeSent
+    ] ifTrue:[
+        self subclassResponsibility
+    ]
+
+    "Created: / 23-06-2014 / 15:20:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractListDialog methodsFor:'accessing-defaults'!
+
+defaultTitle
+    ^ (resources string: 'Search...')
+
+    "Created: / 05-05-2014 / 23:39:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractListDialog methodsFor:'aspects'!
+
+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.
+    ].
+!
+
+matchPatternCompletionBlock
+    ^ [ :contents :field |
+        | completion |
+        (contents notEmptyOrNil and:[ matchingObjectsUpdateJob running not]) ifTrue:[
+            field topView withCursor:(Cursor questionMark) do:[
+                completion := self matchPatternCompletionFor: contents
+            ].
+        ].
+        completion notNil ifTrue:[
+            field contents: completion first.
+            completion second size == 1 ifTrue:[
+                matchingObjectsMultiselect ifTrue:[
+                    self matchingObjectsSelection: completion second asArray
+                ] ifFalse:[
+                    self matchingObjectsSelection: completion second anElement.
+                ].
+            ].
+        ] ifFalse:[
+            matchingObjectsView flash.
+        ]
+    ]
+
+    "Created: / 28-04-2014 / 22:30:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 20-06-2014 / 14:12:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchPatternHolder
+    <resource: #uiAspect>
+
+    matchPatternHolder isNil ifTrue:[
+        matchPatternHolder := ValueHolder new.
+    ].
+    ^ matchPatternHolder.
+
+    "Modified: / 25-11-2014 / 13:52:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectsLabelHolder
+    <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 ;-)"
+
+    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.
+    ].
+    ^ matchingObjectsLabelHolder.
+
+    "Created: / 28-04-2014 / 22:29:11 / 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>"
+! !
+
+!AbstractListDialog 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>"
+! !
+
+!AbstractListDialog methodsFor:'change & update'!
+
+delayedUpdateMatchingObjects: matchineObjectsArg POs: matchingPOsArg
+    | rootPO matchPatternString  |
+
+    matchingObjects := matchineObjectsArg.
+    rootPO := self matchingObjectsTree root.
+    rootPO
+        children:matchingPOsArg;
+        expand.
+    matchPatternString := self matchPatternHolder value.
+    matchPatternString isEmptyOrNil ifTrue:[ 
+        ^ self.
+    ].
+    matchingPOsArg size == 1 ifTrue:[
+        matchingObjectsMultiselect ifTrue:[
+            self matchingObjectsSelection: matchingPOsArg
+        ] ifFalse:[
+            self matchingObjectsSelection: matchingPOsArg anElement
+        ]
+    ].
+
+    "Created: / 08-12-2014 / 02:31:57 / 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."
+
+    changedObject == matchPatternHolder ifTrue:[
+        matchingObjectsUpdateJob restart.
+        ^ self.
+    ].
+    changedObject == matchingObjectsSelectionHolder ifTrue:[
+        self updateMatchPatternHolderFromSelection.
+        self updateAcceptEnabled.
+        ^ self.
+    ].
+    changedObject == accept ifTrue:[
+        accept value ifTrue:[
+            self updateAcceptedValue.
+        ].
+        ^ self.
+    ].
+    changedObject == filterHolder ifTrue:[
+        (filter notNil and:[filter isBlock not and:[(filter isKindOf: MessageSend) not]]) ifTrue:[filter removeDependent: self].
+        filter := filterHolder value.
+        (filter notNil and:[filter isBlock not and:[(filter isKindOf: MessageSend) not]]) ifTrue:[filter addDependent: self].
+        "/ Only do this after window is opened....
+        (self builder notNil and:[ self builder window notNil  ]) ifTrue:[
+            matchingObjectsUpdateJob restart.
+        ].
+         ^ self.
+    ]    .
+    changedObject == filter ifTrue:[
+        matchingObjectsUpdateJob restart.
+    ].
+    super update:something with:aParameter from:changedObject
+
+    "Modified: / 08-12-2014 / 02:35:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateAcceptEnabled
+    self acceptEnabledHolder value:
+        (matchingObjectsSelectionHolder value notEmptyOrNil
+            or:[ self canCreateMatchingObjectFromString:matchPatternView contents ])
+
+    "Created: / 08-03-2013 / 14:06:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 23-06-2014 / 15:16:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateAcceptedValue
+    "Dialog has been accepted (OK pressed). Update accepted value"
+
+    | matchingObjectsSelection |
+
+    matchingObjectsSelection := matchingObjectsSelectionHolder value.
+    matchingObjectsSelection isEmptyOrNil ifTrue:[
+        (self canCreateMatchingObjectFromString:matchPatternView contents) ifTrue:[
+            acceptedValue := self matchingObjectForString: matchPatternView contents.
+        ].
+    ] ifFalse:[
+        acceptedValue := matchingObjectsMultiselect
+            ifTrue:[ matchingObjectsSelection collect:[:e|e subject] ]
+            ifFalse:[ matchingObjectsSelection subject ]
+    ].
+
+    "Created: / 19-06-2014 / 11:57:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 23-06-2014 / 15:20:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateMatchPatternHolderFromSelection
+    | pattern selection |
+
+    "/ Do not update pattern if it contains match characters
+    pattern := matchPatternHolder value.
+    pattern notEmptyOrNil ifTrue:[
+        (pattern first isSeparator or:[pattern includesAny: '*?']) ifTrue:[
+            ^self
+        ]
+    ].
+    selection := matchingObjectsSelectionHolder value.
+    selection isSequenceable ifTrue:[
+        selection size == 1 ifTrue:[
+            selection := selection anElement.
+        ] ifFalse:[
+            selection := nil.
+        ]
+    ].
+    selection notNil ifTrue:[
+        matchPatternHolder value: selection label withoutNotifying: self.
+        matchPatternView notNil ifTrue:[
+            matchPatternView selectAll.
+        ]
+    ].
+
+    "Created: / 06-10-2014 / 23:59:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 25-11-2014 / 13:23:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateMatchingLabelToNormal
+    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 / 22:29:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateMatchingLabelToRecentSearches
+    self matchingObjectsLabelHolder value: (resources string: 'Recently searched:').
+
+    "Created: / 30-04-2014 / 11:47:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateMatchingLabelToSearching
+    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
+    | environment pattern objects |
+
+    environment := self environment.
+    self matchPatternHolder value notEmptyOrNil ifTrue:[
+        pattern := StringPattern fromString: self matchPatternHolder value.
+        objects := self matchingObjectsForPattern: pattern inEnvironment: environment.
+        self updateMatchingObjects: objects.
+    ] ifFalse:[
+        self updateMatchingObjectsIgnorePattern
+    ].
+
+    "Created: / 06-05-2014 / 00:11:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 06-07-2014 / 10:16:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateMatchingObjects: objects
+    | objectPOs |
+
+    objectPOs := self matchingObjectPOsFor: objects.
+    self updateMatchingObjects: objects POs: objectPOs
+
+    "Modified: / 08-12-2014 / 02:32:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateMatchingObjects: matchineObjectsArg POs: matchingPOsArg
+    self enqueueMessage: #delayedUpdateMatchingObjects:POs: for: self arguments: (Array with: matchineObjectsArg with: matchingPOsArg)
+
+    "Created: / 08-12-2014 / 02:32:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateMatchingObjectsIgnorePattern
+    | environment objects |
+
+    environment := self environment.
+    objects := self matchingObjectsForPattern: nil inEnvironment: environment.
+    self updateMatchingObjects: objects.
+
+    "Created: / 10-05-2014 / 01:02:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 06-07-2014 / 10:16:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateNoResults: root
+    | items |
+
+    items := (Array with: ((HierarchicalItemWithLabel new parent: root; label:((resources string:'No search results...') asText colorizeAllWith: Color gray)))).
+    self updateMatchingObjects: nil POs: items.
+
+    "Created: / 11-03-2013 / 14:33:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 08-12-2014 / 02:27:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractListDialog 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>"
+! !
+
+!AbstractListDialog 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>"
+! !
+
+!AbstractListDialog 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>"
+! !
+
+!AbstractListDialog methodsFor:'hooks'!
+
+commonPostBuild
+
+    matchPatternHolder addDependent:self.
+    matchPatternView selectAll.
+    matchingObjects isNil ifTrue:[
+        self updateMatchingObjectsIgnorePattern.
+    ].
+    self updateAcceptEnabled.
+    self updateMatchPatternHolderFromSelection.
+    super commonPostBuild
+
+    "Created: / 25-11-2014 / 13:23: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
+    matchingObjectsView := aView scrolledView.
+    matchingObjectsView delegate: self.
+    matchingObjectsView multipleSelectOk: matchingObjectsMultiselect
+
+    "Created: / 22-04-2014 / 13:21:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-05-2014 / 11:23:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractListDialog 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
+    matchingObjectsUpdateJob := BackgroundJob named: 'SmallSense search dialog updater' on:[self updateMatchingObjects].
+    matchingObjectsMultiselect := false.
+
+    "Modified: / 08-12-2014 / 01:51:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractListDialog methodsFor:'queries'!
+
+canCreateMatchingObjectFromString:string
+    "Return true, a new object can be created with given string value"
+
+    ^ false
+
+    "Created: / 23-06-2014 / 15:14:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+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>"
+!
+
+canSelectIndex: selectionIndex
+    (selectionIndex between: 1 and: matchingObjectsTree size) ifTrue:[
+        ^ self canSelect: (matchingObjectsTree at: selectionIndex)
+    ].
+    ^ false
+
+    "Created: / 02-05-2014 / 23:52:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+hasOptions
+    ^ false
+
+    "Created: / 09-05-2014 / 23:58:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractListDialog methodsFor:'searching'!
+
+matchPatternCompletionFor: contents
+   | pattern |
+
+   pattern := StringPattern fromString: contents.
+   (pattern isKindOf: StringPattern::StartsWith) ifFalse:[ ^ nil ].
+   ^ self matchPatternCompletionFor: contents pattern: pattern
+
+    "Created: / 02-05-2014 / 10:50:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchPatternCompletionFor: contents pattern: pattern
+    | completionPOs completionPOLabels completion matchingPOs |
+
+    completionPOs := self matchingObjectsTree root
+                        recursiveSelect:[:item | (self canSelect: item) and:[ pattern match: item label relax: 1 ] ].
+    completionPOLabels := completionPOs collect:[ :each | each label ].
+    completion := completionPOLabels longestCommonPrefix.
+    completion isEmptyOrNil ifTrue:[ ^ nil ].
+    completion = contents ifTrue:[ ^ nil ].
+    matchingPOs := OrderedCollection new.
+    completionPOs with: completionPOLabels do:[:po :poLabel |
+        poLabel = completion ifTrue:[
+            matchingPOs add: po.
+        ].
+    ].
+    ^ Array with: completion with: matchingPOs.
+
+    "Created: / 02-05-2014 / 10:58:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 02-10-2014 / 10:12:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectPOsFor: objects
+
+    self subclassResponsibility.
+
+    "Created: / 30-04-2014 / 09:46:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectsForPattern:pattern inEnvironment:environment
+    | objects |
+
+    objects := self matchingObjectsForPattern:pattern inEnvironment:environment relax: 1.
+    objects notEmptyOrNil ifTrue:[ ^ objects ].
+
+    objects := self matchingObjectsForPattern:pattern inEnvironment:environment relax: 2.
+    objects notEmptyOrNil ifTrue:[ ^ objects ].
+
+    objects := self matchingObjectsForPattern:pattern inEnvironment:environment relax: 3.
+    ^ objects
+
+    "Created: / 28-04-2014 / 23:20:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 20-06-2014 / 21:19:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectsForPattern:pattern inEnvironment:environment relax: level
+    self subclassResponsibility
+
+    "Created: / 20-06-2014 / 21:16:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/SmallSense__AbstractSearchDialog.st	Sat Dec 06 22:27:37 2014 +0000
+++ b/SmallSense__AbstractSearchDialog.st	Mon Dec 08 02:42:33 2014 +0000
@@ -20,13 +20,8 @@
 
 "{ NameSpace: SmallSense }"
 
-AbstractDIalog subclass:#AbstractSearchDialog
-	instanceVariableNames:'matchingObjects matchingObjectsView matchingObjectsMultiselect
-		matchingObjectsTree matchingObjectsSelectionHolder
-		matchingObjectsLabelHolder matchingObjectsUpdateJob
-		matchPatternHolder matchPatternView environmentHolder
-		filterHolder filter recentlySearchedPatterns
-		recentlySearchedObjects'
+AbstractListDialog subclass:#AbstractSearchDialog
+	instanceVariableNames:'recentlySearchedPatterns recentlySearchedObjects'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'SmallSense-Core-Interface-Search'
@@ -37,6 +32,7 @@
 "
  The following class instance variables are inherited by this class:
 
+	SmallSense::AbstractListDialog - 
 	SmallSense::AbstractDIalog - 
 	SimpleDialog - 
 	ApplicationModel - ClassResources
@@ -88,116 +84,6 @@
     "Created: / 28-04-2014 / 23:13:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!AbstractSearchDialog class methodsFor:'interface specs-content'!
-
-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: (
-                (ViewSpec
-                   name: 'Box1'
-                   component:
-                  (SpecCollection
-                     collection: (
-                      (LabelSpec
-                         label: 'Enter name prefix or pattern (*):'
-                         name: 'PatternLabel'
-                         layout: (LayoutFrame 0 0 0 0 -100 1 0 1)
-                         translateLabel: true
-                         adjust: left
-                       )
-                      (UISubSpecification
-                         name: 'SubSpecification1'
-                         layout: (LayoutFrame -100 1 0 0 0 1 0 1)
-                         visibilityChannel: hasOptions
-                         minorKey: optionsShowHideRightAlignedPaneSpec
-                       )
-                      )
-
-                   )
-                   extent: (Point 708 30)
-                 )
-                (InputFieldSpec
-                   name: 'Pattern'
-                   model: matchPatternHolder
-                   immediateAccept: true
-                   acceptOnReturn: true
-                   acceptOnTab: true
-                   acceptOnPointerLeave: true
-                   entryCompletionBlock: matchPatternCompletionBlock
-                   extent: (Point 706 25)
-                   postBuildCallback: postBuildMatchPatternView:
-                   usePreferredHeight: true
-                 )
-                (LabelSpec
-                   label: 'Matching items:'
-                   name: 'MatchingLabel'
-                   translateLabel: true
-                   labelChannel: matchingObjectsLabelHolder
-                   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: canSelectIndex:
-                   showLines: false
-                   showIndicators: false
-                   showLeftIndicators: false
-                   useDefaultIcons: false
-                   showRoot: false
-                   extent: (Point 708 302)
-                   postBuildCallback: postBuildMatchingObjectsView:
-                 )
-                )
-
-             )
-           )
-          )
-
-       )
-     )
-! !
-
 !AbstractSearchDialog class methodsFor:'queries'!
 
 isAbstract
@@ -210,71 +96,6 @@
 
 !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>"
-!
-
-filter: aBlock
-    self filterHolder value: aBlock
-
-    "Created: / 10-05-2014 / 00:41:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-matchingObjectsSelection
-    ^ self matchingObjectsSelectionHolder value
-
-    "Created: / 10-05-2014 / 00:47:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-matchingObjectsSelection: selection
-    self matchingObjectsSelectionHolder value: selection withoutNotifying:self.
-    self updateAcceptEnabled.
-
-    "Created: / 02-05-2014 / 12:26:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 25-11-2014 / 13:59:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-multiselect
-    ^ matchingObjectsMultiselect
-
-    "Created: / 10-05-2014 / 11:22:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-multiselect: aBoolean
-    matchingObjectsMultiselect := aBoolean.
-    matchingObjectsView notNil ifTrue:[
-        matchingObjectsView multipleSelectOk: aBoolean
-    ].
-
-    "Created: / 10-05-2014 / 11:22:32 / 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>"
-!
-
 recentlySearchedObjects
     ^ recentlySearchedObjects
 !
@@ -289,229 +110,6 @@
 
 recentlySearchedPatterns:aCollection
     recentlySearchedPatterns := aCollection.
-!
-
-selection: selection
-    | matchingObjectsSelection |
-
-    matchingObjectsMultiselect ifTrue:[
-        matchingObjectsSelection := selection collect:[ :each | matchingObjectsTree root recursiveDetect: [ :po | po subject = each ] ].
-        matchingObjectsSelection := matchingObjectsSelection reject:[:each | each isNil ].
-    ] ifFalse:[
-        matchingObjectsSelection := matchingObjectsTree root recursiveDetect: [ :po | po subject = selection ]
-    ].
-    self matchingObjectsSelection: matchingObjectsSelection.
-
-    "Created: / 10-05-2014 / 00:50:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 10-05-2014 / 11:42:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-title
-    ^ self titleHolder value.
-
-    "Created: / 05-05-2014 / 23:35:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-title: aString
-    | title |
-
-
-    title := aString.
-    (title includes: Character cr) ifTrue:[
-        title := title upTo:Character cr.
-    ].
-    self titleHolder value: title
-
-    "Created: / 05-05-2014 / 23:36:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 10-05-2014 / 01:22:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!AbstractSearchDialog methodsFor:'accessing - private'!
-
-matchingObjectForString: aString
-    "Creates a new object from given string. Called only when
-     #canCreateMatchingObjectFromString: returns true"
-
-    (self canCreateMatchingObjectFromString:aString) ifFalse:[
-        self shouldNeverBeSent
-    ] ifTrue:[
-        self subclassResponsibility
-    ]
-
-    "Created: / 23-06-2014 / 15:20:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!AbstractSearchDialog methodsFor:'accessing-defaults'!
-
-defaultTitle
-    ^ (resources string: 'Search...')
-
-    "Created: / 05-05-2014 / 23:39:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!AbstractSearchDialog methodsFor:'aspects'!
-
-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.
-    ].
-!
-
-matchPatternCompletionBlock
-    ^ [ :contents :field |
-        | completion |
-        (contents notEmptyOrNil and:[ matchingObjectsUpdateJob running not]) ifTrue:[
-            field topView withCursor:(Cursor questionMark) do:[
-                completion := self matchPatternCompletionFor: contents
-            ].
-        ].
-        completion notNil ifTrue:[
-            field contents: completion first.
-            completion second size == 1 ifTrue:[
-                matchingObjectsMultiselect ifTrue:[
-                    self matchingObjectsSelection: completion second asArray
-                ] ifFalse:[
-                    self matchingObjectsSelection: completion second anElement.
-                ].
-            ].
-        ] ifFalse:[
-            matchingObjectsView flash.
-        ]
-    ]
-
-    "Created: / 28-04-2014 / 22:30:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 20-06-2014 / 14:12:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-matchPatternHolder
-    <resource: #uiAspect>
-
-    matchPatternHolder isNil ifTrue:[
-        matchPatternHolder := ValueHolder new.
-    ].
-    ^ matchPatternHolder.
-
-    "Modified: / 25-11-2014 / 13:52:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-matchingObjectsLabelHolder
-    <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 ;-)"
-
-    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.
-    ].
-    ^ matchingObjectsLabelHolder.
-
-    "Created: / 28-04-2014 / 22:29:11 / 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'!
@@ -519,15 +117,6 @@
 update:something with:aParameter from:changedObject
     "Invoked when an object that I depend upon sends a change notification."
 
-    changedObject == matchPatternHolder ifTrue:[
-        matchingObjectsUpdateJob restart.
-        ^ self.
-    ].
-    changedObject == matchingObjectsSelectionHolder ifTrue:[
-        self updateMatchPatternHolderFromSelection.
-        self updateAcceptEnabled.
-        ^ self.
-    ].
     changedObject == accept ifTrue:[
         accept value ifTrue:[
             self updateAcceptedValue.
@@ -539,360 +128,38 @@
             ].
         ].
         ^ self.
-    ].
-    changedObject == filterHolder ifTrue:[
-        (filter notNil and:[filter isBlock not and:[(filter isKindOf: MessageSend) not]]) ifTrue:[filter removeDependent: self].
-        filter := filterHolder value.
-        (filter notNil and:[filter isBlock not and:[(filter isKindOf: MessageSend) not]]) ifTrue:[filter addDependent: self].
-        "/ Only do this after window is opened....
-        (self builder notNil and:[ self builder window notNil  ]) ifTrue:[
-            matchingObjectsUpdateJob restart.
-        ].
-         ^ self.
-    ]    .
-    changedObject == filter ifTrue:[
-        matchingObjectsUpdateJob restart.
-    ].
+    ].  
     super update:something with:aParameter from:changedObject
 
-    "Modified: / 06-10-2014 / 23:59:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-updateAcceptEnabled
-    self acceptEnabledHolder value:
-        (matchingObjectsSelectionHolder value notEmptyOrNil
-            or:[ self canCreateMatchingObjectFromString:matchPatternView contents ])
-
-    "Created: / 08-03-2013 / 14:06:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 23-06-2014 / 15:16:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-updateAcceptedValue
-    "Dialog has been accepted (OK pressed). Update accepted value"
-
-    | matchingObjectsSelection |
-
-    matchingObjectsSelection := matchingObjectsSelectionHolder value.
-    matchingObjectsSelection isEmptyOrNil ifTrue:[
-        (self canCreateMatchingObjectFromString:matchPatternView contents) ifTrue:[
-            acceptedValue := self matchingObjectForString: matchPatternView contents.
-        ].
-    ] ifFalse:[
-        acceptedValue := matchingObjectsMultiselect
-            ifTrue:[ matchingObjectsSelection collect:[:e|e subject] ]
-            ifFalse:[ matchingObjectsSelection subject ]
-    ].
-
-    "Created: / 19-06-2014 / 11:57:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 23-06-2014 / 15:20:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-updateMatchPatternHolderFromSelection
-    | pattern selection |
-
-    "/ Do not update pattern if it contains match characters
-    pattern := matchPatternHolder value.
-    pattern notEmptyOrNil ifTrue:[
-        (pattern first isSeparator or:[pattern includesAny: '*?']) ifTrue:[
-            ^self
-        ]
-    ].
-    selection := matchingObjectsSelectionHolder value.
-    selection isSequenceable ifTrue:[
-        selection size == 1 ifTrue:[
-            selection := selection anElement.
-        ] ifFalse:[
-            selection := nil.
-        ]
-    ].
-    selection notNil ifTrue:[
-        matchPatternHolder value: selection label withoutNotifying: self.
-        matchPatternView notNil ifTrue:[
-            matchPatternView selectAll.
-        ]
-    ].
-
-    "Created: / 06-10-2014 / 23:59:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 25-11-2014 / 13:23:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-updateMatchingLabelToNormal
-    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 / 22:29:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-updateMatchingLabelToRecentSearches
-    self matchingObjectsLabelHolder value: (resources string: 'Recently searched:').
-
-    "Created: / 30-04-2014 / 11:47:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-updateMatchingLabelToSearching
-    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
-    | environment pattern objects |
-
-    environment := self environment.
-    self matchPatternHolder value notEmptyOrNil ifTrue:[
-        pattern := StringPattern fromString: self matchPatternHolder value.
-        objects := self matchingObjectsForPattern: pattern inEnvironment: environment.
-        self updateMatchingObjects: objects.
-    ] ifFalse:[
-        self updateMatchingObjectsIgnorePattern
-    ].
-
-    "Created: / 06-05-2014 / 00:11:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 06-07-2014 / 10:16:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-updateMatchingObjects: objects
-    | rootPO matchingPOs matchPatternString  |
-
-    matchingObjects := objects.
-    matchingPOs := self matchingObjectPOsFor: objects.
-    rootPO := self matchingObjectsTree root.
-    rootPO
-        children:matchingPOs;
-        expand.
-    matchPatternString := self matchPatternHolder value.
-    matchPatternString isEmptyOrNil ifTrue:[ 
-        ^ self.
-    ].
-    matchingPOs size == 1 ifTrue:[
-        matchingObjectsMultiselect ifTrue:[
-            self matchingObjectsSelection: matchingPOs
-        ] ifFalse:[
-            self matchingObjectsSelection: matchingPOs anElement
-        ]
-    ].
-
-    "Created: / 30-04-2014 / 09:53:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 26-11-2014 / 07:24:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-updateMatchingObjectsIgnorePattern
-    | environment objects |
-
-    environment := self environment.
-    objects := self matchingObjectsForPattern: nil inEnvironment: environment.
-    self updateMatchingObjects: objects.
-
-    "Created: / 10-05-2014 / 01:02:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 06-07-2014 / 10:16:37 / 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:'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
-    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>"
+    "Created: / 08-12-2014 / 02:36:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !AbstractSearchDialog methodsFor:'hooks'!
 
 commonPostBuild
-
-    matchPatternHolder addDependent:self.
-    matchPatternView selectAll.
-    matchingObjects isNil ifTrue:[
-        self updateMatchingObjectsIgnorePattern.
+"/    self updateMatching.
+"/    recentlySearchedPatterns notEmptyOrNil ifTrue:[
+"/        matchPatternView contents: self recentlySearchedPatterns last.
+"/        matchPatternView selectAll.
+"/    ].
+    self recentlySearchedObjects notEmptyOrNil ifTrue:[
+        self updateMatchingObjects: self recentlySearchedObjects asArray reverse.
+        self updateMatchingLabelToRecentSearches.
     ].
-    self updateAcceptEnabled.
-    self updateMatchPatternHolderFromSelection.
     super commonPostBuild
 
-    "Created: / 25-11-2014 / 13:23: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
-    matchingObjectsView := aView scrolledView.
-    matchingObjectsView delegate: self.
-    matchingObjectsView multipleSelectOk: matchingObjectsMultiselect
-
-    "Created: / 22-04-2014 / 13:21:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 10-05-2014 / 11:23:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 25-11-2014 / 13:23:56 / 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
-    matchingObjectsUpdateJob := BackgroundJob named: 'SmallSense search dialog updater' on:[self updateMatchingObjects].
-    matchingObjectsMultiselect := false.
-
     recentlySearchedPatterns := self class recentlySearchedPatterns.
     recentlySearchedObjects := self class recentlySearchedObjects.
 
-    "Modified: / 10-05-2014 / 11:40:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!AbstractSearchDialog methodsFor:'queries'!
-
-canCreateMatchingObjectFromString:string
-    "Return true, a new object can be created with given string value"
-
-    ^ false
-
-    "Created: / 23-06-2014 / 15:14:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-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>"
-!
-
-canSelectIndex: selectionIndex
-    (selectionIndex between: 1 and: matchingObjectsTree size) ifTrue:[
-        ^ self canSelect: (matchingObjectsTree at: selectionIndex)
-    ].
-    ^ false
-
-    "Created: / 02-05-2014 / 23:52:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-hasOptions
-    ^ false
-
-    "Created: / 09-05-2014 / 23:58:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!AbstractSearchDialog methodsFor:'searching'!
-
-matchPatternCompletionFor: contents
-   | pattern |
-
-   pattern := StringPattern fromString: contents.
-   (pattern isKindOf: StringPattern::StartsWith) ifFalse:[ ^ nil ].
-   ^ self matchPatternCompletionFor: contents pattern: pattern
-
-    "Created: / 02-05-2014 / 10:50:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-matchPatternCompletionFor: contents pattern: pattern
-    | completionPOs completionPOLabels completion matchingPOs |
-
-    completionPOs := self matchingObjectsTree root
-                        recursiveSelect:[:item | (self canSelect: item) and:[ pattern match: item label relax: 1 ] ].
-    completionPOLabels := completionPOs collect:[ :each | each label ].
-    completion := completionPOLabels longestCommonPrefix.
-    completion isEmptyOrNil ifTrue:[ ^ nil ].
-    completion = contents ifTrue:[ ^ nil ].
-    matchingPOs := OrderedCollection new.
-    completionPOs with: completionPOLabels do:[:po :poLabel |
-        poLabel = completion ifTrue:[
-            matchingPOs add: po.
-        ].
-    ].
-    ^ Array with: completion with: matchingPOs.
-
-    "Created: / 02-05-2014 / 10:58:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 02-10-2014 / 10:12:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-matchingObjectPOsFor: objects
-
-    self subclassResponsibility.
-
-    "Created: / 30-04-2014 / 09:46:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-matchingObjectsForPattern:pattern inEnvironment:environment
-    | objects |
-
-    objects := self matchingObjectsForPattern:pattern inEnvironment:environment relax: 1.
-    objects notEmptyOrNil ifTrue:[ ^ objects ].
-
-    objects := self matchingObjectsForPattern:pattern inEnvironment:environment relax: 2.
-    objects notEmptyOrNil ifTrue:[ ^ objects ].
-
-    objects := self matchingObjectsForPattern:pattern inEnvironment:environment relax: 3.
-    ^ objects
-
-    "Created: / 28-04-2014 / 23:20:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 20-06-2014 / 21:19:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-matchingObjectsForPattern:pattern inEnvironment:environment relax: level
-    self subclassResponsibility
-
-    "Created: / 20-06-2014 / 21:16:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 08-12-2014 / 01:51:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !AbstractSearchDialog class methodsFor:'documentation'!
--- a/SmallSense__ClassSearchDialog.st	Sat Dec 06 22:27:37 2014 +0000
+++ b/SmallSense__ClassSearchDialog.st	Mon Dec 08 02:42:33 2014 +0000
@@ -232,23 +232,6 @@
     "Modified: / 20-06-2014 / 14:15:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!ClassSearchDialog methodsFor:'hooks'!
-
-commonPostBuild
-"/    self updateMatching.
-"/    recentlySearchedPatterns notEmptyOrNil ifTrue:[
-"/        matchPatternView contents: self recentlySearchedPatterns last.
-"/        matchPatternView selectAll.
-"/    ].
-    self recentlySearchedObjects notEmptyOrNil ifTrue:[
-        self updateMatchingObjects: self recentlySearchedObjects asArray reverse.
-        self updateMatchingLabelToRecentSearches.
-    ].
-    super commonPostBuild
-
-    "Created: / 25-11-2014 / 13:23:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
 !ClassSearchDialog methodsFor:'queries'!
 
 canSelect: selection
--- a/SmallSense__MethodSearchDialog.st	Sat Dec 06 22:27:37 2014 +0000
+++ b/SmallSense__MethodSearchDialog.st	Mon Dec 08 02:42:33 2014 +0000
@@ -125,23 +125,6 @@
     "Created: / 10-05-2014 / 11:50:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!MethodSearchDialog methodsFor:'hooks'!
-
-commonPostBuild
-"/    self updateMatching.
-"/    recentlySearchedPatterns notEmptyOrNil ifTrue:[
-"/        matchPatternView contents: self recentlySearchedPatterns last.
-"/        matchPatternView selectAll.
-"/    ].
-    self recentlySearchedObjects notEmptyOrNil ifTrue:[
-        self updateMatchingObjects: self recentlySearchedObjects asArray reverse.
-        self updateMatchingLabelToRecentSearches.
-    ].
-    super commonPostBuild
-
-    "Created: / 25-11-2014 / 13:23:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
 !MethodSearchDialog methodsFor:'queries'!
 
 canSelect: selection
--- a/SmallSense__PackageSearchDialog.st	Sat Dec 06 22:27:37 2014 +0000
+++ b/SmallSense__PackageSearchDialog.st	Mon Dec 08 02:42:33 2014 +0000
@@ -20,7 +20,7 @@
 
 "{ NameSpace: SmallSense }"
 
-AbstractSearchDialog subclass:#PackageSearchDialog
+AbstractListDialog subclass:#PackageSearchDialog
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -96,7 +96,7 @@
         | pkg |
 
         pkg := cls package.
-        ((pkg notNil and:[ pkg ~~ PackageId noProjectID and:[ pkg ~= '__temporary__'] ])
+        ((pkg notNil and:[ pkg ~~ PackageId noProjectID and:[ (pkg startsWith: '__') not] ])
             and:[(filter isNil or:[ filter value: pkg ])
             and:[pattern isNil or:[pattern match: pkg relax: level]]]) ifTrue:[ packages add: pkg ].
     ].
@@ -104,12 +104,13 @@
         | pkg |
 
         pkg := mth package.
-        ((pkg notNil and:[ pkg ~~ PackageId noProjectID ])
+        ((pkg notNil and:[ pkg ~~ PackageId noProjectID and:[ (pkg startsWith: '__') not] ])
             and:[(filter isNil or:[ filter value: pkg ])
             and:[pattern isNil or:[pattern match: pkg relax: level]]]) ifTrue:[ packages add: pkg ].
     ].
     ^ packages asArray.
 
     "Created: / 20-06-2014 / 21:17:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 08-12-2014 / 02:34:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
--- a/abbrev.stc	Sat Dec 06 22:27:37 2014 +0000
+++ b/abbrev.stc	Mon Dec 08 02:42:33 2014 +0000
@@ -37,7 +37,7 @@
 SmallSense::TypeHolder SmallSense__TypeHolder stx:goodies/smallsense 'SmallSense-Smalltalk-Types' 0
 stx_goodies_smallsense stx_goodies_smallsense stx:goodies/smallsense '* Projects & Packages *' 3
 SmallSense::AbstractJavaCompletionEngine SmallSense__AbstractJavaCompletionEngine stx:goodies/smallsense 'SmallSense-Java' 0
-SmallSense::AbstractSearchDialog SmallSense__AbstractSearchDialog stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 3
+SmallSense::AbstractListDialog SmallSense__AbstractListDialog stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 1
 SmallSense::ClassInfo SmallSense__ClassInfo stx:goodies/smallsense 'SmallSense-Smalltalk-Types-Info' 0
 SmallSense::ClassPO SmallSense__ClassPO stx:goodies/smallsense 'SmallSense-Core-Interface-PO' 0
 SmallSense::ClassType SmallSense__ClassType stx:goodies/smallsense 'SmallSense-Smalltalk-Types' 0
@@ -59,14 +59,15 @@
 SmallSense::VariableBindingPO SmallSense__VariableBindingPO stx:goodies/smallsense 'SmallSense-Java-Interface-PO' 0
 SmallSense::VariablePO SmallSense__VariablePO stx:goodies/smallsense 'SmallSense-Core-Interface-PO' 0
 SmallSense::AbstractJavaCompletionEngineSimple SmallSense__AbstractJavaCompletionEngineSimple stx:goodies/smallsense 'SmallSense-Java' 2
-SmallSense::ClassSearchDialog SmallSense__ClassSearchDialog stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 3
+SmallSense::AbstractSearchDialog SmallSense__AbstractSearchDialog stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 3
 SmallSense::GroovyEditSupport SmallSense__GroovyEditSupport stx:goodies/smallsense 'SmallSense-Groovy' 0
 SmallSense::JavaCompletionEngine SmallSense__JavaCompletionEngine stx:goodies/smallsense 'SmallSense-Java' 0
 SmallSense::JavaConstructorPO SmallSense__JavaConstructorPO stx:goodies/smallsense 'SmallSense-Java-Interface-PO' 0
 SmallSense::MethodKeywordRestPO SmallSense__MethodKeywordRestPO stx:goodies/smallsense 'SmallSense-Core-Interface-PO' 0
+SmallSense::PackageSearchDialog SmallSense__PackageSearchDialog stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 1
+SmallSense::ClassSearchDialog SmallSense__ClassSearchDialog stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 3
+SmallSense::JavaCompletionEngineSimple SmallSense__JavaCompletionEngineSimple stx:goodies/smallsense 'SmallSense-Java' 2
 SmallSense::MethodSearchDialog SmallSense__MethodSearchDialog stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 3
-SmallSense::PackageSearchDialog SmallSense__PackageSearchDialog stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 3
-SmallSense::JavaCompletionEngineSimple SmallSense__JavaCompletionEngineSimple stx:goodies/smallsense 'SmallSense-Java' 2
 SmallSense::GroovyCompletionEngineSimple SmallSense__GroovyCompletionEngineSimple stx:goodies/smallsense 'SmallSense-Groovy' 2
 SmallSense::AbstractJavaCompletionEngineTests SmallSense__AbstractJavaCompletionEngineTests stx:goodies/smallsense 'SmallSense-Tests' 1
 SmallSense::AbstractTestCase SmallSense__AbstractTestCase stx:goodies/smallsense 'SmallSense-Tests' 1
--- a/bc.mak	Sat Dec 06 22:27:37 2014 +0000
+++ b/bc.mak	Mon Dec 08 02:42:33 2014 +0000
@@ -119,7 +119,7 @@
 $(OUTDIR)SmallSense__TypeHolder.$(O) SmallSense__TypeHolder.$(H): SmallSense__TypeHolder.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)stx_goodies_smallsense.$(O) stx_goodies_smallsense.$(H): stx_goodies_smallsense.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__AbstractJavaCompletionEngine.$(O) SmallSense__AbstractJavaCompletionEngine.$(H): SmallSense__AbstractJavaCompletionEngine.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)SmallSense__AbstractSearchDialog.$(O) SmallSense__AbstractSearchDialog.$(H): SmallSense__AbstractSearchDialog.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libview2\SimpleDialog.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__AbstractListDialog.$(O) SmallSense__AbstractListDialog.$(H): SmallSense__AbstractListDialog.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libview2\SimpleDialog.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__ClassInfo.$(O) SmallSense__ClassInfo.$(H): SmallSense__ClassInfo.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__Info.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__ClassPO.$(O) SmallSense__ClassPO.$(H): SmallSense__ClassPO.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__PO.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__ClassType.$(O) SmallSense__ClassType.$(H): SmallSense__ClassType.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__Type.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -141,16 +141,17 @@
 $(OUTDIR)SmallSense__VariableBindingPO.$(O) SmallSense__VariableBindingPO.$(H): SmallSense__VariableBindingPO.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__PO.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__VariablePO.$(O) SmallSense__VariablePO.$(H): SmallSense__VariablePO.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__PO.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__AbstractJavaCompletionEngineSimple.$(O) SmallSense__AbstractJavaCompletionEngineSimple.$(H): SmallSense__AbstractJavaCompletionEngineSimple.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractJavaCompletionEngine.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)SmallSense__ClassSearchDialog.$(O) SmallSense__ClassSearchDialog.$(H): SmallSense__ClassSearchDialog.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractSearchDialog.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libview2\SimpleDialog.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__AbstractSearchDialog.$(O) SmallSense__AbstractSearchDialog.$(H): SmallSense__AbstractSearchDialog.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractListDialog.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libview2\SimpleDialog.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__GroovyEditSupport.$(O) SmallSense__GroovyEditSupport.$(H): SmallSense__GroovyEditSupport.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__EditSupport.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__JavaEditSupport.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__JavaCompletionEngine.$(O) SmallSense__JavaCompletionEngine.$(H): SmallSense__JavaCompletionEngine.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractJavaCompletionEngine.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__JavaConstructorPO.$(O) SmallSense__JavaConstructorPO.$(H): SmallSense__JavaConstructorPO.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__MethodPO.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__PO.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__MethodKeywordRestPO.$(O) SmallSense__MethodKeywordRestPO.$(H): SmallSense__MethodKeywordRestPO.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__MethodPO.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__PO.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
-$(OUTDIR)SmallSense__MethodSearchDialog.$(O) SmallSense__MethodSearchDialog.$(H): SmallSense__MethodSearchDialog.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractSearchDialog.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libview2\SimpleDialog.$(H) $(STCHDR)
-$(OUTDIR)SmallSense__PackageSearchDialog.$(O) SmallSense__PackageSearchDialog.$(H): SmallSense__PackageSearchDialog.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractSearchDialog.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libview2\SimpleDialog.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__PackageSearchDialog.$(O) SmallSense__PackageSearchDialog.$(H): SmallSense__PackageSearchDialog.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractListDialog.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libview2\SimpleDialog.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__ClassSearchDialog.$(O) SmallSense__ClassSearchDialog.$(H): SmallSense__ClassSearchDialog.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractListDialog.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractSearchDialog.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libview2\SimpleDialog.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__JavaCompletionEngineSimple.$(O) SmallSense__JavaCompletionEngineSimple.$(H): SmallSense__JavaCompletionEngineSimple.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractJavaCompletionEngine.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractJavaCompletionEngineSimple.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__MethodSearchDialog.$(O) SmallSense__MethodSearchDialog.$(H): SmallSense__MethodSearchDialog.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractListDialog.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractSearchDialog.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libview2\SimpleDialog.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__GroovyCompletionEngineSimple.$(O) SmallSense__GroovyCompletionEngineSimple.$(H): SmallSense__GroovyCompletionEngineSimple.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractJavaCompletionEngine.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractJavaCompletionEngineSimple.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__JavaCompletionEngineSimple.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\lint\RBBasicLintRule.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\lint\RBBlockLintRule.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\lint\RBContainsSmalltalkXEOLCommentRule.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\lint\RBLintRule.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\lint\RBTransformationRule.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBBlockNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBMethodNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBStatementNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBValueNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\CompiledCode.$(H) $(INCLUDE_TOP)\stx\libbasic\ConfigurableFeatures.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Method.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\UserPreferences.$(H) $(INCLUDE_TOP)\stx\libcomp\AssignmentNode.$(H) $(INCLUDE_TOP)\stx\libcomp\BlockNode.$(H) $(INCLUDE_TOP)\stx\libcomp\MessageNode.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseErrorNode.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\PrimaryNode.$(H) $(INCLUDE_TOP)\stx\libcomp\PrimitiveNode.$(H) $(INCLUDE_TOP)\stx\libcomp\ReturnNode.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(INCLUDE_TOP)\stx\libcomp\StatementNode.$(H) $(INCLUDE_TOP)\stx\libcomp\VariableNode.$(H) $(INCLUDE_TOP)\stx\libhtml\HTMLDocumentFrame.$(H) $(INCLUDE_TOP)\stx\libhtml\HTMLDocumentView.$(H) $(INCLUDE_TOP)\stx\libtool\SystemBrowser.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__BackgroundSourceProcessingService.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__CodeCompletionService.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__CodeHighlightingService.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__CodeNavigationService.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__CodeViewService.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__LintService.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__NavigationState.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__NewSystemBrowser.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libwidg\EditTextView.$(H) $(INCLUDE_TOP)\stx\libwidg\EditTextViewCompletionSupport.$(H) $(INCLUDE_TOP)\stx\libwidg\ListView.$(H) $(INCLUDE_TOP)\stx\libwidg\TextView.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\lint\RBBasicLintRule.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\lint\RBBlockLintRule.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\lint\RBContainsSmalltalkXEOLCommentRule.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\lint\RBLintRule.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\lint\RBTransformationRule.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBBlockNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBMethodNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBStatementNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBValueNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\CompiledCode.$(H) $(INCLUDE_TOP)\stx\libbasic\ConfigurableFeatures.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Method.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\UserPreferences.$(H) $(INCLUDE_TOP)\stx\libcomp\AssignmentNode.$(H) $(INCLUDE_TOP)\stx\libcomp\BlockNode.$(H) $(INCLUDE_TOP)\stx\libcomp\MessageNode.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseErrorNode.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\PrimaryNode.$(H) $(INCLUDE_TOP)\stx\libcomp\PrimitiveNode.$(H) $(INCLUDE_TOP)\stx\libcomp\ReturnNode.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(INCLUDE_TOP)\stx\libcomp\StatementNode.$(H) $(INCLUDE_TOP)\stx\libcomp\VariableNode.$(H) $(INCLUDE_TOP)\stx\libhtml\HTMLDocumentFrame.$(H) $(INCLUDE_TOP)\stx\libhtml\HTMLDocumentView.$(H) $(INCLUDE_TOP)\stx\libtool\SystemBrowser.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__BackgroundSourceProcessingService.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__CodeCompletionService.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__CodeHighlightingService.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__CodeNavigationService.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__CodeViewService.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__LintService.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__NavigationState.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__NewSystemBrowser.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\ModalBox.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\StandardSystemView.$(H) $(INCLUDE_TOP)\stx\libview\TopView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libwidg\DialogBox.$(H) $(INCLUDE_TOP)\stx\libwidg\EditTextView.$(H) $(INCLUDE_TOP)\stx\libwidg\EditTextViewCompletionSupport.$(H) $(INCLUDE_TOP)\stx\libwidg\ListView.$(H) $(INCLUDE_TOP)\stx\libwidg\TextView.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
 
--- a/bmake.bat	Sat Dec 06 22:27:37 2014 +0000
+++ b/bmake.bat	Mon Dec 08 02:42:33 2014 +0000
@@ -9,4 +9,8 @@
 @IF "%HGROOT%" NEQ "" SET DEFINES=%DEFINES% "-DHGROOT=%HGROOT%"
 make.exe -N -f bc.mak  %DEFINES% %*
 
+@IF "%1" EQU "exe" GOTO finish
 
+
+
+:finish
--- a/extensions.st	Sat Dec 06 22:27:37 2014 +0000
+++ b/extensions.st	Mon Dec 08 02:42:33 2014 +0000
@@ -71,17 +71,23 @@
     ].
     dialog := SmallSense::PackageSearchDialog new.
     dialog title: title.
-    dialog recentlySearchedObjects: suggestions.
-    dialog recentlySearchedPatterns: suggestions.
     dialog filter: [ :pkg | listOfProjects includes: pkg ].
     dialog updateMatchingObjects.
     (initialTextOrNil notNil and:[initialTextOrNil ~~ PackageId noProjectID]) ifTrue:[
-        dialog pattern: initialTextOrNil.
-        dialog selection: initialTextOrNil.
+        initialTextOrNil isEmpty ifTrue:[
+            suggestions size == 1 ifTrue:[
+                dialog pattern:   suggestions anElement. 
+                dialog selection: suggestions anElement. 
+            ].
+        ] ifFalse:[ 
+            dialog pattern: initialTextOrNil.
+            dialog selection: initialTextOrNil.
+        ]
     ].
     ^ dialog open.
 
     "Created: / 25-11-2014 / 13:20:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 08-12-2014 / 02:17:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !EditTextView methodsFor:'accessing-behavior'!
--- a/libInit.cc	Sat Dec 06 22:27:37 2014 +0000
+++ b/libInit.cc	Mon Dec 08 02:42:33 2014 +0000
@@ -63,7 +63,7 @@
 _SmallSense__TypeHolder_Init(pass,__pRT__,snd);
 _stx_137goodies_137smallsense_Init(pass,__pRT__,snd);
 _SmallSense__AbstractJavaCompletionEngine_Init(pass,__pRT__,snd);
-_SmallSense__AbstractSearchDialog_Init(pass,__pRT__,snd);
+_SmallSense__AbstractListDialog_Init(pass,__pRT__,snd);
 _SmallSense__ClassInfo_Init(pass,__pRT__,snd);
 _SmallSense__ClassPO_Init(pass,__pRT__,snd);
 _SmallSense__ClassType_Init(pass,__pRT__,snd);
@@ -85,14 +85,15 @@
 _SmallSense__VariableBindingPO_Init(pass,__pRT__,snd);
 _SmallSense__VariablePO_Init(pass,__pRT__,snd);
 _SmallSense__AbstractJavaCompletionEngineSimple_Init(pass,__pRT__,snd);
-_SmallSense__ClassSearchDialog_Init(pass,__pRT__,snd);
+_SmallSense__AbstractSearchDialog_Init(pass,__pRT__,snd);
 _SmallSense__GroovyEditSupport_Init(pass,__pRT__,snd);
 _SmallSense__JavaCompletionEngine_Init(pass,__pRT__,snd);
 _SmallSense__JavaConstructorPO_Init(pass,__pRT__,snd);
 _SmallSense__MethodKeywordRestPO_Init(pass,__pRT__,snd);
+_SmallSense__PackageSearchDialog_Init(pass,__pRT__,snd);
+_SmallSense__ClassSearchDialog_Init(pass,__pRT__,snd);
+_SmallSense__JavaCompletionEngineSimple_Init(pass,__pRT__,snd);
 _SmallSense__MethodSearchDialog_Init(pass,__pRT__,snd);
-_SmallSense__PackageSearchDialog_Init(pass,__pRT__,snd);
-_SmallSense__JavaCompletionEngineSimple_Init(pass,__pRT__,snd);
 _SmallSense__GroovyCompletionEngineSimple_Init(pass,__pRT__,snd);
 
 _stx_137goodies_137smallsense_extensions_Init(pass,__pRT__,snd);
--- a/smallsense.rc	Sat Dec 06 22:27:37 2014 +0000
+++ b/smallsense.rc	Mon Dec 08 02:42:33 2014 +0000
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "Copyright Jan Vrany 2013-2014\0"
       VALUE "ProductName", "SmallSense\0"
       VALUE "ProductVersion", "6.2.5.0\0"
-      VALUE "ProductDate", "Wed, 03 Dec 2014 10:29:19 GMT\0"
+      VALUE "ProductDate", "Mon, 08 Dec 2014 02:37:43 GMT\0"
     END
 
   END
--- a/stx_goodies_smallsense.st	Sat Dec 06 22:27:37 2014 +0000
+++ b/stx_goodies_smallsense.st	Mon Dec 08 02:42:33 2014 +0000
@@ -107,7 +107,7 @@
      by searching all classes (and their packages) which are referenced by my classes."
 
     ^ #(
-        #'stx:libbasic2'    "BackgroundJob - referenced by SmallSense::AbstractSearchDialog>>initialize"
+        #'stx:libbasic2'    "BackgroundJob - referenced by SmallSense::AbstractListDialog>>initialize"
         #'stx:libbasic3'    "ChangeSet - referenced by RBContainsSmalltalkXEOLCommentRule>>fixes:"
         #'stx:libjava'    "Java - referenced by SmallSense::JavaCompletionEngine>>complete"
         #'stx:libjava/tools'    "GroovyScanner - referenced by SmallSense::GroovyCompletionEngineSimple>>scannerClass"
@@ -170,7 +170,7 @@
         #'SmallSense::TypeHolder'
         #'stx_goodies_smallsense'
         #'SmallSense::AbstractJavaCompletionEngine'
-        #'SmallSense::AbstractSearchDialog'
+        #'SmallSense::AbstractListDialog'
         #'SmallSense::ClassInfo'
         #'SmallSense::ClassPO'
         #'SmallSense::ClassType'
@@ -192,14 +192,15 @@
         #'SmallSense::VariableBindingPO'
         #'SmallSense::VariablePO'
         #'SmallSense::AbstractJavaCompletionEngineSimple'
-        #'SmallSense::ClassSearchDialog'
+        #'SmallSense::AbstractSearchDialog'
         #'SmallSense::GroovyEditSupport'
         #'SmallSense::JavaCompletionEngine'
         #'SmallSense::JavaConstructorPO'
         #'SmallSense::MethodKeywordRestPO'
+        #'SmallSense::PackageSearchDialog'
+        #'SmallSense::ClassSearchDialog'
+        #'SmallSense::JavaCompletionEngineSimple'
         #'SmallSense::MethodSearchDialog'
-        #'SmallSense::PackageSearchDialog'
-        #'SmallSense::JavaCompletionEngineSimple'
         #'SmallSense::GroovyCompletionEngineSimple'
         (#'SmallSense::AbstractJavaCompletionEngineTests' autoload)
         (#'SmallSense::AbstractTestCase' autoload)
@@ -355,7 +356,7 @@
     "Swizzle all methods annotated as <swizzle:>"
 
 
-    Swizzled ifTrue:[ ^ self ].
+    Swizzled == true ifTrue:[ ^ self ].
     ParserFlags initialize.
     self extensionMethods do:[:m |
         [
@@ -376,7 +377,7 @@
     "
 
     "Created: / 19-08-2013 / 14:54:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified (comment): / 28-11-2014 / 15:31:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 07-12-2014 / 23:36:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 swizzle: method