added protocol to add an itemList with resource-translation
authorClaus Gittinger <cg@exept.de>
Wed, 03 Mar 2004 17:52:13 +0100
changeset 2923 1eaa937f0568
parent 2922 70e3f3ec7980
child 2924 65b0b26ff549
added protocol to add an itemList with resource-translation
MenuView.st
--- a/MenuView.st	Wed Mar 03 17:51:48 2004 +0100
+++ b/MenuView.st	Wed Mar 03 17:52:13 2004 +0100
@@ -519,10 +519,15 @@
 !
 
 addItemList:list after:itemNameOrSelector
+    self addItemList:list resources:nil after:itemNameOrSelector
+!
+
+addItemList:list resources:resources after:itemNameOrSelector
     self 
         addLabels:(list collect:[:row | row at:1])
         selectors:(list collect:[:row | row at:2 ifAbsent:nil])
         accelerators:(list collect:[:row | row at:3 ifAbsent:nil])
+        resources:resources
         after:itemNameOrSelector
 !
 
@@ -839,6 +844,212 @@
     "Modified: 24.3.1996 / 17:12:23 / cg"
 !
 
+addLabels:moreLabels selectors:moreSelectors accelerators:shorties resources:resources after:aLabelOrSelectorOrNumber 
+    "insert more labels/selectors at some place.
+     Being very friendly here, allowing label-string, selector or numeric
+     index for the argument aLabelOrSelectorOrNumber.
+     If such an item is not found, insert the new items at the END.
+
+     To be independent of the entries label, we recommend you use the selector
+     as index; in systems which translate strings for national variants,
+     this makes your code easier to maintain."
+
+    |idx|
+
+    aLabelOrSelectorOrNumber isNil ifTrue:[
+        idx := list size + 1
+    ] ifFalse:[
+        idx := (self indexOf:aLabelOrSelectorOrNumber) + 1.
+        idx == 1 ifTrue:[
+            idx := list size + 1
+        ]
+    ].
+
+    ^ self 
+        addLabels:moreLabels 
+        selectors:moreSelectors 
+        accelerators:shorties
+        resources:resources
+        before:idx
+
+    "Created: 28.2.1996 / 17:48:24 / cg"
+    "Modified: 4.3.1996 / 23:26:02 / cg"
+!
+
+addLabels:moreLabels selectors:moreSelectors accelerators:shorties resources:resources before:aLabelOrSelectorOrNumber 
+    "insert more labels/selectors at some place.
+     Being very friendly here, allowing label-string, selector or numeric
+     index for the argument aLabelOrSelectorOrNumber. 
+     If such an item is not found, insert the new items at the beginning.
+
+     To be independent of the entries label, we recommend you use the selector
+     as index; in systems which translate strings for national variants,
+     this makes your code easier to maintain."
+
+    |idx oldSize
+     i     "{ Class: SmallInteger }" 
+     nMore "{ Class: SmallInteger }"|
+
+    list isNil ifTrue:[
+        ^ self addLabels:moreLabels selectors:moreSelectors resources:resources
+    ].
+    "
+     be user friendly - allow both label or selector
+     to be passed
+    "
+    aLabelOrSelectorOrNumber isNil ifTrue:[
+        idx := 1
+    ] ifFalse:[
+        idx := self indexOf:aLabelOrSelectorOrNumber.
+        (idx between:2 and:(list size + 1)) ifFalse:[
+            "add to beginning"
+            idx := 1
+        ]
+    ].
+
+    nMore := moreLabels size.
+    "/ just a check
+    moreSelectors size ~~ nMore ifTrue:[
+        ^ self error
+    ].
+
+    oldSize := list size.
+
+    list := list asOrderedCollection.
+    i := idx.
+    moreLabels do:[:aLabel |
+        |l|
+
+        resources notNil 
+            ifTrue:[l := resources string:aLabel]
+            ifFalse:[l := aLabel].
+
+        list add:l beforeIndex:i. i := i + 1.
+    ].
+
+    selectors := (selectors ? #()) asOrderedCollection.
+    i := idx.
+    moreSelectors do:[:sel |
+        selectors add:sel beforeIndex:i. i := i + 1.
+    ].
+
+    enableFlags := (enableFlags ? #()) asOrderedCollection.
+    i := idx.
+    nMore timesRepeat:[
+        enableFlags add:true beforeIndex:i. i := i + 1.
+    ].
+
+    subMenus notNil ifTrue:[
+        subMenus := subMenus asOrderedCollection.
+        i := idx.
+        i >= subMenus size ifTrue:[
+            subMenus grow:i-1
+        ].
+        nMore timesRepeat:[
+            subMenus add:nil beforeIndex:i. i := i + 1.
+        ].
+    ].
+    args notNil ifTrue:[
+        args := args asOrderedCollection.
+        i := idx.
+        i >= args size ifTrue:[
+            args grow:i-1
+        ].
+        nMore timesRepeat:[
+            args add:nil beforeIndex:i. i := i + 1.
+        ]
+    ].
+    actions notNil ifTrue:[
+        actions := actions asOrderedCollection.
+        i := idx.
+        i >= actions size ifTrue:[
+            actions grow:i-1
+        ].
+        nMore timesRepeat:[
+            actions add:nil beforeIndex:i. i := i + 1.
+        ]
+    ].
+    onOffFlags notNil ifTrue:[
+        onOffFlags := onOffFlags asOrderedCollection.
+        i := idx.
+        i >= onOffFlags size ifTrue:[
+            onOffFlags grow:i-1
+        ].
+        nMore timesRepeat:[
+            onOffFlags add:nil beforeIndex:i. i := i + 1.
+        ]
+    ].
+    shortKeys isNil ifTrue:[
+        shortKeys := OrderedCollection new:oldSize.
+        shortKeys grow:oldSize
+    ].
+    shortKeys := shortKeys asOrderedCollection.
+    i := idx.
+    shorties isNil ifTrue:[
+        nMore timesRepeat:[
+            shortKeys add:nil beforeIndex:i. i := i + 1.
+        ]
+    ] ifFalse:[
+        maxShortKeyStringLen := nil.
+        shorties do:[:sel |
+            shortKeys add:sel beforeIndex:i. i := i + 1.
+        ]
+    ].
+
+    shown ifTrue:[
+        self resize
+    ] ifFalse:[
+        needResize := true
+    ].
+
+    "
+     |v1 v2 v3 v4 v5 m|
+
+
+     v1 := CodeView new open.
+     v1 contents:'original menu'.
+
+     v2 := CodeView new open.
+     v2 contents:'before copy'.
+     m := v2 editMenu.
+     m
+        addLabels:#('new entry1' 'new entry2') 
+        selectors:#(foo bar) 
+        before:#copySelection 
+        accelerators:#(Copy Cut Paste).
+     v2 middleButtonMenu:m.
+
+     v3 := CodeView new open.
+     v3 contents:'before again '.
+     m := v3 editMenu.
+     m
+        addLabels:#('new entry1' 'new entry2') 
+        selectors:#(foo bar) 
+        before:#again.
+     v3 middleButtonMenu:m.
+
+     v4 := CodeView new open.
+     v4 contents:'at beginning '.
+     m := v4 editMenu.
+     m
+        addLabels:#('new entry1' 'new entry2' '-') 
+        selectors:#(foo bar nil) 
+        before:1.
+     v4 middleButtonMenu:m.
+
+     v5 := CodeView new open.
+     v5 contents:'at end '.
+     m := v5 editMenu.
+     m
+        addLabels:#('-' 'new entry1' 'new entry2') 
+        selectors:#(nil foo bar).
+     v5 middleButtonMenu:m.
+    "
+
+    "Created: 28.2.1996 / 17:49:44 / cg"
+    "Modified: 24.3.1996 / 17:12:23 / cg"
+!
+
 addLabels:moreLabels selectors:moreSelectors after:aLabelOrSelectorOrNumber 
     "insert more labels/selectors at some place.
      Being very friendly here, allowing label-string, selector or numeric
@@ -908,6 +1119,94 @@
     "Modified: 28.2.1996 / 17:49:30 / cg"
 !
 
+addLabels:moreLabels selectors:moreSelectors resources:resources
+    "add more labels and selectors at the END"
+
+    self addLabels:moreLabels selectors:moreSelectors resources:resources after:nil
+
+    "Modified: 28.2.1996 / 17:46:50 / cg"
+!
+
+addLabels:moreLabels selectors:moreSelectors resources:resources accelerators:shorties
+    "add more labels and selectors at the END"
+
+    self addLabels:moreLabels selectors:moreSelectors accelerators:shorties resources:resources after:nil
+
+    "Modified: 28.2.1996 / 17:46:50 / cg"
+    "Created: 28.2.1996 / 17:47:17 / cg"
+!
+
+addLabels:moreLabels selectors:moreSelectors resources:resources after:aLabelOrSelectorOrNumber 
+    "insert more labels/selectors at some place.
+     Being very friendly here, allowing label-string, selector or numeric
+     index for the argument aLabelOrSelectorOrNumber.
+     If such an item is not found, insert the new items at the END.
+
+     To be independent of the entries label, we recommend you use the selector
+     as index; in systems which translate strings for national variants,
+     this makes your code easier to maintain."
+
+    ^ self 
+        addLabels:moreLabels 
+        selectors:moreSelectors 
+        accelerators:nil
+        resources:resources
+        after:aLabelOrSelectorOrNumber
+
+    "Modified: 28.2.1996 / 17:47:52 / cg"
+!
+
+addLabels:moreLabels selectors:moreSelectors resources:resources before:aLabelOrSelectorOrNumber 
+    "insert more labels/selectors at some place.
+     Being very friendly here, allowing label-string, selector or numeric
+     index for the argument aLabelOrSelectorOrNumber.
+     If such an item is not found, insert the new items at the beginning.
+
+     To be independent of the entries label, we recommend you use the selector
+     as index; in systems which translate strings for national variants,
+     this makes your code easier to maintain."
+
+    self 
+        addLabels:moreLabels 
+        selectors:moreSelectors 
+        accelerators:nil 
+        resources:resources
+        before:aLabelOrSelectorOrNumber 
+
+    "
+     |v1 v2 v3 v4 m|
+
+
+     v1 := CodeView new open.
+
+     v2 := CodeView new open.
+     m := v2 editMenu.
+     m
+        addLabels:#('new entry1' 'new entry2') 
+        selectors:#(foo bar) 
+        before:'paste'.
+     v2 middleButtonMenu:m.
+
+     v3 := CodeView new open.
+     m := v3 editMenu.
+     m
+        addLabels:#('new entry1' 'new entry2') 
+        selectors:#(foo bar) 
+        before:#again.
+     v3 middleButtonMenu:m.
+
+     v4 := CodeView new open.
+     m := v4 editMenu.
+     m
+        addLabels:#('new entry1' 'new entry2') 
+        selectors:#(foo bar) 
+        before:1.
+     v4 middleButtonMenu:m.
+    "
+
+    "Modified: 28.2.1996 / 17:49:30 / cg"
+!
+
 addSeparatingLine
     "add a separating line at the END"
 
@@ -2786,5 +3085,5 @@
 !MenuView class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg/MenuView.st,v 1.143 2004-03-02 08:44:19 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg/MenuView.st,v 1.144 2004-03-03 16:52:13 cg Exp $'
 ! !