Merge jv
authorHG Automerge
Sat, 26 Nov 2016 22:22:17 +0000
branchjv
changeset 17137 2c2f7c9fc909
parent 17136 cb908d2ba02e (current diff)
parent 17115 81d1616198ec (diff)
child 17138 72bf03c1ff80
Merge
AbstractSettingsApplication.st
DebugView.st
FileOperation.st
Tools__Inspector2.st
Tools__NewSystemBrowser.st
Tools__TestRunner2.st
extensions.st
resources/de.rs
resources/en.rs
--- a/AbstractSettingsApplication.st	Thu Nov 24 22:14:31 2016 +0000
+++ b/AbstractSettingsApplication.st	Sat Nov 26 22:22:17 2016 +0000
@@ -17679,14 +17679,17 @@
 basicSaveSettings
     |newStyle|
 
-    newStyle := self selectedStyle value.
+    newStyle := self selectedStyle value asSymbol.
 
     self withWaitCursorDo:[
         Transcript showCR:'Change style to ' , newStyle , ' ...'.
-        View defaultStyle:newStyle asSymbol.
+        View defaultStyle:newStyle.
+        currentUserPrefs viewStyle:newStyle.
         currentUserPrefs fontPreferencesChanged. "/ force into class defaults
     ].
     self reopenToolsAfterChangedViewStyleSetting.
+
+    "Modified: / 24-11-2016 / 18:02:04 / cg"
 !
 
 closePreview
--- a/DebugView.st	Thu Nov 24 22:14:31 2016 +0000
+++ b/DebugView.st	Sat Nov 26 22:22:17 2016 +0000
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
@@ -1016,50 +1014,57 @@
 
     ^
      #(Menu
-	(
-	 (MenuItem
-	    enabled: canBrowseImplementingClass
-	    label: 'Browse Implementing Class'
-	    itemValue: browseImplementingClass
-	  )
-	 (MenuItem
-	    enabled: canBrowseReceiversClass
-	    label: 'Browse Receiver''s Class'
-	    itemValue: browseReceiversClass
-	  )
-	 (MenuItem
-	    enabled: canBrowseProcessesApplication
-	    label: 'Browse Application Class'
-	    itemValue: browseProcessesApplication
-	  )
-	 (MenuItem
-	    label: '-'
-	  )
-	 (MenuItem
-	    enabled: canBrowseClassHierarchy
-	    label: 'Browse Receiver''s Class Hierarchy'
-	    itemValue: browseClassHierarchy
-	    isVisible: false
-	  )
-	 (MenuItem
-	    enabled: canBrowseFullClassProtocol
-	    label: 'Browse Receiver''s Full Protocol'
-	    itemValue: browseFullClassProtocol
-	    isVisible: false
-	  )
-	 (MenuItem
-	    label: '-'
-	    isVisible: false
-	  )
-	 (MenuItem
-	    enabled: canInspectWidgetHierarchy
-	    label: 'Inspect Widget Hierarchy'
-	    itemValue: inspectWidgetHierarchy
-	  )
-	 )
-	nil
-	nil
+        (
+         (MenuItem
+            enabled: canBrowseImplementingClass
+            label: 'Browse Implementing Class'
+            itemValue: browseImplementingClass
+          )
+         (MenuItem
+            enabled: canBrowseReceiversClass
+            label: 'Browse Receiver''s Class'
+            itemValue: browseReceiversClass
+          )
+         (MenuItem
+            enabled: canBrowseProcessesApplication
+            label: 'Browse Application Class'
+            itemValue: browseProcessesApplication
+          )
+         (MenuItem
+            label: '-'
+          )
+         (MenuItem
+            enabled: canBrowseClassHierarchy
+            label: 'Browse Receiver''s Class Hierarchy'
+            itemValue: browseClassHierarchy
+            isVisible: false
+          )
+         (MenuItem
+            enabled: canBrowseFullClassProtocol
+            label: 'Browse Receiver''s Full Protocol'
+            itemValue: browseFullClassProtocol
+            isVisible: false
+          )
+         (MenuItem
+            label: '-'
+            isVisible: false
+          )
+         (MenuItem
+            enabled: canBrowseProcessesApplication
+            label: 'Inspect Application'
+            itemValue: inspectProcessesApplication
+          )
+         (MenuItem
+            enabled: canInspectWidgetHierarchy
+            label: 'Inspect Widget Hierarchy'
+            itemValue: inspectWidgetHierarchy
+          )
+         )
+        nil
+        nil
       )
+
+    "Modified: / 25-11-2016 / 13:14:28 / cg"
 !
 
 contextMenuSpec
