--- 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