Use #visualFor: to retrieve image resources from classes
authorStefan Vogel <sv@exept.de>
Fri, 25 Mar 2011 21:05:13 +0100
changeset 2839 25c0162deb43
parent 2838 66257924fbf6
child 2840 3fc46b951a0f
Use #visualFor: to retrieve image resources from classes
MenuEditor.st
--- a/MenuEditor.st	Thu Mar 24 15:34:17 2011 +0100
+++ b/MenuEditor.st	Fri Mar 25 21:05:13 2011 +0100
@@ -5335,7 +5335,7 @@
 !
 
 doBrowseImageClass
-    |cls sel|
+    |cls sel image|
 
     (cls := retrieverHolder value) isNil ifTrue:[
         Dialog warn:'No resource retriever is defined.'.
@@ -5346,6 +5346,13 @@
         cls isNil ifTrue:[
             Dialog warn:'No such resource retriever class.'.
         ] ifFalse:[
+            (cls respondsTo:#visualFor:) ifTrue:[
+                image := cls visualFor:sel.
+                image ~~ (cls perform:sel) ifTrue:[
+                    self warn:'The image is resolved via #visualFor: from some unknown class'.
+                    sel := #visualFor:.
+                ].
+            ].
             UserPreferences current systemBrowserClass openInClass:cls class selector:sel
         ]
     ]
@@ -5354,27 +5361,41 @@
 !
 
 doEditImage
-    |sel cls item|
+    |sel cls item image|
 
     item := imageHolder value.
     item notNil ifTrue:[
-	item doEdit
-    ] ifFalse:[
-	(sel := selectorHolder value) isNil ifTrue:[
-	    Dialog warn:'No selector is defined.'.
-	] ifFalse:[
-	    (cls := retrieverHolder value) isNil ifTrue:[
-		Dialog warn:'No resource retriever is defined.'.
-	    ] ifFalse:[
-		cls := Smalltalk classNamed:cls.
-		cls isNil ifTrue:[
-		    Dialog warn:'No such resource retriever class.'.
-		] ifFalse:[
-		    ImageEditor openOnClass:cls andSelector:sel
-		]
-	    ]
-	]
+        item doEdit.
+        ^ self.
+    ].
+
+    sel := selectorHolder value. 
+    sel isNil ifTrue:[
+        Dialog warn:'No selector is defined.'.
+        ^ self.
+    ].
+    cls := retrieverHolder value.
+    cls isNil ifTrue:[
+        Dialog warn:'No resource retriever is defined.'.
+        ^ self.
     ].
+    cls := Smalltalk classNamed:cls.
+    cls isNil ifTrue:[
+        Dialog warn:'No such resource retriever class.'.
+        ^ self.
+    ].
+    (cls respondsTo:#visualFor:) ifTrue:[
+        image := cls visualFor:sel.
+        image ~~ (cls perform:sel ifNotUnderstood:nil) ifTrue:[
+            self warn:'The image is resolved via #visualFor: from some unknown class'.
+            image notNil ifTrue:[
+                ImageEditor openOnImage:image.
+            ].
+            ^ self.
+        ].
+    ].
+
+    ImageEditor openOnClass:cls andSelector:sel
 ! !
 
 !MenuEditor::ResourceEditor methodsFor:'aspects'!
@@ -5595,7 +5616,13 @@
     selector := aSelector asSymbol.
     selector numArgs == 0 ifFalse:[^ self].
 
-    iconOrSymbol := aClass perform:selector.
+    "do waht the ResourceRetriever will do"
+    (aClass respondsTo:#visualFor:) ifTrue:[
+        iconOrSymbol := aClass visualFor:selector.
+    ].
+    iconOrSymbol isNil ifTrue:[
+        iconOrSymbol := aClass perform:selector.
+    ].
     iconOrSymbol isSymbol ifTrue:[
         icon := ToolbarIconLibrary perform:iconOrSymbol.
     ] ifFalse:[
@@ -5625,14 +5652,22 @@
 !MenuEditor::ResourceEditorItem methodsFor:'user operations'!
 
 doEdit
-    "open image browser on self
-    "
-    |parent|
+    "open image browser on self"
+
+    |parent aClass image|
 
     parent := self parent.
-
-    parent ifNotNil:[
-	ImageEditor openOnClass:(parent selector) andSelector:selector
+    parent notNil ifTrue:[
+        aClass := parent selector.
+        (aClass respondsTo:#visualFor:) ifTrue:[
+            image := aClass visualFor:selector.
+            image ~~ (aClass perform:selector) ifTrue:[
+                self warn:'The image is resolved via #visualFor: from some unknown class'.
+                ImageEditor openOnImage:image.
+                ^ self.
+            ].
+        ].
+        ImageEditor openOnClass:aClass andSelector:selector.
     ].
 ! !