@@ -4757,9 +4762,8 @@
     |app appClass|
 
     (app := self processesApplication) notNil ifTrue:[
-	appClass := app class.
-	appClass browserClass openInClass:appClass selector:nil.
-	^ self
+        appClass := app class.
+        appClass browserClass openInClass:appClass selector:nil.
     ].
 !
 
@@ -4889,13 +4893,11 @@
      at save places (for example: in the event loop) and returns back
      from whatever the process is doing, but does not terminate it."
 
-    self checkIfCodeIsReallyModified ifTrue:[
-        (self confirm:('Code was modified.\\Abort anyway ?'))
-        ifFalse:[
-            ^ self
-        ]
-    ].
+    (self checkIfCodeIsReallyModifiedAndConfirmWith:'Code was modified.\\Abort anyway ?')
+    ifFalse:[ ^ self ].
     ^ self doAbortWithoutConfirmation
+
+    "Modified: / 25-11-2016 / 13:37:05 / cg"
 !
 
 doAbortAll
@@ -4903,24 +4905,20 @@
      at save places (for example: in the event loop) and returns back
      from whatever the process is doing, but does not terminate it."
 
-    self checkIfCodeIsReallyModified ifTrue:[
-	(self confirm:('Code modified - abort anyway ?'))
-	ifFalse:[
-	    ^ self
-	]
-    ].
+    (self checkIfCodeIsReallyModifiedAndConfirmWith:'Code was modified.\\Abort anyway ?') 
+    ifFalse:[ ^ self ].
 
     inspecting ifTrue:[
-	inspectedProcess isDead ifTrue:[
-	    self showTerminated.
-	    ^ self
-	].
-	(AbortOperationRequest isHandledIn:inspectedProcess suspendedContext) ifFalse:[
-	    self showError:'** the process does not handle the abort signal **'
-	] ifTrue:[
-	    self interruptProcessWith:[AbortAllOperationRequest raise].
-	].
-	^ self
+        inspectedProcess isDead ifTrue:[
+            self showTerminated.
+            ^ self
+        ].
+        (AbortOperationRequest isHandledIn:inspectedProcess suspendedContext) ifFalse:[
+            self showError:'** the process does not handle the abort signal **'
+        ] ifTrue:[
+            self interruptProcessWith:[AbortAllOperationRequest raise].
+        ].
+        ^ self
     ].
 
     steppedContext := wrapperContext := nil.
@@ -4929,16 +4927,16 @@
 
     "exit private event-loop"
     catchBlock notNil ifTrue:[
-	abortButton turnOff.
-	catchBlock value.
-
-	"/ not reached
-	'DebugView [warning]: abort failed' errorPrintCR.
+        abortButton turnOff.
+        catchBlock value.
+
+        "/ not reached
+        'DebugView [warning]: abort failed' errorPrintCR.
     ].
 
     ^ self.
 
-    "Modified: / 17.11.2001 / 22:53:22 / cg"
+    "Modified: / 25-11-2016 / 13:36:15 / cg"
 !
 
 doAbortWithoutConfirmation
@@ -5011,11 +5009,8 @@
 
     |proc exContext ex answer|
 
-    self checkIfCodeIsReallyModified ifTrue:[
-        (self confirm:('Code modified - continue anyway ?')) ifFalse:[
-            ^ self
-        ]
-    ].
+    (self checkIfCodeIsReallyModifiedAndConfirmWith:'Code was modified.\\Continue anyway ?')
+    ifFalse:[ ^ self ].
 
     inspecting ifTrue:[
         device hasColors ifTrue:[
@@ -5067,8 +5062,8 @@
         ]
     ]
 
-    "Modified: / 5.10.1998 / 13:03:47 / cg"
-    "Modified: / 26.7.1999 / 15:38:45 / stefan"
+    "Modified: / 26-07-1999 / 15:38:45 / stefan"
+    "Modified: / 25-11-2016 / 13:37:20 / cg"
 !
 
 doContinueAfterDelay
@@ -5299,12 +5294,8 @@
 
     inspecting ifTrue:[^ self].
 
-    self checkIfCodeIsReallyModified ifTrue:[
-        (self confirm:('Code was modified.\\Step anyway ?'))
-        ifFalse:[
-            ^ self
-        ]
-    ].
+    (self checkIfCodeIsReallyModifiedAndConfirmWith:'Code was modified.\\Step anyway ?')
+    ifFalse:[ ^ self ].
 
     canContinue ifTrue:[
         steppedContext := wrapperContext := nil.
@@ -5319,8 +5310,8 @@
         sendButton turnOff.
     ]
 
-    "Created: / 6.3.1997 / 21:09:36 / cg"
-    "Modified: / 29.7.1998 / 21:49:29 / cg"
+    "Created: / 06-03-1997 / 21:09:36 / cg"
+    "Modified: / 25-11-2016 / 13:37:34 / cg"
 !
 
 doNext
