You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

This example shows how to create a collection of menu items which correspond the the selected entries in a list view.

When an item is selected in the menu, it is deselected in the list view.
Define the Collection
In this example we are using a collection style collection to add menu items to the menu item collection. This is how the collection of the menu items is defined:
Define_Com Class(#PRIM_KCOL<#PRIM_MITM #EMPNO>) Name(#MENU_ITEMS) Collects(#PRIM_MITM) Keyedby(#EMPNO) Style(Collection)

  • The Name of the collection is #MENU_ITEMS.
  • The collection will contain menu items (#PRIM_MITM).
  • The Keyedby property specifies the repository field (#EMPNO) used as the key to the collection.
  • Its Style is Collection

Submenu
The submenu which will contain the menu items is defined, but it is not associated with the menu title yet because initially it contains no items and it is defined with a dynamic reference which means that the submenu will be created only when a reference is explicitly set to it:
DEFINE_COM class(#PRIM_SMNU) name(#Sub_menu) reference(*dynamic)
Add Items to the Collection
A menu item is added to the MENU_ITEMS collection when an employee in the list is selected:
 
Evtroutine Handling(#LTVW_1.ItemGotSelection) Options(*NOCLEARMESSAGES *NOCLEARERRORS)

  • Create submenu item if it doesn't already exist
    If_Ref Com(#Sub_menu) Is(*null)
    Set_Ref Com(#Sub_menu) To(*create_as #prim_smnu)
    Set Com(#Sub_menu) Parent(#menu_title)
    Endif
  • Create menu item based on the employee details
    Set_Ref Com(#menu_items<#empno>) To(*create_as #prim_mitm)
  • Define menu item's text
    Use Builtin(BCONCAT) With_Args(#EMPNO #GIVENAME #SURNAME) To_Get(#STD_TEXTL)
  • Set menu item's properties
    Set Com(#menu_items<#empno>) Caption(#std_textl) Parent(#Sub_menu)
    Endroutine
     
    Destroy an Item in the Collection
    When a list entry loses selection,  the menu item is destroyed from memory by setting its reference to *NULL:
     
    EVTROUTINE handling(#LTVW_1.ItemLostSelection) options(*NOCLEARMESSAGES *NOCLEARERRORS)
    SET_REF com(#menu_items<#empno>) to(*null)
    ENDROUTINE
    Source Code for Collection Example 4
    To see how the Collection Style collection works, copy and paste this code to a form and then compile and execute the form.
     
    Function Options(*DIRECT)
    Begin_Com Role(*EXTENDS #PRIM_FORM) Clientheight(310) Clientwidth(393) Height(356) Layoutmanager(#ATLM_1) Left(308) Menubar(#MBAR_1) Top(120) Width(401)
    Define_Com Class(#PRIM_ATLM) Name(#ATLM_1)
    Define_Com Class(#PRIM_ATLI) Name(#ATLI_1) Attachment(Center) Manage(#LTVW_1) Parent(#ATLM_1)
    Define_Com Class(#PRIM_MBAR) Name(#MBAR_1) Parent(#COM_OWNER)
    Define_Com Class(#PRIM_MITM) Name(#MENU_TITLE) Caption('Selected Employees') Displayposition(1) Parent(#MBAR_1)
    Define_Com Class(#PRIM_LTVW) Name(#LTVW_1) Displayposition(1) Fullrowselect(True) Height(310) Left(0) Parent(#COM_OWNER) Tabposition(1) Top(0) Width(393)
    Define_Com Class(#PRIM_LVCL) Name(#LVCL_1) Displayposition(1) Parent(#LTVW_1) Source(#EMPNO) Width(26)
    Define_Com Class(#PRIM_LVCL) Name(#LVCL_2) Displayposition(2) Parent(#LTVW_1) Source(#SURNAME) Width(38)
    Define_Com Class(#PRIM_LVCL) Name(#LVCL_3) Displayposition(3) Parent(#LTVW_1) Source(#GIVENAME) Width(20) Widthtype(Remainder)
  • Collection of selected menu items
  • STYLE(Collection) requires that the items in the collection are explicitly created at run time by the application
    Define_Com Class(#PRIM_KCOL<#PRIM_MITM #EMPNO>) Name(#MENU_ITEMS) Collects(#PRIM_MITM) Keyedby(#EMPNO) Style(Collection)
  • Submenu component required for menu items
    Define_Com Class(#PRIM_SMNU) Name(#Sub_menu) Reference(*dynamic)
  • Populate list view with known employees
    Evtroutine Handling(#COM_OWNER.CreateInstance) Options(*NOCLEARMESSAGES *NOCLEARERRORS)
    Select Fields(#LTVW_1) From_File(PSLMST)
    Add_Entry To_List(#LTVW_1)
    Endselect
    Endroutine
  • Create a menu item of selected employees
    Evtroutine Handling(#LTVW_1.ItemGotSelection) Options(*NOCLEARMESSAGES *NOCLEARERRORS)
  • Create submenu item if it doesn't already exist
    If_Ref Com(#Sub_menu) Is(*null)
    Set_Ref Com(#Sub_menu) To(*create_as #prim_smnu)
    Set Com(#Sub_menu) Parent(#menu_title)
    Endif
  • Create menu item based on the employee details
    Set_Ref Com(#menu_items<#empno>) To(*create_as #prim_mitm)
  • Define menu item's text
    Use Builtin(BCONCAT) With_Args(#EMPNO #GIVENAME #SURNAME) To_Get(#STD_TEXTL)
  • Set menu item's properties
    Set Com(#menu_items<#empno>) Caption(#std_textl) Parent(#Sub_menu)
    Endroutine
  • When a list entry loses selection, destroy the menu item
    Evtroutine Handling(#LTVW_1.ItemLostSelection) Options(*NOCLEARMESSAGES *NOCLEARERRORS)
    Set_Ref Com(#menu_items<#empno>) To(*null)
    Endroutine
  • When an employee is selected in the menu, deselect it in the list
    Evtroutine Handling(#menu_items<>.Click) Com_Sender(#Selected_menu_items)
    Define Field(#W_EMPNO) Reffld(#EMPNO)
  • Use menu item caption to find out which employee number this item represents
    Change Field(#STD_TEXTL) To('#Selected_menu_items.Caption')
    Substring Field(#STD_TEXTL 1 5) Into_Field(#W_EMPNO)
    Selectlist Named(#LTVW_1)
    Continue If('#w_empno *ne #empno')
  • Set this employee to be unselected
    Set Com(#ltvw_1.currentitem) Selected(false)
  • Destroy the menu item
    Set_Ref Com(#menu_items<#w_empno>) To(*NULL)
    Leave
    Endselect
    Endroutine
    End_Com

  • No labels