MenuEditor.st
changeset 416 d28e8c5f25f3
parent 414 116cf2acebe3
child 418 f47e99ae91bc
--- a/MenuEditor.st	Sat Jan 17 00:25:04 1998 +0100
+++ b/MenuEditor.st	Sat Jan 17 00:27:00 1998 +0100
@@ -1854,12 +1854,14 @@
 !
 
 openModalOnClass:aClass andSelector:aSelector
+
     specClass := Association key:aClass value:aSelector.
     super openInterfaceModal.
 
 !
 
 openOnClass:aClass andSelector:aSelector
+
     specClass := Association key:aClass value:aSelector.
     super openInterface.
     self buildFrom:aClass andSelector:aSelector.
@@ -1964,29 +1966,26 @@
 
     |cls resourceClass resourceSelector imageResourceMessage readStream|
 
-    cls := self resolveName:(self specClass).
+    cls := self resolveName: self specClass.
     cls isNil ifTrue:[
         ^ self information:'No valid class defined!!'.
     ].
-    (aspects at:#retriever) value size > 0
-        ifTrue:  [resourceClass := (aspects at:#retriever) value]
-        ifFalse: [resourceClass := cls].
     (aspects at:#icon) value size > 0
         ifTrue:  [resourceSelector := (aspects at:#icon) value]
         ifFalse: [resourceSelector := #stxIcon].
-    imageResourceMessage := ImageEditor openModalOnClass: resourceClass andSelector: resourceSelector.
-    readStream := imageResourceMessage readStream.
-    resourceClass := (readStream upTo: $ ) asSymbol.
-    resourceSelector := readStream upToEnd asSymbol.
-    resourceClass size > 0 ifTrue: [(aspects at:#retriever) value: resourceClass].
-    resourceSelector size > 0 ifTrue: [(aspects at:#icon) value: resourceSelector. self modifiedChannel value: true].
-
-    (aspects at:#retriever) value = specClass
+    (aspects at:#retriever) value size > 0
+        ifTrue:  [resourceClass := (aspects at:#retriever) value]
+        ifFalse: [resourceClass := cls withAllSuperclasses detect: [:cls| cls class implements: resourceSelector] ifNone: [cls]].
+
+    (imageResourceMessage := ImageEditor openModalOnClass: resourceClass andSelector: resourceSelector) notNil
     ifTrue:
     [
-        (aspects at:#retriever) value: nil
+        readStream := imageResourceMessage readStream.
+        resourceClass := (readStream upTo: $ ) asSymbol.
+        resourceSelector := readStream upToEnd asSymbol.
+        resourceClass size > 0 ifTrue: [(aspects at:#retriever) value: resourceClass].
+        resourceSelector size > 0 ifTrue: [(aspects at:#icon) value: resourceSelector. self modifiedChannel value: true]
     ]
-
 !
 
 doFromClass