@@ -5406,14 +5397,13 @@
     "resend - the selected context is unwound and its message resent.
      To be done after a cde change, to get nto the new method"
 
-    self checkIfCodeIsReallyModified ifTrue:[
-	(self confirm:('Code modified - resend anyway ?')) ifFalse:[
-	    ^ self
-	]
-    ].
     inspecting ifTrue:[
-	^ self showError:'** not avail in inspecting debugger **'
-    ].
+        ^ self showError:'** not avail in inspecting debugger **'
+    ].
+
+    (self checkIfCodeIsReallyModifiedAndConfirmWith:'Code was modified.\\Resend anyway ?')
+    ifFalse:[ ^ self ].
+
     steppedContext := wrapperContext := nil.
     haveControl := false.
     exitAction := #resend. "exit private event-loop"
@@ -5424,22 +5414,22 @@
 
     'DebugView [warning]: resend failed' errorPrintCR.
     resendButton turnOff.
+
+    "Modified: / 25-11-2016 / 13:37:56 / cg"
 !
 
 doRestart
     "restart - the selected context will be restarted"
 
-    self checkIfCodeIsReallyModified ifTrue:[
-	(self confirm:('Code modified - restart anyway ?')) ifFalse:[
-	    ^ self
-	]
-    ].
+    (self checkIfCodeIsReallyModifiedAndConfirmWith:'Code was modified.\\Restart anyway ?')
+    ifFalse:[ ^ self ].
+
     inspecting ifTrue:[
-	selectedContext isNil ifTrue:[
-	    ^ self showError:'** select a context first **'
-	].
-	self interruptProcessWith:[ selectedContext unwindAndRestart ].
-	^ self
+        selectedContext isNil ifTrue:[
+            ^ self showError:'** select a context first **'
+        ].
+        self interruptProcessWith:[ selectedContext unwindAndRestart ].
+        ^ self
     ].
     steppedContext := wrapperContext := nil.
     haveControl := false.
@@ -5452,25 +5442,21 @@
     'DebugView [warning]: restart failed' errorPrintCR.
     restartButton turnOff.
 
-    "Modified: / 29.7.1998 / 21:49:53 / cg"
+    "Modified: / 25-11-2016 / 13:38:14 / cg"
 !
 
 doReturn
     "return - the selected context will do a ^nil"
 
-    self checkIfCodeIsReallyModified ifTrue:[
-	(self confirm:('Code modified - return anyway ?'))
-	ifFalse:[
-	    ^ self
-	]
-    ].
+    (self checkIfCodeIsReallyModifiedAndConfirmWith:'Code was modified.\\Return anyway ?')
+    ifFalse:[ ^ self ].
 
     inspecting ifTrue:[
-	selectedContext isNil ifTrue:[
-	    ^ self showError:'** select a context first **'
-	].
-	self interruptProcessWith:[selectedContext unwind:nil].
-	^ self
+        selectedContext isNil ifTrue:[
+            ^ self showError:'** select a context first **'
+        ].
+        self interruptProcessWith:[selectedContext unwind:nil].
+        ^ self
     ].
 
     steppedContext := wrapperContext := nil.
@@ -5484,7 +5470,7 @@
     'DebugView [warning]: return failed' errorPrintCR.
     returnButton turnOff.
 
-    "Modified: / 29.7.1998 / 21:50:03 / cg"
+    "Modified: / 25-11-2016 / 13:38:27 / cg"
 !
 
 doSend
@@ -5529,12 +5515,8 @@
 
     inspecting ifTrue:[^ self].
 
