MenuView.st
changeset 95 7535cfca9509
parent 87 2c6ab478466a
child 97 cbf495fe3b64
equal deleted inserted replaced
94:42ed24947e75 95:7535cfca9509
    30 
    30 
    31 MenuView comment:'
    31 MenuView comment:'
    32 COPYRIGHT (c) 1989 by Claus Gittinger
    32 COPYRIGHT (c) 1989 by Claus Gittinger
    33 	      All Rights Reserved
    33 	      All Rights Reserved
    34 
    34 
    35 $Header: /cvs/stx/stx/libwidg/MenuView.st,v 1.17 1995-02-16 16:31:44 claus Exp $
    35 $Header: /cvs/stx/stx/libwidg/MenuView.st,v 1.18 1995-02-27 10:39:33 claus Exp $
    36 '!
    36 '!
    37 
    37 
    38 !MenuView class methodsFor:'documentation'!
    38 !MenuView class methodsFor:'documentation'!
    39 
    39 
    40 copyright
    40 copyright
    51 "
    51 "
    52 !
    52 !
    53 
    53 
    54 version
    54 version
    55 "
    55 "
    56 $Header: /cvs/stx/stx/libwidg/MenuView.st,v 1.17 1995-02-16 16:31:44 claus Exp $
    56 $Header: /cvs/stx/stx/libwidg/MenuView.st,v 1.18 1995-02-27 10:39:33 claus Exp $
    57 "
    57 "
    58 !
    58 !
    59 
    59 
    60 documentation
    60 documentation
    61 "
    61 "
   341 !
   341 !
   342 
   342 
   343 initEvents
   343 initEvents
   344     super initEvents.
   344     super initEvents.
   345     self enableLeaveEvents.
   345     self enableLeaveEvents.
   346     self enableButtonMotionEvents.
       
   347     windowGroup notNil ifTrue:[
   346     windowGroup notNil ifTrue:[
   348 	windowGroup sensor compressMotionEvents:true
   347 	windowGroup sensor compressMotionEvents:true
   349     ]
   348     ]
   350 !
   349 !
   351 
   350 
   508 !
   507 !
   509 
   508 
   510 addLabel:aLabel selector:aSelector after:aLabelOrSelectorOrNumber 
   509 addLabel:aLabel selector:aSelector after:aLabelOrSelectorOrNumber 
   511     "insert another label/selector pair at some place.
   510     "insert another label/selector pair at some place.
   512      Being very friendly here, allowing label-string, selector or numeric
   511      Being very friendly here, allowing label-string, selector or numeric
   513      index for the argument aLabelOrSelectorOrNumber"
   512      index for the argument aLabelOrSelectorOrNumber.
       
   513 
       
   514      To be independent of the entries label, we recommend you use the selector
       
   515      as index; in systems which translate strings for national variants,
       
   516      this makes your code easier to maintain."
       
   517 
       
   518     ^ self addLabel:aLabel 
       
   519 	   selector:aSelector 
       
   520 	     before:(self indexOf:aLabelOrSelectorOrNumber) + 1
       
   521     "
       
   522      |v1 v2 v3 v4|
       
   523 
       
   524      v1 := CodeView new realize.
       
   525 
       
   526      v2 := CodeView new realize.
       
   527      v2 middleButtonMenu menuView addLabel:'new entry' selector:#foo after:'paste'.
       
   528 
       
   529      v3 := CodeView new realize.
       
   530      v3 middleButtonMenu menuView addLabel:'new entry' selector:#foo after:#others.
       
   531 
       
   532      v4 := CodeView new realize.
       
   533      v4 middleButtonMenu menuView addLabel:'new entry' selector:#foo after:1.
       
   534     "
       
   535 !
       
   536 
       
   537 addLabel:aLabel selector:aSelector before:aLabelOrSelectorOrNumber 
       
   538     "insert another label/selector pair at some place.
       
   539      Being very friendly here, allowing label-string, selector or numeric
       
   540      index for the argument aLabelOrSelectorOrNumber.
       
   541 
       
   542      To be independent of the entries label, we recommend you use the selector
       
   543      as index; in systems which translate strings for national variants,
       
   544      this makes your code easier to maintain."
   514 
   545 
   515     |idx|
   546     |idx|
   516 
   547 
   517     list isNil ifTrue:[
   548     list isNil ifTrue:[
   518 	^ self addLabel:aLabel selector:aSelector
   549 	^ self addLabel:aLabel selector:aSelector
   519     ].
   550     ].
   520     "
   551     "
   521      be user friendly - allow both label or selector
   552      be user friendly - allow both label or selector
   522      to be passed
   553      to be passed
   523     "
   554     "
   524     aLabelOrSelectorOrNumber isInteger ifTrue:[
   555     idx := self indexOf:aLabelOrSelectorOrNumber.
   525 	idx := aLabelOrSelectorOrNumber
       
   526     ] ifFalse:[
       
   527 	idx := list indexOf:aLabelOrSelectorOrNumber ifAbsent:[selectors indexOf:aLabelOrSelectorOrNumber].
       
   528     ].
       
   529     (idx between:0 and:list size) ifFalse:[
       
   530 	"add to end"
       
   531 	^ self addLabel:aLabel selector:aSelector
       
   532     ].
       
   533 
       
   534     list := list asOrderedCollection add:aLabel beforeIndex:(idx + 1).
       
   535     selectors := selectors asOrderedCollection add:aSelector beforeIndex:(idx + 1).
       
   536     enableFlags := enableFlags asOrderedCollection add:true beforeIndex:(idx + 1).
       
   537     subMenus notNil ifTrue:[
       
   538 	subMenus := subMenus asOrderedCollection add:nil beforeIndex:(idx + 1).
       
   539     ].
       
   540     args notNil ifTrue:[
       
   541 	args := args asOrderedCollection add:nil beforeIndex:(idx + 1).
       
   542     ].
       
   543     self recomputeSize
       
   544 
       
   545     "
       
   546      |v|
       
   547      CodeView new realize.
       
   548      v := CodeView new realize.
       
   549      v middleButtonMenu menuView addLabel:'new entry' selector:#foo after:'paste'.
       
   550     "
       
   551 !
       
   552 
       
   553 addLabel:aLabel selector:aSelector before:aLabelOrSelectorOrNumber 
       
   554     "insert another label/selector pair at some place.
       
   555      Being very friendly here, allowing label-string, selector or numeric
       
   556      index for the argument aLabelOrSelectorOrNumber"
       
   557 
       
   558     |idx|
       
   559 
       
   560     list isNil ifTrue:[
       
   561 	^ self addLabel:aLabel selector:aSelector
       
   562     ].
       
   563     "
       
   564      be user friendly - allow both label or selector
       
   565      to be passed
       
   566     "
       
   567     aLabelOrSelectorOrNumber isInteger ifTrue:[
       
   568 	idx := aLabelOrSelectorOrNumber
       
   569     ] ifFalse:[
       
   570 	idx := list indexOf:aLabelOrSelectorOrNumber ifAbsent:[selectors indexOf:aLabelOrSelectorOrNumber].
       
   571     ].
       
   572     (idx between:1 and:list size) ifFalse:[
   556     (idx between:1 and:list size) ifFalse:[
   573 	"add to end"
   557 	"add to end"
   574 	^ self addLabel:aLabel selector:aSelector
   558 	^ self addLabel:aLabel selector:aSelector
   575     ].
   559     ].
   576 
   560 
   577     list := list asOrderedCollection add:aLabel beforeIndex:idx.
   561     list := list asOrderedCollection.
   578     selectors := selectors asOrderedCollection add:aSelector beforeIndex:idx.
   562     list add:aLabel beforeIndex:idx.
   579     enableFlags := enableFlags asOrderedCollection add:true beforeIndex:idx.
   563     selectors := selectors asOrderedCollection.
       
   564     selectors add:aSelector beforeIndex:idx.
       
   565     enableFlags := enableFlags asOrderedCollection.
       
   566     enableFlags add:true beforeIndex:idx.
   580     subMenus notNil ifTrue:[
   567     subMenus notNil ifTrue:[
   581 	subMenus := subMenus asOrderedCollection add:nil beforeIndex:idx.
   568 	subMenus := subMenus asOrderedCollection.
       
   569 	subMenus add:nil beforeIndex:idx.
   582     ].
   570     ].
   583     args notNil ifTrue:[
   571     args notNil ifTrue:[
   584 	args := args asOrderedCollection add:nil beforeIndex:idx.
   572 	args := args asOrderedCollection.
       
   573 	args add:nil beforeIndex:idx.
   585     ].
   574     ].
   586     self recomputeSize
   575     self recomputeSize
   587 
   576 
   588     "
   577     "
   589      |v|
   578      |v1 v2 v3 v4|
   590      CodeView new realize.
   579 
   591      v := CodeView new realize.
   580      v1 := CodeView new realize.
   592      v middleButtonMenu menuView addLabel:'new entry' selector:#foo before:'paste'.
   581 
       
   582      v2 := CodeView new realize.
       
   583      v2 middleButtonMenu menuView addLabel:'new entry' selector:#foo before:'paste'.
       
   584 
       
   585      v3 := CodeView new realize.
       
   586      v3 middleButtonMenu menuView addLabel:'new entry' selector:#foo before:#again.
       
   587 
       
   588      v4 := CodeView new realize.
       
   589      v4 middleButtonMenu menuView addLabel:'new entry' selector:#foo before:1.
   593     "
   590     "
   594 !
   591 !
   595 
   592 
   596 remove:indexOrName
   593 remove:indexOrName
   597     "remove the label at index"
   594     "remove the label at index"
   611 
   608 
   612 indexOf:indexOrName
   609 indexOf:indexOrName
   613     "return the index of the label named:aName or , if its a symbol
   610     "return the index of the label named:aName or , if its a symbol
   614      the index in the selector list"
   611      the index in the selector list"
   615 
   612 
   616     (indexOrName isMemberOf:Symbol) ifTrue:[
   613     indexOrName isSymbol ifTrue:[
   617 	^ selectors indexOf:indexOrName
   614 	^ selectors indexOf:indexOrName
   618     ].
   615     ].
   619     (indexOrName isString) ifTrue:[
   616     indexOrName isString ifTrue:[
   620 	^ list indexOf:indexOrName
   617 	^ list indexOf:indexOrName
   621     ].
   618     ].
   622     ^ indexOrName
   619     ^ indexOrName
   623 !
   620 !
   624 
   621 
  1356 			].
  1353 			].
  1357 
  1354 
  1358 			"
  1355 			"
  1359 			 ST-80 style model notification
  1356 			 ST-80 style model notification
  1360 			"
  1357 			"
  1361 			(model notNil and:[changeSymbol notNil]) ifTrue:[
  1358 			self sendChangeMessageWith:val.
  1362 			    model perform:changeSymbol with:val
       
  1363 			].
       
  1364 
  1359 
  1365 			"
  1360 			"
  1366 			 either action-block or selectors-array-style
  1361 			 either action-block or selectors-array-style
  1367 			"
  1362 			"
  1368 			actionBlock notNil ifTrue:[
  1363 			actionBlock notNil ifTrue:[