#UI_ENHANCEMENT by exept
authorClaus Gittinger <cg@exept.de>
Fri, 16 Aug 2019 11:15:30 +0200
changeset 18993 cb062ed8dff9
parent 18992 8f39b8d32487
child 18994 00a79ea6b31f
#UI_ENHANCEMENT by exept class: Tools::NewSystemBrowser added: #bufferMenuExtractBuffer: #extractBuffer: changed: #tabMenu: class: Tools::NewSystemBrowser class changed: #tabMenuWithRemove
Tools__NewSystemBrowser.st
--- a/Tools__NewSystemBrowser.st	Wed Aug 14 16:44:17 2019 +0200
+++ b/Tools__NewSystemBrowser.st	Fri Aug 16 11:15:30 2019 +0200
@@ -17870,6 +17870,16 @@
             label: '-'
           )
          (MenuItem
+            label: 'Extract Buffer'
+            itemValue: bufferMenuExtractBuffer:
+            nameKey: ExtractBuffer
+            translateLabel: true
+            argument: 0
+          )
+         (MenuItem
+            label: '-'
+          )
+         (MenuItem
             label: 'Remove Page'
             itemValue: bufferMenuRemoveBuffer:
             nameKey: RemoveBuffer
@@ -20152,16 +20162,20 @@
 
     m := self class tabMenuWithRemove.
     m := m decodeAsLiteralArray.
-    i := m detectItem:[:item | item nameKey == #RemoveBuffer] ifNone:nil.
-    i notNil ifTrue:[
-        i label:(resources string:i label with:index printString).
-        i argument:index.
-        index ~~ self selectedBuffer value ifTrue:[
-            "/ for now: if that buffer is modified,
-            "/ do not allow removing.
-            "/ (must be brought to front, in order for check-for-modification to work)
-            (buffers at:index) modified ifTrue:[
-                i disable
+    "/ 'patch' the menu items to pass the nr. of the current buffer as argument
+    "/ (and also disable, if the current buffer is modified)
+    #(RemoveBuffer ExtractBuffer) do:[:eachKey |
+        i := m detectItem:[:item | item nameKey == eachKey] ifNone:nil.
+        i notNil ifTrue:[
+            i label:(resources string:i label with:index printString).
+            i argument:index.
+            index ~~ self selectedBuffer value ifTrue:[
+                "/ for now: if that buffer is modified,
+                "/ do not allow removing.
+                "/ (must be brought to front, in order for check-for-modification to work)
+                (buffers at:index) modified ifTrue:[
+                    i disable
+                ].
             ].
         ].
     ].
@@ -28965,6 +28979,23 @@
     self createBufferForCurrentClassOrSelectionInCodeView.
 !
 
+bufferMenuExtractBuffer:nr
+    "extract the numbered buffer into a separate browser"
+
+    buffers size ~~ 0 ifTrue:[
+        (self
+            askIfModified:'Code was modified.\\Extract anyway ?'
+            in:(buffers at:nr)
+        )
+        ifTrue:[
+            self extractBuffer:nr.
+        ].
+    ]
+
+    "Modified: / 11-02-2000 / 10:55:02 / cg"
+    "Modified: / 01-03-2019 / 16:20:40 / Claus Gittinger"
+!
+
 bufferMenuRemoveAllButBuffer:bNrToLeaveOpen
     "remove all other than the numbered buffer"
 
@@ -56948,6 +56979,22 @@
 
 !NewSystemBrowser methodsFor:'private-buffers'!
 
+extractBuffer:nr
+    "extract the buffer into a new browser window"
+
+    |class selector state m|
+
+    state := buffers at:nr.
+
+    (m := state theSingleSelectedMethod) isNil ifTrue:[^ self].
+
+    class := m mclass.
+    selector := m selector.
+    self removeBuffer:nr.
+
+    self class openInClass:class selector:selector
+!
+
 removeBuffer:nr
     |prevBuffer previouslyUsedBuffer newIndex state m|