-    self checkIfCodeIsReallyModified ifTrue:[
-        (self confirm:('Code was modified\\Step anyway ?'))
-        ifFalse:[
-            ^ self
-        ]
-    ].
+    (self checkIfCodeIsReallyModifiedAndConfirmWith:'Code was modified.\\Step anyway ?')
+    ifFalse:[ ^ self ].
 
     canContinue ifTrue:[
         selectedContext notNil ifTrue:[
@@ -5596,7 +5578,7 @@
         stepButton turnOff. nextButton turnOff. sendButton turnOff.
     ]
 
-    "Modified: / 29.7.1998 / 21:50:16 / cg"
+    "Modified: / 25-11-2016 / 13:38:40 / cg"
 !
 
 doStepAfterDelay
@@ -5625,16 +5607,12 @@
 doTerminate
     "terminate - the process has a chance for cleanup"
 
-    self checkIfCodeIsReallyModified ifTrue:[
-	(self confirm:('Code modified - terminate anyway ?'))
-	ifFalse:[
-	    ^ self
-	]
-    ].
+    (self checkIfCodeIsReallyModifiedAndConfirmWith:'Code was modified.\\Terminate anyway ?')
+    ifFalse:[ ^ self ].
 
     inspecting ifTrue:[
-	self processPerform:#terminate.
-	^ self
+        self processPerform:#terminate.
+        ^ self
     ].
 
     steppedContext := wrapperContext := nil.
@@ -5646,15 +5624,15 @@
 
     "/ not reached (normally)
     inspecting ifFalse:[
-	'DebugView [warning]: terminate failed' errorPrintCR.
-	(self confirm:'Regular terminate failed - do it the hard way ?') ifTrue:[
-	    Debugger newDebugger.
-	    Processor activeProcess terminate.
-	]
+        'DebugView [warning]: terminate failed' errorPrintCR.
+        (self confirm:'Regular terminate failed - do it the hard way ?') ifTrue:[
+            Debugger newDebugger.
+            Processor activeProcess terminate.
+        ]
     ].
     terminateButton turnOff.
 
-    "Modified: / 29.7.1998 / 21:50:35 / cg"
+    "Modified: / 25-11-2016 / 13:38:51 / cg"
 !
 
 doTrace
@@ -5835,22 +5813,45 @@
     ]
 !
 
+inspectProcessesApplication
+    "inspect the application (of the process, if it is a GUI process)"
+
+    |app|
+
+    (app := self processesApplication) notNil ifTrue:[
+        app inspect.
+    ].
+!
+
 inspectWidgetHierarchy
-    |rcvr view|
-
-    selectedContext isNil ifTrue:[ ^ self ].
+    |rcvr view app|
+
     Tools::ViewTreeInspectorApplication isNil ifTrue:[
-	Dialog warn:'Missing class: Tools::ViewTreeInspectorApplication'.
-	^ self.
-    ].
-
-    rcvr := selectedContext receiver.
-    rcvr isView ifTrue:[
-	view := rcvr
-    ] ifFalse:[
-	view := rcvr window
+        Dialog warn:'Missing class: Tools::ViewTreeInspectorApplication'.
+        ^ self.
+    ].
+
+    selectedContext notNil ifTrue:[
+        rcvr := selectedContext receiver.
+        rcvr isView ifTrue:[
+            view := rcvr
+        ] ifFalse:[
+            (rcvr isKindOf:ApplicationModel) ifTrue:[
+                view := rcvr window
+            ].
+        ].
+    ].
+    view isNil ifTrue:[
+        (app := self processesApplication) notNil ifTrue:[
+            view := app window
+        ] ifFalse:[
+            Dialog warn:'Please select a context with the app as receiver'.
+            ^ self.
+        ]
     ].
     Tools::ViewTreeInspectorApplication openOn:view
+
+    "Modified: / 25-11-2016 / 13:21:45 / cg"
 !
 
 middleButtonMenu
@@ -7160,7 +7161,13 @@
     |m|
 
     m := contextView middleButtonMenu.
