Merged 25ed27eaeaae and 405c5a5c1cec (feature-new-dialogs)
authorJan Vrany <jan.vrany@fit.cvut.cz>
Fri, 13 Feb 2015 08:44:44 +0000
changeset 396 015297b155fe
parent 395 25ed27eaeaae (current diff)
parent 393 405c5a5c1cec (diff)
child 399 8b8d8af97692
child 420 2b7b12e6fa40
Merged 25ed27eaeaae and 405c5a5c1cec (feature-new-dialogs)
Make.proto
SmallSense__PO.st
SmallSense__SmalltalkEditSupport.st
abbrev.stc
bc.mak
extensions.st
smallsense.rc
stx_goodies_smallsense.st
--- a/Make.proto	Thu Feb 12 00:30:40 2015 +0000
+++ b/Make.proto	Fri Feb 13 08:44:44 2015 +0000
@@ -159,6 +159,8 @@
 
 
 # BEGINMAKEDEPEND --- do not remove this line; make depend needs it
+$(OUTDIR)SmallSense__AbstractDIalog.$(O) SmallSense__AbstractDIalog.$(H): SmallSense__AbstractDIalog.st $(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__AbstractSearchProcessor.$(O) SmallSense__AbstractSearchProcessor.$(H): SmallSense__AbstractSearchProcessor.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__CodeHighlightingService.$(O) SmallSense__CodeHighlightingService.$(H): SmallSense__CodeHighlightingService.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__BackgroundSourceProcessingService.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__CodeHighlightingService.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__CodeViewService.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__CodeNavigationService.$(O) SmallSense__CodeNavigationService.$(H): SmallSense__CodeNavigationService.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__CodeNavigationService.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__CodeViewService.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__CompletionContext.$(O) SmallSense__CompletionContext.$(H): SmallSense__CompletionContext.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -171,6 +173,7 @@
 $(OUTDIR)SmallSense__EditSupport.$(O) SmallSense__EditSupport.$(H): SmallSense__EditSupport.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__Info.$(O) SmallSense__Info.$(H): SmallSense__Info.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__Manager.$(O) SmallSense__Manager.$(H): SmallSense__Manager.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__NavigatorStep.$(O) SmallSense__NavigatorStep.$(H): SmallSense__NavigatorStep.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__PO.$(O) SmallSense__PO.$(H): SmallSense__PO.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__ParseTreeIndex.$(O) SmallSense__ParseTreeIndex.$(H): SmallSense__ParseTreeIndex.st $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/OrderedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__ParseTreeIndexEntry.$(O) SmallSense__ParseTreeIndexEntry.$(H): SmallSense__ParseTreeIndexEntry.st $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -194,16 +197,23 @@
 $(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__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__ClassSearchProcessor.$(O) SmallSense__ClassSearchProcessor.$(H): SmallSense__ClassSearchProcessor.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractSearchProcessor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(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)
+$(OUTDIR)SmallSense__CompositeProcessor.$(O) SmallSense__CompositeProcessor.$(H): SmallSense__CompositeProcessor.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractSearchProcessor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__ConstantPO.$(O) SmallSense__ConstantPO.$(H): SmallSense__ConstantPO.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__PO.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__GenericEditSupport.$(O) SmallSense__GenericEditSupport.$(H): SmallSense__GenericEditSupport.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__EditSupport.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__ImplementorSearchProcessor.$(O) SmallSense__ImplementorSearchProcessor.$(H): SmallSense__ImplementorSearchProcessor.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractSearchProcessor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__JavaEditSupport.$(O) SmallSense__JavaEditSupport.$(H): SmallSense__JavaEditSupport.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__EditSupport.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__JavaImportPO.$(O) SmallSense__JavaImportPO.$(H): SmallSense__JavaImportPO.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__PO.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__MethodBindingPO.$(O) SmallSense__MethodBindingPO.$(H): SmallSense__MethodBindingPO.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__PO.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__MethodInfo.$(O) SmallSense__MethodInfo.$(H): SmallSense__MethodInfo.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__Info.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__MethodPO.$(O) SmallSense__MethodPO.$(H): SmallSense__MethodPO.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__PO.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__PackagePO.$(O) SmallSense__PackagePO.$(H): SmallSense__PackagePO.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__PO.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__PluggablePO.$(O) SmallSense__PluggablePO.$(H): SmallSense__PluggablePO.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__PO.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__PluggableSearchProcessor.$(O) SmallSense__PluggableSearchProcessor.$(H): SmallSense__PluggableSearchProcessor.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractSearchProcessor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__SmalltalkCompletionEngine.$(O) SmallSense__SmalltalkCompletionEngine.$(H): SmallSense__SmalltalkCompletionEngine.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__SmalltalkEditSupport.$(O) SmallSense__SmalltalkEditSupport.$(H): SmallSense__SmalltalkEditSupport.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__EditSupport.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__SmalltalkInferencer.$(O) SmallSense__SmalltalkInferencer.$(H): SmallSense__SmalltalkInferencer.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__SmalltalkParseNodeVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -214,13 +224,20 @@
 $(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__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__AbstractSelectDialog.$(O) SmallSense__AbstractSelectDialog.$(H): SmallSense__AbstractSelectDialog.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__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__Navigator.$(O) SmallSense__Navigator.$(H): SmallSense__Navigator.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__PackageSelectDialog.$(O) SmallSense__PackageSelectDialog.$(H): SmallSense__PackageSelectDialog.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractListDialog.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractSelectDialog.$(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__ProtocolSelectDialog.$(O) SmallSense__ProtocolSelectDialog.$(H): SmallSense__ProtocolSelectDialog.st $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractListDialog.$(H) $(INCLUDE_TOP)/stx/goodies/smallsense/SmallSense__AbstractSelectDialog.$(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/InspectorView.$(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/DebugView.$(H) $(INCLUDE_TOP)/stx/libtool/MultiViewToolApplication.$(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__Inspector2.$(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/libtool/WorkspaceApplication.$(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/libview2/ToolApplicationModel.$(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	Thu Feb 12 00:30:40 2015 +0000
+++ b/Make.spec	Fri Feb 13 08:44:44 2015 +0000
@@ -51,6 +51,8 @@
 STCWARNINGS=-warnNonStandard
 
 COMMON_CLASSES= \
+	SmallSense::AbstractDIalog \
+	SmallSense::AbstractSearchProcessor \
 	SmallSense::CodeHighlightingService \
 	SmallSense::CodeNavigationService \
 	SmallSense::CompletionContext \
@@ -63,6 +65,7 @@
 	SmallSense::EditSupport \
 	SmallSense::Info \
 	SmallSense::Manager \
+	SmallSense::NavigatorStep \
 	SmallSense::PO \
 	SmallSense::ParseTreeIndex \
 	SmallSense::ParseTreeIndexEntry \
@@ -86,16 +89,23 @@
 	SmallSense::TypeHolder \
 	stx_goodies_smallsense \
 	SmallSense::AbstractJavaCompletionEngine \
+	SmallSense::AbstractListDialog \
 	SmallSense::ClassInfo \
 	SmallSense::ClassPO \
+	SmallSense::ClassSearchProcessor \
 	SmallSense::ClassType \
+	SmallSense::CompositeProcessor \
 	SmallSense::ConstantPO \
 	SmallSense::GenericEditSupport \
+	SmallSense::ImplementorSearchProcessor \
 	SmallSense::JavaEditSupport \
 	SmallSense::JavaImportPO \
 	SmallSense::MethodBindingPO \
 	SmallSense::MethodInfo \
 	SmallSense::MethodPO \
+	SmallSense::PackagePO \
+	SmallSense::PluggablePO \
+	SmallSense::PluggableSearchProcessor \
 	SmallSense::SmalltalkCompletionEngine \
 	SmallSense::SmalltalkEditSupport \
 	SmallSense::SmalltalkInferencer \
@@ -106,17 +116,26 @@
 	SmallSense::VariableBindingPO \
 	SmallSense::VariablePO \
 	SmallSense::AbstractJavaCompletionEngineSimple \
+	SmallSense::AbstractSearchDialog \
+	SmallSense::AbstractSelectDialog \
 	SmallSense::GroovyEditSupport \
 	SmallSense::JavaCompletionEngine \
 	SmallSense::JavaConstructorPO \
 	SmallSense::MethodKeywordRestPO \
+	SmallSense::ClassSearchDialog \
 	SmallSense::JavaCompletionEngineSimple \
+	SmallSense::MethodSearchDialog \
+	SmallSense::Navigator \
+	SmallSense::PackageSelectDialog \
+	SmallSense::ProtocolSelectDialog \
 	SmallSense::GroovyCompletionEngineSimple \
 
 
 
 
 COMMON_OBJS= \
+    $(OUTDIR_SLASH)SmallSense__AbstractDIalog.$(O) \
+    $(OUTDIR_SLASH)SmallSense__AbstractSearchProcessor.$(O) \
     $(OUTDIR_SLASH)SmallSense__CodeHighlightingService.$(O) \
     $(OUTDIR_SLASH)SmallSense__CodeNavigationService.$(O) \
     $(OUTDIR_SLASH)SmallSense__CompletionContext.$(O) \
@@ -129,6 +148,7 @@
     $(OUTDIR_SLASH)SmallSense__EditSupport.$(O) \
     $(OUTDIR_SLASH)SmallSense__Info.$(O) \
     $(OUTDIR_SLASH)SmallSense__Manager.$(O) \
+    $(OUTDIR_SLASH)SmallSense__NavigatorStep.$(O) \
     $(OUTDIR_SLASH)SmallSense__PO.$(O) \
     $(OUTDIR_SLASH)SmallSense__ParseTreeIndex.$(O) \
     $(OUTDIR_SLASH)SmallSense__ParseTreeIndexEntry.$(O) \
@@ -152,16 +172,23 @@
     $(OUTDIR_SLASH)SmallSense__TypeHolder.$(O) \
     $(OUTDIR_SLASH)stx_goodies_smallsense.$(O) \
     $(OUTDIR_SLASH)SmallSense__AbstractJavaCompletionEngine.$(O) \
+    $(OUTDIR_SLASH)SmallSense__AbstractListDialog.$(O) \
     $(OUTDIR_SLASH)SmallSense__ClassInfo.$(O) \
     $(OUTDIR_SLASH)SmallSense__ClassPO.$(O) \
+    $(OUTDIR_SLASH)SmallSense__ClassSearchProcessor.$(O) \
     $(OUTDIR_SLASH)SmallSense__ClassType.$(O) \
+    $(OUTDIR_SLASH)SmallSense__CompositeProcessor.$(O) \
     $(OUTDIR_SLASH)SmallSense__ConstantPO.$(O) \
     $(OUTDIR_SLASH)SmallSense__GenericEditSupport.$(O) \
+    $(OUTDIR_SLASH)SmallSense__ImplementorSearchProcessor.$(O) \
     $(OUTDIR_SLASH)SmallSense__JavaEditSupport.$(O) \
     $(OUTDIR_SLASH)SmallSense__JavaImportPO.$(O) \
     $(OUTDIR_SLASH)SmallSense__MethodBindingPO.$(O) \
     $(OUTDIR_SLASH)SmallSense__MethodInfo.$(O) \
     $(OUTDIR_SLASH)SmallSense__MethodPO.$(O) \
+    $(OUTDIR_SLASH)SmallSense__PackagePO.$(O) \
+    $(OUTDIR_SLASH)SmallSense__PluggablePO.$(O) \
+    $(OUTDIR_SLASH)SmallSense__PluggableSearchProcessor.$(O) \
     $(OUTDIR_SLASH)SmallSense__SmalltalkCompletionEngine.$(O) \
     $(OUTDIR_SLASH)SmallSense__SmalltalkEditSupport.$(O) \
     $(OUTDIR_SLASH)SmallSense__SmalltalkInferencer.$(O) \
@@ -172,11 +199,18 @@
     $(OUTDIR_SLASH)SmallSense__VariableBindingPO.$(O) \
     $(OUTDIR_SLASH)SmallSense__VariablePO.$(O) \
     $(OUTDIR_SLASH)SmallSense__AbstractJavaCompletionEngineSimple.$(O) \
+    $(OUTDIR_SLASH)SmallSense__AbstractSearchDialog.$(O) \
+    $(OUTDIR_SLASH)SmallSense__AbstractSelectDialog.$(O) \
     $(OUTDIR_SLASH)SmallSense__GroovyEditSupport.$(O) \
     $(OUTDIR_SLASH)SmallSense__JavaCompletionEngine.$(O) \
     $(OUTDIR_SLASH)SmallSense__JavaConstructorPO.$(O) \
     $(OUTDIR_SLASH)SmallSense__MethodKeywordRestPO.$(O) \
+    $(OUTDIR_SLASH)SmallSense__ClassSearchDialog.$(O) \
     $(OUTDIR_SLASH)SmallSense__JavaCompletionEngineSimple.$(O) \
+    $(OUTDIR_SLASH)SmallSense__MethodSearchDialog.$(O) \
+    $(OUTDIR_SLASH)SmallSense__Navigator.$(O) \
+    $(OUTDIR_SLASH)SmallSense__PackageSelectDialog.$(O) \
+    $(OUTDIR_SLASH)SmallSense__ProtocolSelectDialog.$(O) \
     $(OUTDIR_SLASH)SmallSense__GroovyCompletionEngineSimple.$(O) \
     $(OUTDIR_SLASH)extensions.$(O) \
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__AbstractDIalog.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,696 @@
+"
+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 }"
+
+SimpleDialog subclass:#AbstractDIalog
+	instanceVariableNames:'titleHolder buttons buttonsPanelView acceptEnabledHolder
+		optionsVisibleLabelHolder optionsVisibleHolder optionsPanelView'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-Search'
+!
+
+!AbstractDIalog 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
+"
+! !
+
+!AbstractDIalog class methodsFor:'interface specs'!
+
+dialogSpec
+    "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::AbstractDIalog andSelector:#dialogSpec
+     SmallSense::AbstractDIalog new openInterface:#dialogSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+    #(FullSpec
+       name: dialogSpec
+       window: 
+      (WindowSpec
+         label: 'Search...'
+         name: 'Search...'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 708 404)
+         menu: mainMenuSpec
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (ViewSpec
+             name: 'Layput'
+             layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+             component: 
+            (SpecCollection
+               collection: (
+                (UISubSpecification
+                   name: 'Content'
+                   layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+                   minorKey: contentPaneSpec
+                 )
+                (UISubSpecification
+                   name: 'Options'
+                   layout: (LayoutFrame 0 0 -30 1 0 1 0 1)
+                   visibilityChannel: optionsVisibleHolder
+                   minorKey: optionsPaneSpec
+                   postBuildCallback: postBuildOptionsPanelView:
+                 )
+                )
+              
+             )
+           )
+          )
+        
+       )
+     )
+
+    "Modified: / 03-05-2014 / 00:49:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+windowSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:SmallSense::AbstractDIalog andSelector:#windowSpec
+     SmallSense::AbstractDIalog new openInterface:#windowSpec
+     SmallSense::AbstractDIalog open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+    #(FullSpec
+       name: windowSpec
+       window: 
+      (WindowSpec
+         label: 'Search...'
+         name: 'Search...'
+         labelChannel: titleHolder
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 708 404)
+         menu: mainMenuSpec
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (UISubSpecification
+             name: 'ContentPane'
+             layout: (LayoutFrame 10 0 0 0 -10 1 -40 1)
+             minorKey: dialogSpec
+           )
+          (UISubSpecification
+             name: 'ButtonsPane'
+             layout: (LayoutFrame 10 0 -40 1 -10 1 0 1)
+             minorKey: buttonsPaneSpec
+           )
+          )
+        
+       )
+     )
+! !
+
+!AbstractDIalog class methodsFor:'interface specs-content'!
+
+buttonsPaneSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:SmallSense::AbstractDIalog andSelector:#buttonsPaneSpec
+     SmallSense::AbstractDIalog new openInterface:#buttonsPaneSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+    #(FullSpec
+       name: buttonsPaneSpec
+       window: 
+      (WindowSpec
+         label: 'Search...'
+         name: 'Search...'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 708 38)
+         menu: mainMenuSpec
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (HorizontalPanelViewSpec
+             name: 'Buttons'
+             layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+             horizontalLayout: right
+             verticalLayout: center
+             horizontalSpace: 3
+             verticalSpace: 3
+             reverseOrderIfOKAtLeft: true
+             postBuildCallback: postBuildButtonsPanelView:
+           )
+          )
+        
+       )
+     )
+!
+
+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:#optionsPaneSpec
+     SmallSense::AbstractSearchDialog new openInterface:#optionsPaneSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+    #(FullSpec
+       name: contentPaneSpec
+       window: 
+      (WindowSpec
+         label: 'Search ...'
+         name: 'Search Options...'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 634 40)
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (LabelSpec
+             label: 'No content (override #contentPaneSpec)'
+             name: 'NoOptionsLabel'
+             layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+             translateLabel: true
+           )
+          )
+        
+       )
+     )
+
+    "Created: / 02-05-2014 / 00:17:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+optionsPaneSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:SmallSense::AbstractSearchDialog andSelector:#optionsPaneSpec
+     SmallSense::AbstractSearchDialog new openInterface:#optionsPaneSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+    #(FullSpec
+       name: optionsPaneSpec
+       window: 
+      (WindowSpec
+         label: 'Search Options...'
+         name: 'Search Options...'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 634 40)
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (LabelSpec
+             label: 'No options (override #optionsPaneSpec)'
+             name: 'NoOptionsLabel'
+             layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+             translateLabel: true
+           )
+          )
+        
+       )
+     )
+!
+
+optionsShowHideLeftAlignedPaneSpec
+    "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::AbstractDIalog andSelector:#optionsShowHideLeftAlignedPaneSpec
+     SmallSense::AbstractDIalog new openInterface:#optionsShowHideLeftAlignedPaneSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+    #(FullSpec
+       name: optionsShowHideLeftAlignedPaneSpec
+       window: 
+      (WindowSpec
+         label: 'Show / Hide options'
+         name: 'Show / Hide options'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 452 20)
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (LinkButtonSpec
+             label: 'Options'
+             name: 'ShowHideOptions'
+             layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+             translateLabel: true
+             labelChannel: optionsVisibleLabelHolder
+             adjust: left
+             model: doOptionsShowOrHide
+           )
+          )
+        
+       )
+     )
+!
+
+optionsShowHideRightAlignedPaneSpec
+    "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::AbstractDIalog andSelector:#optionsShowHideLeftAlignedPaneSpec
+     SmallSense::AbstractDIalog new openInterface:#optionsShowHideLeftAlignedPaneSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+    #(FullSpec
+       name: optionsShowHideLeftAlignedPaneSpec
+       window: 
+      (WindowSpec
+         label: 'Show / Hide options'
+         name: 'Show / Hide options'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 452 20)
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (LinkButtonSpec
+             label: 'Options'
+             name: 'ShowHideOptions'
+             layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+             translateLabel: true
+             labelChannel: optionsVisibleLabelHolder
+             adjust: right
+             model: doOptionsShowOrHide
+           )
+          )
+        
+       )
+     )
+
+    "Created: / 03-05-2014 / 00:56:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractDIalog class methodsFor:'testing'!
+
+isAbstract
+    ^ self == SmallSense::AbstractDIalog
+! !
+
+!AbstractDIalog methodsFor:'accessing-defaults'!
+
+defaultTitle
+    ^ self subclassResponsibility
+
+    "Created: / 05-05-2014 / 23:38:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractDIalog methodsFor:'actions'!
+
+doOptionsShowOrHide
+    | optionsView optionsViewHeight otherView otherViewIsBelow layout |
+
+    optionsView := optionsPanelView.
+    optionsView superView subViews last == optionsView ifTrue:[ 
+        otherView := optionsView superView subViews before: optionsView.
+        otherViewIsBelow := false.
+    ] ifFalse:[
+        otherView := optionsView superView subViews after: optionsView.
+        otherViewIsBelow := true.
+    ].
+    self optionsVisibleHolder value ifFalse:[ 
+        "/ Show
+        self optionsVisibleHolder value: true.
+        optionsViewHeight := ((self class optionsPaneSpec at: 5) at: 9) at: 5.
+        otherViewIsBelow ifFalse:[
+            layout := otherView layout copy.
+            layout bottomOffset: (layout bottomOffset - optionsViewHeight).  
+            otherView  layout: layout.
+
+            layout := optionsView layout copy.
+            layout topOffset: (layout topOffset - optionsViewHeight).  
+            optionsView  layout: layout.
+        ] ifTrue:[ 
+            layout := optionsView layout copy.
+            layout bottomOffset: (layout bottomOffset + optionsViewHeight).  
+            optionsView  layout: layout.
+
+            layout := otherView layout copy.
+            layout topOffset: (layout topOffset + optionsViewHeight).  
+            otherView  layout: layout.
+        ].
+    ] ifTrue:[ 
+        "/ Hide
+        self optionsVisibleHolder value: false. 
+        optionsViewHeight := ((self class optionsPaneSpec at: 5) at: 9) at: 5.
+        otherViewIsBelow ifFalse:[
+            layout := otherView layout copy.
+            layout bottomOffset: (layout bottomOffset + optionsViewHeight).  
+            otherView  layout: layout.
+
+            layout := optionsView layout copy.
+            layout topOffset: (layout topOffset + optionsViewHeight).  
+            optionsView  layout: layout.
+        ] ifTrue:[ 
+            layout := optionsView layout copy.
+            layout bottomOffset: (layout bottomOffset - optionsViewHeight).  
+            optionsView  layout: layout.
+
+            layout := otherView layout copy.
+            layout topOffset: (layout topOffset - optionsViewHeight).  
+            otherView  layout: layout.
+        ].                                                                    
+    ].
+
+    "Modified: / 03-05-2014 / 00:27:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractDIalog methodsFor:'adding & removing components'!
+
+addButton: aButton
+    buttons add: aButton.
+    buttonsPanelView notNil ifTrue:[ 
+        buttonsPanelView addComponent: aButton.
+    ].
+
+    "Created: / 10-04-2012 / 20:49:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 28-04-2014 / 22:52:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+addButtonAccept
+
+    ^self addButtonAcceptWithLabel: (resources string:'OK')
+
+    "Created: / 28-04-2014 / 22:51:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 29-01-2015 / 07:00:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+addButtonAcceptWithLabel: label
+
+    ^self addButtonWithLabel: label action: [ self doAccept ] enablement: self acceptEnabledHolder.
+
+    "Created: / 29-01-2015 / 06:59:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+addButtonCancel
+
+    ^self addButtonCancelWithLabel: (resources string:'Cancel')
+
+    "Created: / 28-04-2014 / 22:50:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 29-01-2015 / 07:00:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+addButtonCancelWithLabel: label
+
+    ^self addButtonWithLabel: label action: [ self doCancel ]
+
+    "Created: / 29-01-2015 / 07:00:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+addButtonWithLabel: label action: action
+    ^self addButtonWithLabel: label action: action enablement: true.
+
+    "Created: / 10-04-2012 / 20:50:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 28-04-2014 / 22:55:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+addButtonWithLabel: label action: action enablement: enablement
+    | button |
+
+    button := Button label: label action: action.
+    button enableChannel: enablement.
+    ^self addButton: button.
+
+    "Created: / 28-04-2014 / 22:51:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractDIalog methodsFor:'aspects'!
+
+acceptEnabledHolder
+    <resource: #uiAspect>
+
+    "automatically generated by UIPainter ..."
+
+    "*** the code below creates a default model when invoked."
+    "*** (which may not be the one you wanted)"
+    "*** Please change as required and accept it in the browser."
+    "*** (and replace this comment by something more useful ;-)"
+
+    acceptEnabledHolder isNil ifTrue:[
+        acceptEnabledHolder := true asValue.
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/       acceptEnabledHolder addDependent:self.
+"/       acceptEnabledHolder onChangeSend:#acceptEnabledHolderChanged to:self.
+    ].
+    ^ acceptEnabledHolder.
+!
+
+optionsVisibleHolder
+    "return/create the 'optionsVisibleHolder' value holder (automatically generated)"
+
+    optionsVisibleHolder isNil ifTrue:[
+        optionsVisibleHolder := false asValue.
+        optionsVisibleHolder addDependent:self.
+    ].
+    ^ optionsVisibleHolder
+
+    "Modified: / 02-05-2014 / 00:26:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+optionsVisibleHolder:something
+    "set the 'optionsVisibleHolder' value holder (automatically generated)"
+
+    |oldValue newValue|
+
+    optionsVisibleHolder notNil ifTrue:[
+        oldValue := optionsVisibleHolder value.
+        optionsVisibleHolder removeDependent:self.
+    ].
+    optionsVisibleHolder := something.
+    optionsVisibleHolder notNil ifTrue:[
+        optionsVisibleHolder addDependent:self.
+    ].
+    newValue := optionsVisibleHolder value.
+    oldValue ~~ newValue ifTrue:[
+        self update:#value with:newValue from:optionsVisibleHolder.
+    ].
+!
+
+optionsVisibleLabelHolder
+    <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 ;-)"
+
+    optionsVisibleLabelHolder isNil ifTrue:[
+        optionsVisibleLabelHolder := (resources string: 'Options') asValue.
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/       optionsVisibleLabelHolder addDependent:self.
+"/       optionsVisibleLabelHolder onChangeSend:#optionsVisibleLabelHolderChanged to:self.
+    ].
+    ^ optionsVisibleLabelHolder.
+
+    "Modified: / 02-05-2014 / 00:25:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+titleHolder
+    "return/create the 'titleHolder' value holder (automatically generated)"
+
+    titleHolder isNil ifTrue:[
+        titleHolder := self defaultTitle asValue.
+        titleHolder addDependent:self.
+    ].
+    ^ titleHolder
+
+    "Modified: / 05-05-2014 / 23:38:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+titleHolder:something
+    "set the 'titleHolder' value holder (automatically generated)"
+
+    |oldValue newValue|
+
+    titleHolder notNil ifTrue:[
+        oldValue := titleHolder value.
+        titleHolder removeDependent:self.
+    ].
+    titleHolder := something.
+    titleHolder notNil ifTrue:[
+        titleHolder addDependent:self.
+    ].
+    newValue := titleHolder value.
+    oldValue ~~ newValue ifTrue:[
+        self update:#value with:newValue from:titleHolder.
+    ].
+! !
+
+!AbstractDIalog methodsFor:'change & update'!
+
+update:something with:aParameter from:changedObject
+    changedObject == optionsVisibleHolder ifTrue:[
+        self updateOptionsVisibleLabel.
+        ^ self.
+    ].     
+    ^ super update:something with:aParameter from:changedObject
+
+    "Created: / 02-05-2014 / 00:29:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateOptionsVisibleLabel
+    | label |
+
+    label := 
+        self optionsVisibleHolder value 
+            ifTrue:[ resources string: 'Hide options']
+            ifFalse:[ resources string: 'Options'].
+    label := label asText colorizeAllWith: Color blue.
+    self optionsVisibleLabelHolder value: label.
+
+    "Created: / 02-05-2014 / 00:29:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 02-05-2014 / 23:56:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractDIalog methodsFor:'hooks'!
+
+postBuildButtonsPanelView: aHorizontalPanelView
+    buttonsPanelView := aHorizontalPanelView.
+
+    "Created: / 28-04-2014 / 22:42:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+postBuildOptionsPanelView:aView
+    optionsPanelView := aView
+
+    "Modified: / 03-05-2014 / 00:00:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+postBuildWith: anUIBuilder
+    | w |
+
+    super postBuildWith: anUIBuilder.
+    self updateOptionsVisibleLabel.
+
+    buttons isEmpty ifTrue:[ 
+        | savedButtonsPanelView |
+
+        savedButtonsPanelView := buttonsPanelView.
+        buttonsPanelView := nil.                  
+        self addButtonCancel.    
+        self addButtonAccept.   
+        buttonsPanelView := savedButtonsPanelView.
+    ].
+
+    w := buttons inject: 0 into: [ :width :button | width max: (button preferredExtent x) ].
+    w := (w + 20) max: 100.
+    buttons do:[:button | 
+        button preferredExtent: w @ 25.
+        buttonsPanelView addComponent: button.  
+    ].
+
+    "Created: / 28-04-2014 / 22:53:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 29-01-2015 / 07:10:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractDIalog methodsFor:'initialization'!
+
+initialize
+    "Invoked when a new instance is created."
+
+    "/ please change as required (and remove this comment)
+    buttons := OrderedCollection new.
+    "/ buttonsPanelView := nil.
+
+    super initialize.
+
+    "Modified: / 28-04-2014 / 22:49:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractDIalog class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__AbstractListDialog.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,918 @@
+"{ Encoding: utf8 }"
+
+"
+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:'matchingObjectsView matchingObjectsMultiselect
+		matchingObjectsTree matchingObjectsSelectionHolder
+		matchingObjectsLabelHolder matchingObjectsUpdateJob
+		matchPatternHolder matchPatternView environmentHolder
+		filterHolder filter nextSearchStepVisibleHolder'
+	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::AbstractListDialog andSelector:#contentPaneSpec
+     SmallSense::AbstractListDialog 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 24)
+                   usePreferredHeight: true
+                   postBuildCallback: postBuildMatchPatternView:
+                 )
+                (ViewSpec
+                   name: 'Box2'
+                   component: 
+                  (SpecCollection
+                     collection: (
+                      (LabelSpec
+                         label: 'Matching items:'
+                         name: 'MatchingLabel'
+                         layout: (LayoutFrame 0 0 0 0 -25 1 0 1)
+                         translateLabel: true
+                         labelChannel: matchingObjectsLabelHolder
+                         adjust: left
+                       )
+                      (LabelSpec
+                         label: '->'
+                         name: 'Label1'
+                         layout: (LayoutFrame -25 1 0 0 0 1 0 1)
+                         visibilityChannel: nextSearchStepVisibleHolder
+                         translateLabel: true
+                         labelChannel: nextSearchStepLabel
+                       )
+                      )
+                    
+                   )
+                   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 303)
+                   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 isKindOf: PO) and:[ po subject = each ] ] ].
+        matchingObjectsSelection := matchingObjectsSelection reject:[:each | each isNil ].
+    ] ifFalse:[
+        matchingObjectsSelection := matchingObjectsTree root recursiveDetect: [ :po | (po isKindOf: PO) and:[ po subject = selection ] ]
+    ].
+    self matchingObjectsSelection: matchingObjectsSelection.
+
+    "Created: / 10-05-2014 / 00:50:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-01-2015 / 10:55:26 / 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:[
+            self enqueueDelayedAction:[  
+                matchPatternHolder value: completion first withoutNotifying: self.   
+                "/ 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: / 10-01-2015 / 11:07:13 / 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>"
+!
+
+nextSearchStepLabel
+    ^ OperatingSystem isUNIXlike ifTrue:[ '→' ] ifFalse:[ '->' ].
+
+    "Created: / 23-01-2015 / 21:59:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+nextSearchStepVisibleHolder
+    <resource: #uiAspect>
+
+    nextSearchStepVisibleHolder isNil ifTrue:[
+        nextSearchStepVisibleHolder := false asValue.
+    ].
+    ^ nextSearchStepVisibleHolder.
+
+    "Modified: / 23-01-2015 / 22:00:13 / 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'!
+
+delayedUpdateMatchingObjectPOs: matchingPOsArg
+    | rootPO matchPatternString  |
+
+    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: / 12-12-2014 / 23:32:35 / 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:self matchPatternHolder value ])
+
+    "Created: / 08-03-2013 / 14:06:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-01-2015 / 11:06:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateAcceptedValue
+    "Dialog has been accepted (OK pressed). Update accepted value"
+
+    | matchingObjectsSelection |
+
+    matchingObjectsSelection := matchingObjectsSelectionHolder value.
+    (matchingObjectsTree includes: matchingObjectsSelection) ifFalse:[ 
+        matchingObjectsSelection := nil.
+    ].
+    matchingObjectsSelection isEmptyOrNil ifTrue:[
+        (self canCreateMatchingObjectFromString:matchPatternView contents) ifTrue:[
+            acceptedValue := self matchingObjectForString: matchPatternView contents.
+            matchingObjectsMultiselect ifTrue:[ 
+                acceptedValue := Array with: acceptedValue
+            ].
+        ].
+    ] 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: / 29-01-2015 / 06:41:36 / 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>"
+!
+
+updateMatching
+    | environment pattern pos |
+
+    environment := self environment.
+    self matchPatternHolder value notEmptyOrNil ifTrue:[
+        pattern := StringPattern fromString: self matchPatternHolder value.
+        pos := self matchingObjectPOsForPattern: pattern.
+        self updateMatchingObjectPOs: pos.
+        self updateMatchingLabelToNormal
+    ] ifFalse:[
+        self updateMatchingIgnorePattern
+    ].
+
+    "Created: / 12-12-2014 / 23:38:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-01-2015 / 06:36:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateMatchingIgnorePattern
+    self updateMatchingObjectPOs: (self matchingObjectPOsForPattern: nil)
+
+    "Created: / 12-12-2014 / 23:39:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 13-12-2014 / 08:34:36 / 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>"
+!
+
+updateMatchingObjectPOs: matchingPOsArg
+    self enqueueMessage: #delayedUpdateMatchingObjectPOs: for: self arguments: (Array with: matchingPOsArg)
+
+    "Created: / 12-12-2014 / 23:32:53 / 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 updateMatchingObjectPOs: items.
+
+    "Created: / 11-03-2013 / 14:33:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-12-2014 / 23:32:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractListDialog methodsFor:'event processing'!
+
+handlesKeyPress: key inView: view
+    view == matchingObjectsView ifTrue:[ 
+        ^ key == #CursorLeft or:[ key == #CursorRight ]
+    ].
+    ^ false
+
+    "Created: / 23-01-2015 / 22:35:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+keyPress: key x:x y:y view: view
+    view == matchingObjectsView ifTrue:[ 
+        key == #CursorRight ifTrue:[ 
+            ^ self keyPressCursorRightInMatchingObjectsView.
+        ].
+        key == #CursorLeft ifTrue:[ 
+            ^ self keyPressCursorLeftInMatchingObjectsView.
+        ].
+    ].
+    ^ false
+
+    "Created: / 23-01-2015 / 22:36:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+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>"
+!
+
+keyPressCursorLeftInMatchingObjectsView
+    matchingObjectsView windowGroup focusView:matchPatternView byTab:true.
+    matchPatternView keyPress: #CursorLeft x: 0 y: 0.
+    ^ true
+
+    "Created: / 23-01-2015 / 22:41:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+keyPressCursorRightInMatchingObjectsView
+    matchingObjectsView windowGroup focusView:matchPatternView byTab:true.
+    matchPatternView keyPress: #CursorRight x: 0 y: 0.
+    ^ true
+
+    "Created: / 23-01-2015 / 22:41:24 / 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.
+
+    self updateMatchingIgnorePattern.
+    self updateAcceptEnabled.
+    self updateMatchPatternHolderFromSelection.
+    super commonPostBuild
+
+    "Created: / 25-11-2014 / 13:23:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-12-2014 / 23:38:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+commonPreOpen
+    | selection |
+    selection := self matchingObjectsSelection.
+    selection notEmptyOrNil ifTrue:[ 
+        matchingObjectsView makeSelectionVisible
+    ].
+    super commonPreOpen
+
+    "Created: / 09-01-2015 / 11:09:48 / 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 updateMatching].
+    matchingObjectsMultiselect := false.
+
+    "Modified: / 13-12-2014 / 08:46:55 / 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>"
+!
+
+matchingObjectPOsForPattern: pattern
+    ^ self subclassResponsibility
+
+    "Created: / 13-12-2014 / 08:33:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractListDialog class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__AbstractSearchDialog.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,192 @@
+"
+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 }"
+
+AbstractListDialog subclass:#AbstractSearchDialog
+	instanceVariableNames:'recentlySearchedPatterns recentlySearchedObjectPOs processor'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-Search'
+!
+
+AbstractSearchDialog class instanceVariableNames:'recentlySearchedPatterns'
+
+"
+ The following class instance variables are inherited by this class:
+
+	SmallSense::AbstractListDialog - 
+	SmallSense::AbstractDIalog - 
+	SimpleDialog - 
+	ApplicationModel - ClassResources
+	Model - 
+	Object - 
+"
+!
+
+!AbstractSearchDialog 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
+"
+! !
+
+!AbstractSearchDialog class methodsFor:'accessing'!
+
+recentlySearchedPatterns
+    recentlySearchedPatterns isNil ifTrue:[
+        recentlySearchedPatterns := OrderedSet new.
+    ].
+    ^ recentlySearchedPatterns
+
+    "Created: / 28-04-2014 / 23:13:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog class methodsFor:'queries'!
+
+isAbstract
+    "Return if this class is an abstract class.
+     True is returned here for myself only; false for subclasses.
+     Abstract subclasses must redefine again."
+
+    ^ self == SmallSense::AbstractSearchDialog.
+! !
+
+!AbstractSearchDialog class methodsFor:'remembering'!
+
+rememberSearchPattern: pattern
+    self recentlySearchedPatterns add: pattern
+
+    "Created: / 11-01-2015 / 06:16:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog methodsFor:'accessing'!
+
+processor
+    ^ processor
+!
+
+processor:aAbstractSearchProcessor
+    processor := aAbstractSearchProcessor.
+! !
+
+!AbstractSearchDialog methodsFor:'accessing - private'!
+
+matchingObjectForString:aString
+    "Creates a new object from given string. Called only when
+     #canCreateMatchingObjectFromString: returns true"
+
+    ^ self shouldNotImplement
+
+    "Created: / 10-01-2015 / 10:24:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog methodsFor:'change & update'!
+
+update:something with:aParameter from:changedObject
+    "Invoked when an object that I depend upon sends a change notification."
+
+    changedObject == accept ifTrue:[
+        accept value ifTrue:[
+            self updateAcceptedValue.
+            self class rememberSearchPattern: self pattern.
+            matchingObjectsMultiselect ifTrue:[
+                self processor rememberSearchObjectPOs: matchingObjectsSelectionHolder value.
+            ] ifFalse:[
+                self processor rememberSearchObjectPO: matchingObjectsSelectionHolder value.
+            ].
+        ].
+        ^ self.
+    ].  
+    super update:something with:aParameter from:changedObject
+
+    "Created: / 08-12-2014 / 02:36:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-01-2015 / 06:18:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateMatchingIgnorePattern
+
+    "/ Show recent searches rather than all items (there may be a lot...)
+    self updateMatchingObjectPOs: processor recentlySearchedObjectPOs.
+    self updateMatchingLabelToRecentSearches
+
+    "Created: / 12-12-2014 / 23:39:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-01-2015 / 06:33:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog methodsFor:'hooks'!
+
+commonPostBuild
+"/    self updateMatching.
+"/    recentlySearchedPatterns notEmptyOrNil ifTrue:[
+"/        matchPatternView contents: self recentlySearchedPatterns last.
+"/        matchPatternView selectAll.
+"/    ].
+    recentlySearchedObjectPOs notEmptyOrNil ifTrue:[
+        self updateMatchingObjectPOs: recentlySearchedObjectPOs asArray reverse.
+        self updateMatchingLabelToRecentSearches.
+    ].
+    super commonPostBuild
+
+    "Created: / 25-11-2014 / 13:23:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 13-12-2014 / 08:28:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog methodsFor:'queries'!
+
+canSelect: selection
+    "raise an error: must be redefined in concrete subclass(es)"
+
+    ^ (selection isKindOf: PO) and:[ selection isSmallSensePluggablePO not or:[ selection subject ~~ processor ] ]
+
+    "Created: / 10-01-2015 / 10:23:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog methodsFor:'searching'!
+
+matchingObjectPOsForPattern: pattern
+    ^ processor matchingObjectPOsForPattern: pattern filter: filter inEnvironment: self environment
+
+    "Created: / 13-12-2014 / 08:33:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchDialog class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__AbstractSearchProcessor.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,178 @@
+"
+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 }"
+
+Object subclass:#AbstractSearchProcessor
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-Search'
+!
+
+AbstractSearchProcessor class instanceVariableNames:'recentlySearchedObjectPOs'
+
+"
+ No other class instance variables are inherited by this class.
+"
+!
+
+!AbstractSearchProcessor 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
+"
+! !
+
+!AbstractSearchProcessor class methodsFor:'accessing'!
+
+recentlySearchedObjectPOs
+    recentlySearchedObjectPOs isNil ifTrue:[
+        recentlySearchedObjectPOs := OrderedSet new.
+    ].
+    ^ recentlySearchedObjectPOs
+
+    "Created: / 13-12-2014 / 08:23:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchProcessor 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::AbstractSearchProcessor.
+! !
+
+!AbstractSearchProcessor class methodsFor:'remembering'!
+
+rememberSearchObjectPO: aPO
+    self recentlySearchedObjectPOs add: aPO
+
+    "Created: / 11-01-2015 / 06:19:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchProcessor methodsFor:'accessing'!
+
+canDoNextStepFor: aPO
+    "Return true if navigation can take a next step for given PO
+     (i.e., if user can 'dive in'), false otherwise.
+     To be overriden by subclasses to avoid excessive processor creation."
+
+    ^ (self processorForNextStepFor: aPO) notNil.
+
+    "Created: / 23-01-2015 / 22:16:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+processorForNextStepFor: aPO
+    "Return a processor for next navigation step for given PO.
+     If nil is returned, then there's no next step (i.e.,
+     a user connot 'dive in')"
+
+    ^ nil
+
+    "Created: / 23-01-2015 / 22:04:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+recentlySearchedObjectPOs
+    ^ self class recentlySearchedObjectPOs asArray reversed
+
+    "Created: / 11-01-2015 / 06:21:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchProcessor methodsFor:'accessing - presentation'!
+
+label
+    "Return a label for this processor. This one is used as section label
+     in Spotter"
+
+    ^ self subclassResponsibility
+
+    "Created: / 10-01-2015 / 06:40:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchProcessor methodsFor:'remembering'!
+
+rememberSearchObjectPO: po
+    self class rememberSearchObjectPO: po
+
+    "Created: / 11-01-2015 / 06:19:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+rememberSearchObjectPOs: pos
+    pos do:[:po | self rememberSearchObjectPO: po ]
+
+    "Created: / 11-01-2015 / 06:19:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSearchProcessor methodsFor:'searching'!
+
+matchingObjectPOsFor: objects
+
+    self subclassResponsibility.
+
+    "Created: / 30-04-2014 / 09:46:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectPOsForPattern:pattern filter: filter inEnvironment:environment
+    ^ self matchingObjectPOsFor: 
+        (self matchingObjectsForPattern: pattern filter: filter inEnvironment: environment).
+
+    "Created: / 12-12-2014 / 23:31:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectsForPattern:pattern filter: filter inEnvironment:environment
+    | objects |
+
+    objects := self matchingObjectsForPattern:pattern filter: filter inEnvironment:environment relax: 1.
+    objects notEmptyOrNil ifTrue:[ ^ objects ].
+
+    objects := self matchingObjectsForPattern:pattern filter: filter inEnvironment:environment relax: 2.
+    objects notEmptyOrNil ifTrue:[ ^ objects ].
+
+    objects := self matchingObjectsForPattern:pattern filter: filter inEnvironment:environment relax: 3.
+    ^ objects
+
+    "Created: / 12-12-2014 / 21:23:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectsForPattern:pattern filter: filter inEnvironment:environment relax: level
+    self subclassResponsibility
+
+    "Created: / 12-12-2014 / 21:22:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__AbstractSelectDialog.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,89 @@
+"
+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 }"
+
+AbstractListDialog subclass:#AbstractSelectDialog
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-Search'
+!
+
+!AbstractSelectDialog 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
+"
+! !
+
+!AbstractSelectDialog 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::AbstractSelectDialog.
+! !
+
+!AbstractSelectDialog methodsFor:'accessing-defaults'!
+
+defaultTitle
+    ^ (resources string: 'Select...')
+
+    "Created: / 13-12-2014 / 12:57:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractSelectDialog methodsFor:'searching'!
+
+matchingObjectPOsForPattern: pattern
+    | pos |
+
+    1 to: 3 do:[:i |
+        pos := self matchingObjectPOsForPattern: pattern relax: i.
+        pos notEmptyOrNil ifTrue:[ ^ pos ]
+    ].
+
+    "Created: / 13-12-2014 / 08:39:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectPOsForPattern: pattern relax: relax
+    self subclassResponsibility
+
+    "Created: / 13-12-2014 / 08:40:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/SmallSense__ClassPO.st	Thu Feb 12 00:30:40 2015 +0000
+++ b/SmallSense__ClassPO.st	Fri Feb 13 08:44:44 2015 +0000
@@ -164,6 +164,19 @@
     "Modified: / 20-05-2014 / 11:41:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!ClassPO methodsFor:'accessing-private'!
