extensions.st
changeset 330 055633bb5ceb
parent 197 49a859d7aa94
child 340 3bdc54707d71
--- a/extensions.st	Mon Apr 28 08:36:50 2014 +0100
+++ b/extensions.st	Tue Apr 29 00:11:40 2014 +0100
@@ -502,6 +502,96 @@
     "Created: / 06-04-2012 / 12:56:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!Tools::NewSystemBrowser class methodsFor:'utilities'!
+
+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|
+
+    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.
+
+    "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>"
+! !
+
 !UserPreferences methodsFor:'accessing-SmallSense'!
 
 smallSenseBackgroundLintEnabled