-    ^ m notNil and:[m isEnabled:#browseReceiversClass]
+    ^ m notNil 
+        and:[
+            (m isEnabled:#browseReceiversClass)
+            or:[ m isEnabled:#browseImplementingClass ]
+        ]
+
+    "Modified: / 25-11-2016 / 13:25:55 / cg"
 !
 
 canCloseAllDebuggers
@@ -7181,9 +7188,14 @@
 canInspectWidgetHierarchy
     |rcvr|
 
-    ^ selectedContext notNil
-    and:[ (rcvr := selectedContext receiver) isView
-	  or:[ rcvr isKindOf: ApplicationModel ]]
+    ^ (selectedContext notNil
+        and:[ (rcvr := selectedContext receiver) isView
+              or:[ rcvr isKindOf: ApplicationModel ]])
+    or:[
+        self canBrowseProcessesApplication
+    ]
+
+    "Modified: / 25-11-2016 / 13:17:20 / cg"
 !
 
 canRestart
@@ -8503,6 +8515,18 @@
     ^ true
 !
 
+checkIfCodeIsReallyModifiedAndConfirmWith:questionString
+    "if code was not modified or confirmation answered with 'ok',
+     return true (i.e. whatever user wants to do should be done).
+     Otherwise, return false"
+
+    self checkIfCodeIsReallyModified ifFalse:[^ true].
+    (self confirm:(resources stringWithCRs:questionString)) ifTrue:[^ true].
+    ^ false.
+
+    "Created: / 25-11-2016 / 13:35:34 / cg"
+!
+
 checkSelectionChangeAllowed
     ^ self checkSelectionChangeAllowed:nil
 !
@@ -9506,7 +9530,7 @@
 
 printConditionOn:aStream
     ignoredSendingClassAndSelectors notEmptyOrNil ifTrue:[
-        aStream nextPutAll:(' if called from %1 » %2'
+        aStream nextPutAll:(' if called from %1  %2'
                                 bindWith:ignoredSendingClassAndSelectors first first
                                 with:ignoredSendingClassAndSelectors first second).
         ^ self.
--- a/FileOperation.st	Thu Nov 24 22:14:31 2016 +0000
+++ b/FileOperation.st	Sat Nov 26 22:22:17 2016 +0000
@@ -1602,7 +1602,7 @@
                 stringWithCRs:'Cannot rename file %1 to %2 !!\\(%3)'
                 with:oldFile baseName
                 with:newName
-                with:(OperatingSystem lastErrorString).
+                with:ex errorString.
         Dialog warn:msg.
         result := false.
         ^ self.
--- a/Tools__Inspector2.st	Thu Nov 24 22:14:31 2016 +0000
+++ b/Tools__Inspector2.st	Sat Nov 26 22:22:17 2016 +0000
@@ -1094,6 +1094,8 @@
 !
 
 operationsMenu
+    "return an inspected-object-specific operations menu"
+    
     |items menu|
     
     items := currentObjectHolder value inspectorExtraMenuOperations.
@@ -1101,8 +1103,12 @@
     
     menu := Menu new.
     items do:[:eachPair |
+        |xLatedLabel|
+
+        "/ mhm - should the translation come from the inspected object's resources?
+        xLatedLabel := resources string:eachPair first. 
         menu addItem:(MenuItem 
-                        label:eachPair first
+                        label:xLatedLabel
                         itemValue:eachPair second).
     ].
     ^ menu
--- a/Tools__NewSystemBrowser.st	Thu Nov 24 22:14:31 2016 +0000
+++ b/Tools__NewSystemBrowser.st	Sat Nov 26 22:22:17 2016 +0000
@@ -8231,6 +8231,11 @@
                   label: 'Browse Classes Package Directory'
                   itemValue: classMenuBrowseClassesPackageDirectory
                 )
+               (MenuItem
+                  enabled: hasSingleClassSelectedHolder
+                  label: 'Browse Class Package''s Resource Directory'
+                  itemValue: classMenuBrowseClassPackagesResourceDirectory
+                )
                )
               nil
               nil
@@ -8489,6 +8494,8 @@
         nil
         nil
       )
+
+    "Modified: / 25-11-2016 / 13:42:45 / cg"
 !
 
 classNewGroovyClassSlice
@@ -12181,6 +12188,19 @@
                   translateLabel: true
                   isVisible: hasExtensionMethodSelectedHolder
                 )
+               (MenuItem
+                  label: '-'
+                )
+               (MenuItem
+                  enabled: hasMethodSelectedHolder
+                  label: 'Browse Classes Package Directory'
+                  itemValue: methodListMenuBrowseClassesPackageDirectory
+                )
+               (MenuItem
+                  enabled: hasMethodSelectedHolder
+                  label: 'Browse Class Package''s Resource Directory'
+                  itemValue: methodListMenuBrowseClassPackagesResourceDirectory
+                )
                )
               nil
               nil
@@ -12197,7 +12217,7 @@
         nil
       )
 
-    "Modified: / 28-02-2012 / 09:06:15 / cg"
+    "Modified: / 25-11-2016 / 15:08:57 / cg"
 !
 
 selectorSmallTeamMenu
@@ -29470,6 +29490,40 @@
     "Modified: / 28-02-2012 / 16:45:08 / cg"
 !
 
+browseClassPackagesResourceDirectoryOf:aClass
+    "open a filebrowser in the class package's resource directory"
+
+    |fileBrowser dir fn|
+
+    fileBrowser := UserPreferences fileBrowserClass.
+
+    dir := aClass theNonMetaclass packageDirectory.
+    (dir asFilename exists and:[(fn := dir / 'resources') exists]) ifTrue:[
+        fileBrowser openIn:fn
+    ] ifFalse:[
+        fileBrowser openIn:dir
+    ]
+
+    "Created: / 25-11-2016 / 15:05:01 / cg"
+!
+
+browseClassesPackageDirectoryOf:aClass
+    "open a filebrowser in the classes package directory"
+
+    |fileBrowser dir fn|
+
+    fileBrowser := UserPreferences fileBrowserClass.
+
+    dir := aClass theNonMetaclass packageDirectory.
+    (dir asFilename exists and:[(fn := dir / aClass classFilename) exists]) ifTrue:[
+        fileBrowser openOn:fn
+    ] ifFalse:[
+        fileBrowser openIn:dir
+    ]
+
+    "Created: / 25-11-2016 / 15:06:05 / cg"
+!
+
 checkCompilabilityOf:aClass errorsOnly:errorsOnly notify:warningCollector reportFailedMethodsInto:aBlock
     "check compilability of aClass; write warning and errormessages to outStream.
      (meant for a human to read)"