+
+subject
+    "Return the real object for which the receiver
+     is a presentor.
+
+     For internal usage only."   
+
+    ^ self klass
+
+    "Created: / 01-10-2014 / 23:48:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !ClassPO methodsFor:'converting'!
 
 asString
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__ClassSearchDialog.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,226 @@
+"
+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 }"
+
+AbstractSearchDialog subclass:#ClassSearchDialog
+	instanceVariableNames:'matchFullyQualifiedClassNameHolder
+		matchFullyQualifiedClassNameEnabledHolder
+		showOnlyInterfacesHolder'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-Search'
+!
+
+!ClassSearchDialog 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
+"
+! !
+
+!ClassSearchDialog class methodsFor:'interface specs-content'!
+
+optionsPaneSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:SmallSense::ClassSearchDialog andSelector:#optionsPaneSpec
+     SmallSense::ClassSearchDialog new openInterface:#optionsPaneSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+    #(FullSpec
+       name: optionsPaneSpec
+       window: 
+      (WindowSpec
+         label: 'Search Options...'
+         name: 'Search Options...'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 634 25)
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (VerticalPanelViewSpec
+             name: 'Options'
+             layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+             horizontalLayout: fit
+             verticalLayout: fit
+             horizontalSpace: 3
+             verticalSpace: 3
+             component: 
+            (SpecCollection
+               collection: (
+                (CheckBoxSpec
+                   label: 'Match fully qualified class names'
+                   name: 'CheckBox1'
+                   model: matchFullyQualifiedClassNameHolder
+                   extent: (Point 634 25)
+                 )
+                )
+              
+             )
+           )
+          )
+        
+       )
+     )
+! !
+
+!ClassSearchDialog methodsFor:'accessing-defaults'!
+
+defaultTitle
+    ^ (resources string: 'Search Class...')
+
+    "Created: / 05-05-2014 / 23:39:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ClassSearchDialog methodsFor:'aspects'!
+
+matchFullyQualifiedClassNameEnabledHolder
+    <resource: #uiAspect>
+
+    "automatically generated by UIPainter ..."
+
+    "*** the code below creates a default model when invoked."
+    "*** (which may not be the one you wanted)"
+    "*** Please change as required and accept it in the browser."
+    "*** (and replace this comment by something more useful ;-)"
+
+    matchFullyQualifiedClassNameEnabledHolder isNil ifTrue:[
+        matchFullyQualifiedClassNameEnabledHolder := true asValue.
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/       matchFullyQualifiedClassNameEnabledHolder addDependent:self.
+"/       matchFullyQualifiedClassNameEnabledHolder onChangeSend:#matchFullyQualifiedClassNameEnabledHolderChanged to:self.
+    ].
+    ^ matchFullyQualifiedClassNameEnabledHolder.
+!
+
+matchFullyQualifiedClassNameHolder
+    <resource: #uiAspect>
+
+
+    matchFullyQualifiedClassNameHolder isNil ifTrue:[
+        matchFullyQualifiedClassNameHolder := (AspectAdaptor forAspect:#matchFullyQualifiedClassName) subject: processor.   
+        matchFullyQualifiedClassNameHolder addDependent:self.
+    ].
+    ^ matchFullyQualifiedClassNameHolder.
+
+    "Modified: / 12-12-2014 / 23:15:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+showOnlyInterfacesHolder
+    "return/create the 'showOnlyIntefacesHolder' value holder (automatically generated)"
+    
+    showOnlyInterfacesHolder isNil ifTrue:[
+        showOnlyInterfacesHolder := false asValue.
+        showOnlyInterfacesHolder addDependent:self.
+    ].
+    ^ showOnlyInterfacesHolder
+
+    "Modified: / 24-04-2014 / 23:42:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+showOnlyInterfacesHolder:something 
+    "set the 'showOnlyIntefacesHolder' value holder (automatically generated)"
+    
+    | oldValue  newValue |
+
+    showOnlyInterfacesHolder notNil ifTrue:[
+        oldValue := showOnlyInterfacesHolder value.
+        showOnlyInterfacesHolder removeDependent:self.
+    ].
+    showOnlyInterfacesHolder := something.
+    showOnlyInterfacesHolder notNil ifTrue:[
+        showOnlyInterfacesHolder addDependent:self.
+    ].
+    newValue := showOnlyInterfacesHolder value.
+    oldValue ~~ newValue ifTrue:[
+        self 
+            update:#value
+            with:newValue
+            from:showOnlyInterfacesHolder.
+    ].
+! !
+
+!ClassSearchDialog methodsFor:'change & update'!
+
+update:something with:aParameter from:changedObject
+    changedObject == matchFullyQualifiedClassNameHolder ifTrue:[
+        matchingObjectsUpdateJob restart.
+        ^ self.
+    ].
+    changedObject == showOnlyInterfacesHolder ifTrue:[
+        matchingObjectsUpdateJob restart.
+        ^ self.
+    ].  
+
+    ^ super update:something with:aParameter from:changedObject
+
+    "Created: / 27-04-2014 / 23:45:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ClassSearchDialog methodsFor:'initialization'!
+
+initialize  
+    super initialize.
+    processor := ClassSearchProcessor new.
+
+    "Created: / 13-12-2014 / 08:46:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ClassSearchDialog methodsFor:'queries'!
+
+hasOptions
+    ^ true
+
+    "Created: / 09-05-2014 / 23:59:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+showOnlyInterfaces
+    ^self showOnlyInterfacesHolder value
+
+    "Created: / 18-03-2013 / 10:40:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-03-2013 / 13:32:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__ClassSearchProcessor.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,132 @@
+"
+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 }"
+
+AbstractSearchProcessor subclass:#ClassSearchProcessor
+	instanceVariableNames:'matchFullyQualifiedClassName'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-Search'
+!
+
+!ClassSearchProcessor 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
+"
+! !
+
+!ClassSearchProcessor methodsFor:'accessing'!
+
+matchFullyQualifiedClassName
+    ^ matchFullyQualifiedClassName
+!
+
+matchFullyQualifiedClassName:something
+    matchFullyQualifiedClassName := something.
+! !
+
+!ClassSearchProcessor methodsFor:'accessing - presentation'!
+
+label
+    "Return a label for this processor. This one is used as section label
+     in Spotter"
+
+    ^ 'Classes'
+
+    "Created: / 10-01-2015 / 06:41:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ClassSearchProcessor methodsFor:'searching'!
+
+matchingObjectPOsFor: objects
+    | matchQualified |
+
+    matchQualified := matchFullyQualifiedClassName == true.
+    matchQualified ifTrue:[
+        objects sort:[:a :b | a displayString < b displayString ].
+    ] ifFalse:[
+        objects sort:[:a :b | a nameWithoutPrefix < b nameWithoutPrefix ].
+    ].
+
+    ^ objects collect:[:each | 
+        (ClassPO new)
+            klass:each;
+            showPrefix:matchQualified
+    ].
+
+    "Created: / 30-04-2014 / 09:50:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-12-2014 / 23:10:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectsForPattern:pattern filter: filter inEnvironment:environment relax: level 
+    | matching matchQualified |
+
+    matching := OrderedCollection new.
+    matchFullyQualifiedClassName := (matchFullyQualifiedClassName == true) or:[ pattern asString includesString:'::' ].
+    matchQualified := matchFullyQualifiedClassName. 
+    pattern notNil ifTrue:[
+        matchQualified ifFalse:[
+            environment 
+                allClassesDo:[:cls | 
+                    ((filter isNil or:[filter value: cls]) and:[(pattern match:cls nameWithoutPrefix relax: level)]) ifTrue:[
+                        matching add:cls.
+                    ].
+                ].
+        ] ifTrue:[
+            environment 
+                allClassesDo:[:cls | 
+                    ((filter isNil or:[filter value: cls]) and:[(pattern match:cls displayString relax: level)]) ifTrue:[
+                        matching add:cls
+                    ]
+                ].
+        ]
+    ].
+
+    ^ matching
+
+    "Created: / 12-12-2014 / 21:24:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 23-01-2015 / 17:43:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ClassSearchProcessor class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__CompositeProcessor.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,224 @@
+"
+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 }"
+
+AbstractSearchProcessor subclass:#CompositeProcessor
+	instanceVariableNames:'processors'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-Search'
+!
+
+!CompositeProcessor 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
+"
+! !
+
+!CompositeProcessor class methodsFor:'instance creation'!
+
+with: processor1
+    ^ self withAll: (Array with: processor1)
+
+    "Created: / 10-01-2015 / 07:00:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+with: processor1 with: processor2
+    ^ self withAll: (Array with: processor1 with: processor2)
+
+    "Created: / 10-01-2015 / 07:00:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+with: processor1 with: processor2 with: processor3
+    ^ self withAll: (Array with: processor1 with: processor2 with: processor3)
+
+    "Created: / 10-01-2015 / 07:00:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+withAll: processors
+    ^ self new processors: processors
+
+    "Created: / 10-01-2015 / 07:00:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CompositeProcessor methodsFor:'accessing'!
+
+canDoNextStepFor: aPO
+    "Return true if navigation can take a next step for given PO
+     (i.e., if user can 'dive in'), false otherwise.
+     To be overriden by subclasses to avoid excessive processor creation."
+
+    ^ aPO context canDoNextStepFor: aPO
+
+    "Created: / 23-01-2015 / 22:26:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+processorForNextStepFor: aPO
+    "Return a processor for next navigation step for given PO.
+     If nil is returned, then there's no next step (i.e.,
+     a user connot 'dive in')"
+
+    ^ aPO context processorForNextStepFor: aPO
+
+    "Created: / 23-01-2015 / 22:26:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+processors
+    ^ processors
+!
+
+processors:aCollection
+    processors := aCollection asArray
+
+    "Modified: / 10-01-2015 / 06:59:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+recentlySearchedObjectPOs
+    | pos |
+
+    pos := OrderedCollection new: processors size.
+    processors do:[:processor  |
+        | bucket |
+
+        bucket := processor recentlySearchedObjectPOs.
+        bucket notEmptyOrNil ifTrue:[ 
+            | sectionPO bucketPOs|
+
+            sectionPO := PluggablePO new.
+            pos add: sectionPO.
+            sectionPO label: ((processor label bindWith: processor label with: bucket size) asText colorizeAllWith: Color gray).
+            sectionPO subject: self. "/ used as a marker that this is a group PO
+            bucketPOs := bucket.
+            bucketPOs do:[:e | e context: processor ].
+            false ifTrue:[ 
+                sectionPO children: bucketPOs.
+                sectionPO expand
+            ] ifFalse:[ 
+                pos addAll: bucketPOs.
+            ].
+
+
+
+        ].
+    ].
+    ^ pos
+
+    "Created: / 11-01-2015 / 06:25:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CompositeProcessor methodsFor:'accessing - presentation'!
+
+label
+    "Return a label for this processor. This one is used as section label
+     in Spotter"
+
+    processors notEmptyOrNil ifTrue:[ 
+        processors size == 1 ifTrue:[ ^ processors anElement label ].
+        processors size == 2 ifTrue:[ ^ processors first label , ' & ' , processors second label ].
+        processors size == 2 ifTrue:[ ^ processors first label , ', ', processors second label, ' & ' , processors third label ].
+        ^ processors size , ' search processors'
+    ] ifFalse:[ 
+        ^ 'Empty'
+    ].
+
+    "Created: / 10-01-2015 / 06:44:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CompositeProcessor methodsFor:'remembering'!
+
+rememberSearchObjectPO: po
+    po context rememberSearchObjectPO: po
+
+    "Created: / 11-01-2015 / 06:22:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CompositeProcessor methodsFor:'searching'!
+
+matchingObjectPOsFor: objects
+    ^ self matchingObjectPOsFor: objects label: '%1 (%2 matches)'
+
+    "Created: / 10-01-2015 / 06:54:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-01-2015 / 06:24:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectPOsFor: objects label: label
+
+    | pos |
+
+    objects isEmptyOrNil ifTrue:[ ^ #() ].
+    pos := OrderedCollection new: processors size.
+    processors with: objects do:[:processor :bucket |
+        bucket notEmptyOrNil ifTrue:[ 
+            | sectionPO bucketPOs|
+
+            sectionPO := PluggablePO new.
+            pos add: sectionPO.
+            sectionPO label: ((label bindWith: processor label with: bucket size) asText colorizeAllWith: Color gray).
+            sectionPO subject: self. "/ used as a marker that this is a group PO
+            bucketPOs := processor matchingObjectPOsFor: bucket.
+            bucketPOs do:[:e | e context: processor ].
+            false ifTrue:[ 
+                sectionPO children: bucketPOs.
+                sectionPO expand
+            ] ifFalse:[ 
+                pos addAll: bucketPOs.
+            ].
+
+
+
+        ].
+    ].
+    ^ pos
+
+    "Created: / 11-01-2015 / 06:24:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectsForPattern:pattern filter: filter inEnvironment:environment
+    ^ (processors ? #()) collect: [ :processor | processor matchingObjectsForPattern:pattern filter: filter inEnvironment:environment ]
+
+    "Created: / 10-01-2015 / 06:47:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectsForPattern:pattern filter:filter inEnvironment:environment relax:level
+    "superclass SmallSense::AbstractSearchProcessor says that I am responsible to implement this method"
+
+    ^ self shouldNotImplement
+
+    "Created: / 10-01-2015 / 06:45:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/SmallSense__ConstantPO.st	Thu Feb 12 00:30:40 2015 +0000
+++ b/SmallSense__ConstantPO.st	Fri Feb 13 08:44:44 2015 +0000
@@ -69,6 +69,19 @@
     "Created: / 20-05-2014 / 11:32:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!ConstantPO methodsFor:'accessing-private'!
+
+subject
+    "Return the real object for which the receiver
+     is a presentor.
+     
+     For internal usage only."
+
+    ^ self shouldNotImplement
+
+    "Created: / 20-06-2014 / 11:10:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !ConstantPO methodsFor:'testing'!
 
 isSmallSenseConstantPO
--- a/SmallSense__GroovyCompletionEngineSimple.st	Thu Feb 12 00:30:40 2015 +0000
+++ b/SmallSense__GroovyCompletionEngineSimple.st	Fri Feb 13 08:44:44 2015 +0000
@@ -5,7 +5,7 @@
 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. 
+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
@@ -37,7 +37,7 @@
 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. 
+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
@@ -53,7 +53,7 @@
 !GroovyCompletionEngineSimple class methodsFor:'accessing-definitions'!
 
 patternDefinitionsForAnalysis
-    ^ super patternDefinitionsForAnalysis , { 
+    ^ super patternDefinitionsForAnalysis , {
         #analyzeLocalDef1:              .  '[[:def:]] [[:Identifier:]] ( = | ; )' .
     }
 
@@ -65,8 +65,8 @@
 !
 
 patternDefinitionsForCompletion
-    
-    ^super patternDefinitionsForCompletion , { 
+
+    ^super patternDefinitionsForCompletion , {
         #completeLocalDef:              . '( ', PatternPrimitiveType , ' | ' , PatternReferenceType , ' | [[:def:]] ) [[:Identifier:]] [[:CARET:]]' .
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__ImplementorSearchProcessor.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,146 @@
+"
+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 }"
+
+AbstractSearchProcessor subclass:#ImplementorSearchProcessor
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-Search'
+!
+
+!ImplementorSearchProcessor 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
+"
+! !
+
+!ImplementorSearchProcessor methodsFor:'accessing'!
+
+canDoNextStepFor: aPO
+    "Return true if navigation can take a next step for given PO
+     (i.e., if user can 'dive in'), false otherwise.
+     To be overriden by subclasses to avoid excessive processor creation."
+
+    self assert: aPO class == MethodPO.
+    ^ aPO classes size > 1
+
+    "Created: / 23-01-2015 / 22:17:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+processorForNextStepFor: aPO
+    "Return a processor for next navigation step for given PO.
+     If nil is returned, then there's no next step (i.e.,
+     a user connot 'dive in')"
+
+    | selector |
+
+    self assert: aPO class == MethodPO.
+    aPO classes size == 1 ifTrue:[ ^ nil ].
+    selector := aPO selector.
+    ^ PluggableSearchProcessor 
+            search:
+                [ :pattern :filter :env :level | 
+
+                    ((aPO classes 
+                        select:[:cls | pattern isNil or:[ pattern match: cls nameWithoutNameSpacePrefix relax: level ] ])  
+                        asArray sort:[ :a :b | a nameWithoutNameSpacePrefix < b nameWithoutNameSpacePrefix ])
+                        collect:[ :cls | cls compiledMethodAt: selector ]
+
+                ]
+            presentation:             
+                [ :method | 
+                    PluggablePO new
+                        label: (method mclass nameWithoutNameSpacePrefix) , ((' >> ', selector) asText colorizeAllWith: Color gray darker);
+                        subject: method.                        
+                ].
+
+    "Created: / 23-01-2015 / 22:06:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 24-01-2015 / 00:44:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ImplementorSearchProcessor methodsFor:'accessing - presentation'!
+
+label
+    "Return a label for this processor. This one is used as section label
+     in Spotter"
+
+    ^ 'Implementors'
+
+    "Created: / 10-01-2015 / 06:41:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ImplementorSearchProcessor methodsFor:'searching'!
+
+matchingObjectPOsFor: objects
+    | pos |
+
+    pos := OrderedCollection new: objects size.
+    objects keysAndValuesDo: [ :selector :classes |
+        pos add: (PO forClasses: classes selector: selector )
+
+    ].
+    ^ pos sort:[ :a :b | a label == b label ifTrue:[ a classes anElement name < b classes anElement name] ifFalse:[ a label < b label ] ]
+
+    "Created: / 30-04-2014 / 09:50:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-12-2014 / 23:50:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectsForPattern:pattern filter: filter inEnvironment:environment relax: level 
+    | matching |
+
+    matching := Dictionary new.
+    pattern notNil ifTrue:[
+        environment 
+            allMethodsDo:[:mthd |
+                | selector name |
+
+                name := selector := mthd selector.
+                mthd isJavaMethod ifTrue:[ name := name upTo: $( ].
+                ((filter isNil or:[filter value: mthd]) and:[(pattern match:name relax: level)]) ifTrue:[
+                    (matching at: selector ifAbsentPut: [ Set new ]) add: mthd mclass
+                ].
+            ].
+    ].
+
+    ^ matching
+
+    "Created: / 12-12-2014 / 21:24:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-12-2014 / 23:51:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/SmallSense__MethodPO.st	Thu Feb 12 00:30:40 2015 +0000
+++ b/SmallSense__MethodPO.st	Fri Feb 13 08:44:44 2015 +0000
@@ -87,9 +87,16 @@
 !
 
 hint
-    ^ (classes collect:[:each | each nameWithoutPrefix ]) asArray asStringWith:' , '.
+    classes size == 1 ifTrue:[ 
+        ^ classes anElement nameWithoutNameSpacePrefix.
+    ].
+    classes size < 3 ifTrue:[ 
+        ^ (classes collect:[:each | each nameWithoutPrefix ]) asArray asStringWith:' , '.
+    ].
+    ^ '%1 implementors' bindWith: classes size.
 
     "Created: / 20-05-2014 / 12:27:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 23-01-2015 / 19:15:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 label
@@ -144,6 +151,23 @@
     "Modified: / 20-05-2014 / 10:29:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!MethodPO methodsFor:'accessing-private'!
+
+subject
+    "Return the real object for which the receiver
+     is a presentor.
+     
+     For internal usage only."
+
+    classes size ~~ 1 ifTrue:[ 
+        ^ classes collect:[ :cls | cls compiledMethodAt: selector ]
+    ].
+    ^ classes anElement compiledMethodAt: selector
+
+    "Created: / 20-06-2014 / 11:11:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 14-01-2015 / 16:20:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !MethodPO methodsFor:'initialization'!
 
 initializeWithClass: aClass selector: aSymbol
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__MethodSearchDialog.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,132 @@
+"
+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 }"
+
+AbstractSearchDialog subclass:#MethodSearchDialog
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-Search'
+!
+
+!MethodSearchDialog 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
+"
+! !
+
+!MethodSearchDialog class methodsFor:'interface specs-content'!
+
+optionsPaneSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:SmallSense::ClassSearchDialog andSelector:#optionsPaneSpec
+     SmallSense::ClassSearchDialog new openInterface:#optionsPaneSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+    #(FullSpec
+       name: optionsPaneSpec
+       window: 
+      (WindowSpec
+         label: 'Search Options...'
+         name: 'Search Options...'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 634 25)
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (VerticalPanelViewSpec
+             name: 'Options'
+             layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+             horizontalLayout: fit
+             verticalLayout: fit
+             horizontalSpace: 3
+             verticalSpace: 3
+             component: 
+            (SpecCollection
+               collection: (
+                (CheckBoxSpec
+                   label: 'Match fully qualified class names'
+                   name: 'CheckBox1'
+                   model: matchFullyQualifiedClassNameHolder
+                   extent: (Point 634 25)
+                 )
+                )
+              
+             )
+           )
+          )
+        
+       )
+     )
+! !
+
+!MethodSearchDialog methodsFor:'accessing-defaults'!
+
+defaultProcessorClass
+    "superclass SmallSense::AbstractListDialog says that I am responsible to implement this method"
+
+    ^ ImplementorSearchProcessor
+
+    "Created: / 12-12-2014 / 23:21:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+defaultTitle
+    ^ (resources string: 'Search Method...')
+
+    "Created: / 05-05-2014 / 23:39:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!MethodSearchDialog methodsFor:'initialization'!
+
+initialize  
+    super initialize.
+    processor := ImplementorSearchProcessor new.
+
+    "Created: / 13-12-2014 / 08:46:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__Navigator.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,189 @@
+"
+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 }"
+
+AbstractSearchDialog subclass:#Navigator
+	instanceVariableNames:'steps'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-Search'
+!
+
+!Navigator 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
+"
+! !
+
+!Navigator class methodsFor:'opening'!
+
+open
+    | result |    
+
+    result := self new open.
+    result isBehavior ifTrue:[ 
+        UserPreferences current systemBrowserClass openInClass:result selector: nil.
+        ^ self
+    ].
+    result isMethod ifTrue:[ 
+        UserPreferences current systemBrowserClass openInClass: result mclass selector: result selector.
+        ^ self
+    ].
+    result isCollection ifTrue:[ 
+        (result allSatisfy:[:e|e isMethod]) ifTrue:[ 
+            UserPreferences current systemBrowserClass 
+                browseMethods:result 
+                title:(self classResources string: 'Implementors of %1' with: result anElement selector storeString) 
+                sort:true.
+        ].
+        ^ self
+    ].
+    ^ self
+
+    "Created: / 25-01-2015 / 12:46:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-02-2015 / 11:13:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!Navigator methodsFor:'change & update'!
+
+update:something with:aParameter from:changedObject
+    "Invoked when an object that I depend upon sends a change notification."
+
+    changedObject == matchingObjectsSelectionHolder ifTrue:[
+        self updateMextSearchStepVisibility.
+    ].
+    ^ super update:something with:aParameter from:changedObject
+
+    "Created: / 23-01-2015 / 22:21:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateMatchingIgnorePattern
+    steps size == 1 ifTrue:[
+        ^ super updateMatchingIgnorePattern 
+    ].
+    self updateMatchingObjectPOs: (self matchingObjectPOsForPattern: nil)
+
+    "Created: / 24-01-2015 / 00:50:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateMextSearchStepVisibility
+    "raise an error: this method should be implemented (TODO)"
+
+    | selection |
+
+    selection := self matchingObjectsSelection.
+    matchingObjectsMultiselect ifTrue:[ 
+        selection := selection size == 1 ifTrue:[ selection anElement ] ifFalse:[ nil ]
+    ].
+    selection notNil ifTrue:[ 
+        self nextSearchStepVisibleHolder value: (processor canDoNextStepFor: selection)
+    ] ifFalse:[ 
+        self nextSearchStepVisibleHolder value: false.
+    ].
+
+    "Created: / 23-01-2015 / 22:21:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!Navigator methodsFor:'event processing'!
+
+keyPressCursorRightInMatchingObjectsView
+   self nextSearchStepVisibleHolder value ifTrue:[ 
+       self step.
+       ^ true.
+   ].
+   ^ super keyPressCursorRightInMatchingObjectsView
+
+    "Created: / 23-01-2015 / 22:45:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!Navigator methodsFor:'initialization'!
+
+initialize
+    super initialize.
+    steps := OrderedCollection new: 3.
+    self push: 
+        (NavigatorStep for: 
+            (CompositeProcessor 
+                    with: ClassSearchProcessor new 
+                    with: ImplementorSearchProcessor new))
+        update: false.
+
+    "Created: / 10-01-2015 / 07:03:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 24-01-2015 / 00:25:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!Navigator methodsFor:'private-steps'!
+
+push: aNavigatorStep
+    self push: aNavigatorStep update: true
+
+    "Created: / 23-01-2015 / 21:01:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 24-01-2015 / 00:24:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+push: aNavigatorStep update: update
+    steps addLast: aNavigatorStep.
+    processor := aNavigatorStep processor.
+    update ifTrue:[ 
+        self matchPatternHolder value: nil.
+        self updateMatching
+    ].
+
+    "Created: / 24-01-2015 / 00:24:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+step
+    | selection step |
+
+    selection := self matchingObjectsSelection.
+    matchingObjectsMultiselect ifTrue:[ 
+        selection := selection size == 1 ifTrue:[ selection anElement ] ifFalse:[ nil ]
+    ].
+    step := NavigatorStep for: (processor processorForNextStepFor: selection).
+    self push: step.
+
+    "Created: / 23-01-2015 / 22:48:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!Navigator class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__NavigatorStep.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,74 @@
+"
+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 }"
+
+Object subclass:#NavigatorStep
+	instanceVariableNames:'processor'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-Search'
+!
+
+!NavigatorStep 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
+"
+! !
+
+!NavigatorStep class methodsFor:'instance creation'!
+
+for: anAbstractSearchProcessor
+    ^ self new initializeWithProcessor: anAbstractSearchProcessor
+
+    "Created: / 23-01-2015 / 21:00:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!NavigatorStep methodsFor:'accessing'!
+
+processor
+    ^ processor
+! !
+
+!NavigatorStep methodsFor:'initialization'!
+
+initializeWithProcessor: anAbstractSearchProcessor
+    processor := anAbstractSearchProcessor
+
+    "Created: / 23-01-2015 / 20:59:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__PackagePO.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,125 @@
+"
+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 }"
+
+PO subclass:#PackagePO
+	instanceVariableNames:'package packageDefinition isJava'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-PO'
+!
+
+!PackagePO 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
+"
+! !
+
+!PackagePO methodsFor:'accessing'!
+
+icon
+    ^ ToolbarIconLibrary smallYellowPackageIcon
+
+    "Created: / 06-05-2014 / 00:09:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label
+    "Return a text to be displayed. The label may be cached
+     `label` instvar."
+
+    ^ package
+
+    "Created: / 19-06-2014 / 12:04:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+name
+    ^ package 
+
+    "Created: / 06-05-2014 / 00:01:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+package
+    ^ package
+!
+
+packageDefinition
+    packageDefinition isNil ifTrue:[
+        packageDefinition := ProjectDefinition definitionClassForPackage:package.
+    ].
+    ^ packageDefinition
+
+    "Created: / 06-05-2014 / 00:05:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!PackagePO methodsFor:'accessing-private'!
+
+subject
+    "Return the real object for which the receiver
+     is a presentor.
+     
+     For internal usage only."
+
+    ^ package
+
+    "Created: / 20-06-2014 / 11:11:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!PackagePO methodsFor:'initialization'!
+
+initializeWithPackage: aStringOrSymbol
+    package := aStringOrSymbol.
+    isJava := false.
+
+    "Created: / 19-06-2014 / 12:02:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!PackagePO methodsFor:'testing'!
+
+isSmallSensePackagePO
+    ^ true
+
+    "Created: / 05-05-2014 / 23:50:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!PackagePO class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__PackageSelectDialog.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,119 @@
+"
+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 }"
+
+AbstractSelectDialog subclass:#PackageSelectDialog
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-Search'
+!
+
+!PackageSelectDialog 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
+"
+! !
+
+!PackageSelectDialog methodsFor:'accessing - private'!
+
+matchingObjectForString: aString
+    "Creates a new object from given string. Called only when
+     #canCreateMatchingObjectFromString: returns true"
+
+    ^ aString asSymbol
+
+    "Created: / 23-06-2014 / 15:25:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!PackageSelectDialog methodsFor:'accessing-defaults'!
+
+defaultTitle
+    ^ (resources string: 'Select Package...')
+
+    "Created: / 13-12-2014 / 12:57:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!PackageSelectDialog methodsFor:'queries'!
+
+canCreateMatchingObjectFromString:string 
+    "Return true, a new object can be created with given string value"
+    
+    ^ string notNil and:[ string allSatisfy:[:c | c isLetterOrDigit or:[ '_:/' includes:c ] ] ]
+
+    "Created: / 23-06-2014 / 15:15:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-01-2015 / 07:23:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+canSelect:selection
+    ^ selection askFor: #isSmallSensePackagePO
+
+    "Created: / 05-05-2014 / 23:50:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!PackageSelectDialog methodsFor:'searching'!
+
+matchingObjectPOsForPattern:pattern relax: level
+    | environment packages |
+
+    environment := self environment.
+    packages := Set new.
+
+    environment allClassesDo: [ :cls |
+        | pkg |
+
+        pkg := cls package.
+        ((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 ].
+    ].
+    environment allMethodsDo:[ :mth |
+        | pkg |
+
+        pkg := mth package.
+        ((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 := packages asArray.
+    packages sort: [ :a :b | a < b ].
+    ^ packages collect:[ :e | PO forPackage: e ].
+
+    "Created: / 13-12-2014 / 08:42:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__PluggablePO.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,121 @@
+"
+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 }"
+
+PO subclass:#PluggablePO
+	instanceVariableNames:'icon hint subject'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-PO'
+!
+
+!PluggablePO 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
+"
+! !
+
+!PluggablePO methodsFor:'accessing'!
+
+hint
+    "Return a hint text to be displayed in gray after a label
+     (if there's space). If nil is returned, no hint is shown"
+
+    ^ hint
+
+    "Created: / 13-12-2014 / 07:51:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+hint:something
+    hint := something.
+!
+
+icon
+    ^ icon
+!
+
+icon:something
+    icon := something.
+!
+
+label
+    "Return a text to be displayed. The label may be cached
+     `label` instvar."
+
+    ^ label
+
+    "Created: / 13-12-2014 / 07:49:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label: aString
+    label := aString
+
+    "Created: / 13-12-2014 / 12:25:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+stringToCompleteForLanguage:aProgrammingLanguage
+    "Answers a string to complete"
+
+    ^ self shouldNotImplement
+
+    "Created: / 13-12-2014 / 07:50:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+subject:something
+    subject := something.
+! !
+
+!PluggablePO methodsFor:'accessing-private'!
+
+subject
+    "Return the real object for which the receiver
+     is a presentor.
+     
+     For internal usage only."
+
+    ^ subject
+
+    "Created: / 13-12-2014 / 07:50:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!PluggablePO methodsFor:'testing'!
+
+isSmallSensePluggablePO
+    ^ true
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__PluggableSearchProcessor.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,110 @@
+"
+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 }"
+
+AbstractSearchProcessor subclass:#PluggableSearchProcessor
+	instanceVariableNames:'label search presentation'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-Search'
+!
+
+!PluggableSearchProcessor 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
+"
+! !
+
+!PluggableSearchProcessor class methodsFor:'instance creation'!
+
+search: searchBlock presentation: presentBlock
+    ^ self new initializeWithSearch: searchBlock presentation: presentBlock
+
+    "Created: / 24-01-2015 / 00:14:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!PluggableSearchProcessor methodsFor:'accessing'!
+
+label:something
+    label := something.
+! !
+
+!PluggableSearchProcessor methodsFor:'accessing - presentation'!
+
+label
+    "Return a label for this processor. This one is used as section label
+     in Spotter"
+
+    ^ label
+
+    "Created: / 24-01-2015 / 00:09:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!PluggableSearchProcessor methodsFor:'initialization'!
+
+initializeWithSearch: searchBlock presentation: presentBlock
+    search := searchBlock.
+    presentation := presentBlock
+
+    "Created: / 24-01-2015 / 00:15:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!PluggableSearchProcessor methodsFor:'searching'!
+
+matchingObjectPOsFor:objects
+    "superclass SmallSense::AbstractSearchProcessor says that I am responsible to implement this method"
+
+    | pos |
+
+    pos := objects collect: presentation.
+    pos isSequenceable ifFalse:[ 
+        pos := pos asArray.
+    ].
+    ^ pos sort:[ :a :b | a label == b label ]
+
+    "Created: / 24-01-2015 / 00:17:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matchingObjectsForPattern:pattern filter:filter inEnvironment:environment relax:level
+    "superclass SmallSense::AbstractSearchProcessor says that I am responsible to implement this method"
+
+    ^ search value: pattern value: filter value: environment value: level
+
+    "Created: / 24-01-2015 / 00:16:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__ProtocolSelectDialog.st	Fri Feb 13 08:44:44 2015 +0000
@@ -0,0 +1,115 @@
+"
+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 }"
+
+AbstractSelectDialog subclass:#ProtocolSelectDialog
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Core-Interface-Search'
+!
+
+!ProtocolSelectDialog 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
+"
+! !
+
+!ProtocolSelectDialog methodsFor:'accessing - private'!
+
+matchingObjectForString: aString
+    "Creates a new object from given string. Called only when
+     #canCreateMatchingObjectFromString: returns true"
+
+    ^ aString asSymbol
+
+    "Created: / 23-06-2014 / 15:25:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProtocolSelectDialog methodsFor:'accessing-defaults'!
+
+defaultTitle
+    ^ (resources string: 'Select Protocol...')
+
+    "Created: / 13-12-2014 / 12:57:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProtocolSelectDialog methodsFor:'queries'!
+
+canCreateMatchingObjectFromString:string 
+    "Return true, a new object can be created with given string value"
+    
+    ^ string notEmptyOrNil
+
+    "Created: / 23-06-2014 / 15:15:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-01-2015 / 13:36:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+canSelect:selection
+    ^ selection isKindOf: PO
+
+    "Created: / 05-05-2014 / 23:50:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 13-12-2014 / 12:08:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProtocolSelectDialog methodsFor:'searching'!
+
+matchingObjectPOsForPattern:pattern relax: level
+    | environment protocols |
+
+    environment := self environment.
+    protocols := Set new.
+
+    environment allMethodsDo:[ :mth | 
+        | protocol |
+
+        protocol := mth category.
+        (protocol notNil 
+            and: [ (filter isNil or:[filter value: protocol]) 
+            and: [ pattern isNil or:[pattern match: protocol relax: level] ] ]) ifTrue:[
+                protocols add: mth category 
+            ] 
+    ].
+    protocols := protocols asArray.
+    protocols sort: [ :a :b | a < b ].
+    ^ protocols collect:[ :e | PluggablePO new label: e; subject: e ].
+
+    "Created: / 13-12-2014 / 08:42:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 13-12-2014 / 12:55:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/SmallSense__SettingsAppl.st	Thu Feb 12 00:30:40 2015 +0000
+++ b/SmallSense__SettingsAppl.st	Fri Feb 13 08:44:44 2015 +0000
@@ -5,7 +5,7 @@
 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. 
+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
@@ -25,7 +25,7 @@
 		smallSenseBackgroundTypingEnabled smallSenseBackgroundLintEnabled
 		smallSenseElectricEditSupportEnabled
 		smallSenseCompleteIfUnambiguous smallSenseCompletionEnabled
-		smallSenseSwizzledInfoHolder'
+		smallSenseSwizzledInfoHolder smallSenseNewDialogsEnabled'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'SmallSense-Core-Interface'
@@ -41,7 +41,7 @@
 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. 
+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
@@ -70,16 +70,17 @@
 !SettingsAppl class methodsFor:'help specs'!
 
 helpSpec
-    "This resource specification was automatically generated by the UIHelpTool of ST/X."
+    "This resource specification was automatically generated
+     by the UIHelpTool of ST/X."
 
     "Do not manually edit this!! If it is corrupted,
      the UIHelpTool may not be able to read the specification."
 
     "
-     UIHelpTool openOnClass:SmallSenseSettingsAppl
+     UIHelpTool openOnClass:SmallSense::SettingsAppl
     "
 
-
+    <resource: #help>
 
     ^ super helpSpec addPairsFrom:#(
 
@@ -89,17 +90,21 @@
 #smallSenseBackgroundTypingEnabled
 'When enabled, SmallSense runs a type-inferencer on the code to give more accurate type hints and completion data'
 
+#smallSenseCompleteIfUnambiguous
+'Enable automatic completion if unambigious.\Will automatically insert the completion, if there only one possible completion is found.\This may be somewhat disturbing, as it makes blind typing a little tricky.'
+
+#smallSenseCompletionEnabled
+'Enable the SmallSense completion algorithm, instead of the default one.\It is currently a matter of personal taste, which one provides better completions'
+
 #smallSenseElectricEditSupportEnabled
 'When enabled, closing brackets, blank lines and spaces are automatically inserted,\as soon as opening bracket or other tokens are typed. Honours formatting settings.'
 
 #smallSenseEnabled
 'General enable/disable the SmallSense support package'
 
-#smallSenseCompletionEnabled
-'Enable the SmallSense completion algorithm, instead of the default one.\It is currently a matter of personal taste, which one provides better completions'
+#smallSenseNewDialogsEnabled
+'EXPERIMENTAL. When enabled, use SmallSense''s own dialogs for classes, methods, packages, ...\Requires swizzling.'
 
-#smallSenseCompleteIfUnambiguous
-'Enable automatic completion if unambigious.\Will automatically insert the completion, if there only one possible completion is found.\This may be somewhat disturbing, as it makes blind typing a little tricky.'
 )
 ! !
 
@@ -120,17 +125,17 @@
 
     <resource: #canvas>
 
-    ^ 
+    ^
     #(FullSpec
        name: windowSpec
-       window: 
+       window:
       (WindowSpec
          label: 'SmallSense Settings'
          name: 'SmallSense Settings'
          min: (Point 10 10)
          bounds: (Rectangle 0 0 536 651)
        )
-       component: 
+       component:
       (SpecCollection
          collection: (
           (CheckBoxSpec
@@ -170,7 +175,7 @@
              verticalLayout: top
              horizontalSpace: 3
              verticalSpace: 3
-             component: 
+             component:
             (SpecCollection
                collection: (
                 (ViewSpec
@@ -229,14 +234,35 @@
                    translateLabel: true
                    extent: (Point 526 22)
                  )
+                (ViewSpec
+                   name: 'Spacer2'
+                   extent: (Point 526 15)
+                 )
+                (LabelSpec
+                   label: 'Dialogs'
+                   name: 'Label2'
+                   translateLabel: true
+                   adjust: left
+                   extent: (Point 526 22)
+                 )
+                (CheckBoxSpec
+                   label: 'Enable New Dialogs (EXPERIMENTAL)'
+                   name: 'CheckBox6'
+                   activeHelpKey: smallSenseNewDialogsEnabled
+                   enableChannel: smallSenseEnabledAndMethodsSwizzledHolder
+                   model: smallSenseNewDialogsEnabled
+                   translateLabel: true
+                   extent: (Point 526 28)
+                 )
                 )
-              
+
              )
            )
           )
-        
+
        )
      )
