Programmer's Reference

Non-simple menu example

The following code creates a window with a menu bar containing the same File menu illustrated in "Creating a menu bar and pull-down menu using simple menu protocol", except that this time, non-simple widget creation methods are used.

| shell main menuBar menu1 menu1Title item1 item2 item3 |
shell := CwTopLevelShell
   createApplicationShell: 'shell'
   argBlock: [:w | w title: 'Pull-down Menu Example'].
 
main := shell
   createMainWindow: 'main'
   argBlock: nil.
main manageChild.
 
menuBar := main
"First, a menu bar is created  as a child of the main window."
   createMenuBar: 'bar'
   argBlock: nil.
menuBar manageChild.
 
menu1 := menuBar
"Second, a pull-down menu is created as a child of the menu bar."
   createPulldownMenu: 'menu'
   argBlock: nil.
 
menu1Title := menuBar
"Third, a cascade button is added to the menu bar. It is associated
 with the pull-down menu using the subMenuId: method. The name of
 the cascade button appears in the menu bar. Note that the pull-down
 menu is created before the cascade button."
   createCascadeButton: 'File'
   argBlock: [:w |
      w
         subMenuId: menu1].
menu1Title manageChild.
 
item1 := menu1
"Fourth, a push-button widget is created. The parent is menu1. 
 When the File menu is clicked on, a pull-down menu appears
 with Open as the first entry. If Open is selected, an 
 XmNactivateCallback is issued and the message 
 open:clientData:callData is sent to the receiver."
   createPushButton: 'Open'
   argBlock: nil.
item1
   addCallback: XmNactivateCallback
   receiver: self
   selector: #open:clientData:callData:
   clientData: nil.
item1 manageChild.
 
item2 := menu1
"Fifth, a separator widget is created as a child of menu1, 
 to separate the first and third menu items. The separatorType 
 resource is set to a single line separator."
   createSeparator: 'sep'
   argBlock: [:w |
      w
         separatorType: XmSINGLELINE].
item2 manageChild.
 
item3 := menu1
"Finally, another push-button widget is created for the third menu item. 
 If Close is selected, an XmNactivateCallback is issued and the message
 close:clientData:callData: is sent to the receiver."
   createPushButton: 'Close'
   argBlock: nil.
item3
   addCallback: XmNactivateCallback
   receiver: self
   selector: #close:clientData:callData:
   clientData: nil.
item3 manageChild.
 
shell realizeWidget.


[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]