@@ -29707,20 +29761,21 @@
     "Modified: / 28-02-2012 / 16:45:26 / cg"
 !
 
+classMenuBrowseClassPackagesResourceDirectory
+    "open a filebrowser in the class package's resource directory"
+
+    self browseClassPackagesResourceDirectoryOf:(self theSingleSelectedClass theNonMetaclass)
+
+    "Created: / 25-11-2016 / 13:31:12 / cg"
+    "Modified: / 25-11-2016 / 15:05:28 / cg"
+!
+
 classMenuBrowseClassesPackageDirectory
     "open a filebrowser in the classes package directory"
 
-    |fileBrowser cls dir fn|
-
-    fileBrowser := UserPreferences fileBrowserClass.
-
-    cls := self theSingleSelectedClass theNonMetaclass.
-    dir := cls packageDirectory.
-    (dir asFilename exists and:[(fn := dir / cls classFilename) exists]) ifTrue:[
-        fileBrowser openOn:fn
-    ] ifFalse:[
-        fileBrowser openIn:dir
-    ]
+    self browseClassesPackageDirectoryOf:(self theSingleSelectedClass theNonMetaclass).
+
+    "Modified: / 25-11-2016 / 15:06:31 / cg"
 !
 
 classMenuChangeAspect:aspect
@@ -40199,6 +40254,32 @@
 
 !NewSystemBrowser methodsFor:'menu actions-methodList'!
 
+methodListMenuBrowseClassPackagesResourceDirectory
+    "add a buffer/open a browser showing the selected method class packages' resource folder"
+
+    |classes|
+
+    classes := self selectedMethodsClasses asSet.
+    classes size == 1 ifTrue:[
+        self browseClassPackagesResourceDirectoryOf:(classes first).
+    ].
+
+    "Created: / 25-11-2016 / 15:09:34 / cg"
+!
+
+methodListMenuBrowseClassesPackageDirectory
+    "add a buffer/open a browser showing the selected method classes' package folder"
+
+    |classes|
+
+    classes := self selectedMethodsClasses asSet.
+    classes size == 1 ifTrue:[
+        self browseClassesPackageDirectoryOf:(classes first).
+    ].
+
+    "Created: / 25-11-2016 / 15:07:30 / cg"
+!
+
 methodListMenuCheckInClass
     "check the selected methods class(es) into the source repository."
 
@@ -52157,7 +52238,7 @@
             selfSendsOnly:true
       ]
 
-    "Modified: / 05-09-2006 / 10:34:10 / cg"
+    "Modified: / 25-11-2016 / 16:00:46 / cg"
 !
 
 globalReferencesMenu
@@ -52546,12 +52627,16 @@
                     item itemValue:actionSelector argument:mSel.
                     m addItem:item.
 