+
 ! !
 
 !SettingsAppl methodsFor:'actions'!
@@ -331,7 +357,7 @@
 
 smallSenseEnabledAndMethodsSwizzledHolder
     smallSenseEnabledAndMethodsSwizzledHolder isNil ifTrue:[
-        smallSenseEnabledAndMethodsSwizzledHolder := 
+        smallSenseEnabledAndMethodsSwizzledHolder :=
             PluggableAdaptor on: self smallSenseEnabled getter:[ :model | model value and:[ self smallSenseSwizzled ] ]
     ].
     ^ smallSenseEnabledAndMethodsSwizzledHolder.
@@ -339,6 +365,28 @@
     "Created: / 13-01-2015 / 09:44:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+smallSenseNewDialogsEnabled
+    <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 ;-)"
+
+    smallSenseNewDialogsEnabled isNil ifTrue:[
+        smallSenseNewDialogsEnabled := true asValue.
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/       smallSenseNewDialogsEnabled addDependent:self.
+"/       smallSenseNewDialogsEnabled onChangeSend:#smallSenseNewDialogsEnabledChanged to:self.
+        smallSenseNewDialogsEnabled onChangeSend:#updateModifiedChannel to:self.
+    ].
+    ^ smallSenseNewDialogsEnabled.
+
+    "Modified: / 10-05-2014 / 11:56:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 smallSenseSwizzled
     ^ (Smalltalk at: #stx_goodies_smallsense) swizzled
 
@@ -346,12 +394,12 @@
 !
 
 smallSenseSwizzledInfoHolder
-    smallSenseSwizzledInfoHolder isNil ifTrue:[ 
+    smallSenseSwizzledInfoHolder isNil ifTrue:[
         smallSenseSwizzledInfoHolder := ValueHolder new.
-        (Smalltalk at: #stx_goodies_smallsense) swizzled ifTrue:[ 
+        (Smalltalk at: #stx_goodies_smallsense) swizzled ifTrue:[
             smallSenseSwizzledInfoHolder value:
                 ((resources string: 'Methods swizzled.') asText allBold colorizeAllWith: Color green darker).
-        ] ifFalse:[ 
+        ] ifFalse:[
             smallSenseSwizzledInfoHolder value:
                 (resources string: 'Methods not swizzled, some features may not be available.')
         ].
@@ -364,7 +412,7 @@
 !SettingsAppl methodsFor:'protocol'!
 
 basicAspects
-    ^#( 
+    ^#(
        smallSenseEnabled
 
        smallSenseBackgroundLintEnabled
@@ -374,9 +422,10 @@
        smallSenseCompletionEnabled
        smallSenseCompleteIfUnambiguous
 
+       smallSenseNewDialogsEnabled
     )
 
-    "Modified: / 27-02-2014 / 09:32:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-05-2014 / 00:04:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 basicReadSettings
@@ -413,7 +462,7 @@
 
     (Smalltalk at: #stx_goodies_smallsense) extensionMethods
         select: [ :m | (m annotationAt: #swizzle:) notNil or:[(m annotationAt: #swizzle:checksum:) notNil ] ]
-      
+
     "
 
     "Created: / 13-01-2015 / 09:33:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
--- a/SmallSense__TestCase.st	Thu Feb 12 00:30:40 2015 +0000
+++ b/SmallSense__TestCase.st	Fri Feb 13 08:44:44 2015 +0000
@@ -96,6 +96,11 @@
 
 !TestCase class methodsFor:'documentation'!
 
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+!
+
 version_SVN
     ^ '$Id$'
 ! !
--- a/SmallSense__VariablePO.st	Thu Feb 12 00:30:40 2015 +0000
+++ b/SmallSense__VariablePO.st	Fri Feb 13 08:44:44 2015 +0000
@@ -125,6 +125,19 @@
     type := something.
 ! !
 
+!VariablePO methodsFor:'accessing-private'!
+
+subject
+    "Return the real object for which the receiver
+     is a presentor.
+     
+     For internal usage only."
+
+    ^ name
+
+    "Created: / 20-06-2014 / 11:11:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !VariablePO methodsFor:'displaying'!
 
 displayLabel:aLabel h:lH on:aGC x:x y:y h:h isHighlightedAsSelected: highlighted
@@ -134,7 +147,7 @@
 
     class isNil ifTrue:[ ^ self ]. "/ Could be pseudo-variable
 
-    lw :=  x + IconWidth + (self label widthOn: aGC).
+    lw :=  x + (parent isNil ifTrue:[IconWidth] ifFalse:[0]) + (self label widthOn: aGC).
     cn := class nameWithoutPrefix.
     cnw := aGC widthOfString: cn.
     y0 := y - (lH + 1 - h // 2).
@@ -148,6 +161,7 @@
     ]
 
     "Created: / 03-02-2015 / 05:34:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 28-04-2014 / 00:24:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 displayOn:aGC x:x y:y opaque:opaque
--- a/abbrev.stc	Thu Feb 12 00:30:40 2015 +0000
+++ b/abbrev.stc	Fri Feb 13 08:44:44 2015 +0000
@@ -2,6 +2,10 @@
 # this file is needed for stc to be able to compile modules independently.
 # it provides information about a classes filename, category and especially namespace.
 SmallSense::AbstractTestCase SmallSense__AbstractTestCase stx:goodies/smallsense 'SmallSense-Tests' 1
+SmallSense::AbstractDIalog SmallSense__AbstractDIalog stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 1
+SmallSense::AbstractSearchProcessor SmallSense__AbstractSearchProcessor stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 1
+SmallSense::AbstractTestCase SmallSense__AbstractTestCase stx:goodies/smallsense 'SmallSense-Tests' 1
+SmallSense::BaseTestClass SmallSense__BaseTestClass stx:goodies/smallsense 'SmallSense-Tests-Obsolete' 1
 SmallSense::CodeHighlightingService SmallSense__CodeHighlightingService stx:goodies/smallsense 'SmallSense-Core-Services' 0
 SmallSense::CodeNavigationService SmallSense__CodeNavigationService stx:goodies/smallsense 'SmallSense-Core-Services' 0
 SmallSense::CompletionContext SmallSense__CompletionContext stx:goodies/smallsense 'SmallSense-Core' 0
@@ -15,6 +19,7 @@
 SmallSense::Info SmallSense__Info stx:goodies/smallsense 'SmallSense-Smalltalk-Types-Info' 0
 SmallSense::JavaCompletionEngineEnvironmentResource SmallSense__JavaCompletionEngineEnvironmentResource stx:goodies/smallsense 'SmallSense-Tests' 1
 SmallSense::Manager SmallSense__Manager stx:goodies/smallsense 'SmallSense-Smalltalk-Types-Info' 0
+SmallSense::NavigatorStep SmallSense__NavigatorStep stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 0
 SmallSense::PO SmallSense__PO stx:goodies/smallsense 'SmallSense-Core-Interface-PO' 0
 SmallSense::ParseTreeIndex SmallSense__ParseTreeIndex stx:goodies/smallsense 'SmallSense-Core-Index' 0
 SmallSense::ParseTreeIndexEntry SmallSense__ParseTreeIndexEntry stx:goodies/smallsense 'SmallSense-Core-Index' 0
@@ -29,6 +34,7 @@
 SmallSense::SmalltalkQuickFixer SmallSense__SmalltalkQuickFixer stx:goodies/smallsense 'SmallSense-Smalltalk-Lint' 0
 SmallSense::SmalltalkSyntaxHighlighter SmallSense__SmalltalkSyntaxHighlighter stx:goodies/smallsense 'SmallSense-Smalltalk' 3
 SmallSense::SmalltalkUnacceptedMethodEnvironment SmallSense__SmalltalkUnacceptedMethodEnvironment stx:goodies/smallsense 'SmallSense-Smalltalk-Lint' 0
+SmallSense::TestCase SmallSense__TestCase stx:goodies/smallsense 'SmallSense-Tests-Obsolete' 1
 SmallSense::TokenPatternMatcher SmallSense__TokenPatternMatcher stx:goodies/smallsense 'SmallSense-Utils-Matcher' 0
 SmallSense::TokenPatternMatcherTests SmallSense__TokenPatternMatcherTests stx:goodies/smallsense 'SmallSense-Tests' 1
 SmallSense::TokenPatternParser SmallSense__TokenPatternParser stx:goodies/smallsense 'SmallSense-Utils-Matcher' 0
@@ -39,22 +45,32 @@
 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::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::ClassSearchProcessor SmallSense__ClassSearchProcessor stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 1
 SmallSense::ClassType SmallSense__ClassType stx:goodies/smallsense 'SmallSense-Smalltalk-Types' 0
 SmallSense::CompletionEngineTests SmallSense__CompletionEngineTests stx:goodies/smallsense 'SmallSense-Tests' 1
+SmallSense::CompositeProcessor SmallSense__CompositeProcessor stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 1
 SmallSense::ConstantPO SmallSense__ConstantPO stx:goodies/smallsense 'SmallSense-Core-Interface-PO' 0
 SmallSense::EditSupportTests SmallSense__EditSupportTests stx:goodies/smallsense 'SmallSense-Tests' 1
+SmallSense::FinderTests SmallSense__FinderTests stx:goodies/smallsense 'SmallSense-Tests-Obsolete' 1
 SmallSense::GenericEditSupport SmallSense__GenericEditSupport stx:goodies/smallsense 'SmallSense-Core-Services' 0
+SmallSense::ImplementorSearchProcessor SmallSense__ImplementorSearchProcessor stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 1
 SmallSense::JavaEditSupport SmallSense__JavaEditSupport stx:goodies/smallsense 'SmallSense-Java' 0
 SmallSense::JavaImportPO SmallSense__JavaImportPO stx:goodies/smallsense 'SmallSense-Java-Interface-PO' 0
 SmallSense::MethodBindingPO SmallSense__MethodBindingPO stx:goodies/smallsense 'SmallSense-Java-Interface-PO' 0
 SmallSense::MethodInfo SmallSense__MethodInfo stx:goodies/smallsense 'SmallSense-Smalltalk-Types-Info' 0
 SmallSense::MethodPO SmallSense__MethodPO stx:goodies/smallsense 'SmallSense-Core-Interface-PO' 0
+SmallSense::PackagePO SmallSense__PackagePO stx:goodies/smallsense 'SmallSense-Core-Interface-PO' 0
+SmallSense::PluggablePO SmallSense__PluggablePO stx:goodies/smallsense 'SmallSense-Core-Interface-PO' 0
+SmallSense::PluggableSearchProcessor SmallSense__PluggableSearchProcessor stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 1
+SmallSense::RecognizerTests SmallSense__RecognizerTests stx:goodies/smallsense 'SmallSense-Tests-Obsolete' 1
 SmallSense::SmalltalkCompletionEngine SmallSense__SmalltalkCompletionEngine stx:goodies/smallsense 'SmallSense-Smalltalk' 0
 SmallSense::SmalltalkEditSupport SmallSense__SmalltalkEditSupport stx:goodies/smallsense 'SmallSense-Smalltalk' 0
 SmallSense::SmalltalkInferencer SmallSense__SmalltalkInferencer stx:goodies/smallsense 'SmallSense-Smalltalk-Types-Inference' 0
 SmallSense::SmalltalkParseNodeFinder SmallSense__SmalltalkParseNodeFinder stx:goodies/smallsense 'SmallSense-Smalltalk' 0
+SmallSense::SmalltalkParserTests SmallSense__SmalltalkParserTests stx:goodies/smallsense 'SmallSense-Tests-Obsolete' 1
 SmallSense::SnippetPO SmallSense__SnippetPO stx:goodies/smallsense 'SmallSense-Core-Interface-PO' 0
 SmallSense::UnionType SmallSense__UnionType stx:goodies/smallsense 'SmallSense-Smalltalk-Types' 0
 SmallSense::UnknownType SmallSense__UnknownType stx:goodies/smallsense 'SmallSense-Smalltalk-Types' 1
@@ -62,19 +78,23 @@
 SmallSense::VariablePO SmallSense__VariablePO stx:goodies/smallsense 'SmallSense-Core-Interface-PO' 0
 SmallSense::AbstractJavaCompletionEngineSimple SmallSense__AbstractJavaCompletionEngineSimple stx:goodies/smallsense 'SmallSense-Java' 2
 SmallSense::AbstractJavaCompletionEngineTests SmallSense__AbstractJavaCompletionEngineTests stx:goodies/smallsense 'SmallSense-Tests' 1
+SmallSense::AbstractSearchDialog SmallSense__AbstractSearchDialog stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 2
+SmallSense::AbstractSelectDialog SmallSense__AbstractSelectDialog stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 1
 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::JavaEditSupportTests SmallSense__JavaEditSupportTests stx:goodies/smallsense 'SmallSense-Tests' 1
-SmallSense::MethodKeywordRestPO SmallSense__MethodKeywordRestPO stx:goodies/smallsense 'SmallSense-Core-Interface-PO' 0
 SmallSense::SmalltalkCompletionEngineTests SmallSense__SmalltalkCompletionEngineTests stx:goodies/smallsense 'SmallSense-Tests' 1
 SmallSense::SmalltalkEditSupportTests SmallSense__SmalltalkEditSupportTests stx:goodies/smallsense 'SmallSense-Tests' 1
 SmallSense::GroovyCompletionEngineSimpleTests SmallSense__GroovyCompletionEngineSimpleTests stx:goodies/smallsense 'SmallSense-Tests' 1
+SmallSense::JavaCompletionEngineTests SmallSense__JavaCompletionEngineTests stx:goodies/smallsense 'SmallSense-Tests' 1
+SmallSense::MethodKeywordRestPO SmallSense__MethodKeywordRestPO stx:goodies/smallsense 'SmallSense-Core-Interface-PO' 0
+SmallSense::ClassSearchDialog SmallSense__ClassSearchDialog stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 2
+SmallSense::GroovyCompletionEngineSimpleTests SmallSense__GroovyCompletionEngineSimpleTests stx:goodies/smallsense 'SmallSense-Tests' 1
 SmallSense::JavaCompletionEngineSimple SmallSense__JavaCompletionEngineSimple stx:goodies/smallsense 'SmallSense-Java' 2
 SmallSense::JavaCompletionEngineTests SmallSense__JavaCompletionEngineTests stx:goodies/smallsense 'SmallSense-Tests' 1
+SmallSense::MethodSearchDialog SmallSense__MethodSearchDialog stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 2
+SmallSense::Navigator SmallSense__Navigator stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 2
+SmallSense::PackageSelectDialog SmallSense__PackageSelectDialog stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 1
+SmallSense::ProtocolSelectDialog SmallSense__ProtocolSelectDialog stx:goodies/smallsense 'SmallSense-Core-Interface-Search' 1
 SmallSense::GroovyCompletionEngineSimple SmallSense__GroovyCompletionEngineSimple stx:goodies/smallsense 'SmallSense-Groovy' 2
-SmallSense::BaseTestClass SmallSense__BaseTestClass stx:goodies/smallsense 'SmallSense-Tests-Obsolete' 1
-SmallSense::FinderTests SmallSense__FinderTests stx:goodies/smallsense 'SmallSense-Tests-Obsolete' 1
-SmallSense::RecognizerTests SmallSense__RecognizerTests stx:goodies/smallsense 'SmallSense-Tests-Obsolete' 1
-SmallSense::SmalltalkParserTests SmallSense__SmalltalkParserTests stx:goodies/smallsense 'SmallSense-Tests-Obsolete' 1
-SmallSense::TestCase SmallSense__TestCase stx:goodies/smallsense 'SmallSense-Tests-Obsolete' 1
--- a/bc.mak	Thu Feb 12 00:30:40 2015 +0000
+++ b/bc.mak	Fri Feb 13 08:44:44 2015 +0000
@@ -84,6 +84,8 @@
 
 
 # BEGINMAKEDEPEND --- do not remove this line; make depend needs it
+$(OUTDIR)SmallSense__AbstractDIalog.$(O) SmallSense__AbstractDIalog.$(H): SmallSense__AbstractDIalog.st $(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__AbstractSearchProcessor.$(O) SmallSense__AbstractSearchProcessor.$(H): SmallSense__AbstractSearchProcessor.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__CodeHighlightingService.$(O) SmallSense__CodeHighlightingService.$(H): SmallSense__CodeHighlightingService.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__BackgroundSourceProcessingService.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__CodeHighlightingService.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__CodeViewService.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__CodeNavigationService.$(O) SmallSense__CodeNavigationService.$(H): SmallSense__CodeNavigationService.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__CodeNavigationService.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__CodeViewService.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__CompletionContext.$(O) SmallSense__CompletionContext.$(H): SmallSense__CompletionContext.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -96,6 +98,7 @@
 $(OUTDIR)SmallSense__EditSupport.$(O) SmallSense__EditSupport.$(H): SmallSense__EditSupport.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__Info.$(O) SmallSense__Info.$(H): SmallSense__Info.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__Manager.$(O) SmallSense__Manager.$(H): SmallSense__Manager.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__NavigatorStep.$(O) SmallSense__NavigatorStep.$(H): SmallSense__NavigatorStep.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__PO.$(O) SmallSense__PO.$(H): SmallSense__PO.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__ParseTreeIndex.$(O) SmallSense__ParseTreeIndex.$(H): SmallSense__ParseTreeIndex.st $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\OrderedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__ParseTreeIndexEntry.$(O) SmallSense__ParseTreeIndexEntry.$(H): SmallSense__ParseTreeIndexEntry.st $(INCLUDE_TOP)\stx\libbasic\Magnitude.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -119,16 +122,23 @@
 $(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__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__ClassSearchProcessor.$(O) SmallSense__ClassSearchProcessor.$(H): SmallSense__ClassSearchProcessor.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractSearchProcessor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(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)
+$(OUTDIR)SmallSense__CompositeProcessor.$(O) SmallSense__CompositeProcessor.$(H): SmallSense__CompositeProcessor.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractSearchProcessor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__ConstantPO.$(O) SmallSense__ConstantPO.$(H): SmallSense__ConstantPO.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__PO.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__GenericEditSupport.$(O) SmallSense__GenericEditSupport.$(H): SmallSense__GenericEditSupport.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__EditSupport.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__ImplementorSearchProcessor.$(O) SmallSense__ImplementorSearchProcessor.$(H): SmallSense__ImplementorSearchProcessor.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractSearchProcessor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__JavaEditSupport.$(O) SmallSense__JavaEditSupport.$(H): SmallSense__JavaEditSupport.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__EditSupport.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__JavaImportPO.$(O) SmallSense__JavaImportPO.$(H): SmallSense__JavaImportPO.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__PO.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__MethodBindingPO.$(O) SmallSense__MethodBindingPO.$(H): SmallSense__MethodBindingPO.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__PO.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__MethodInfo.$(O) SmallSense__MethodInfo.$(H): SmallSense__MethodInfo.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__Info.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__MethodPO.$(O) SmallSense__MethodPO.$(H): SmallSense__MethodPO.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__PO.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__PackagePO.$(O) SmallSense__PackagePO.$(H): SmallSense__PackagePO.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__PO.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__PluggablePO.$(O) SmallSense__PluggablePO.$(H): SmallSense__PluggablePO.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__PO.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__PluggableSearchProcessor.$(O) SmallSense__PluggableSearchProcessor.$(H): SmallSense__PluggableSearchProcessor.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractSearchProcessor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__SmalltalkCompletionEngine.$(O) SmallSense__SmalltalkCompletionEngine.$(H): SmallSense__SmalltalkCompletionEngine.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__SmalltalkEditSupport.$(O) SmallSense__SmalltalkEditSupport.$(H): SmallSense__SmalltalkEditSupport.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__EditSupport.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__SmalltalkInferencer.$(O) SmallSense__SmalltalkInferencer.$(H): SmallSense__SmalltalkInferencer.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__SmalltalkParseNodeVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -139,13 +149,20 @@
 $(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__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__AbstractSelectDialog.$(O) SmallSense__AbstractSelectDialog.$(H): SmallSense__AbstractSelectDialog.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__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__Navigator.$(O) SmallSense__Navigator.$(H): SmallSense__Navigator.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__PackageSelectDialog.$(O) SmallSense__PackageSelectDialog.$(H): SmallSense__PackageSelectDialog.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractListDialog.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractSelectDialog.$(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__ProtocolSelectDialog.$(O) SmallSense__ProtocolSelectDialog.$(H): SmallSense__ProtocolSelectDialog.st $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractDIalog.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractListDialog.$(H) $(INCLUDE_TOP)\stx\goodies\smallsense\SmallSense__AbstractSelectDialog.$(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\InspectorView.$(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\DebugView.$(H) $(INCLUDE_TOP)\stx\libtool\MultiViewToolApplication.$(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__Inspector2.$(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\libtool\WorkspaceApplication.$(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\libview2\ToolApplicationModel.$(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/extensions.st	Thu Feb 12 00:30:40 2015 +0000
+++ b/extensions.st	Fri Feb 13 08:44:44 2015 +0000
@@ -54,6 +54,60 @@
     "Created: / 27-11-2011 / 17:22:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!DebugView methodsFor:'event handling'!
+
+processShortcut:aKeyPressEvent
+    "a shortcut key event as forwarded from the keyboardProcessor - if there is the
+     shortcut key defined, process the shortcut and return true - otherwise false."
+
+    UserPreferences current smallSenseEnabled ifTrue:[   
+        (aKeyPressEvent key == #OpenNavigator or:[aKeyPressEvent rawKey == #CtrlT and:[(aKeyPressEvent targetView keyboardMap hasBindingFor: #OpenNavigator) not]]) ifTrue:[ 
+            SmallSense::Navigator open.                                                                      
+            ^ true
+        ].    
+    ].
+    ^ super processShortcut:aKeyPressEvent
+
+    "Created: / 25-01-2015 / 12:18:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-02-2015 / 21:34:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!DialogBox class methodsFor:'smalltalk dialogs-SmallSense'!
+
+stx_goodies_smallsense_requestProject:title from:listOfProjects initialAnswer:initialTextOrNil suggestions:suggestions
+    "Ask for a project (package-id)"
+
+    <swizzle: #requestProject:from:initialAnswer:suggestions:>
+    "
+    stx_goodies_smallsense swizzle: (DialogBox class >> #stx_goodies_smallsense_requestProject:from:initialAnswer:suggestions:)
+    "
+
+    | dialog |
+
+    UserPreferences current smallSenseNewDialogsEnabled ifFalse:[ 
+        ^ self stx_libwidg_requestProject:title from:listOfProjects initialAnswer:initialTextOrNil suggestions:suggestions
+    ].
+    dialog := SmallSense::PackageSelectDialog new.
+    dialog title: title.
+    dialog filter: [ :pkg | listOfProjects includes: pkg ].
+    dialog updateMatching.
+    (initialTextOrNil notNil and:[initialTextOrNil ~~ PackageId noProjectID]) ifTrue:[
+        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: / 13-12-2014 / 08:49:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !EditTextView methodsFor:'accessing-behavior'!
 
 autoIndent
@@ -502,6 +556,24 @@
     "Modified: / 23-09-2013 / 14:32:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!Tools::Inspector2 methodsFor:'event handling'!
+
+processShortcut:aKeyPressEvent
+    "a shortcut key event as forwarded from the keyboardProcessor - if there is the
+     shortcut key defined, process the shortcut and return true - otherwise false."
+
+    UserPreferences current smallSenseEnabled ifTrue:[   
+        (aKeyPressEvent key == #OpenNavigator or:[aKeyPressEvent rawKey == #CtrlT and:[(aKeyPressEvent targetView keyboardMap hasBindingFor: #OpenNavigator) not]]) ifTrue:[ 
+            SmallSense::Navigator open.
+            ^ true
+        ].    
+    ].
+    ^ super processShortcut:aKeyPressEvent
+
+    "Created: / 25-01-2015 / 12:18:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-02-2015 / 21:34:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !Tools::LintService methodsFor:'event handling'!
 
 buttonPress:button x:x y:y in:view 
@@ -562,6 +634,23 @@
     "Created: / 24-08-2013 / 21:53:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!Tools::NewSystemBrowser methodsFor:'user actions-events'!
+
+processShortcut: aKeyPressEvent
+    UserPreferences current smallSenseEnabled ifTrue:[
+        aKeyPressEvent isKeyPressEvent ifTrue:[
+            (aKeyPressEvent key == #OpenNavigator or:[aKeyPressEvent rawKey == #CtrlT and:[(aKeyPressEvent targetView keyboardMap hasBindingFor: #OpenNavigator) not]]) ifTrue:[ 
+                self searchMenuOpenNavigatorOnDeclarations.
+                ^ true
+            ].
+        ].
+    ].
+    ^ super processShortcut: aKeyPressEvent
+
+    "Created: / 01-02-2015 / 07:22:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-02-2015 / 21:34:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !Tools::NewSystemBrowser methodsFor:'private-searching-smallsense'!
 
 searchCompletionBlock_SmallSense
@@ -573,6 +662,40 @@
     "Created: / 25-11-2013 / 12:27:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!Tools::NewSystemBrowser methodsFor:'menu actions-searching-SmallSense'!
+
+searchMenuOpenNavigatorOnDeclarations
+    "Open a SmallSense navigator on definitions (i.e.,
+     navugating to a class or or method implementor)"
+
+    | result |    
+
+    result := SmallSense::Navigator new open.
+    result isBehavior ifTrue:[
+        self createBuffer.
+        self switchToClass: result.
+        ^ self
+    ].
+    result isMethod ifTrue:[ 
+        self createBuffer.
+        self switchToClass: result mclass selector: result selector.
+        ^ self
+    ].
+    result isCollection ifTrue:[ 
+        (result allSatisfy:[:e|e isMethod]) ifTrue:[ 
+            self  spawnMethodBrowserForSearch:[ result ] 
+                  sortBy:#class 
+                  in:#newBuffer 
+                  label:(resources string: 'Implementors of %1' with: result anElement selector storeString)
+        ].
+        ^ self
+    ].
+    ^ self
+
+    "Created: / 23-01-2015 / 20:31:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 08-02-2015 / 08:21:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !Tools::NewSystemBrowser methodsFor:'private-searching-smallsense'!
 
 smallSenseSearchCompletion:patternString
@@ -671,6 +794,132 @@
     "Modified: / 07-08-2014 / 13:10:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!Tools::NewSystemBrowser methodsFor:'private-dialogs-SmallSense'!
+
+stx_goodies_smallsense_askForMethodCategory:question title:boxTitle okLabel:okLabel list:someCategories recentList:recentListOrNil initialAnswer:initialText
+    "convenient helper method: setup a box asking for a method category"
+
+    <swizzle: #askForMethodCategory:title:okLabel:list:recentList:initialAnswer:>
+
+    | dialog |
+
+    UserPreferences current smallSenseNewDialogsEnabled ifFalse:[ 
+        ^ self stx_libtool_askForMethodCategory:question title:boxTitle okLabel:okLabel list:someCategories recentList:recentListOrNil initialAnswer:initialText     
+    ].
+    dialog := SmallSense::ProtocolSelectDialog new.   
+    dialog title: (resources string: question).
+    dialog updateMatching.
+    dialog addButtonCancel.   
+    dialog addButtonAcceptWithLabel: (resources string: okLabel).  
+    initialText notNil ifTrue:[ 
+        dialog pattern: initialText.
+        dialog selection: initialText. 
+    ].
+    ^ dialog open
+    "
+    stx_goodies_smallsense swizzle: (Tools::NewSystemBrowser >> #stx_goodies_smallsense_askForMethodCategory:title:okLabel:list:recentList:initialAnswer:)
+    "
+
+    "Created: / 09-01-2015 / 10:44:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 29-01-2015 / 07:10:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!Tools::NewSystemBrowser class methodsFor:'utilities'!
+
+stx_goodies_smallsense_askForClassToSearch:doWhatByDefault single:singleClass msgTail:msgTail resources:resourcesOrNil filter:filterOrNil forBrowser:aBrowserOrNil thenDo:aBlock
+    "utility common code for both opening a new browser on a class and
+     to search for a class in an existing browser.
+     If singleClass is true, a single class will be asked for and browsed,
+     otherwise, a match pattern is allowed and a multi-class browser is opened.
+     Moved from instance protocol for better reusability."
+
+    <swizzle: #askForClassToSearch:single:msgTail:resources:filter:forBrowser:thenDo:>
+
+    |classes box boxLabel title okText okText2 okText3 className canFind doWhat doWhat2 doWhat3 resources showFullNameHolder onlyShowJavaClassesHolder|
+
+    UserPreferences current smallSenseNewDialogsEnabled ifFalse:[ 
+        ^ self stx_libtool_askForClassToSearch:doWhatByDefault single:singleClass msgTail:msgTail resources:resourcesOrNil filter:filterOrNil forBrowser:aBrowserOrNil thenDo:aBlock
+    ].
+
+    resources := resourcesOrNil ? self classResources.
+    showFullNameHolder := (LastClassSearchBoxShowedFullName ? false) asValue.
+    onlyShowJavaClassesHolder := (LastClassSearchBoxShowedJavaOnly ? false) asValue.
+
+    doWhat := doWhatByDefault.
+    canFind := aBrowserOrNil notNil
+               and:[aBrowserOrNil navigationState notNil and:[ aBrowserOrNil navigationState isFullBrowser ]].
+
+    (doWhat isNil or:[aBrowserOrNil isNil]) ifTrue:[
+        title := 'Select a class'.
+        boxLabel := (resources string:'Select a class').
+        okText := 'OK'.
+        okText2 := nil. doWhat2 := nil.
+        okText3 := nil. doWhat3 := nil.
+    ] ifFalse:[
+        title := (singleClass ifTrue:[ 'Class to browse' ] ifFalse:[ 'Class(es) to browse' ]).
+        boxLabel := (resources string:'Browse or Search').
+
+        (doWhat isNil and:[canFind not]) ifTrue:[
+            doWhat := #newBuffer.
+        ].
+
+        doWhat == #newBrowser ifTrue:[
+            okText := 'Open New Window'.
+            okText2 := 'Open New Buffer'. doWhat2 := #newBuffer.
+            okText3 := 'Open'.       doWhat3 := nil.
+        ] ifFalse:[ doWhat == #newBuffer ifTrue:[
+            okText := 'Open New Buffer'.
+            okText2 := 'Open New Window'.   doWhat2 := #newBrowser.
+            okText3 := 'Open'.       doWhat3 := nil.
+        ] ifFalse:[
+            title := (singleClass ifTrue:[ 'Class to find' ] ifFalse:[ 'Class(es) to find' ]).
+            okText := 'Open'.
+            okText2 := 'Open New Window'.   doWhat2 := #newBrowser.
+            okText3 := 'Open New Buffer'. doWhat3 := #newBuffer.
+        ]].
+    ].
+
+    box := SmallSense::ClassSearchDialog new.
+    box multiselect: true.
+
+    "button3" "okButton" "button2" "cancel"
+
+    box addButtonCancel.
+    doWhat notNil ifTrue:[
+        box addButtonWithLabel: (resources string:okText) action: [ box doAccept ] enablement: box acceptEnabledHolder.
+        (aBrowserOrNil notNil and:[aBrowserOrNil navigationState isFullBrowser]) "singleClass" ifTrue:[
+            box addButtonWithLabel: (resources string:okText3) action: [ doWhat := doWhat3. box doAccept ] enablement: box acceptEnabledHolder.
+        ].
+        box addButtonWithLabel: (resources string:okText2) action: [ doWhat := doWhat2. box doAccept ] enablement: box acceptEnabledHolder.
+    ] ifFalse:[
+        box addButtonAccept.
+    ].
+
+
+
+    classes := box open.
+    classes isEmptyOrNil ifTrue:[ ^ nil ].
+    self assert: classes size == 1.
+    className := classes anElement name.
+
+
+    LastClassSearchBoxShowedFullName := showFullNameHolder value.
+    LastClassSearchBoxShowedJavaOnly := onlyShowJavaClassesHolder value.
+
+    (doWhat isNil or:[aBrowserOrNil isNil]) ifTrue:[
+        aBlock notNil ifTrue:[aBlock value:className optionalArgument:singleClass and:doWhat].
+        ^ className
+    ].
+
+    aBrowserOrNil withSearchCursorDo:[
+        aBlock value:className value:singleClass value:doWhat.
+    ].
+    ^ className
+
+    "Created: / 28-04-2014 / 23:41:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 25-11-2014 / 13:08:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !UserPreferences methodsFor:'accessing-SmallSense'!
 
 smallSenseBackgroundLintEnabled
@@ -791,6 +1040,31 @@
     "Created: / 02-04-2012 / 11:37:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!UserPreferences methodsFor:'accessing-SmallSense'!
+
+smallSenseNewDialogsEnabled
+    ^ self smallSenseEnabled
+        and:[self at:#smallSenseNewDialogsEnabled ifAbsent:[false]]
+
+    "
+    UserPreferences current smallSenseNewDialogsEnabled.
+    UserPreferences current smallSenseNewDialogsEnabled: true.
+    UserPreferences current smallSenseNewDialogsEnabled: false.   
+    "
+
+    "Created: / 10-05-2014 / 00:05:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (comment): / 25-11-2014 / 13:06:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!UserPreferences methodsFor:'accessing-SmallSense'!
+
+smallSenseNewDialogsEnabled: aBoolean
+
+    ^self at:#smallSenseNewDialogsEnabled put: aBoolean
+
+    "Created: / 10-05-2014 / 00:04:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !UserPreferences methodsFor:'accessing-SmallSense-Smalltalk'!
 
 smallSenseSmalltalkIndentOnPasteEnabled
@@ -834,6 +1108,24 @@
     "Created: / 24-09-2013 / 10:04:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!WorkspaceApplication methodsFor:'event handling'!
+
+processShortcut:aKeyPressEvent
+    "a shortcut key event as forwarded from the keyboardProcessor - if there is the
+     shortcut key defined, process the shortcut and return true - otherwise false."
+
+    UserPreferences current smallSenseNewDialogsEnabled ifTrue:[   
+       (aKeyPressEvent key == #OpenNavigator or:[aKeyPressEvent rawKey == #CtrlT and:[(aKeyPressEvent targetView keyboardMap hasBindingFor: #OpenNavigator) not]]) ifTrue:[ 
+            SmallSense::Navigator open.
+            ^ true
+        ].    
+    ].
+    ^ super processShortcut:aKeyPressEvent
+
+    "Created: / 25-01-2015 / 12:18:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-02-2015 / 21:33:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !stx_goodies_smallsense class methodsFor:'documentation'!
 
 extensionsVersion_HG
--- a/libInit.cc	Thu Feb 12 00:30:40 2015 +0000
+++ b/libInit.cc	Fri Feb 13 08:44:44 2015 +0000
@@ -27,6 +27,8 @@
 void _libstx_goodies_smallsense_Init(pass, __pRT__, snd)
 OBJ snd; struct __vmData__ *__pRT__; {
 __BEGIN_PACKAGE2__("libstx_goodies_smallsense", _libstx_goodies_smallsense_Init, "stx:goodies/smallsense");
+_SmallSense__AbstractDIalog_Init(pass,__pRT__,snd);
+_SmallSense__AbstractSearchProcessor_Init(pass,__pRT__,snd);
 _SmallSense__CodeHighlightingService_Init(pass,__pRT__,snd);
 _SmallSense__CodeNavigationService_Init(pass,__pRT__,snd);
 _SmallSense__CompletionContext_Init(pass,__pRT__,snd);
@@ -39,6 +41,7 @@
 _SmallSense__EditSupport_Init(pass,__pRT__,snd);
 _SmallSense__Info_Init(pass,__pRT__,snd);
 _SmallSense__Manager_Init(pass,__pRT__,snd);
+_SmallSense__NavigatorStep_Init(pass,__pRT__,snd);
 _SmallSense__PO_Init(pass,__pRT__,snd);
 _SmallSense__ParseTreeIndex_Init(pass,__pRT__,snd);
 _SmallSense__ParseTreeIndexEntry_Init(pass,__pRT__,snd);
@@ -62,16 +65,23 @@
 _SmallSense__TypeHolder_Init(pass,__pRT__,snd);
 _stx_137goodies_137smallsense_Init(pass,__pRT__,snd);
 _SmallSense__AbstractJavaCompletionEngine_Init(pass,__pRT__,snd);
+_SmallSense__AbstractListDialog_Init(pass,__pRT__,snd);
 _SmallSense__ClassInfo_Init(pass,__pRT__,snd);
 _SmallSense__ClassPO_Init(pass,__pRT__,snd);
+_SmallSense__ClassSearchProcessor_Init(pass,__pRT__,snd);
 _SmallSense__ClassType_Init(pass,__pRT__,snd);
+_SmallSense__CompositeProcessor_Init(pass,__pRT__,snd);
 _SmallSense__ConstantPO_Init(pass,__pRT__,snd);
 _SmallSense__GenericEditSupport_Init(pass,__pRT__,snd);
+_SmallSense__ImplementorSearchProcessor_Init(pass,__pRT__,snd);
 _SmallSense__JavaEditSupport_Init(pass,__pRT__,snd);
 _SmallSense__JavaImportPO_Init(pass,__pRT__,snd);
 _SmallSense__MethodBindingPO_Init(pass,__pRT__,snd);
 _SmallSense__MethodInfo_Init(pass,__pRT__,snd);
 _SmallSense__MethodPO_Init(pass,__pRT__,snd);
+_SmallSense__PackagePO_Init(pass,__pRT__,snd);
+_SmallSense__PluggablePO_Init(pass,__pRT__,snd);
+_SmallSense__PluggableSearchProcessor_Init(pass,__pRT__,snd);
 _SmallSense__SmalltalkCompletionEngine_Init(pass,__pRT__,snd);
 _SmallSense__SmalltalkEditSupport_Init(pass,__pRT__,snd);
 _SmallSense__SmalltalkInferencer_Init(pass,__pRT__,snd);
@@ -82,11 +92,18 @@
 _SmallSense__VariableBindingPO_Init(pass,__pRT__,snd);
 _SmallSense__VariablePO_Init(pass,__pRT__,snd);
 _SmallSense__AbstractJavaCompletionEngineSimple_Init(pass,__pRT__,snd);
+_SmallSense__AbstractSearchDialog_Init(pass,__pRT__,snd);
+_SmallSense__AbstractSelectDialog_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__ClassSearchDialog_Init(pass,__pRT__,snd);
 _SmallSense__JavaCompletionEngineSimple_Init(pass,__pRT__,snd);
+_SmallSense__MethodSearchDialog_Init(pass,__pRT__,snd);
+_SmallSense__Navigator_Init(pass,__pRT__,snd);
+_SmallSense__PackageSelectDialog_Init(pass,__pRT__,snd);
+_SmallSense__ProtocolSelectDialog_Init(pass,__pRT__,snd);
 _SmallSense__GroovyCompletionEngineSimple_Init(pass,__pRT__,snd);
 
 _stx_137goodies_137smallsense_extensions_Init(pass,__pRT__,snd);
--- a/smallsense.rc	Thu Feb 12 00:30:40 2015 +0000
+++ b/smallsense.rc	Fri Feb 13 08:44:44 2015 +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", "Thu, 12 Feb 2015 00:22:59 GMT\0"
+      VALUE "ProductDate", "Mon, 09 Feb 2015 16:39:58 GMT\0"
     END
 
   END
--- a/stx_goodies_smallsense.st	Thu Feb 12 00:30:40 2015 +0000
+++ b/stx_goodies_smallsense.st	Fri Feb 13 08:44:44 2015 +0000
@@ -100,13 +100,13 @@
         #'stx:goodies/refactoryBrowser/parser'    "RBBlockNode - extended"
         #'stx:goodies/regex'    "Regex::RxCharSetParser - superclass of SmallSense::TokenPatternParser::TokenSpecParser"
         #'stx:goodies/sunit'    "TestAsserter - superclass of SmallSense::AbstractJavaCompletionEngineTests"
-        #'stx:libbasic'    "Autoload - superclass of SmallSense::BaseTestClass"
+        #'stx:libbasic'    "Collection - extended"
         #'stx:libcomp'    "AbstractSyntaxHighlighter - superclass of SmallSense::SmalltalkParser"
         #'stx:libhtml'    "HTMLDocumentFrame - extended"
         #'stx:libtool'    "AbstractSettingsApplication - superclass of SmallSense::SettingsAppl"
         #'stx:libview'    "DisplaySurface - extended"
         #'stx:libview2'    "ApplicationModel - extended"
-        #'stx:libwidg'    "EditTextView - extended"
+        #'stx:libwidg'    "DialogBox - extended"
         #'stx:libwidg2'    "HierarchicalItem - superclass of SmallSense::ClassPO"
     )
 !
@@ -119,7 +119,7 @@
      by searching all classes (and their packages) which are referenced by my classes."
 
     ^ #(
-        #'stx:libbasic2'    "BackgroundQueueProcessingJob - referenced by SmallSense::Manager>>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"
@@ -147,6 +147,10 @@
     ^ #(
         "<className> or (<className> attributes...) in load order"
         (#'SmallSense::AbstractTestCase' autoload)
+        #'SmallSense::AbstractDIalog'
+        #'SmallSense::AbstractSearchProcessor'
+        (#'SmallSense::AbstractTestCase' autoload)
+        (#'SmallSense::BaseTestClass' autoload)
         #'SmallSense::CodeHighlightingService'
         #'SmallSense::CodeNavigationService'
         #'SmallSense::CompletionContext'
@@ -160,6 +164,7 @@
         #'SmallSense::Info'
         (#'SmallSense::JavaCompletionEngineEnvironmentResource' autoload)
         #'SmallSense::Manager'
+        #'SmallSense::NavigatorStep'
         #'SmallSense::PO'
         #'SmallSense::ParseTreeIndex'
         #'SmallSense::ParseTreeIndexEntry'
@@ -174,6 +179,7 @@
         #'SmallSense::SmalltalkQuickFixer'
         #'SmallSense::SmalltalkSyntaxHighlighter'
         #'SmallSense::SmalltalkUnacceptedMethodEnvironment'
+        (#'SmallSense::TestCase' autoload)
         #'SmallSense::TokenPatternMatcher'
         (#'SmallSense::TokenPatternMatcherTests' autoload)
         #'SmallSense::TokenPatternParser'
@@ -184,22 +190,32 @@
         #'SmallSense::TypeHolder'
         #'stx_goodies_smallsense'
         #'SmallSense::AbstractJavaCompletionEngine'
+        #'SmallSense::AbstractListDialog'
         #'SmallSense::ClassInfo'
         #'SmallSense::ClassPO'
+        #'SmallSense::ClassSearchProcessor'
         #'SmallSense::ClassType'
         (#'SmallSense::CompletionEngineTests' autoload)
+        #'SmallSense::CompositeProcessor'
         #'SmallSense::ConstantPO'
         (#'SmallSense::EditSupportTests' autoload)
+        (#'SmallSense::FinderTests' autoload)
         #'SmallSense::GenericEditSupport'
+        #'SmallSense::ImplementorSearchProcessor'
         #'SmallSense::JavaEditSupport'
         #'SmallSense::JavaImportPO'
         #'SmallSense::MethodBindingPO'
         #'SmallSense::MethodInfo'
         #'SmallSense::MethodPO'
+        #'SmallSense::PackagePO'
+        #'SmallSense::PluggablePO'
+        #'SmallSense::PluggableSearchProcessor'
+        (#'SmallSense::RecognizerTests' autoload)
         #'SmallSense::SmalltalkCompletionEngine'
         #'SmallSense::SmalltalkEditSupport'
         #'SmallSense::SmalltalkInferencer'
         #'SmallSense::SmalltalkParseNodeFinder'
+        (#'SmallSense::SmalltalkParserTests' autoload)
         #'SmallSense::SnippetPO'
         #'SmallSense::UnionType'
         #'SmallSense::UnknownType'
@@ -207,22 +223,26 @@
         #'SmallSense::VariablePO'
         #'SmallSense::AbstractJavaCompletionEngineSimple'
         (#'SmallSense::AbstractJavaCompletionEngineTests' autoload)
+        #'SmallSense::AbstractSearchDialog'
+        #'SmallSense::AbstractSelectDialog'
         #'SmallSense::GroovyEditSupport'
         #'SmallSense::JavaCompletionEngine'
         #'SmallSense::JavaConstructorPO'
         (#'SmallSense::JavaEditSupportTests' autoload)
-        #'SmallSense::MethodKeywordRestPO'
         (#'SmallSense::SmalltalkCompletionEngineTests' autoload)
         (#'SmallSense::SmalltalkEditSupportTests' autoload)
         (#'SmallSense::GroovyCompletionEngineSimpleTests' autoload)
+        (#'SmallSense::JavaCompletionEngineTests' autoload)
+        #'SmallSense::MethodKeywordRestPO'
+        #'SmallSense::ClassSearchDialog'
+        (#'SmallSense::GroovyCompletionEngineSimpleTests' autoload)
         #'SmallSense::JavaCompletionEngineSimple'
         (#'SmallSense::JavaCompletionEngineTests' autoload)
+        #'SmallSense::MethodSearchDialog'
+        #'SmallSense::Navigator'
+        #'SmallSense::PackageSelectDialog'
+        #'SmallSense::ProtocolSelectDialog'
         #'SmallSense::GroovyCompletionEngineSimple'
-        (#'SmallSense::BaseTestClass' autoload)
-        (#'SmallSense::FinderTests' autoload)
-        (#'SmallSense::RecognizerTests' autoload)
-        (#'SmallSense::SmalltalkParserTests' autoload)
-        (#'SmallSense::TestCase' autoload)
     )
 !
 
@@ -273,6 +293,9 @@
         UserPreferences smallSenseCompletionEnabled
         UserPreferences smallSenseCompletionEnabled:
         ReturnNode childNamesAndValuesDo:
+        'Tools::NewSystemBrowser class' #'stx_goodies_smallsense_askForClassToSearch:single:msgTail:resources:filter:forBrowser:thenDo:'
+        UserPreferences smallSenseNewDialogsEnabled
+        UserPreferences smallSenseNewDialogsEnabled:
         UserPreferences smallSenseSmalltalkIndentOnPasteEnabled
         UserPreferences smallSenseSmalltalkIndentOnPasteEnabled:
         EditTextViewCompletionSupport isCompletionViewShown
@@ -287,10 +310,17 @@
         RBProgramNode endPosition
         RBProgramNode startPosition
         RBContainsSmalltalkXEOLCommentRule fixes:
+        'DialogBox class' #'stx_goodies_smallsense_requestProject:from:initialAnswer:suggestions:'
         'Tools::CodeCompletionService class' new
         #'Tools::LintService' buttonPress:x:y:in:
         #'Tools::LintService' showInfoWindowForLine:
         InspectorView preRealize
+        #'Tools::NewSystemBrowser' #'stx_goodies_smallsense_askForMethodCategory:title:okLabel:list:recentList:initialAnswer:'
+        #'Tools::NewSystemBrowser' searchMenuOpenNavigatorOnDeclarations
+        DebugView processShortcut:
+        #'Tools::Inspector2' processShortcut:
+        WorkspaceApplication processShortcut:
+        #'Tools::NewSystemBrowser' processShortcut:
     )
 ! !
 
@@ -358,7 +388,7 @@
     "Swizzle all methods annotated as <swizzle:>"
 
 
-    Swizzled ifTrue:[ ^ self ].
+    Swizzled == true ifTrue:[ ^ self ].
     ParserFlags initialize.
     self extensionMethods do:[:m |
         [
@@ -379,7 +409,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