-                    selfSendsOnly ifTrue:[
-                        methodsMessages := eachMethod messagesSentToSelf.
-                    ] ifFalse:[
-                        methodsMessages := eachMethod messagesSent.
-                    ].
-                    allMessagesSent addAll:methodsMessages
+                    "/ this is ethe expensive part (parsing the code for the messages sent).
+                    "/ for huge classes, the selectors are often already in the set.
+                    (eachMethod literalsDetect:[:lit | (allMessagesSent includes:lit) not] ifNone:[nil]) notNil ifTrue:[
+                        selfSendsOnly ifTrue:[
+                            methodsMessages := eachMethod messagesSentToSelf.
+                        ] ifFalse:[
+                            methodsMessages := eachMethod messagesSent.
+                        ].
+                        allMessagesSent addAll:methodsMessages
+                    ].
                 ].
             ] ifFalse:[
                 "/ Not a Smalltalk, must ask toolbox
@@ -52611,8 +52696,8 @@
     ^ m
 
     "Created: / 27-04-2010 / 15:05:52 / cg"
-    "Modified: / 30-07-2013 / 15:53:58 / cg"
     "Modified: / 06-09-2013 / 19:37:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 25-11-2016 / 15:56:37 / cg"
 !
 
 messagesMenuFor:actionSelector withSenderChain:withSenderChain withImplementorChain:withImplementorChain
@@ -52672,6 +52757,8 @@
         withLocalSenders:withLocalSenders withLocalImplementors:withLocalImplementors
         withCallersOfThisMethod:withCallersOfThisMethod withMethodsCalledByThisMethod:withMethodsCalledByThisMethod
         selfSendsOnly:selfSendsOnly
+
+    "Modified: / 25-11-2016 / 16:00:56 / cg"
 !
 
 operationsMenu
@@ -63560,7 +63647,8 @@
 
         rev := revInfo revision.
         author := revInfo author.
-        date := revInfo date asDate.
+        date := revInfo date.
+        date notNil ifTrue:[date := date asDate].
 
         maxWRevString := maxWRevString max:(font widthOf:rev).
         maxWAuthorString := maxWAuthorString max:(font widthOf:author).
--- a/Tools__TestRunner2.st	Thu Nov 24 22:14:31 2016 +0000
+++ b/Tools__TestRunner2.st	Sat Nov 26 22:22:17 2016 +0000
@@ -1265,8 +1265,8 @@
 !
 
 debugError: test
-
     | caughtEx |
+
     caughtEx := nil.
     [
         test debug
@@ -1274,22 +1274,26 @@
         caughtEx := ex.
         ex pass
     ].
-    caughtEx ifNil:
-        [errorListHolder value remove: test.
-        errorListHolder changed].
+    caughtEx isNil ifTrue:[
+        errorListHolder value remove: test.
+        errorListHolder changed
+    ].
     ((caughtEx isKindOf: TestResult resumableFailure)
-        or:[caughtEx isKindOf: TestResult failure]) ifTrue:
-            [errorListHolder value remove: test.
+      or:[caughtEx isKindOf: TestResult failure]
+    ) ifTrue:[
+            errorListHolder value remove: test.
             errorListHolder changed.
             failureListHolder value add: test.
-            failureListHolder changed].
+            failureListHolder changed
+    ].
 
     "Created: / 06-06-2008 / 09:19:53 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 25-11-2016 / 08:12:50 / cg"
 !
 
 debugFailure: test
-
     | caughtEx |
+
     caughtEx := nil.
     [
         test debug
@@ -1297,11 +1301,13 @@
         caughtEx := ex.
         ex pass
     ].
-    caughtEx ifNil:
-        [failureListHolder value remove: test.
-        failureListHolder changed].
+    caughtEx isNil ifTrue:[
+        failureListHolder value remove: test.
+        failureListHolder changed
+    ].
 
     "Created: / 06-06-2008 / 09:20:00 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 25-11-2016 / 08:12:18 / cg"
 !
 
 runCoverageAction
@@ -1358,30 +1364,28 @@
 !
 
 runErrorsAction
-    "akce na tlacitku Run Errors"
-    
     self runSuite: self errorTestSuite keepFailures: true keepErrors: false
 
     "Modified: / 18-01-2008 / 18:38:33 / janfrog"
     "Modified: / 06-06-2008 / 09:13:30 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified (comment): / 25-11-2016 / 08:13:07 / cg"
 !
 
 runFailuresAction
-    "akce na tlacitku Run Failures"
-    
     self runSuite: self failureTestSuite keepFailures: false keepErrors: true
 
     "Modified: / 18-01-2008 / 18:38:40 / janfrog"
     "Modified: / 06-06-2008 / 09:13:57 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified (comment): / 25-11-2016 / 08:13:11 / cg"
 !
 
 runProfiledAction
-        "akce na tlacitku Run Profiled"
-        self shouldImplement.
+    self shouldImplement.
+
+    "Modified (comment): / 25-11-2016 / 08:11:05 / cg"
 !
 
 runSelectedAction
-
     | result |
 
     result := self runSuite: self selectedTestSuite.
@@ -1391,6 +1395,7 @@
     "Modified: / 06-06-2008 / 08:51:42 / Jan Vrany <vranyj1@fel.cvut.cz>"
     "Modified: / 19-03-2010 / 08:44:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 04-07-2011 / 23:04:46 / cg"
+    "Modified (format): / 25-11-2016 / 08:13:17 / cg"
 !
 
 runSuite: aTestSuite
--- a/extensions.st	Thu Nov 24 22:14:31 2016 +0000
+++ b/extensions.st	Sat Nov 26 22:22:17 2016 +0000
@@ -1298,6 +1298,9 @@
 !Image methodsFor:'inspecting'!
 
 inspector2TabImage
+    "an extra tab showing the image;
+     Q: is this needed? (the displayObject tab already shows this)"
+    
     ^ self newInspector2Tab
         label: 'Image';
         priority: 50;
@@ -1309,7 +1312,11 @@
 !Image methodsFor:'inspecting'!
 
 inspector2Tabs
-    ^ super inspector2Tabs copyWith:#inspector2TabImage
+    |tabs|
+    
+    tabs := super inspector2Tabs.
+    tabs := tabs copyWithout:#inspector2TabDisplayObject.
+    ^ tabs copyWith:#inspector2TabImage
 
     "Created: / 11-10-2011 / 17:11:21 / cg"
     "Modified: / 13-02-2015 / 21:02:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -1799,7 +1806,7 @@
     "a tab, showing the old basic inspector"
 
     ^ Tools::Inspector2Tab new
-            priority: 40;
+            priority: 90;
             label:'Basic';
             view: (InspectorView new inspect:self);
             yourself
--- a/resources/de.rs	Thu Nov 24 22:14:31 2016 +0000
+++ b/resources/de.rs	Sat Nov 26 22:22:17 2016 +0000
@@ -313,7 +313,7 @@
 'Browse Class Extensions'                                                                               'Browser auf Erweiterungen'
 'Browse Class Hierarchy'                                                                                'Hierarchiebrowser'
 'Browse Classes'                                                                                        'Klassen browsen'
-'Browse Classes Package Directory'                                                                      'Browser auf Projektverzeichnis der Klasse'
+'Browse Classes Package Directory'                                                                      'Dateibrowser auf Projektverzeichnis der Klasse'
 'Browse Full Class Protocol'                                                                            'Browser für gesamtes Protokoll'
 'Browse Full Class Source'                                                                              'Browser auf gesamten Quellcode'
 'Browse Implementing Class'                                                                             'Browser auf implementierende Klasse'
@@ -357,7 +357,7 @@
 'Browser on Extension''s Project'                                                                       'Browser auf erweiterndes Paket'
 'Browser on Extensions'                                                                                 'Browser auf Erweiterungen'
 'Browser on Extensions for Project'                                                                     'Browser auf Erweiterungen zu Paket'
-'Browser on Full Class(es)'                                                                             'Browser auf gesamter Klasse'
+'Browser on Full Class(es)'                                                                             'Browser auf gesamte Klasse'
 'Browser on Full Protocol'                                                                              'Browser auf gesamtes Protokoll'
 'Browser on Full Protocols Matching'                                                                    'Browser auf gesamtes Protokoll mit Muster'
 'Browser on Implementors'                                                                               'Imlementierungen browsen'
@@ -635,6 +635,10 @@
 'Code was modified.\\Exit anyway ?'                                                                     'Modifizierter Text wurde nicht gesichert.\\Dennoch beenden ?'
 'Code was modified.\\Abort anyway ?'                                                                    'Modifizierter Text wurde nicht gesichert.\\Dennoch abbrechen ?'
 'Code was modified.\\Step anyway ?'                                                                     'Modifizierter Text wurde nicht gesichert.\\Dennoch Einzelschritt ausführen ?'
+'Code was modified.\\Terminate anyway ?'                                                                'Modifizierter Text wurde nicht gesichert.\\Prozess dennoch beenden ?'
+'Code was modified.\\Return anyway ?'                                                                   'Modifizierter Text wurde nicht gesichert.\\Dennoch zurückkehren ?'
+'Code was modified.\\Restart anyway ?'                                                                  'Modifizierter Text wurde nicht gesichert.\\Dennoch zurück zum Anfang  ?'
+'Code was modified.\\Resend anyway ?'                                                                   'Modifizierter Text wurde nicht gesichert.\\Dennoch erneut senden ?'
 'Code was modified.\\Remove buffer anyway'                                                              'Änderungen wurden nicht gesichert.\\Seite dennoch entfernen'
 'Coded Break & Tracepoints'                                                                             'Break- und Tracepoints im Code'
 'Coded Breakpoints'                                                                                     'Breakpoints im Code'
@@ -1756,6 +1760,7 @@
 'Open Changesbrowser on File'                                                                           'Änderungsbrowser auf Datei öffnen'
 'Open File'                                                                                             'Datei öffnen'
 'Open File Browser on Project''s Folder'                                                                'Dateibrowser auf Projektverzeichnis öffnen'
+'Browse Class Package''s Resource Directory'                                                            'Dateibrowser auf Ressourceverzeichnis des Pakets'
 'Open File Browser on Package''s Folder'                                                                'Dateibrowser auf Paketverzeichnis öffnen'
 'Open Finder'                                                                                           'Finder öffnen'
 'Open Multiple Applications'                                                                            'Öffnen mehrerer Editoren'
--- a/resources/en.rs	Thu Nov 24 22:14:31 2016 +0000
+++ b/resources/en.rs	Sat Nov 26 22:22:17 2016 +0000
@@ -1,6 +1,6 @@
 #encoding utf8
 
-; $Header: /cvs/stx/stx/libtool/resources/en.rs,v 1.8 2015-01-02 17:56:36 cg Exp $
+; $Header$
 
 ;--------------------------------------------------------------------------------------------
 ;