home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / VSCPPv4.zip / VACPP / IBMCPP / HELP / CPPVBFUN.INF (.txt) < prev    next >
OS/2 Help File  |  1995-05-11  |  238KB  |  6,957 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. About this Book ΓòÉΓòÉΓòÉ
  3.  
  4.      About Visual Builder 
  5.  
  6.      Who should use this book 
  7.  
  8.      Notices 
  9.  
  10.      Trademarks 
  11.  
  12.      How to use the Contents 
  13.  
  14.      How to obtain additional information 
  15.  
  16.      How to use action bar choices 
  17.  
  18.         -  Placing bookmarks 
  19.  
  20.         -  Searching for information 
  21.  
  22.         -  Printing information 
  23.  
  24.         -  Copying information to a file 
  25.  
  26.      How to cut and paste examples 
  27.  
  28.      How to read syntax diagrams 
  29.  
  30.      Highlighting conventions 
  31.  
  32.      Other information you might find helpful 
  33.  
  34.         -  Visual Builder books 
  35.  
  36.         -  User interface programming and design books 
  37.  
  38.         -  Object-oriented programming and design books 
  39.  
  40.      Communicating your comments to IBM 
  41.  
  42.  
  43. ΓòÉΓòÉΓòÉ 1.1. About Visual Builder ΓòÉΓòÉΓòÉ
  44.  
  45. Welcome to Visual Builder-a quick and easy way to create an application from 
  46. reuseable parts! 
  47.  
  48. Just about any construction project that you can imagine involves assembling 
  49. standard or customized basic parts into more complex parts. This process is 
  50. repeated until the final product is complete. If you are building a birdhouse, 
  51. these basic parts might be lumber, screws, wire, and paint. Some parts, such as 
  52. screws and paint, can be used in their standard form. Other parts, such as 
  53. lumber and wire, come in a standard form but need to be customized, or cut, 
  54. before you use them. 
  55.  
  56. If reusable software parts are available, building a software application can 
  57. be conceptually similar to building a birdhouse. You can use the software parts 
  58. as-is, as you would with the screws, or tailor the software parts to your exact 
  59. needs, as you would with the lumber. 
  60.  
  61. In both scenarios, you need to decide whether to build or buy the basic parts 
  62. for your construction project. If you decide to build some basic software 
  63. parts, this book guides you through the process (you will need to read about 
  64. creating the parts of a birdhouse somewhere else). If you decide to buy the 
  65. software parts, this book can help you to choose well-constructed software 
  66. parts. 
  67.  
  68. Reusable parts can be thought of as the building blocks of the applications you 
  69. are constructing with Visual Builder. As with any construction project, you 
  70. need to either buy or build the parts you need. This book describes how to 
  71. design and construct basic building-block parts using the C++ programming 
  72. language. 
  73.  
  74. If you are familiar with VisualAge Smalltalk, you already know about 
  75. constructing applications from parts. The details of how to implement C++ parts 
  76. is a little different than implementing IBM Smalltalk parts, but the overall 
  77. concepts and architecture are the same. 
  78.  
  79.  
  80. ΓòÉΓòÉΓòÉ 1.2. Who Should Use This Book ΓòÉΓòÉΓòÉ
  81.  
  82. This book is designed for experienced C++ programmers who need to build parts 
  83. for use with Visual Builder. It can also be useful to Visual Builder users who 
  84. need a deeper understanding of how Visual Builder works or who want an 
  85. introduction to C++ parts. 
  86.  
  87. Before you begin to use this information, it would be helpful to understand how 
  88. to navigate through it. You can use the Table of Contents and Index facility to 
  89. locate topics and the Search facility to search the text of this document. You 
  90. can use hypertext links to acquire related information on the current topic. 
  91. Hypertext links appear in a different color (which you can customize using the 
  92. OS/2 Scheme Palette). For example, here is a link to another panel: 
  93. Communicating Your Comments to IBM By double-clicking on the text of the link 
  94. or by pressing Enter on a highlighted link, you will open a panel of related 
  95. information. When you open a panel, the first link has the focus; to shift the 
  96. focus to other links, use the Tab key. 
  97.  
  98. You should also understand the following: 
  99.  
  100.      How to use the Contents 
  101.      How to obtain additional information 
  102.      How to use action bar choices 
  103.      How to cut and paste examples 
  104.  
  105.  
  106. ΓòÉΓòÉΓòÉ 1.3. Notices ΓòÉΓòÉΓòÉ
  107.  
  108. Copyright International Business Machines Corporation, 1992, 1995. All rights 
  109. reserved. 
  110.  
  111. Note to U.S. Government Users - Documentation related to restricted rights - 
  112. Use, duplication, or disclosure is subject to restrictions set forth in GSA ADP 
  113. Schedule Contract with IBM Corp. 
  114.  
  115. First Edition, June 1995. 
  116.  
  117. This edition applies to Version 3.0 of IBM VisualAge C++ for OS/2 (30H1664, 
  118. 30H1665, 30H1666) and to all subsequent releases and modifications until 
  119. otherwise indicated in new editions.  Make sure you are using the correct 
  120. edition for the level of the product. 
  121.  
  122. This publication could include technical inaccuracies or typographical errors. 
  123. Changes are periodically made to the information herein; any such changes will 
  124. be reported in subsequent revisions. 
  125.  
  126. Requests for publications and for technical information about IBM products 
  127. should be made to your IBM Authorized Dealer or your IBM Marketing 
  128. Representative. 
  129.  
  130. When you send information to IBM, you grant IBM a nonexclusive right to use or 
  131. distribute the information in any ways it believes appropriate without 
  132. incurring any obligation to you. 
  133.  
  134. Any reference to an IBM licensed program in this publication is not intended to 
  135. state or imply that only IBM's licensed program may be used. Any functionally 
  136. equivalent product, program, or service that does not infringe any of IBM's 
  137. intellectual property rights may be used instead of the IBM product, program, 
  138. or service. Evaluation and verification of operation in conjunction with other 
  139. products, except  those expressly designated by IBM, is the user's 
  140. responsibility. 
  141.  
  142. IBM may have patents or pending patent applications covering subject matter in 
  143. this document.  The furnishing of this document does not give you any license 
  144. to these patents.  You can send license inquiries, in writing, to the IBM 
  145. Director of Licensing, IBM Corporation, 500 Columbus Avenue, Thornwood, NY, 
  146. 10594, USA. 
  147.  
  148. This publication contains examples of data and reports used in daily business 
  149. operations. To illustrate them as completely as possible, the examples include 
  150. the names of individuals, companies, brands, and products. All of these names 
  151. are fictitious and any similarity to the names and addresses used by an actual 
  152. business enterprise is entirely coincidental. 
  153.  
  154.  
  155. ΓòÉΓòÉΓòÉ 1.4. Trademarks ΓòÉΓòÉΓòÉ
  156.  
  157. The following terms are trademarks of the IBM Corporation in the United States 
  158. or other countries: 
  159.  
  160.       AIX 
  161.       BookManager 
  162.       CUA 
  163.       Common User Access 
  164.       IBM 
  165.       IBMLink 
  166.       Library Reader 
  167.       Open Class 
  168.       OS/2 
  169.       PROFS 
  170.       Presentation Manager 
  171.       SAA 
  172.       VisualAge 
  173.       Workplace Shell 
  174.  
  175.  The following terms are trademarks of other companies: 
  176.  
  177.  C++       American Telephone & Telegraph Company 
  178.  Motif     Open Software Foundation, Inc. 
  179.  
  180.  
  181. ΓòÉΓòÉΓòÉ 1.5. How to Use the Contents ΓòÉΓòÉΓòÉ
  182.  
  183. When the Contents window first appears, some topics have a plus (+) sign beside 
  184. them. The plus sign indicates that additional topics are available. 
  185.  
  186. To expand the Contents if you are using a mouse, click on the plus sign. If you 
  187. are using the keyboard, use the Up or Down Arrow key to highlight the topic, 
  188. and press the plus (+) key. For example, How to Use the Contents has a plus 
  189. sign beside it.  To see additional topics for that heading, click on the plus 
  190. sign or highlight that topic and press the plus (+) key. 
  191.  
  192. To view a topic, double-click on the topic (or press the Up or Down Arrow key 
  193. to highlight the topic, and then press the Enter key). 
  194.  
  195.  
  196. ΓòÉΓòÉΓòÉ 1.6. How to Obtain Additional Information ΓòÉΓòÉΓòÉ
  197.  
  198. After you select a topic, the information for that topic appears in a window. 
  199. Highlighted words or phrases indicate that additional information is available. 
  200. Certain words and phrases are highlighted in a different color from the 
  201. surrounding text. These are called hypertext terms. 
  202.  
  203. If you are using a mouse, double-click on the highlighted word.  If you are 
  204. using a keyboard, press the Tab key to move to the highlighted word, and then 
  205. press the Enter key.  Additional information then appears in a window. 
  206.  
  207.  
  208. ΓòÉΓòÉΓòÉ 1.7. How to Use Action Bar Choices ΓòÉΓòÉΓòÉ
  209.  
  210. Several choices are available for managing the information presented in this 
  211. document. There are three menus on the action bar:  the Services menu, the 
  212. Options menu, and the Help menu. 
  213.  
  214. The actions that are selectable from the Services menu operate on the active 
  215. window currently displayed on the screen. These actions include the following: 
  216.  
  217.  Placing bookmarks 
  218.    You can set a placeholder so you can retrieve information of interest to 
  219.    you. 
  220.  
  221.  Searching for information 
  222.    You can find occurrences of a word or phrase in the current topic, selected 
  223.    topics, or all topics. 
  224.  
  225.  Printing information 
  226.    You can print one or more topics. You can also print a set of topics by 
  227.    first marking the topics in the Contents list. 
  228.  
  229.  Copying information to a file 
  230.    You can copy a topic that you are viewing to the System Clipboard or to a 
  231.    file that you can edit. This method is particularly useful for copying 
  232.    syntax definitions and program samples into the application that you are 
  233.    developing. 
  234.  
  235.  Using the actions that are selectable from the Options menu, you can change 
  236.  the way your Contents list is displayed. To expand the Contents and show all 
  237.  levels for all topics, choose Expand all from the Options pull-down. You can 
  238.  also press the Ctrl and * keys together. 
  239.  
  240.  The actions that are selectable from the Help menu allow you to select 
  241.  different types of help information. 
  242.  
  243.  For information about any of the menu choices, highlight the choice in the 
  244.  menu and press F1. 
  245.  
  246.  
  247. ΓòÉΓòÉΓòÉ 1.7.1. Placing Bookmarks ΓòÉΓòÉΓòÉ
  248.  
  249. When you place a bookmark on a topic, it is added to a list of bookmarks you 
  250. have previously set.  You can view the list, and you can remove one or all 
  251. bookmarks from the list.  If you have not set any bookmarks, the list is empty. 
  252.  
  253. To set a bookmark, do the following: 
  254.  
  255.    1. Select a topic from the Contents. 
  256.    2. When that topic appears, select the Bookmark option from the Services 
  257.       menu. 
  258.    3. If you want to change the name used for the bookmark, type the new name 
  259.       in the field. 
  260.    4. Click on the Place radio button (or press the Up or Down Arrow key to 
  261.       select it). 
  262.    5. Click on OK (or select it and press Enter). The bookmark is then added to 
  263.       the bookmark list. 
  264.  
  265.  
  266. ΓòÉΓòÉΓòÉ 1.7.2. Searching for Information ΓòÉΓòÉΓòÉ
  267.  
  268. You can specify a word or phrase to be searched.  You can also limit the search 
  269. to a set of topics by first marking the topics in the Contents list. 
  270.  
  271. To search for a word or phrase in all topics, do the following: 
  272.  
  273.    1. Select the Search option from the Services menu. 
  274.    2. Type the word or words to be searched for. 
  275.    3. Click on All sections (or press the Up or Down Arrow keys to select it). 
  276.    4. Click on Search (or select it and press Enter) to begin the search. 
  277.    5. The list of topics where the word or phrase appears is displayed. 
  278.  
  279.  
  280. ΓòÉΓòÉΓòÉ 1.7.3. Printing Information ΓòÉΓòÉΓòÉ
  281.  
  282. You can print one or more topics, the index, or the table of contents.  Make 
  283. sure that your printer is connected to the serial port, configured correctly, 
  284. and ready for input. To print: 
  285.  
  286.    1. Select Print from the Services pull-down. 
  287.    2. Select what you want to print. Note that the This section and Marked 
  288.       sections choices are only available if you are viewing a topic or if you 
  289.       have marked topics, respectively.  To mark topics in the table of 
  290.       contents, press the Ctrl key and click on the topics, or use the arrow 
  291.       keys. 
  292.    3. Select Print to print what you've chosen on your printer. 
  293.  
  294.  
  295. ΓòÉΓòÉΓòÉ 1.7.4. Copying Information to a File ΓòÉΓòÉΓòÉ
  296.  
  297. You can copy a topic that you are viewing in two ways: 
  298.  
  299.      Copy copies the topic that you are viewing into the System Clipboard.  If 
  300.       you are using a Presentation Manager (PM) editor (for example, the 
  301.       Enhanced Editor) that copies or cuts (or both) to the System Clipboard, 
  302.       and pastes to the System Clipboard, you can easily add the copied 
  303.       information to your program source module. 
  304.  
  305.      Copy to file copies the topic that you are viewing into a temporary file 
  306.       named text.tmp.  You can later edit that file by using any editor. 
  307.       text.tmp is placed in the directory where your viewable document resides. 
  308.  
  309.  To copy a topic, do the following: 
  310.  
  311.    1. Expand the Contents list and select a topic. 
  312.    2. When the topic appears, select Copy to file from the Services menu. 
  313.    3. The system puts the text pertaining to that topic into the temporary file 
  314.       text.tmp. 
  315.  
  316.  
  317. ΓòÉΓòÉΓòÉ 1.8. How to Cut and Paste Examples ΓòÉΓòÉΓòÉ
  318.  
  319. You can copy examples (or information) from this reference/guide/book to 
  320. compile, link, and run them, or to paste them into your own code. 
  321.  
  322. To copy an example or information: 
  323.  
  324.    1. Make the topic you want to copy the active window. 
  325.  
  326.    2. From the Services menu, select Copy to file. The text in that topic is 
  327.       placed in the temporary file text.tmp, in the same directory as this 
  328.       reference. 
  329.  
  330.    3. You can then modify or use text.tmp as you want. 
  331.  
  332.  Note:  Because the system copies the entire contents of the topic to the file, 
  333.  you may need to edit it to remove additional text. 
  334.  
  335.  
  336. ΓòÉΓòÉΓòÉ 1.9. Highlighting Conventions ΓòÉΓòÉΓòÉ
  337.  
  338. This book uses the following highlighting conventions: 
  339.  
  340.  
  341.  Highlighting     Element                          Example
  342.  
  343.  Bold             Key interface items in code      Select Tools from the menu bar.
  344.                   listings. Areas in code examples
  345.                   that are described in
  346.                   accompanying text
  347.  
  348.  
  349.  
  350.  Monospace        C++ coding examples, text that   The following code from the
  351.                   the user enters, and messages    IAddress illustrates ...
  352.                   (within text)
  353.                                                    The street member function
  354.                                                    returns the current street.
  355.  
  356.  
  357.  
  358.  Italics          Emphasis of words, first time a  stored in persistent objects
  359.                   glossary term is used
  360.                                                    Refer to Object-Oriented User
  361.                   Titles of books                  Interface Design - IBM Common
  362.                                                    User Access Guidelines.
  363.  
  364.  
  365. ΓòÉΓòÉΓòÉ 1.10. How to Read Syntax Diagrams ΓòÉΓòÉΓòÉ
  366.  
  367. This book uses syntax diagrams to show the syntax of some of the commands 
  368. described. 
  369.  
  370.      Read the syntax diagrams from left to right, from top to bottom, 
  371.       following the path of the line. 
  372.  
  373.       The ΓöÇΓöÇΓöÇ symbol indicates the beginning of a command. 
  374.  
  375.       The ΓöÇΓöÇΓöÇ symbol indicates that the command is continued on the next line. 
  376.  
  377.       The ΓöÇΓöÇΓöÇ symbol indicates that a command is continued from the previous 
  378.       line. 
  379.  
  380.       The ΓöÇΓöÇΓöÇ symbol indicates the end of a command. 
  381.  
  382.       Diagrams of syntactical units other than complete commands start with the 
  383.       ΓöÇΓöÇΓöÇ symbol and end with the ΓöÇΓöÇΓöÇ symbol. 
  384.  
  385.       Note:  In the following diagrams, COMMAND represents a command. 
  386.  
  387.      Required items appear on the horizontal line (the main path). 
  388.  
  389.             ΓöÇΓöÇCOMMAND ΓöÇΓöÇ required_item ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  390.  
  391.      Optional items appear below the main path. 
  392.  
  393.             ΓöÇΓöÇCOMMAND ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  394.                          ΓööΓöÇ optional_item ΓöÇΓöÿ
  395.  
  396.      If you can choose from two or more items, they appear vertically in a 
  397.       stack. 
  398.  
  399.       If you must choose one of the items, one item of the stack appears on the 
  400.       main path. 
  401.  
  402.             ΓöÇΓöÇCOMMAND ΓöÇΓö¼ΓöÇΓöÇrequired_choice1ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  403.                          ΓööΓöÇ required_choice2 ΓöÇΓöÿ
  404.  
  405.       If choosing one of the items is optional, the entire stack appears below 
  406.       the main path. 
  407.  
  408.             ΓöÇΓöÇCOMMAND ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  409.                          Γö£ΓöÇ optional_choice1 ΓöÇΓöñ
  410.                          ΓööΓöÇ optional_choice2 ΓöÇΓöÿ
  411.  
  412.       The item that is the default appears above the main path. 
  413.  
  414.                          ΓöîΓöÇΓöÇ default_item ΓöÇΓöÇΓöÇΓöÇΓöÉ
  415.             ΓöÇΓöÇCOMMAND ΓöÇΓö┤ΓöÇΓöÇ alternate_item ΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  416.  
  417.      An arrow returning to the left above the main line indicates an item that 
  418.       can be repeated. 
  419.  
  420.                          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  421.                                              Γöé
  422.             ΓöÇΓöÇCOMMAND ΓöÇΓöÇΓöÇΓöÇ repeatable_item ΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  423.  
  424.       A repeat arrow above a stack indicates that you can make more than one 
  425.       choice from the stacked items, or repeat a single choice. 
  426.  
  427.      Keywords appear in nonitalic letters and should be entered exactly as 
  428.       shown (for example, pragma). 
  429.  
  430.       Variables appear in italicized lowercase letters (for example, 
  431.       identifier). They represent user-supplied names or values. 
  432.  
  433.      If punctuation marks, parentheses, arithmetic operators, or other such 
  434.       symbols are shown, you must enter them as part of the syntax. 
  435.  
  436.  Note:  The white space is not always required between tokens, but it is 
  437.  recommended that you include at least one blank between tokens unless 
  438.  specified otherwise. 
  439.  
  440.  
  441. ΓòÉΓòÉΓòÉ 1.11. Other Information You Might Find Useful ΓòÉΓòÉΓòÉ
  442.  
  443. This product provides a number of online guides and references that we hope 
  444. you'll find helpful as you develop applications. This information includes 
  445. User's Guides, References, and How Do I help that gives you specific 
  446. instructions for performing common tasks. You can get to this online 
  447. information from the Information folder inside the main product folder.  You 
  448. can also get to it from the Help menu in any of the components of the product. 
  449.  
  450. You can consult the following books for additional information about Visual 
  451. Builder, user interface software design, and object-oriented software design: 
  452.  
  453.       Visual Builder books 
  454.       User interface programming and design books 
  455.       Object-oriented programming and design books 
  456.  
  457.  
  458. ΓòÉΓòÉΓòÉ 1.11.1. Visual Builder Books ΓòÉΓòÉΓòÉ
  459.  
  460.      VisualAge C++: Visual Builder User's Guide (S25H-6960-00) 
  461.  
  462.      VisualAge C++: Visual Builder Parts Reference (S25H-6967-00) 
  463.  
  464.  
  465. ΓòÉΓòÉΓòÉ 1.11.2. User Interface Programming and Design Books ΓòÉΓòÉΓòÉ
  466.  
  467. In addition to the specific Visual Builder books listed previously, the 
  468. following books help you give a professional appearance to your part's user 
  469. interfaces: 
  470.  
  471.      Object-Oriented User Interface Design - IBM Common User Access 
  472.       Guidelines, Carmel, IN: Que Corporation, 1993. ISBN: 1-56529-170-0. 
  473.  
  474.      Volume 6A: Motif Programming Manual, 2nd Edition, Sebastopol, CA: 
  475.       O'Reilly & Associates, Inc., 1993. 
  476.  
  477.      Volume 6B: Motif Reference Manual, Sebastopol, CA: O'Reilly & Associates, 
  478.       Inc., 1993. ISBN: 1-56592-038-4. 
  479.  
  480.  
  481. ΓòÉΓòÉΓòÉ 1.11.3. Object-Oriented Programming and Design Books ΓòÉΓòÉΓòÉ
  482.  
  483. In addition to the specific Visual Builder books listed previously, you might 
  484. want to refer to a book about application design in the object-oriented and the 
  485. cooperative-processing environments. Some of the available books are as 
  486. follows: 
  487.  
  488.      Booch, Grady, Object-Oriented Design with Applications, Redwood City, CA: 
  489.       Benjamin/Cummings Publishing Company, 1991. ISBN: 0-8053-0091-0. 
  490.  
  491.      Coplien, James O., Advanced C++ Programming Styles and Idioms, Addison 
  492.       Wesley Publishing Company, 1992. ISBN: 0-201-54855-0. 
  493.  
  494.      Cox, Brad J., Object-Oriented Programming: An Evolutionary Approach, 
  495.       Reading, MA: Addison Wesley Publishing Company, 1987. ISBN: 0201103931. 
  496.  
  497.      Stroustrup, Bjarne, The Design and Evolution of C++, Murray Hill, NJ: 
  498.       Addison Wesley Publishing Company, 1994. ISBN: 0-201-54330-3. 
  499.  
  500.      Tibbetts, John et al., Building Cooperative Processing Applications Using 
  501.       SAA, New York, NY: John Wiley & Sons, Inc., 1992. ISBN: 0-471-55485-5. 
  502.  
  503.      Wirfs-Brock, Rebecca et al., Designing Object-Oriented Software, 
  504.       Englewood Cliffs, NJ: Prentice Hall, 1990. ISBN: 0-13-629825-7. 
  505.  
  506.  
  507. ΓòÉΓòÉΓòÉ 1.12. Communicating Your Comments to IBM ΓòÉΓòÉΓòÉ
  508.  
  509. If there is something you like, or dislike, about this book, please let us 
  510. know.  You can use one of the methods listed below to send your comments to 
  511. IBM.  Please be sure to include the complete title of the publication that you 
  512. are commenting on. 
  513.  
  514. The comments you send should only pertain to the information in this document 
  515. and its presentation.  To request additional publications or to ask questions 
  516. or make comments about the functions of IBM products or systems, you should 
  517. talk to your IBM representative or you authorized IBM remarketer. 
  518.  
  519. When you send comments to IBM, you grant IBM a nonexclusive right to use or 
  520. distribute your comments in any way it believes appropriate without incurring 
  521. any obligation to you. 
  522.  
  523. You can send your comments to IBM in the following ways: 
  524.  
  525.      By mail to the following address: 
  526.  
  527.             IBM Canada Ltd. Laboratory
  528.             Information Development
  529.             2G/345/1150/TOR
  530.             1150 EGLINTON AVENUE EAST
  531.             NORTH YORK, ONTARIO
  532.             CANADA M3C 1H7
  533.  
  534.      By FAX to the following number: 
  535.  
  536.         -  United States and Canada: (416) 448-6161 
  537.         -  Other countries (+1) 416-448-6161 
  538.  
  539.      By electronic mail to one of the following IDs.  Be sure to include your 
  540.       entire network address if you wish to get a reply. 
  541.  
  542.         -  Internet: torrcf@vnet.ibm.com 
  543.         -  IBMLink: toribm(torrcf) 
  544.         -  IBM/PROFS: torolab4(torrcf) 
  545.         -  IBMMAIL: ibmmail(caibmwt9 
  546.  
  547.  
  548. ΓòÉΓòÉΓòÉ 2. What Is C++ Construction from Parts? ΓòÉΓòÉΓòÉ
  549.  
  550.      Overview 
  551.  
  552.      The origins of C++ Construction from Parts 
  553.  
  554.      The benefits of using parts 
  555.  
  556.      What is a part? 
  557.  
  558.      How parts and classes are related 
  559.  
  560.      How you can connect parts 
  561.  
  562.      Sources of parts 
  563.  
  564.  Personal notes: 
  565.  
  566.  
  567. ΓòÉΓòÉΓòÉ 2.1. Overview ΓòÉΓòÉΓòÉ
  568.  
  569. C++ construction from parts is a technology for application development in 
  570. which applications are built from existing, reusable software components called 
  571. parts. Parts provide a wide range of capability, from very simple function 
  572. through complete, highly sophisticated applications. The following figure shows 
  573. a few examples. 
  574.  
  575. An entry field, a window, and a data array are examples of primitive parts. You 
  576. combine primitive parts to form more complex composite parts, such as a person 
  577. view. You can then extend this approach by combining primitive parts with 
  578. composite parts to create entire applications, such as a customer query 
  579. application. 
  580.  
  581. In general, parts are either visual or nonvisual. In the previous example, the 
  582. entry field, window, and person view are visual parts. The data array is a 
  583. nonvisual part. For more information about types of parts, see Kinds of Parts 
  584. Supported in Visual Builder. 
  585.  
  586.  
  587. ΓòÉΓòÉΓòÉ 2.2. The Origins of C++ Construction from Parts ΓòÉΓòÉΓòÉ
  588.  
  589. The C++ construction from parts technology is just becoming popular in the 
  590. software industry, but it is based on well-established techniques from other 
  591. industries, such as manufacturing. The figure below compares the manufacturing 
  592. process of constructing a computer system and the software process of 
  593. constructing an application. 
  594.  
  595. Just as electronic chips can be combined to form a functional board and 
  596. functional boards can be combined to form a computer, software parts can be 
  597. combined to form a composite part and composite parts can be combined to form 
  598. an application. 
  599.  
  600. To build a new computer today, you probably would not consider designing and 
  601. constructing every single electronic and mechanical component from raw 
  602. materials. Likewise, rather than always designing and developing new code for 
  603. your applications, you can now use available standard parts. Now the software 
  604. application development industry can realize the same benefits of reduced cycle 
  605. time and increased quality that have become so prevalent in the manufacturing 
  606. industry. 
  607.  
  608.  
  609. ΓòÉΓòÉΓòÉ 2.3. The Benefits of Using Parts ΓòÉΓòÉΓòÉ
  610.  
  611. The benefits that you and your company can realize from using the C++ 
  612. construction from parts technology to build applications include the following: 
  613.  
  614.      Reduced application development cost through division of labor. 
  615.  
  616.       Application developers are able to focus their expertise on rapid 
  617.       development of superior solutions for their users by tailoring reusable 
  618.       parts and assembling them into applications. Meanwhile, part designers 
  619.       can concentrate on developing new and innovative parts to meet the needs 
  620.       of the application developers. 
  621.  
  622.      Enhanced application quality and reliability. 
  623.  
  624.       Reusing existing parts reduces the chance of introducing errors when 
  625.       building applications. As parts are reused and refined, they become the 
  626.       solid building blocks for your applications. 
  627.  
  628.      Reduced cycle time to respond to users' needs. 
  629.  
  630.       Building an application prototype from a library of pre-existing parts 
  631.       allows you to rapidly verify your users' requirements. You can then 
  632.       smoothly and quickly extend this prototype into a production application. 
  633.  
  634.  Your success in using this technology depends on the availability of 
  635.  easy-to-use construction tools, standard interface protocols to enable the 
  636.  tools and parts to interoperate, and an ever-growing library of standard, 
  637.  increasingly powerful parts to be reused. 
  638.  
  639.  
  640. ΓòÉΓòÉΓòÉ 2.4. What Is a C++ Part? ΓòÉΓòÉΓòÉ
  641.  
  642. A C++ part is a software object implemented as a C++ class with some special 
  643. characteristics: 
  644.  
  645.      It supports a simple, standard interface protocol. 
  646.  
  647.       This protocol supports the interconnection of parts to form 
  648.       higher-function parts or entire applications. You can think of this 
  649.       protocol as being like the "innies" and "outies" on puzzle pieces that 
  650.       enable them to be interlocked into larger portions of the puzzle. 
  651.  
  652.       The part interface is composed of three distinct features: attributes, 
  653.       actions, and events. These features correspond to a natural way of 
  654.       viewing parts (and objects in general) in terms of what properties 
  655.       (attributes) they have, what behaviors (actions) they can perform, and 
  656.       what unsolicited information (events) they can notify other parts about. 
  657.       The following figure shows an example of a part interface. 
  658.  
  659.      It can extend the functions of application building tools. 
  660.  
  661.       The part itself can extend the construction environment by providing tool 
  662.       functions specifically customized to the part. Examples of these tool 
  663.       functions are icons, automated view builders, and attribute value 
  664.       initialization. You can think of the picture on the top of real jigsaw 
  665.       puzzle pieces as a tool extension-it enhances the ability of the tool 
  666.       (you) to complete the job (putting this particular puzzle together). 
  667.  
  668.  
  669. ΓòÉΓòÉΓòÉ 2.5. How Parts and Classes Are Related ΓòÉΓòÉΓòÉ
  670.  
  671. If you are familiar with object-oriented concepts, you have probably noticed 
  672. that a part is very much like an object in object-oriented programming. In 
  673. fact, parts and classes are closely related because C++ classes form the 
  674. underlying software implementation of parts. 
  675.  
  676. It might seem to you that we are not always talking about the same thing when 
  677. we talk about a part. This is because the word part can mean different things 
  678. at different times. 
  679.  
  680. Part is most often used as shorthand for part class. A part class is nothing 
  681. more than an object class with some special characteristics (such as a class 
  682. method that defines the part interface of the part). A part class is used as a 
  683. form for creating part instances. You can develop a new part, or enable an 
  684. existing class to become a part, by supplying support for these characteristics 
  685. in addition to the normal operations of the object class. 
  686.  
  687. Part is also used as shorthand for part instance. A part instance is a 
  688. particular object created from a part class. In C++, you might code an 
  689. expression such as 
  690.  
  691.   BananaClass * aBananaInstance = new BananaClass();
  692.  
  693. to create a particular instance of a part class. In a visual programming 
  694. environment, you might create a particular part instance by picking a Banana 
  695. part class from a palette of part classes and dropping it on a free-form 
  696. surface. 
  697.  
  698. You can tell which kind of part we are talking about from the context in which 
  699. the word appears. When we talk about parts on a palette or parts that you 
  700. create by writing code, we are referring to part classes. When we talk about 
  701. parts on a free-form surface or parts that are connected together to form an 
  702. application, we are referring to part instances. 
  703.  
  704. The Architecture of C++ C++ Construction from Parts provides the blueprint for 
  705. adding the characteristics that turn an object class into a part class. It sets 
  706. the stage for you to build your own part classes. 
  707.  
  708.  
  709. ΓòÉΓòÉΓòÉ 2.6. How You Can Connect Parts ΓòÉΓòÉΓòÉ
  710.  
  711. Visual Builder's Composition Editor enables you to connect different kinds of 
  712. parts: 
  713.  
  714.      Two visual parts 
  715.      Two nonvisual parts 
  716.      A visual part and a nonvisual part 
  717.  
  718.  You can also make the following kinds of connections: 
  719.  
  720.      Event-to-action connections start an action when a certain event occurs. 
  721.       A variation of this, the attribute-event-to-action connection, starts an 
  722.       action when a certain attribute event (for example, attribute changing 
  723.       value) occurs. 
  724.  
  725.       The action can have parameters; these parameters are attributes of the 
  726.       connection. You can connect a single event to many actions. You can also 
  727.       specify the order in which the actions are processed. Connecting the 
  728.       clicked event from a push button to the clear action on an entry field is 
  729.       an example of an event-to-action connection. Connecting the street 
  730.       attribute event from an address to the enable action on a Save push 
  731.       button is an example of an attribute-event-to-action connection. 
  732.  
  733.      Attribute-to-attribute connections link two data values so that they 
  734.       always stay the same. 
  735.  
  736.       You can connect a single attribute to many attributes. Connecting the 
  737.       street attribute of an address part to the text (contents) attribute of 
  738.       an entry field part is an example of an attribute-to-attribute 
  739.       connection. 
  740.  
  741.  
  742. ΓòÉΓòÉΓòÉ 2.7. Sources of Parts ΓòÉΓòÉΓòÉ
  743.  
  744. There are many possible sources for parts that you can combine to build new 
  745. parts or complete applications. 
  746.  
  747.      Visual Builder is shipped with a collection of prefabricated parts. These 
  748.       parts are the basic visual and nonvisual building blocks of an 
  749.       application. Examples are entry fields, push buttons, and data arrays. 
  750.  
  751.      Software providers will be creating additional parts. These parts might 
  752.       provide additional system support, such as facsimile transmission or 
  753.       E-mail access, common business functions, such as charting or report 
  754.       writing, or industry-specific functions, such as hospital patient 
  755.       charting or wholesale distribution. 
  756.  
  757.      Finally, if none of the available parts fulfills your needs, you (or 
  758.       someone in your organization) can create new parts either by modifying 
  759.       existing parts to add functions, by modifying existing C++ classes to 
  760.       enable them as parts, or by building parts just as you would any other 
  761.       C++ class. 
  762.  
  763.  
  764. ΓòÉΓòÉΓòÉ 3. Object Technology Overview ΓòÉΓòÉΓòÉ
  765.  
  766.      The origins of object technology 
  767.  
  768.      The application segmentation paradigm 
  769.  
  770.      Separation of model objects from view objects 
  771.  
  772.      Segmentation within the model 
  773.  
  774.  Personal notes: 
  775.  
  776.  
  777. ΓòÉΓòÉΓòÉ 3.1. The Origins of Object Technology ΓòÉΓòÉΓòÉ
  778.  
  779. As the cost of processing power has decreased, enterprises have taken the 
  780. opportunity to make people more effective. One way of increasing people's 
  781. effectiveness is to make the computer system into an extension of their 
  782. everyday business environment. 
  783.  
  784. In the batch and transaction environments, you were presented with lists of 
  785. functions that you could use. These functions did not necessarily correspond to 
  786. the problem you were trying to solve. Rather, they were the application 
  787. designer's idea of the solutions to the problem you were supposed to have. 
  788.  
  789. With computer power moving to the desktop, a new approach to building 
  790. applications has emerged. This approach provides you with the impression that 
  791. the computer is able to deal with the things that are common to your business, 
  792. such as calendars, notepads, invoices, bank accounts, or a wastebasket. Your 
  793. desktop computer becomes an extension of your real world. 
  794.  
  795. Designing applications to operate in this new environment can be challenging. 
  796. Many books are available to guide you in this endeavor. We only touch lightly 
  797. on the design issues here and suggest that you consult a book devoted to the 
  798. subject if you need in-depth knowledge (see Other Information You Might Find 
  799. Useful. 
  800.  
  801.  
  802. ΓòÉΓòÉΓòÉ 3.2. The Application Segmentation Paradigm ΓòÉΓòÉΓòÉ
  803.  
  804. The following figure shows the structure of an application developed using the 
  805. guidelines presented in this book. This structure follows a common application 
  806. segmentation paradigm in the cooperative processing environment, where an 
  807. application is divided into three segments: user interface, business logic, and 
  808. data access. 
  809.  
  810. The user interface segment defines how the user and the system interact. It 
  811. presents information to the user and accepts input from the user on behalf of 
  812. the business logic. Because it does not implement any of the business logic 
  813. behavior, it can be updated, or completely replaced, without affecting the 
  814. business logic. We refer to this user interface function as a view. 
  815.  
  816. The business logic segment implements the real-world objects of the 
  817. application. It defines the behaviors of these objects and their 
  818. interrelationships without consideration for how they are presented to users or 
  819. how users interact with them. We refer to the business logic segment as a 
  820. model. The implementation of the model can be totally contained in a single 
  821. computer, or it can be distributed among several computers using available 
  822. inter-computer communication mechanisms to interconnect the distributed 
  823. components of the model. 
  824.  
  825. The third segment of an application is data access. From the application 
  826. builder's perspective, this segment can be thought of as simply an extension of 
  827. the model. Because of this, we do not discuss it in this book. You can refer to 
  828. one of the books on cooperative processing environments (see Object-Oriented 
  829. Programming and Design Books) for a detailed discussion. 
  830.  
  831. Segmenting an application in this way provides you several benefits, even 
  832. outside the C++ construction from parts environment. 
  833.  
  834.      It enhances parallel development. 
  835.  
  836.       Prototyping of the views can be done by user interface specialists 
  837.       working with end users. This activity can take place in parallel and is 
  838.       somewhat independent of the development of the underlying model. 
  839.  
  840.      It supports connecting multiple views to the same model. 
  841.  
  842.       Users can access several concurrent views of the business model objects. 
  843.  
  844.      It facilitates cooperative processing. 
  845.  
  846.       The business logic can be effectively distributed between the workstation 
  847.       and one or more servers. 
  848.  
  849.  
  850. ΓòÉΓòÉΓòÉ 3.3. Separation of Model Objects from View Objects ΓòÉΓòÉΓòÉ
  851.  
  852. To segment your application into manageable chunks, first separate your view 
  853. objects from your model objects. By segmenting them, you can provide several 
  854. views of the same model object or objects. The following figure shows two views 
  855. (a detailed view and a tabular view) of a single model. 
  856.  
  857. To use this method of designing applications effectively, keep two important 
  858. points in mind: 
  859.  
  860.      Views can directly update models, but models cannot directly update 
  861.       views. 
  862.  
  863.      Views contain only presentation and user-manipulation logic. Business 
  864.       logic exists only in the model objects. 
  865.  
  866.  The dependency manager (in C++, the notification framework) is used to 
  867.  communicate between views and models in place of sending direct messages. 
  868.  Systems that support the model-view or model-view-controller (MVC) application 
  869.  structure also support a dependency manager function. The specific 
  870.  implementation details may differ from system to system, but the overall 
  871.  concept remains constant. 
  872.  
  873.  The dependency manager maintains lists of objects that depend on the 
  874.  occurrence of specific events. It provides a set of interfaces so that objects 
  875.  can register their dependency on an event or remove their dependency from it. 
  876.  
  877.  An object can signal the occurrence of each of its events to the dependency 
  878.  manager. The dependency manager searches its lists and forwards the 
  879.  notification to the objects that are dependent on the event. These objects can 
  880.  then take action based on the occurrence of the event. 
  881.  
  882.  To see how this works, consider a simple example. You might want to refer back 
  883.  to the previous figure as we go through the example. 
  884.  
  885.  In this example we define one event (nameChanged) that is associated with a 
  886.  change in the name of a person. Assume the upper-left object in the model is a 
  887.  person object. Because it maintains the data about a person, it has a 
  888.  dependency on the nameChanged event. Both view objects must also be notified 
  889.  when the nameChanged event occurs so they can update the content of the name 
  890.  field on the screen. Each of these objects registers a dependency on the 
  891.  nameChanged event with the dependency manager. 
  892.  
  893.  Now suppose you type over the contents of the name field in the detailView 
  894.  object and then tab out of the field. The view object signals a notification 
  895.  that the nameChanged event has occurred. The dependency manager receives this 
  896.  notification message and looks for its list of nameChanged event dependents. 
  897.  It finds the list and forwards the notification to the objects that have 
  898.  registered their dependency on the event. 
  899.  
  900.  The person object receives the notification and updates its internal data. The 
  901.  tabularView object receives the notification and refreshes the display with 
  902.  the updated name. 
  903.  
  904.  Because the detailView object is also dependent on the nameChanged event, you 
  905.  might wonder why the notification was not forwarded back to it. Also, because 
  906.  the tabularView object signals a notification when the name changes, you might 
  907.  wonder why the program does not go into an endless loop sending this 
  908.  notification around. The answer to both these issues is that the dependency 
  909.  manager recognizes recursive notifications and discards them. 
  910.  
  911.  
  912. ΓòÉΓòÉΓòÉ 3.4. Segmentation within the Model ΓòÉΓòÉΓòÉ
  913.  
  914. We have described one major approach to segmenting your application-dividing it 
  915. into a model and one or more views of that model. You can further segment the 
  916. model into several categories of objects. The following figure shows these 
  917. divisions using the analogy of an iceberg, because most models contain many 
  918. more hidden (nonvisual) objects than visible real-world objects. 
  919.  
  920. The categories shown in the figure are as follows: 
  921.  
  922.  View objects (V). These objects create the user interface display. They 
  923.            implement the interface between users of the application and the 
  924.            application business model. 
  925.  
  926.  Real-world objects (R). These objects implement the physical objects of your 
  927.            business enterprise, such as a car, an invoice, a notepad, or a 
  928.            calendar. Their behavior closely models the behavior of these 
  929.            physical objects. They have a formally specified interface, which 
  930.            allows them to be widely used by application construction tools. 
  931.  
  932.  Implementation objects (I). These objects provide the internal implementation 
  933.            of the real-world objects. They generally correspond to more 
  934.            traditional computer-related entities, such as arrays, numbers, or 
  935.            abstract objects used to collect common behavior. These objects 
  936.            often do not have formally specified interfaces because they are 
  937.            usually designed to be used by programmers rather than by 
  938.            application builders. 
  939.  
  940.  Service objects (S). These objects provide access to external services, such 
  941.            as communication support, database access, or operating system 
  942.            functions. They insulate the real-world and implementation objects 
  943.            from the details of these external services. These objects are also 
  944.            generally designed for programmers, so they might not have formally 
  945.            specified interfaces. 
  946.  
  947.  As an example of this application segmentation, consider an application that 
  948.  shows you the contents of a customer file: 
  949.  
  950.      The windows, entry fields, push buttons, and all other parts of the 
  951.       application's visual interface are view objects. 
  952.  
  953.      The customer object is the real-world object, providing the data about a 
  954.       selected customer to the view objects. 
  955.  
  956.      An array implementation object might be used internally by the customer 
  957.       object to hold the data. 
  958.  
  959.      Service objects support querying a data store and returning the customer 
  960.       information, which insulates all the other objects from dependence upon 
  961.       the kind of data store used to hold the customer records or its location. 
  962.  
  963.  
  964. ΓòÉΓòÉΓòÉ 4. The Architecture of C++ Construction from Parts ΓòÉΓòÉΓòÉ
  965.  
  966.      Overview 
  967.  
  968.      The origins of C++ construction from parts architecture 
  969.  
  970.      Architecture characteristics 
  971.  
  972.  Part interface architecture: 
  973.  
  974.      Access to part properties 
  975.  
  976.      Access to part behavior 
  977.  
  978.      Notification of changes to parts 
  979.  
  980.  Kinds of parts supported in Visual Builder 
  981.  
  982.  Personal notes: 
  983.  
  984.  
  985. ΓòÉΓòÉΓòÉ 4.1. Overview ΓòÉΓòÉΓòÉ
  986.  
  987. The C++ construction from parts architecture has been developed to meet the 
  988. specific need of application developers to have an easier, more productive way 
  989. to create high-quality applications in today's complex application development 
  990. environment. Our ability to conceive this architecture was enabled by the 
  991. evolution of application structure and by the emergence of application-building 
  992. power tools. 
  993.  
  994. This chapter describes the following: 
  995.  
  996.      The origins of the C++ construction from parts architecture 
  997.      Architecture characteristics 
  998.      The part interface architecture 
  999.      Kinds of parts supported in Visual Builder 
  1000.  
  1001.  
  1002. ΓòÉΓòÉΓòÉ 4.2. The Origins of the C++ Construction from Parts Architecture ΓòÉΓòÉΓòÉ
  1003.  
  1004. In the past, applications were designed and implemented with a monolithic 
  1005. structure. In these applications, embedded logic usually governed the flow of 
  1006. control. Such applications controlled the user, rather than allowing the user 
  1007. to control the application. In addition, the monolithic structure led to 
  1008. application components that were highly customized for the application in which 
  1009. they were developed. 
  1010.  
  1011. The following figure shows how these applications evolved from the first 
  1012. generation, monolithic batch applications, to the second generation, online 
  1013. transaction applications. While this evolution did enable users to gain direct 
  1014. access to the applications through fixed-function terminals, it still left the 
  1015. applications in control of the users' interactions with the system. 
  1016.  
  1017. As workstations became popular, another step in application structure evolution 
  1018. began. This evolutionary step came in response to the distributed nature of 
  1019. systems, the needs of the users to control system flow, and the desire of 
  1020. enterprises to reuse previously developed application components. While these 
  1021. three factors seem to be independent of each other, they drove toward a single 
  1022. solution. The application structure that developed in response to these factors 
  1023. represents the third generation in the evolutionary flow. 
  1024.  
  1025. The third-generation application structure embodies the concept of event-driven 
  1026. application design and implementation. Event-driven applications allow the user 
  1027. to control the flow of operations. This structure also supports dividing 
  1028. applications into cooperating elements that can run on different systems. A 
  1029. natural outgrowth of this application structure is small, modularized 
  1030. components with increasingly standard interface protocols. 
  1031.  
  1032. The C++ construction from parts architecture formalizes certain aspects of this 
  1033. application structure. 
  1034.  
  1035.  
  1036. ΓòÉΓòÉΓòÉ 4.3. Architecture Characteristics ΓòÉΓòÉΓòÉ
  1037.  
  1038. The C++ construction from parts architecture facilitates the development of 
  1039. parts to be used in this new environment. To be successful, this architecture 
  1040. must be both useful and easy to implement. It specifies the following: 
  1041.  
  1042.      A structural paradigm for applications that is independent of 
  1043.       implementation. 
  1044.  
  1045.       This maximizes the flexibility afforded to implementers. The only 
  1046.       implementation constraints in the specification are those needed to 
  1047.       provide reliable semantics for the interfaces. 
  1048.  
  1049.      A standard interface protocol. 
  1050.  
  1051.       A small, simple protocol suite achieves greater acceptance by part 
  1052.       builders and users than a large complex suite. This protocol supports 
  1053.       communication among application parts and between application parts and 
  1054.       the tools used to build the applications. 
  1055.  
  1056.       This standardized interface is called the part interface. Applications 
  1057.       can be built from parts by connecting the part interface features. 
  1058.  
  1059.  The architecture specification supports both new and pre-existing object 
  1060.  classes. You can apply the interface protocol to existing classes without 
  1061.  making extensive code modifications. 
  1062.  
  1063.  In a C++ programming environment where applications are created using an 
  1064.  editor or C++ browser, implementing the part interface of a part is 
  1065.  sufficient. As more sophisticated tools, such as visual application builders, 
  1066.  become available, parts can play a larger role in assisting the application 
  1067.  developer to build applications. 
  1068.  
  1069.  
  1070. ΓòÉΓòÉΓòÉ 4.4. Part Interface Architecture ΓòÉΓòÉΓòÉ
  1071.  
  1072. As stated earlier, a part interface is composed of three clearly defined 
  1073. programming interface features: attributes, actions, and events. The part 
  1074. interface architecture specifies the general format of the programming 
  1075. interfaces, not the particular implementation behind the interface. For 
  1076. example, the protocol describes how to build an attribute interface, 
  1077. independent of the contents, address, name, or other properties that are 
  1078. specific to this part. 
  1079.  
  1080.  
  1081. ΓòÉΓòÉΓòÉ 4.4.1. Access to Part Properties ΓòÉΓòÉΓòÉ
  1082.  
  1083. Attributes provide access to the properties of a part. A property can be any of 
  1084. the following: 
  1085.  
  1086.      An actual data object stored as a data member, such as the street in an 
  1087.       address object 
  1088.  
  1089.      An actual data object that is accessed via another object or the system, 
  1090.       such as the contents of an entry field (the contents are stored within 
  1091.       the system entry field control or widget) 
  1092.  
  1093.      A computed data object that is a transformed version of an actual data 
  1094.       object, such as the temperature in Fahrenheit when the actual data object 
  1095.       is the temperature in Celsius 
  1096.  
  1097.      A computed data object that is not stored, such as the sum of all numbers 
  1098.       in an array or the profit that is computed by subtracting dealer cost 
  1099.       from the retail price. 
  1100.  
  1101.  You can use the attribute interface to return the value of a property, to set 
  1102.  the value of a property, and to notify other parts when the value of a 
  1103.  property changes. You are not required to supply a complete attribute 
  1104.  interface for a property. For example, a property might be read-only, in which 
  1105.  case the part's attribute interface would not support the ability to set the 
  1106.  property's value. 
  1107.  
  1108.  The attribute interface is represented as follows: 
  1109.  
  1110.     aType aQueryMember();
  1111.     aSetMember(aType aValue);
  1112.     static INotificationId const anEventId;
  1113.  
  1114.  aQueryMember is the public member function to get the current value of the 
  1115.  property; aSetMember is the public member function to set the value of the 
  1116.  property to aValue; aType is the type of aValue; anEventId is the notification 
  1117.  ID for the property change event. 
  1118.  
  1119.  The member function that sets the value of the property can use the following 
  1120.  expression to notify dependent parts that the value of its property has 
  1121.  changed: 
  1122.  
  1123.     notifyObservers(INotificationEvent(anEventId, *this, true, (void*)aValue));
  1124.  
  1125.  notifyObservers is the member function that signals the event; anEventId is 
  1126.  the notification ID for the property change event; *this is the notifier 
  1127.  object; true indicates that the value of the attribute has changed; aValue is 
  1128.  the event data. (For more information about events, see Notification of 
  1129.  Changes to Parts.) 
  1130.  
  1131.  The following simpler call can be made if no event parameters are to be 
  1132.  passed: 
  1133.  
  1134.     notifyObservers(INotificationEvent(anEventId, *this));
  1135.  
  1136.  The member function that sets a property's value usually signals the value 
  1137.  change, but any member function that is aware of the change can signal the 
  1138.  event. 
  1139.  
  1140.  While a property is often represented as a data member of a part, it need not 
  1141.  be; the property could be a computed value. What is important is that whenever 
  1142.  the value of the property changes, the change takes place using the set member 
  1143.  function for the property. Changes made in any other way might not cause the 
  1144.  event to be signalled. 
  1145.  
  1146.  A part implements the attribute interface protocol by implementing the member 
  1147.  functions declared in the header files. For example, the following two member 
  1148.  functions support the attribute interface protocol for the temperature 
  1149.  property of the IThermometer part: 
  1150.  
  1151.     unsigned long IThermometer::temperature () const
  1152.     {
  1153.       return iTemperature;
  1154.     }
  1155.  
  1156.     IThermometer& IThermometer::setTemperature (unsigned long newTemp)
  1157.     {
  1158.       if (iTemperature != newTemp)
  1159.       {
  1160.         iTemperature = newTemp;
  1161.         notifyObservers(INotificationEvent(temperatureId, *this,
  1162.                         true, (void*)newTemp));
  1163.       }
  1164.       return *this;
  1165.     }
  1166.  
  1167.  Because temperature has two common representations, Celsius and Fahrenheit, a 
  1168.  more general solution would be to have an attribute for each representation. 
  1169.  If the temperature was stored internally in Celsius, then you could rename the 
  1170.  two member functions to setTempInCelsius and tempInCelsius. You could then 
  1171.  implement two additional member functions, such as the following, that return 
  1172.  and set the temperature in Fahrenheit: 
  1173.  
  1174.     unsigned long IThermometer::tempInFahrenheit () const
  1175.     {
  1176.       return ((iTemperature * (9/5)) + 32);
  1177.     }
  1178.  
  1179.     IThermometer & IThermometer::setTempInFahrenheit (unsigned long newTemp)
  1180.     {
  1181.       return setTempInCelsius ((newTemp - 32) * (5/9));
  1182.     }
  1183.  
  1184.  Notice that we did not introduce any additional data members when we added 
  1185.  these two new member functions. There is still only one property 
  1186.  (iTemperature) being maintained. However, now it is being maintained through 
  1187.  two different attribute interfaces. This illustrates the design guideline to 
  1188.  use a set member function (for example, setTempInFahrenheit) to change the 
  1189.  value of a property. It also shows that a property is not always a data 
  1190.  member. 
  1191.  
  1192.  
  1193. ΓòÉΓòÉΓòÉ 4.4.2. Access to Part Behavior ΓòÉΓòÉΓòÉ
  1194.  
  1195. An action provides access to the behavior of a part. Actions represent the 
  1196. tasks you can assign a part to do, such as open a window or add an object to a 
  1197. collection of objects. 
  1198.  
  1199. The action interface is represented as follows: 
  1200.  
  1201.   aType aMemberFunction();
  1202.  
  1203. aMemberFunction is the public member function for the action to be performed. 
  1204.  
  1205. A part implements the action interface by supplying a member function that 
  1206. responds to the behavior declared in the header file. For example, the 
  1207. following member function supports the action interface to set the default 
  1208. value of the city attribute in the IAddress class: 
  1209.  
  1210.   IAddress & IAddress :: setCityToDefault ()
  1211.   {
  1212.     return setCity("Hometown");
  1213.   }
  1214.  
  1215. This example shows that actions can cause values of attributes to change. In 
  1216. fact, most Boolean attributes can be set to false using the disable member 
  1217. function. For example, the disableMouseClickFocus member function in the 
  1218. IButton class causes the mouseClickFocus attribute to be set to false. 
  1219.  
  1220.  
  1221. ΓòÉΓòÉΓòÉ 4.4.3. Notification of Changes to Parts ΓòÉΓòÉΓòÉ
  1222.  
  1223. By signalling events, a part can notify other parts that a state or value in 
  1224. its interface has changed. Events can be signalled when the state of a view 
  1225. part changes, such as when a push button is clicked or when a window is opened, 
  1226. as well as when the state of a model part changes, such as when the balance in 
  1227. a bank account goes negative. Events can also be signalled when the value of a 
  1228. part's property changes, such as when money is deposited into or withdrawn from 
  1229. a bank account. 
  1230.  
  1231. Notifications appear as messages broadcast to all parts that are observers of 
  1232. the event. Observers of an event are those parts that depend on the event's 
  1233. occurrence. The event interface is represented as follows: 
  1234.  
  1235.   static INotificationId const anEventId;
  1236.  
  1237. anEventId is the notification ID for the event. 
  1238.  
  1239. Several different options are available to signal events. The first option is 
  1240. an example of using the event interface for attribute notification with event 
  1241. parameters: 
  1242.  
  1243.   notifyObservers(INotificationEvent(anEventId, *this, true, (void*)aValue));
  1244.  
  1245. notifyObservers is the member function that causes the event notification; 
  1246. anEventId is the notification ID for the property change event; *this is the 
  1247. notifier object; true indicates that the value of the attribute has changed; 
  1248. aValue is the new value of the property. 
  1249.  
  1250. The following simpler call can be made if no event parameters are to be passed: 
  1251.  
  1252.   notifyObservers(INotificationEvent(anEventId, *this));
  1253.  
  1254. Parts can also signal events when no attributes have changed, as follows: 
  1255.  
  1256.   notifyObservers(INotificationEvent(anEventId, *this, false, (void*)aValue));
  1257.  
  1258. notifyObservers is the member function that signals the event; anEventId is the 
  1259. notification ID for the property change event; *this is the notifier object; 
  1260. false indicates that the value of the attribute has not changed; aValue is the 
  1261. value of the property. 
  1262.  
  1263. The following simpler call can be made if no event parameters are to be passed: 
  1264.  
  1265.   notifyObservers(INotificationEvent(anEventId, *this, false));
  1266.  
  1267. To implement notification within a part, code the notifyObservers expression 
  1268. within one or more of its member functions. For example, the following 
  1269. setTempInCelsius member function notifies other parts when the temperature has 
  1270. changed and when the temperature is above the boiling point of water: 
  1271.  
  1272.   IThermometer& IThermometer::setTempInCelsius (unsigned long newTemp)
  1273.   {
  1274.     if (iTemperature != newTemp)
  1275.     {
  1276.       iTemperature = newTemp;
  1277.       notifyObservers(INotificationEvent(temperatureId, *this,
  1278.                       true, (void*)newTemp));
  1279.       if (iTemperature > 100)
  1280.       {
  1281.         notifyObservers(INotificationEvent(boilingId, *this));
  1282.       }
  1283.     }
  1284.     return *this;
  1285.   }
  1286.  
  1287.  
  1288. ΓòÉΓòÉΓòÉ 4.5. Kinds of Parts Supported in Visual Builder ΓòÉΓòÉΓòÉ
  1289.  
  1290. You can use many kinds of parts to construct applications. These different 
  1291. kinds of parts, categorized according to their characteristics, are shown in 
  1292. the following figure: 
  1293.  
  1294. As stated earlier, all parts are either primitive parts, which are the basic 
  1295. building blocks from which other parts are constructed, or composite parts, 
  1296. which are parts constructed from other parts. You must construct new primitive 
  1297. parts using a programming language because there are no similar parts to use in 
  1298. building them. 
  1299.  
  1300. In turn, primitive parts can be either visual or nonvisual. 
  1301.  
  1302.      Visual parts are elements of the application that the user can see at run 
  1303.       time, such as view parts. They are components of a presentation surface, 
  1304.       such as a window, an entry field, or a push button. The development-time 
  1305.       representations of visual parts on the Composition Editor's free-form 
  1306.       surface closely match their runtime visual forms. Users can edit these 
  1307.       parts on the Composition Editor in their visual runtime forms (visual 
  1308.       editing). 
  1309.  
  1310.      Nonvisual parts are elements of the application that are not seen by the 
  1311.       user at run time, such as model parts. On the Composition Editor's 
  1312.       free-form surface, users can manipulate these parts only as icons (iconic 
  1313.       editing). Examples of nonvisual parts are business logic parts, data 
  1314.       array parts, communication access protocol parts, and database query 
  1315.       parts. 
  1316.  
  1317.       Parts that the user can see at run time but that support iconic editing 
  1318.       only are treated as nonvisual parts at development time. A prompter 
  1319.       message box part and a file selection dialog part are examples of this 
  1320.       kind of nonvisual part. 
  1321.  
  1322.  
  1323. ΓòÉΓòÉΓòÉ 5. Designing a C++ Part ΓòÉΓòÉΓòÉ
  1324.  
  1325.      Overview 
  1326.  
  1327.      Design guidelines 
  1328.  
  1329.      Conventions to consider 
  1330.  
  1331.         -  Naming parts 
  1332.  
  1333.         -  Naming actions, attributes, and events 
  1334.  
  1335.  Personal notes: 
  1336.  
  1337.  
  1338. ΓòÉΓòÉΓòÉ 5.1. Overview ΓòÉΓòÉΓòÉ
  1339.  
  1340. This chapter highlights some factors to consider when designing a C++ part. 
  1341. Before creating a new primitive part, answer the following questions: 
  1342.  
  1343.      Is the part visual or nonvisual? (See Kinds of Parts Supported in Visual 
  1344.       Builder.) 
  1345.  
  1346.      Can it be created as a composite part? 
  1347.  
  1348.      Do you have a good model of the part and its responsibilities? 
  1349.  
  1350.      Is it a real-world implementation or a service part? (See Segmentation 
  1351.       within the Model.) 
  1352.  
  1353.  
  1354. ΓòÉΓòÉΓòÉ 5.2. Design Guidelines ΓòÉΓòÉΓòÉ
  1355.  
  1356. Designing a good part is very similar to designing a good class. In fact, a 
  1357. good part can be used as a traditional class in applications that are not 
  1358. otherwise being built using C++ construction from parts. Consider the following 
  1359. when designing your part: 
  1360.  
  1361.      Keep it simple. 
  1362.  
  1363.      Keep the number of actions, events, and attributes to a reasonable size. 
  1364.       In practice, 10-20 part features per part is a good target. 
  1365.  
  1366.      Minimize the dependencies on other parts and classes. Do not make 
  1367.       nonvisual parts dependent upon visual parts. 
  1368.  
  1369.      Specify several actions with a small number of parameters rather than a 
  1370.       single action with many parameters. When possible, provide default 
  1371.       parameter values. 
  1372.  
  1373.      Minimize the number of connections that need to be made when using the 
  1374.       Composition Editor. 
  1375.  
  1376.  To design a new part, do the following: 
  1377.  
  1378.    1. Determine the attributes (properties) of the part. 
  1379.    2. Determine the events (notifications) that the part will signal. 
  1380.    3. Determine the actions (behaviors) for the part. 
  1381.    4. After determining the part interface, investigate the available parts to 
  1382.       see if one already exists or to determine which class to use as a base. 
  1383.       Determine if any classes can be converted to parts. 
  1384.  
  1385.  
  1386. ΓòÉΓòÉΓòÉ 5.3. Conventions to Consider ΓòÉΓòÉΓòÉ
  1387.  
  1388. This section gives you some high-level conventions to follow when creating 
  1389. parts. For more information about conventions, see IBM Open Class Library 
  1390. Conventions. 
  1391.  
  1392.  
  1393. ΓòÉΓòÉΓòÉ 5.3.1. Naming Parts ΓòÉΓòÉΓòÉ
  1394.  
  1395. Because the names of C++ classes come from a flat name-space, developers of 
  1396. parts must ensure that their class names are unlikely to duplicate the class 
  1397. names used by other developers. Using a prefix on your class names is a good 
  1398. way to reduce the chances of duplicating a class name. All IBM Open Class names 
  1399. in the global name space begin with the letter "I". 
  1400.  
  1401.  
  1402. ΓòÉΓòÉΓòÉ 5.3.2. Naming Actions, Attributes, and Events ΓòÉΓòÉΓòÉ
  1403.  
  1404. A part feature is an element of a part's interface. It is used as a collective 
  1405. term for a part action, attribute, or event. 
  1406.  
  1407. If you follow these simple conventions in choosing your feature names, it is 
  1408. easier for users of your parts to recognize the function of a feature: 
  1409.  
  1410.      Name actions with phrases that indicate activities to be performed, 
  1411.       together with an optional receiver of that activity. Examples of feature 
  1412.       names for actions are startTimer, openWindow, hide, and setFocus. 
  1413.  
  1414.      Name attributes with phrases that indicate the physical property they 
  1415.       represent. Examples of feature names for attributes are height, 
  1416.       buttonLabel, and contents. 
  1417.  
  1418.      Name events with phrases that indicate activities that either have 
  1419.       happened or are about to happen. Examples of feature names for events are 
  1420.       clicked, aboutToCloseWindow, and timeExpired. 
  1421.  
  1422.  Note:  Do not use feature names that start with avl or vb. These are reserved 
  1423.  for use by Visual Builder. 
  1424.  
  1425.  The main place that users see your action, attribute, and event names is on 
  1426.  the Connections pop-up menu of the Composition Editor. Because features are 
  1427.  shown on this pop-up menu in alphabetical order, the phrasing you use for a 
  1428.  feature name is the only way to distinguish between actions, attributes, and 
  1429.  events. 
  1430.  
  1431.  It is important to choose unique names for your new actions, attributes, or 
  1432.  events. This prevents you from unintentionally overriding an inherited part 
  1433.  feature. If you intend to replace an existing part feature that your part 
  1434.  inherits, then your new name must be the same as the name of the part feature 
  1435.  you are replacing. The scope within which your feature name must be unique in 
  1436.  your part class and all its base classes in the class hierarchy. 
  1437.  
  1438.  
  1439. ΓòÉΓòÉΓòÉ 6. Implementing a C++ Part ΓòÉΓòÉΓòÉ
  1440.  
  1441.      Overview 
  1442.  
  1443.      Positioning a part within the class hierarchy 
  1444.  
  1445.      Implementing events 
  1446.  
  1447.      Implementing attributes 
  1448.  
  1449.         -  Get member functions 
  1450.  
  1451.         -  Set member functions 
  1452.  
  1453.         -  Attribute notification IDs 
  1454.  
  1455.      Implementing actions 
  1456.  
  1457.      Implementing constructors 
  1458.  
  1459.      Implementing destructors 
  1460.  
  1461.      Implementing assignment operators 
  1462.  
  1463.      Implementation checklists 
  1464.  
  1465.  Personal notes: 
  1466.  
  1467.  
  1468. ΓòÉΓòÉΓòÉ 6.1. Overview ΓòÉΓòÉΓòÉ
  1469.  
  1470. This chapter explains how to implement a C++ part. It explains how to create 
  1471. the header and code files for a C++ class that supports the parts architecture. 
  1472. No matter which kind of part you are building, you need to read the concepts 
  1473. and techniques introduced early in the chapter to understand later material. 
  1474. The key items covered in this chapter follow: 
  1475.  
  1476.      Positioning the part within the class hierarchy 
  1477.      Implementing events (notification) 
  1478.      Implementing attributes (properties) 
  1479.      Implementing actions (behaviors) 
  1480.  
  1481.  
  1482. ΓòÉΓòÉΓòÉ 6.2. Positioning a Part within the Class Hierarchy ΓòÉΓòÉΓòÉ
  1483.  
  1484. The first step associated with implementing a part is positioning the part 
  1485. class in the C++ class hierarchy. 
  1486.  
  1487. Place your nonvisual part as shown in the following table, under the 
  1488. IStandardNotifier class hierarchy. Inserted in this location, your part 
  1489. inherits certain default behavior from IStandardNotifier and the INotifier 
  1490. protocol. 
  1491.  
  1492. Class Hierarchy for Nonvisual Parts 
  1493.  
  1494. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1495. ΓöéClass                        ΓöéResponsibility           Γöé
  1496. ΓöéIBase                        ΓöéBase class               Γöé
  1497. Γöé  IVBase                     ΓöéVirtual base class       Γöé
  1498. Γöé    INotifier                ΓöéNotification protocol    Γöé
  1499. Γöé      IStandardNotifier      ΓöéImplementation of        Γöé
  1500. Γöé                             Γöénotification protocol    Γöé
  1501. Γöé        New nonvisual part   Γöé                         Γöé
  1502. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1503.  
  1504. An example from the IAddress header file follows: 
  1505.  
  1506.   class IAddress : public IStandardNotifier
  1507.  
  1508. In some cases, you might want your nonvisual part to be abstract. Be aware that 
  1509. your users cannot drop abstract nonvisual parts onto the Composition Editor's 
  1510. free-form surface. If you do not provide concrete parts derived from this 
  1511. abstract part, your users must derive their own concrete parts. For more 
  1512. information about the syntax to define a part as abstract, see VBComposerInfo 
  1513. Statement for a Part. 
  1514.  
  1515. Once you have found your part's position in the class hierarchy, you are ready 
  1516. to begin the actual building. 
  1517.  
  1518. Creating a C++ class for a part is not much different from creating any other 
  1519. C++ class. There are just a few additional guidelines to keep in mind for those 
  1520. member functions that support your part's part interface. 
  1521.  
  1522.  
  1523. ΓòÉΓòÉΓòÉ 6.3. Implementing Events ΓòÉΓòÉΓòÉ
  1524.  
  1525. Events might be occurring inside your part that you want to signal to other 
  1526. parts. The mechanism for signalling this information to other parts is event 
  1527. notification. 
  1528.  
  1529. In a simple event notification, dependent parts are notified only that the 
  1530. event occurred. An example of this type of event notification is when a push 
  1531. button visual part notifies all observer parts that it has been selected. The 
  1532. public section of the IButton class header file contains the following 
  1533. definition for the buttonClickId notification ID: 
  1534.  
  1535.   static INotificationId const
  1536.     buttonClickId;
  1537.  
  1538. In addition, the IButton code file contains the following: 
  1539.  
  1540.   const INotificationId IButton::buttonClickId="IButton::buttonClick";
  1541.  
  1542. The notification string ID contains the class name followed by the event name. 
  1543. IButton can notify others of this event by using notifyObservers with the 
  1544. buttonClickId notification event ID: 
  1545.  
  1546.   notifyObservers(INotificationEvent(buttonClickId, *this, false));
  1547.  
  1548. This function call signals that something happened (the button was clicked) but 
  1549. provides no additional information. The false parameter on the 
  1550. INotificationEvent constructor indicates that no attributes have changed. 
  1551.  
  1552. A part can provide additional information about the event by passing parameters 
  1553. with the notification. An example of this use of an event notification is when 
  1554. a push button part that represents a key on a calculator notifies all observer 
  1555. parts that it has been selected. In addition to notifying other parts that it 
  1556. has been selected, the push button part can also pass the value of its label, 
  1557. as follows: 
  1558.  
  1559.   notifyObservers(INotificationEvent(buttonClickId, *this,
  1560.                   false, (void *)5));
  1561.  
  1562. This notifies other parts that push button 5 was selected. 
  1563.  
  1564. Event notification is also used to inform other parts that attributes have 
  1565. changed. An example of this type of event notification is when the street 
  1566. changes in the IAddress part. The part can do this with the following code: 
  1567.  
  1568.   IString eventData(iStreet);
  1569.   notifyObservers(INotificationEvent(streetId, *this,
  1570.                   true, (void*)&eventData));
  1571.  
  1572.  
  1573. ΓòÉΓòÉΓòÉ 6.4. Implementing Attributes ΓòÉΓòÉΓòÉ
  1574.  
  1575. Each property that your part exposes through its attribute interface has one or 
  1576. two corresponding member functions to support the attribute interface protocol 
  1577. for accessing the property. The public member function that retrieves the value 
  1578. of a property is called the get member function. The public member function 
  1579. that sets the value of a property is called the set member function. In 
  1580. addition, you need to define a public static notification event ID for 
  1581. notification of changes to the attribute. An example of the definition of the 
  1582. street attribute from the public section of the header file for the IAddress 
  1583. class follows: 
  1584.  
  1585.   virtual IString
  1586.     street () const;
  1587.   virtual IAddress
  1588.    &setStreet (const IString& aStreet);
  1589.   static INotificationId const
  1590.     streetId;
  1591.  
  1592. Get and set member functions usually come in pairs. The exception is when a 
  1593. property is read-only (such as a property that represents the serial number of 
  1594. the computer you are currently using). In this case, the property has only a 
  1595. get member function. 
  1596.  
  1597. Always use the get and set member functions to access the value of a property 
  1598. so that the associated behaviors are performed. In particular, if you update 
  1599. the value of a property without triggering event notification, the application 
  1600. might fail to operate correctly. Define property data members as private to 
  1601. ensure that other classes do not access the properties directly. 
  1602.  
  1603.  
  1604. ΓòÉΓòÉΓòÉ 6.4.1. Defining Get Member Functions ΓòÉΓòÉΓòÉ
  1605.  
  1606. Get member functions return the value of a part's property. They are always 
  1607. accessed using a public member function without parameters. 
  1608.  
  1609. The simplest get member function returns the data member that holds the value 
  1610. of a property. The street member function of the IAddress class is an example 
  1611. of a simple get member function, as follows: 
  1612.  
  1613.   IString IAddress::street () const
  1614.   {
  1615.     return iStreet;
  1616.   }
  1617.  
  1618. Because this get member function does not change any values within the object, 
  1619. it is defined as const. 
  1620.  
  1621.  
  1622. ΓòÉΓòÉΓòÉ 6.4.2. Defining Set Member Functions ΓòÉΓòÉΓòÉ
  1623.  
  1624. Set member functions modify the value of a part's property and notify dependent 
  1625. objects that the value has changed. Set member functions are always accessed 
  1626. using a member function with one parameter-the value to be set into the 
  1627. property. Normally this parameter is defined as const because most set member 
  1628. functions do not change the parameter. 
  1629.  
  1630. A simple set member function sets the IStreet data member and signals a 
  1631. notification using notifyObservers. The following set member function, taken 
  1632. from the IAddress example part, does just that: 
  1633.  
  1634.   IAddress& IAddress::setStreet (const IString& aStreet)
  1635.   {
  1636.     if (iStreet != aStreet)
  1637.     {
  1638.       iStreet = aStreet;
  1639.       IString eventData(iStreet);
  1640.       notifyObservers(INotificationEvent(streetId, *this,
  1641.                       true, (void*)&eventData));
  1642.     } /* endif */
  1643.     return *this;
  1644.   }
  1645.  
  1646. An even simpler set member function can be implemented that does not signal a 
  1647. notification when its property is changed. You might use such a set member 
  1648. function when you know that a group of properties is always changed together. 
  1649. In this case, only one set member function out of the group would actually 
  1650. signal the event. This couples the event signalling with the entire sequence of 
  1651. set member function calls. 
  1652.  
  1653. Set member functions can also perform other operations, such as computing 
  1654. values for many properties based on the value supplied or signalling an 
  1655. additional notification when the value of a property crosses a threshold value. 
  1656.  
  1657. Signal events only when the value of the property has changed. In addition, 
  1658. providing the new value of the attribute in the notification event can improve 
  1659. the overall system performance. 
  1660.  
  1661.  
  1662. ΓòÉΓòÉΓòÉ 6.4.3. Attribute Notification IDs ΓòÉΓòÉΓòÉ
  1663.  
  1664. You define notification IDs using public static data members. An example from 
  1665. the public section of the IAddress class header file follows: 
  1666.  
  1667.   static INotificationId const
  1668.     streetId,
  1669.     cityId,
  1670.     stateId,
  1671.     zipId;
  1672.  
  1673. This defines streetId, cityId, stateId and zipId as notification IDs. In 
  1674. addition, the IAddress code file contains the following: 
  1675.  
  1676.   const INotificationId IAddress::streetId="IAddress::street";
  1677.   const INotificationId IAddress::cityId="IAddress::city";
  1678.   const INotificationId IAddress::stateId="IAddress::state";
  1679.   const INotificationId IAddress::zipId="IAddress::zip";
  1680.  
  1681. The notification string ID contains the class name followed by the attribute 
  1682. name. 
  1683.  
  1684.  
  1685. ΓòÉΓòÉΓòÉ 6.5. Implementing Actions ΓòÉΓòÉΓòÉ
  1686.  
  1687. Each behavior that your part exposes in its action interface has a 
  1688. corresponding public member function to support the action protocol for that 
  1689. behavior. An example of the setCityToDefault public member function from the 
  1690. IAddress class header file follows: 
  1691.  
  1692.   virtual IAddress
  1693.    &setCityToDefault ();
  1694.  
  1695. Just like other C++ member functions, actions can have parameters and a return 
  1696. value. You can specify the return value and parameters as part of the action 
  1697. interface (see Describing Part Interfaces in Part Information Files. 
  1698.  
  1699. The only thing unique to Visual Builder about these member functions is that 
  1700. they should not directly access data members for properties; instead, use the 
  1701. attribute's get and set member functions to access the data members. You need 
  1702. to do this because the get and set member functions often have additional 
  1703. behavior beyond simply accessing the value of the data member. 
  1704.  
  1705. For example, the setCityToDefault member function of the IAddress class uses 
  1706. the following setCity to set the city to Hometown instead of setting it 
  1707. directly: 
  1708.  
  1709.   IAddress& IAddress::setCityToDefault ()
  1710.   {
  1711.     return setCity("Hometown");
  1712.   }
  1713.  
  1714. Consider providing an action to reset each attribute to a default value when 
  1715. implementing a part. For Boolean attributes, provide a public member function 
  1716. (for example, a disable action) that causes the attribute to be set to false 
  1717. and a public set member function (for example, an enable action) with a default 
  1718. parameter equal to true. You can use the set member function (for example, 
  1719. enableMouseClickFocus) with a default value as the set member function for the 
  1720. Boolean attribute and an action member function. An example from the IButton 
  1721. class for the mouseClickFocus Boolean attribute follows: 
  1722.  
  1723.   IButton
  1724.    &enableMouseClickFocus  (Boolean turnOn = true),
  1725.    &disableMouseClickFocus ();
  1726.  
  1727.  
  1728. ΓòÉΓòÉΓòÉ 6.6. Implementing Constructors ΓòÉΓòÉΓòÉ
  1729.  
  1730. Nonvisual parts should have a default constructor. An example of the IAddress 
  1731. class default constructor follows: 
  1732.  
  1733.   IAddress();
  1734.  
  1735. The implementation of the standard constructor for the IAddress class follows: 
  1736.  
  1737.   IAddress::IAddress() : IStandardNotifier (),
  1738.     iStreet("101 Main Street"),
  1739.     iCity("Hometown"),
  1740.     iState("NC"),
  1741.     iZip("27511")
  1742.   {
  1743.   }
  1744.  
  1745. For most nonvisual parts, supply a copy constructor. An example follows: 
  1746.  
  1747.   IAddress (const IAddress& partCopy);
  1748.  
  1749. The implementation of the copy constructor for IAddress follows: 
  1750.  
  1751.   IAddress::IAddress (const IAddress& partCopy)
  1752.     : IStandardNotifier (partCopy),
  1753.     iStreet(partCopy.street()),
  1754.     iCity(partCopy.city()),
  1755.     iState(partCopy.state()),
  1756.     iZip(partCopy.zip())
  1757.   {
  1758.   }
  1759.  
  1760.  
  1761. ΓòÉΓòÉΓòÉ 6.7. Implementing Destructors ΓòÉΓòÉΓòÉ
  1762.  
  1763. For all visual and nonvisual parts, specify a virtual destructor. An example 
  1764. follows: 
  1765.  
  1766.   virtual
  1767.     ~IAddress ();
  1768. The implementation of the IAddress destructor follows: 
  1769.  
  1770.   IAddress::~IAddress()
  1771.   {
  1772.   }
  1773.  
  1774.  
  1775. ΓòÉΓòÉΓòÉ 6.8. Implementing Assignment Operators ΓòÉΓòÉΓòÉ
  1776.  
  1777. To ensure that attribute changes are signalled, specify an assignment operator 
  1778. for nonvisual parts with attributes, as follows: 
  1779.  
  1780.   IAddress& operator= (const IAddress& aIAddress);
  1781.  
  1782. The implementation of the IAddress class assignment operator follows: 
  1783.  
  1784.   IAddress& IAddress::operator= (const IAddress& aIAddress)
  1785.   {
  1786.     if (this == &aIAddress) {
  1787.       return *this;
  1788.     } /* endif */
  1789.     IStandardNotifier::operator=(aIAddress);
  1790.     setStreet(aIAddress.street());
  1791.     setCity(aIAddress.city());
  1792.     setState(aIAddress.state());
  1793.     setZip(aIAddress.zip());
  1794.     return *this;
  1795.   }
  1796.  
  1797. Note the following in the previous example: 
  1798.  
  1799.      The assignment operator checks to ensure that the new value is not the 
  1800.       current object. 
  1801.  
  1802.      The part's base class is called to ensure that the base class' data is 
  1803.       assigned correctly. 
  1804.  
  1805.      To ensure notification of attribute changes, the attribute set member 
  1806.       functions are used to change the value of the attributes. 
  1807.  
  1808.  
  1809. ΓòÉΓòÉΓòÉ 6.9. Implementation Checklists ΓòÉΓòÉΓòÉ
  1810.  
  1811. The following checklists contain the items required to implement a new part or 
  1812. to convert an existing class to a part. Because parts are implemented as 
  1813. classes, you can convert existing classes to parts and still use them as 
  1814. classes. 
  1815.  
  1816. In the header file, make the following changes to support parts: 
  1817.  
  1818.    1. For nonvisual parts, publicly inherit from IStandardNotifier or a derived 
  1819.       class. For visual parts, publicly inherit from IWindow or a derived 
  1820.       class. 
  1821.  
  1822.    2. Define the constructors and a virtual destructor. 
  1823.  
  1824.    3. If appropriate, define the assignment operator for nonvisual parts. 
  1825.  
  1826.    4. Define a public notification ID for each event. 
  1827.  
  1828.    5. Define a public notification ID for each attribute. 
  1829.  
  1830.    6. Define a public get member function with no parameters so users can 
  1831.       obtain the value of each attribute. 
  1832.  
  1833.    7. If the attribute can be changed, define a public set member function with 
  1834.       a single parameter containing the new value. If this attribute is 
  1835.       Boolean, set the default to true. 
  1836.  
  1837.    8. Define any public action member functions. Consider reset or default 
  1838.       actions for attributes, including disable and enable actions for Boolean 
  1839.       attributes. 
  1840.  
  1841.  In the code or inline file, make the following changes in the code logic to 
  1842.  support parts: 
  1843.  
  1844.    1. Code each event notification ID using a string containing the class name 
  1845.       and event name. 
  1846.  
  1847.    2. Code each attribute notification ID using a string containing the class 
  1848.       name and attribute name. 
  1849.  
  1850.    3. Code the constructors and a virtual destructor. 
  1851.  
  1852.    4. If defined, code the assignment operator. 
  1853.  
  1854.    5. Code the public get member functions for each attribute. 
  1855.  
  1856.    6. Code the public set member functions for each attribute. Notify observers 
  1857.       when the value changes. 
  1858.  
  1859.    7. Call get and set member functions to return and change attribute values 
  1860.       in actions. In addition, notify observers of events specified by the 
  1861.       part. 
  1862.  
  1863.  
  1864. ΓòÉΓòÉΓòÉ 7. Describing Part Interfaces in Part Information Files ΓòÉΓòÉΓòÉ
  1865.  
  1866.      Overview 
  1867.  
  1868.      Part information syntax 
  1869.  
  1870.         -  VBBeginPartInfo statement 
  1871.         -  VBParent statement 
  1872.         -  VBIncludes statement 
  1873.         -  VBPartDataFile statement 
  1874.         -  VBLibFile statement 
  1875.         -  VBComposerInfo statement 
  1876.         -  VBConstructor statement 
  1877.         -  VBEvent statement 
  1878.         -  VBAttribute statement 
  1879.         -  VBAction statement 
  1880.         -  VBPreferredFeatures statement 
  1881.         -  VB statement 
  1882.         -  VBEndPartInfo statement 
  1883.         -  Sample part information for IAddress 
  1884.  
  1885.      Class information syntax 
  1886.  
  1887.         -  VBBeginPartInfo statement 
  1888.         -  VBParent statement 
  1889.         -  VBIncludes statement 
  1890.         -  VBPartDataFile statement 
  1891.         -  VBComposerInfo statement 
  1892.         -  VBConstructor statement 
  1893.         -  VBAction statement 
  1894.         -  VBAttribute statement 
  1895.         -  VBPreferredFeatures statement 
  1896.         -  VB statement 
  1897.         -  VBEndPartInfo statement 
  1898.         -  Sample class information for IRange 
  1899.  
  1900.      Function group information syntax 
  1901.  
  1902.         -  VBBeginPartInfo statement 
  1903.         -  VBIncludes statement 
  1904.         -  VBPartDataFile statement 
  1905.         -  VBComposerInfo statement 
  1906.         -  VBAction statement 
  1907.         -  VB statement 
  1908.         -  VBPreferredFeatures statement 
  1909.         -  VBEndPartInfo statement 
  1910.         -  Sample function group information 
  1911.  
  1912.      Enumeration information syntax 
  1913.  
  1914.         -  VBBeginEnumInfo statement 
  1915.         -  VBIncludes statement 
  1916.         -  VBPartDataFile statement 
  1917.         -  VBEnumerators statement 
  1918.         -  VB statement 
  1919.         -  VBEndEnumInfo statement 
  1920.         -  Sample alignment enumeration for IEntryField 
  1921.  
  1922.      Type definition information syntax 
  1923.  
  1924.         -  VBBeginTypedefInfo statement 
  1925.         -  VBIncludes statement 
  1926.         -  VBPartDataFile statement 
  1927.         -  VB statement 
  1928.         -  VBEndTypedefInfo statement 
  1929.         -  Sample type definition information 
  1930.  
  1931.      Other syntax examples 
  1932.  
  1933.  Personal notes: 
  1934.  
  1935.  
  1936. ΓòÉΓòÉΓòÉ 7.1. Overview ΓòÉΓòÉΓòÉ
  1937.  
  1938. You describe the interface information that Visual Builder needs by using the 
  1939. Part Interface Editor or by creating files containing the interface information 
  1940. and importing these files into Visual Builder. This chapter describes the 
  1941. format of the interface information and is divided into the following sections: 
  1942.  
  1943.      Part information syntax 
  1944.      Class information syntax 
  1945.      Function group information syntax 
  1946.      Enumeration information syntax 
  1947.      Type definition information syntax 
  1948.  
  1949.  You can include the statements describing the interface in a C++ header file 
  1950.  or in a separate file (sometimes called a part information file, or .vbe 
  1951.  file). All interface information code lines begin with //VB in column 1. 
  1952.  Between statements, lines that do not start with //VB are ignored. You can 
  1953.  arrange statements on a single line or continue them on multiple lines by 
  1954.  using the VB statement. 
  1955.  
  1956.  The following rules apply to all interface information: 
  1957.  
  1958.    1. All part, class, function group, enumeration, and type definition names 
  1959.       must be unique. 
  1960.  
  1961.    2. A single file can contain information about multiple parts, classes, 
  1962.       function groups, enumerations, and type definitions. 
  1963.  
  1964.    3. The interface information about a specific part, class, function group, 
  1965.       enumeration, and type definition must be contained in a single file. 
  1966.  
  1967.  
  1968. ΓòÉΓòÉΓòÉ 7.2. Part Information Syntax ΓòÉΓòÉΓòÉ
  1969.  
  1970. This section describes the interface information for nonvisual parts that 
  1971. Visual Builder uses. Syntax descriptions appear in the recommended order of 
  1972. occurrence in a file. The following rules apply to the interface information 
  1973. for parts: 
  1974.  
  1975.    1. All feature names (attributes, events, actions) within a part hierarchy 
  1976.       must be unique. If duplicate feature names exist, the information for the 
  1977.       derived part is used and the information for the base part is ignored for 
  1978.       that specific feature. 
  1979.  
  1980.    2. All part names must be unique and must be a valid C++ class name. 
  1981.  
  1982.    3. The name on the VBBeginPartInfo statement and VBEndPartInfo statement 
  1983.       must match. 
  1984.  
  1985.    4. Attribute, event and action information statements can appear more than 
  1986.       once for a specific part, but all other information statements must 
  1987.       appear only once. 
  1988.  
  1989.  For information about how to read these syntax diagrams, see How to Read 
  1990.  Syntax Diagrams. 
  1991.  
  1992.  
  1993. ΓòÉΓòÉΓòÉ 7.2.1. VBBeginPartInfo Statement for a Part ΓòÉΓòÉΓòÉ
  1994.  
  1995. The first statement describing the interface is the VBBeginPartInfo statement. 
  1996. This statement specifies the part name and the part description. 
  1997.  
  1998. ΓöÇΓöÇ//VBBeginPartInfo: ΓöÇΓöÇ part_name ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1999.                                       ΓööΓöÇΓöÇ,"description" ΓöÇΓöÿ
  2000.  
  2001.  part_name              Valid and unique C++ class name that implements the 
  2002.                         part interface. 
  2003.  
  2004.  description            Optional part description. 
  2005.  
  2006.  
  2007. ΓòÉΓòÉΓòÉ 7.2.2. VBParent Statement for a Part ΓòÉΓòÉΓòÉ
  2008.  
  2009. The VBParent statement describes the part's base part. The attributes, actions 
  2010. and events defined by the base part are inherited. The part class hierarchy 
  2011. must include the IStandardNotifier class for nonvisual parts. 
  2012.  
  2013. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2014.      ΓööΓöÇΓöÇ //VBParent: ΓöÇΓöÇΓöÇΓöÇΓöÇ parent_name ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2015.  
  2016.  parent_name            Valid and unique C++ class name. 
  2017.  
  2018.  
  2019. ΓòÉΓòÉΓòÉ 7.2.3. VBIncludes Statement for a Part ΓòÉΓòÉΓòÉ
  2020.  
  2021. The VBIncludes statement describes the include file that contains the 
  2022. declaration of the C++ class that implements the part interface. 
  2023.  
  2024. ΓöÇΓöÇΓöÇ //VBIncludes: ΓöÇΓöÇΓöÇΓöÇ<include_file>ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2025.                                        ΓööΓöÇΓöÇ include_define ΓöÇΓöÇΓöÿ
  2026.  
  2027.  include_file           Header file required by the compiler to use this part. 
  2028.                         If you want to specify a link dependency in your 
  2029.                         application make file, use double quotation marks (" ") 
  2030.                         to delimit the file name instead of the angle brackets 
  2031.                         (<>). 
  2032.  
  2033.  include_define         Optional statement that associates a variable with the 
  2034.                         include statement, enabling generated code to test for 
  2035.                         duplicate include statements. 
  2036.  
  2037.  
  2038. ΓòÉΓòÉΓòÉ 7.2.4. VBPartDataFile Statement for a Part ΓòÉΓòÉΓòÉ
  2039.  
  2040. The optional VBPartDataFile statement specifies the file in which to save the 
  2041. part information. If you do not use this statement, the imported file name is 
  2042. used with a .vbb extension. 
  2043.  
  2044. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2045.    ΓööΓöÇΓöÇ //VBPartDataFile: ΓöÇΓöÇΓöÇ file_name ΓöÇΓöÇΓöÿ
  2046.  
  2047.  file_name              File name in which to save the part interface 
  2048.                         information. 
  2049.  
  2050.  
  2051. ΓòÉΓòÉΓòÉ 7.2.5. VBLibFile Statement for a Part ΓòÉΓòÉΓòÉ
  2052.  
  2053. The optional VBLibFile statement specifies the library file that will contain 
  2054. the part when it is compiled. Visual Builder uses this data as follows: 
  2055.  
  2056.      It inserts a #pragma statement in the part's generated header code. 
  2057.  
  2058.      It adds the file name to the dependency list in the make file generated 
  2059.       for applications using the part. 
  2060.  
  2061.   ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2062.      ΓööΓöÇΓöÇ //VBLibFile: ΓöÇΓöÇΓöÇ file_name ΓöÇΓöÇΓöÿ
  2063.  
  2064.  file_name              Name of the file that will contain the compiled 
  2065.                         nonvisual part. 
  2066.  
  2067.  
  2068. ΓòÉΓòÉΓòÉ 7.2.6. VBComposerInfo Statement for a Part ΓòÉΓòÉΓòÉ
  2069.  
  2070. The nonvisual part VBComposerInfo statement specifies the composer information 
  2071. needed to support nonvisual parts. This information includes the icon resource 
  2072. ID and icon resource DLL name. 
  2073.  
  2074. ΓöÇΓöÇ//VBComposerInfo: ΓöÇΓöÇ nonvisual ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2075.  
  2076. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ
  2077.    ΓööΓöÇΓöÇ,ΓöÇΓöÇΓöÇ icon_resource_id ΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇ resource_dll ΓöÇΓöÿ   ΓööΓöÇΓöÇ abstract ΓöÇΓöÇΓöÿ
  2078.  
  2079.  icon_resource_id       Optional resource number of the icon to be used to 
  2080.                         represent the part. If you specify this, you must also 
  2081.                         specify the resource DLL name. 
  2082.  
  2083.  resource_dll           Resource DLL name containing the icon to be used. Do 
  2084.                         not include the .dll extension. 
  2085.  
  2086.  abstract               Optional keyword to indicate that the part is abstract. 
  2087.                         Abstract parts cannot be dropped on the free-form 
  2088.                         surface. 
  2089.  
  2090.  
  2091. ΓòÉΓòÉΓòÉ 7.2.7. VBConstructor Statement for a Part ΓòÉΓòÉΓòÉ
  2092.  
  2093. The optional VBConstructor statement specifies the constructor information. If 
  2094. you do not use this statement, nonvisual parts use the default constructor. 
  2095.  
  2096. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2097.    ΓööΓöÇΓöÇ //VBConstructor: ΓöÇΓöÇΓöÇ constructor ΓöÇΓöÇΓöÿ
  2098.  
  2099.  constructor            C++ public constructor definition. The parameter names 
  2100.                         are used in the Visual Builder settings pages to 
  2101.                         specify the parameters. Each parameter name must match 
  2102.                         an attribute name. 
  2103.  
  2104.  
  2105. ΓòÉΓòÉΓòÉ 7.2.8. VBEvent Statement for a Part ΓòÉΓòÉΓòÉ
  2106.  
  2107. The optional VBEvent statement specifies the event information. This 
  2108. information includes the event name, event description, event notification ID, 
  2109. parameter name, and parameter type. Use this statement to describe events 
  2110. implemented by the part that are useful in making connections. Do not use the 
  2111. VBEvent statement to describe events that occur as a result of attribute 
  2112. changes; specify this information on the VBAttribute statement. 
  2113.  
  2114. ΓöÇΓöÇ//VBEvent: ΓöÇΓöÇ event_name ΓöÇΓöÇ,ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ,ΓöÇΓöÇnotificationIDΓöÇΓöÇΓöÇ
  2115.                                  ΓööΓöÇ "description" ΓöÇΓöÿ
  2116.  
  2117. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2118.    ΓööΓöÇΓöÇ,parameter_name ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿ
  2119.                         ΓööΓöÇΓöÇ,parameter_type ΓöÇΓöÇΓöÿ
  2120.  
  2121.  event_name             Event name to be used by the Visual Builder user 
  2122.                         interface. 
  2123.  
  2124.  description            Optional event description. 
  2125.  
  2126.  notificationID         C++ public notification ID. 
  2127.  
  2128.  parameter_name         Optional event parameter name. 
  2129.  
  2130.  parameter_type         Optional event parameter type. 
  2131.  
  2132.  
  2133. ΓòÉΓòÉΓòÉ 7.2.9. VBAttribute Statement for a Part ΓòÉΓòÉΓòÉ
  2134.  
  2135. The optional VBAttribute statement specifies the attribute information. This 
  2136. information includes the attribute name, attribute description, attribute type 
  2137. (class name), get member function declaration, set member function declaration, 
  2138. and attribute notification ID. Use this statement to describe attributes 
  2139. implemented by the part that are useful in making connections. 
  2140.  
  2141. ΓöÇΓöÇ//VBAttribute: ΓöÇΓöÇ attribute_name ΓöÇΓöÇ,ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ,ΓöÇΓöÇ typeΓöÇΓöÇ,ΓöÇ
  2142.                                          ΓööΓöÇ "description" ΓöÇΓöÿ
  2143.  
  2144. ΓöÇΓöÇquery_memberΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2145.                  ΓööΓöÇΓöÇ,set_memberΓöÇΓöÇΓöÿ   ΓööΓöÇΓöÇ,notificationID ΓöÇΓöÇΓöÿ
  2146.  
  2147. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2148.    ΓööΓöÇΓöÇ,ΓöÇΓöÇΓö¼ΓöÇΓöÇ NOSETTING ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ
  2149.          Γö£ΓöÇΓöÇ NOSETTING NOCONNECT ΓöÇΓöÇΓöñ
  2150.          ΓööΓöÇΓöÇ NOCONNECT ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2151.  
  2152.  attribute_name         Attribute name to be used by the Visual Builder user 
  2153.                         interface. 
  2154.  
  2155.  description            Optional attribute description. 
  2156.  
  2157.  type                   Attribute type. 
  2158.  
  2159.  query_member           C++ public get member function that returns the 
  2160.                         attribute value. Specify this as a forward declaration. 
  2161.  
  2162.  set_member             Optional C++ public set member function that changes 
  2163.                         the attribute value. Specify this as a forward 
  2164.                         declaration. 
  2165.  
  2166.  notificationID         Optional C++ public attribute notification ID. 
  2167.  
  2168.  NOSETTING              Optional keyword to prevent the attribute's appearance 
  2169.                         on a generic settings page. 
  2170.  
  2171.  NOSETTING NOCONNECT    Optional keyword combination to hide a feature defined 
  2172.                         by a base part. 
  2173.  
  2174.  NOCONNECT              Optional keyword to disable connections to this 
  2175.                         feature. 
  2176.  
  2177.  
  2178. ΓòÉΓòÉΓòÉ 7.2.10. VBAction Statement for a Part ΓòÉΓòÉΓòÉ
  2179.  
  2180. The optional VBAction statement specifies the action information. This 
  2181. information includes the action name, action description, return type and the 
  2182. C++ action member that implements the action. Use this statement to describe 
  2183. actions implemented by the part that are useful in making connections. To 
  2184. describe member functions that support attributes, use the VBAttribute 
  2185. statement. 
  2186.  
  2187. ΓöÇΓöÇ//VBAction: ΓöÇΓöÇ action_name ΓöÇΓöÇ,ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2188.                                    ΓööΓöÇ "description" ΓöÇΓöÿ
  2189.  
  2190. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ,ΓöÇΓöÇ action_member ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2191.    ΓööΓöÇΓöÇ return_type ΓöÇΓöÇΓöÿ                      ΓööΓöÇΓöÇ,NOCONNECT ΓöÇΓöÇΓöÿ
  2192.  
  2193.  action_name            Action name to be used by the Visual Builder user 
  2194.                         interface. Connections to this action are allowed 
  2195.                         unless the NOCONNECT option has been specified. 
  2196.  
  2197.  description            Optional action description. 
  2198.  
  2199.  return_type            Optional return type that specifies the type of the 
  2200.                         return value from the action and allows the user to 
  2201.                         make connections to this value. 
  2202.  
  2203.  action_member          C++ public member function that implements the action. 
  2204.                         The parameter names are used in the Visual Builder user 
  2205.                         interface to make connnections to parameters. 
  2206.  
  2207.  NOCONNECT              Optional keyword to disable connections to this 
  2208.                         feature. 
  2209.  
  2210.  
  2211. ΓòÉΓòÉΓòÉ 7.2.11. VBPreferredFeatures Statement for a Part ΓòÉΓòÉΓòÉ
  2212.  
  2213. The optional VBPreferredFeatures statement specifies the preferred part 
  2214. features. If you do not use this statement, the base part's preferred list is 
  2215. used. If you do use this statement, the base part's preferred list is not 
  2216. inherited, and you must specify the complete list of preferred features for 
  2217. this part. 
  2218.  
  2219. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2220.    Γöé                           ΓöîΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé
  2221.    Γöé                                                    Γöé   Γöé
  2222.    ΓööΓöÇΓöÇ//VBPreferredFeatures: ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ action_name ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÿ
  2223.                                   Γö£ΓöÇΓöÇ attribute_name ΓöÇΓöÇΓöñ
  2224.                                   ΓööΓöÇΓöÇ event_name ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2225.  
  2226.  action_name            Preferred action name. 
  2227.  
  2228.  attribute_name         Preferred attribute name. 
  2229.  
  2230.  event_name             Preferred event name. 
  2231.  
  2232.  
  2233. ΓòÉΓòÉΓòÉ 7.2.12. VB Statement for a Part ΓòÉΓòÉΓòÉ
  2234.  
  2235. The optional VB statement allows interface information to be continued on the 
  2236. next statement line. This can be useful when a single statement exceeds a 
  2237. reasonable length. For example, you can use this statement to keep each line 
  2238. under 80 characters. 
  2239.  
  2240. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2241.    ΓööΓöÇΓöÇ //VB: ΓöÇΓöÇΓöÿ
  2242.  
  2243.  
  2244. ΓòÉΓòÉΓòÉ 7.2.13. VBEndPartInfo Statement for a Part ΓòÉΓòÉΓòÉ
  2245.  
  2246. The VBEndPartInfo statement specifies the end of the part interface 
  2247. information. 
  2248.  
  2249. ΓöÇΓöÇ//VBEndPartInfo: ΓöÇΓöÇ part_name ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2250.  
  2251.  part_name              Valid and unique C++ class name. 
  2252.  
  2253.  
  2254. ΓòÉΓòÉΓòÉ 7.2.14. Sample Part Information for IAddress ΓòÉΓòÉΓòÉ
  2255.  
  2256. The following is an example of interface information for the IAddress nonvisual 
  2257. part: 
  2258.  
  2259.   //VBBeginPartInfo: IAddress, "IBM sample address"
  2260.   //VBParent: IStandardNotifier
  2261.   //VBIncludes: <iadd.hpp> _IADD_
  2262.   //VBPartDataFile: 'VBSample.vbb'
  2263.   //VBComposerInfo: nonvisual, 10058, dde4vr30
  2264.   //
  2265.   //VBAttribute: city,
  2266.   //VB:          "Query the city (IString) attribute.",
  2267.   //VB:          IString,
  2268.   //VB:          virtual IString city() const,
  2269.   //VB:          virtual IAddress& setCity(const IString& city),
  2270.   //VB:          cityId
  2271.   //VBAttribute: state,
  2272.   //VB:          "Query the state (IString) attribute.",
  2273.   //VB:          IString,
  2274.   //VB:          virtual IString state() const,
  2275.   //VB:          virtual IAddress& setState(const IString& state),
  2276.   //VB:          stateId
  2277.   //VBAttribute: street,
  2278.   //VB:          "Query the street (IString) attribute.",
  2279.   //VB:          IString,
  2280.   //VB:          virtual IString street() const,
  2281.   //VB:          virtual IAddress& setStreet(const IString& street),
  2282.   //VB:          streetId
  2283.   //VBAttribute: zip,
  2284.   //VB:          "Query the zip (IString) attribute.",
  2285.   //VB:          IString,
  2286.   //VB:          virtual IString zip() const,
  2287.   //VB:          virtual IAddress& setZip(const IString& zip),
  2288.   //VB:          zipId
  2289.   //VBAction: operator !=
  2290.   //VB:       ,, Boolean,
  2291.   //VB:       Boolean operator !=(const IAddress* aValue) const
  2292.   //VBAction: operator ==
  2293.   //VB:       ,, Boolean,
  2294.   //VB:       Boolean operator ==(const IAddress* aValue) const
  2295.   //VBAction: setCityToDefault
  2296.   //VB:       ,"Perform the setCityToDefault action.",,
  2297.   //VB:       virtual IAddress& setCityToDefault()
  2298.   //VBAction: setStateToDefault
  2299.   //VB:       ,"Perform the setStateToDefault action.",,
  2300.   //VB:       virtual IAddress& setStateToDefault()
  2301.   //VBAction: setStreetToDefault
  2302.   //VB:       ,"Perform the setStreetToDefault action.",,
  2303.   //VB:       virtual IAddress& setStreetToDefault()
  2304.   //VBAction: setToDefault
  2305.   //VB:       ,"Perform the setToDefault action.",,
  2306.   //VB:       virtual IAddress& setToDefault()
  2307.   //VBAction: setZipToDefault
  2308.   //VB:       ,"Perform the setZipToDefault action.",,
  2309.   //VB:       virtual IAddress& setZipToDefault()
  2310.   //VBPreferredFeatures: this, city, state, street, zip
  2311.   //VBEndPartInfo: IAddress
  2312.  
  2313.  
  2314. ΓòÉΓòÉΓòÉ 7.3. Class Information Syntax ΓòÉΓòÉΓòÉ
  2315.  
  2316. This section describes the interface information for classes that Visual 
  2317. Builder uses. Syntax descriptions appear in the recommended order of occurrence 
  2318. in a part information file. Many of the statements are similar to the part 
  2319. interface statements documented in the previous section. The following rules 
  2320. apply to the interface information for classes: 
  2321.  
  2322.    1. All feature names (attributes, actions) within a class hierarchy must be 
  2323.       unique. If duplicate feature names exist, the information for the derived 
  2324.       class is used and the information for the base class is ignored for that 
  2325.       specific feature. 
  2326.  
  2327.    2. All class names must be unique and be a valid C++ class name. 
  2328.  
  2329.    3. The names on the VBBeginPartInfo statement and VBEndPartInfo statement 
  2330.       must match. 
  2331.  
  2332.    4. Attribute and action information statements can appear more than once for 
  2333.       a specific part, but all other information statements must appear only 
  2334.       once. 
  2335.  
  2336.  For information about how to read these syntax diagrams, see How to Read 
  2337.  Syntax Diagrams. 
  2338.  
  2339.  
  2340. ΓòÉΓòÉΓòÉ 7.3.1. VBBeginPartInfo Statement for a Class ΓòÉΓòÉΓòÉ
  2341.  
  2342. The first statement describing the interface is the VBBeginPartInfo statement. 
  2343. This statement specifies the class name and the class description. 
  2344.  
  2345. ΓöÇΓöÇ//VBBeginPartInfo: ΓöÇΓöÇ class_name ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2346.                                        ΓööΓöÇΓöÇ,"description" ΓöÇΓöÿ
  2347.  
  2348.  class_name             Valid and unique C++ class name that implements the 
  2349.                         interface. 
  2350.  
  2351.  description            Optional class description. 
  2352.  
  2353.  
  2354. ΓòÉΓòÉΓòÉ 7.3.2. VBParent Statement for a Class ΓòÉΓòÉΓòÉ
  2355.  
  2356. The optional VBParent statement describes the class' base class. The actions 
  2357. defined by the base class are inherited. 
  2358.  
  2359. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2360.      ΓööΓöÇΓöÇ //VBParent: ΓöÇΓöÇΓöÇΓöÇΓöÇ parent_name ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2361.  
  2362.  parent_name            Valid and unique C++ class name. 
  2363.  
  2364.  
  2365. ΓòÉΓòÉΓòÉ 7.3.3. VBIncludes Statement for a Class ΓòÉΓòÉΓòÉ
  2366.  
  2367. The VBIncludes statement describes the include file that contains the 
  2368. declaration of the C++ class that implements the interface. 
  2369.  
  2370. ΓöÇΓöÇΓöÇ //VBIncludes: ΓöÇΓöÇΓöÇΓöÇ<include_file>ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2371.                                        ΓööΓöÇΓöÇ include_define ΓöÇΓöÇΓöÿ
  2372.  
  2373.  include_file           Header file required by the compiler to use this class. 
  2374.                         If you want to specify a link dependency in your 
  2375.                         application make file, use double quotation marks (" ") 
  2376.                         to delimit the file name instead of the angle brackets 
  2377.                         (<>). 
  2378.  
  2379.  include_define         Optional statement that associates a variable with the 
  2380.                         include statement, enabling generated code to test for 
  2381.                         duplicate include statements. 
  2382.  
  2383.  
  2384. ΓòÉΓòÉΓòÉ 7.3.4. VBPartDataFile Statement for a Class ΓòÉΓòÉΓòÉ
  2385.  
  2386. The optional VBPartDataFile statement specifies the file in which to save the 
  2387. class interface information. If you do not use this statement, the imported 
  2388. file name is used with a .vbb extension. 
  2389.  
  2390. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2391.    ΓööΓöÇΓöÇ //VBPartDataFile: ΓöÇΓöÇΓöÇ file_name ΓöÇΓöÇΓöÿ
  2392.  
  2393.  file_name              File name in which to save the class interface 
  2394.                         information. 
  2395.  
  2396.  
  2397. ΓòÉΓòÉΓòÉ 7.3.5. VBComposerInfo Statement for a Class ΓòÉΓòÉΓòÉ
  2398.  
  2399. The class VBComposerInfo statement specifies the composer information needed to 
  2400. support classes. This information includes the icon resource ID and icon 
  2401. resource DLL name. 
  2402.  
  2403. ΓöÇΓöÇ//VBComposerInfo: ΓöÇΓöÇ class ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2404.  
  2405. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ
  2406.    ΓööΓöÇΓöÇ,ΓöÇΓöÇΓöÇ icon_resource_id ΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇ resource_dll ΓöÇΓöÿ   ΓööΓöÇΓöÇ abstract ΓöÇΓöÇΓöÿ
  2407.  
  2408.  icon_resource_id       Resource number of the icon to be used to represent the 
  2409.                         class. If you specify this, you must also specify the 
  2410.                         resource DLL name. 
  2411.  
  2412.  resource_dll           Resource DLL name containing the icon to be used. Do 
  2413.                         not include the .dll extension. 
  2414.  
  2415.  abstract               Optional keyword to indicate that the class is 
  2416.                         abstract. Abstract classes cannot be dropped on the 
  2417.                         free-form surface. 
  2418.  
  2419.  
  2420. ΓòÉΓòÉΓòÉ 7.3.6. VBConstructor Statement for a Class ΓòÉΓòÉΓòÉ
  2421.  
  2422. The optional VBConstructor statement specifies the class constructor 
  2423. information. 
  2424.  
  2425. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2426.    ΓööΓöÇΓöÇ //VBConstructor: ΓöÇΓöÇΓöÇ constructor ΓöÇΓöÇΓöÿ
  2427.  
  2428.  constructor            C++ public constructor definition. The parameter names 
  2429.                         are used in the Visual Builder settings pages to 
  2430.                         specify the parameters. Each parameter name must match 
  2431.                         an attribute name. 
  2432.  
  2433.  
  2434. ΓòÉΓòÉΓòÉ 7.3.7. VBAction Statement for a Class ΓòÉΓòÉΓòÉ
  2435.  
  2436. The optional VBAction statement specifies the action information. This 
  2437. information includes the action name, action description, return type, and the 
  2438. action member that implements the action. 
  2439.  
  2440. ΓöÇΓöÇ//VBAction: ΓöÇΓöÇ action_name ΓöÇΓöÇ,ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2441.                                    ΓööΓöÇ "description" ΓöÇΓöÿ
  2442.  
  2443. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ,ΓöÇΓöÇ action_member ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2444.    ΓööΓöÇΓöÇ return_type ΓöÇΓöÇΓöÿ                      ΓööΓöÇΓöÇ,NOCONNECT ΓöÇΓöÇΓöÿ
  2445.  
  2446.  action_name            Action name to be used by the Visual Builder user 
  2447.                         interface. Connections to this action are allowed 
  2448.                         unless the NOCONNECT option has been specified. 
  2449.  
  2450.  description            Optional action description. 
  2451.  
  2452.  return_type            Optional return type. 
  2453.  
  2454.  action_member          C++ public member function that implements the action. 
  2455.                         The parameter names are used in the Visual Builder user 
  2456.                         interface to make connnections to parameters. 
  2457.  
  2458.  NOCONNECT              Optional keyword to disable connections to this 
  2459.                         feature. 
  2460.  
  2461.  
  2462. ΓòÉΓòÉΓòÉ 7.3.8. VBAttribute Statement for a Class ΓòÉΓòÉΓòÉ
  2463.  
  2464. The optional VBAttribute statement specifies the attribute information. This 
  2465. information includes the attribute name, attribute description, attribute type 
  2466. (class name), get member function declaration, set member function declaration, 
  2467. and attribute notification ID. 
  2468.  
  2469. ΓöÇΓöÇ//VBAttribute: ΓöÇΓöÇ attribute_name ΓöÇΓöÇ,ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ,ΓöÇΓöÇ typeΓöÇΓöÇ,ΓöÇ
  2470.                                          ΓööΓöÇ "description" ΓöÇΓöÿ
  2471.  
  2472. ΓöÇΓöÇquery_memberΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ
  2473.                  ΓööΓöÇΓöÇ,set_memberΓöÇΓöÇΓöÿ ΓööΓöÇ,,ΓöÇΓöÇΓö¼ΓöÇΓöÇ NOSETTING ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ
  2474.                                          Γö£ΓöÇΓöÇ NOSETTING NOCONNECT ΓöÇΓöÇΓöñ
  2475.                                          ΓööΓöÇΓöÇ NOCONNECT ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2476.  
  2477.  attribute_name         Attribute name to be used by the Visual Builder user 
  2478.                         interface. 
  2479.  
  2480.  description            Optional attribute description. 
  2481.  
  2482.  type                   Attribute type. 
  2483.  
  2484.  query_member           C++ public get member function that returns the 
  2485.                         attribute value. Specify this in the form of a forward 
  2486.                         declaration. 
  2487.  
  2488.  set_member             Optional C++ public set member function that changes 
  2489.                         the attribute value. Specify this in the form of a 
  2490.                         forward declaration. 
  2491.  
  2492.  NOSETTING              Optional keyword to prevent the attribute's appearance 
  2493.                         on a generic settings page. 
  2494.  
  2495.  NOSETTING NOCONNECT    Optional keyword combination to hide a feature defined 
  2496.                         by a base class. 
  2497.  
  2498.  NOCONNECT              Optional keyword to disable connections to this 
  2499.                         feature. 
  2500.  
  2501.  
  2502. ΓòÉΓòÉΓòÉ 7.3.9. VBPreferredFeatures Statement for a Class ΓòÉΓòÉΓòÉ
  2503.  
  2504. The optional VBPreferredFeatures statement specifies the preferred part 
  2505. features. If you do not use this statement, the base class' preferred list is 
  2506. used. If you do use this statement, the base class preferred list is not 
  2507. inherited, and you must specify the complete list of preferred features for 
  2508. this class. 
  2509.  
  2510. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2511.    Γöé                           ΓöîΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé
  2512.    Γöé                                                    Γöé   Γöé
  2513.    ΓööΓöÇΓöÇ//VBPreferredFeatures: ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ action_name ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÿ
  2514.                                   ΓööΓöÇΓöÇ attribute_name ΓöÇΓöÇΓöÿ
  2515.  
  2516.  action_name            Preferred action name. 
  2517.  
  2518.  attribute_name         Preferred attribute name. 
  2519.  
  2520.  
  2521. ΓòÉΓòÉΓòÉ 7.3.10. VB Statement for a Class ΓòÉΓòÉΓòÉ
  2522.  
  2523. The optional VB statement allows the information to be continued on the next 
  2524. statement line. This can be useful when a single statement exceeds a reasonable 
  2525. length. For example, you can use this statement to keep each line under 80 
  2526. characters. 
  2527.  
  2528. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2529.    ΓööΓöÇΓöÇ //VB: ΓöÇΓöÇΓöÿ
  2530.  
  2531.  
  2532. ΓòÉΓòÉΓòÉ 7.3.11. VBEndPartInfo Statement for a Class ΓòÉΓòÉΓòÉ
  2533.  
  2534. The VBEndPartInfo statement specifies the end of the class interface 
  2535. information. 
  2536.  
  2537. ΓöÇΓöÇ//VBEndPartInfo: ΓöÇΓöÇ class_name ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2538.  
  2539.  class_name             Valid and unique C++ class name. 
  2540.  
  2541.  
  2542. ΓòÉΓòÉΓòÉ 7.3.12. Sample Class Information for IRange ΓòÉΓòÉΓòÉ
  2543.  
  2544. The following is an example of interface information for the IRange class: 
  2545.  
  2546.   //VBBeginPartInfo: IRange, "IBM range of coordinate values"
  2547.   //VBParent: IPair
  2548.   //VBIncludes: <ipoint.hpp> _IPOINT_
  2549.   //VBPartDataFile: 'VBBase.vbb'
  2550.   //VBComposerInfo: class, 204, dde4vr30
  2551.   //
  2552.   //VBAttribute: lowerBound,
  2553.   //VB:          "Returns the lower bound of the range.",
  2554.   //VB:          Coord,
  2555.   //VB:          Coord lowerBound() const,
  2556.   //VB:          IRange& setLowerBound(Coord lowerBound)
  2557.   //VBAttribute: upperBound,
  2558.   //VB:          "Returns the upper bound of the range.",
  2559.   //VB:          Coord,
  2560.   //VB:          Coord upperBound() const,
  2561.   //VB:          IRange& setUpperBound(Coord upperBound)
  2562.   //VBAction: includes,
  2563.   //VB:       "Returns true if the range contains the specified coordinate value.",
  2564.   //VB:       Boolean,
  2565.   //VB:       Boolean includes(Coord aValue) const
  2566.   //VBPreferredFeatures: this, lowerBound, upperBound
  2567.   //VBEndPartInfo: IRange
  2568.  
  2569.  
  2570. ΓòÉΓòÉΓòÉ 7.4. Function Group Information Syntax ΓòÉΓòÉΓòÉ
  2571.  
  2572. This section describes the interface information for a group of related C 
  2573. functions that you want to use within Visual Builder. Syntax descriptions 
  2574. appear in the recommended order of occurrence in a file. The following rules 
  2575. apply to the interface information for function groups: 
  2576.  
  2577.    1. All action names within a function group must be unique. 
  2578.  
  2579.    2. All function group names must be unique. 
  2580.  
  2581.    3. The name on the VBBeginPartInfo statement and VBEndPartInfo statement 
  2582.       must match. 
  2583.  
  2584.    4. Action information statements can appear more than once for a specific 
  2585.       part, but all other information statements must appear only once. 
  2586.  
  2587.  For information about how to read these syntax diagrams, see How to Read 
  2588.  Syntax Diagrams. 
  2589.  
  2590.  
  2591. ΓòÉΓòÉΓòÉ 7.4.1. VBBeginPartInfo Statement for Function Groups ΓòÉΓòÉΓòÉ
  2592.  
  2593. The first statement describing a group of functions is the VBBeginPartInfo 
  2594. statement. This statement specifies the function group name and the function 
  2595. group description. 
  2596.  
  2597. ΓöÇΓöÇ//VBBeginPartInfo: ΓöÇΓöÇ function_group_name ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ
  2598.                                                 ΓööΓöÇΓöÇ,"description" ΓöÇΓöÿ
  2599.  
  2600.  function_group_name    A unique name that keeps a set of related functions 
  2601.                         together as a group. 
  2602.  
  2603.  description            Optional description. 
  2604.  
  2605.  
  2606. ΓòÉΓòÉΓòÉ 7.4.2. VBIncludes Statement for Function Groups ΓòÉΓòÉΓòÉ
  2607.  
  2608. The VBIncludes statement describes the include file that contains the 
  2609. definition of the function group implemented in the interface. 
  2610.  
  2611. ΓöÇΓöÇΓöÇ //VBIncludes: ΓöÇΓöÇΓöÇΓöÇ<include_file>ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2612.                                        ΓööΓöÇΓöÇ include_define ΓöÇΓöÇΓöÿ
  2613.  
  2614.  include_file           Header file required by the compiler to use this 
  2615.                         function group. If you want to specify a link 
  2616.                         dependency in your application make file, use double 
  2617.                         quotation marks (" ") to delimit the file name instead 
  2618.                         of the angle brackets (<>). 
  2619.  
  2620.  include_define         Optional statement that associates a variable with the 
  2621.                         include statement, enabling generated code to test for 
  2622.                         duplicate include statements. 
  2623.  
  2624.  
  2625. ΓòÉΓòÉΓòÉ 7.4.3. VBPartDataFile Statement for Function Groups ΓòÉΓòÉΓòÉ
  2626.  
  2627. The optional VBPartDataFile statement specifies the file in which to save the 
  2628. function information. If you do not use this statement, the imported file name 
  2629. is used with a .vbb extension. 
  2630.  
  2631. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2632.    ΓööΓöÇΓöÇ //VBPartDataFile: ΓöÇΓöÇΓöÇ file_name ΓöÇΓöÇΓöÿ
  2633.  
  2634.  file_name              File name in which to save the function group interface 
  2635.                         information. 
  2636.  
  2637.  
  2638. ΓòÉΓòÉΓòÉ 7.4.4. VBComposerInfo Statement for Function Groups ΓòÉΓòÉΓòÉ
  2639.  
  2640. The VBComposerInfo statement specifies the composer information needed to 
  2641. support a group of functions. This information includes the icon resource ID 
  2642. and icon resource DLL name. 
  2643.  
  2644. ΓöÇΓöÇ//VBComposerInfo: ΓöÇΓöÇ functions ΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2645.  
  2646. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ,ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2647.    ΓööΓöÇΓöÇ icon_resource_id ΓöÇΓöÇΓöÿ     ΓööΓöÇΓöÇ resource_dll ΓöÇΓöÇΓöÿ
  2648.  
  2649.  icon_resource_id       Resource number of the icon to be used to represent the 
  2650.                         function group. If you specify this, you must also 
  2651.                         specify the resource DLL name. 
  2652.  
  2653.  resource_dll           Resource DLL name containing the icon to be used. Do 
  2654.                         not include the .dll extension. 
  2655.  
  2656.  
  2657. ΓòÉΓòÉΓòÉ 7.4.5. VBAction Statement for Function Groups ΓòÉΓòÉΓòÉ
  2658.  
  2659. The optional VBAction statement specifies the action information. This 
  2660. information includes the action name, action description, return type and the 
  2661. C++ function definition. 
  2662.  
  2663. ΓöÇΓöÇ//VBAction: ΓöÇΓöÇ action_name ΓöÇΓöÇ,ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2664.                                    ΓööΓöÇ "description" ΓöÇΓöÿ
  2665.  
  2666. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ,ΓöÇΓöÇ function_definition ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2667.    ΓööΓöÇΓöÇ return_type ΓöÇΓöÇΓöÿ
  2668.  
  2669.  action_name            Action name to be used by the Visual Builder user 
  2670.                         interface. 
  2671.  
  2672.  description            Optional action description. 
  2673.  
  2674.  return_type            Optional return type. 
  2675.  
  2676.  function_definition    C public function that implements the action. The 
  2677.                         parameter names are used in the Visual Builder user 
  2678.                         interface to make connnections to parameters. 
  2679.  
  2680.  
  2681. ΓòÉΓòÉΓòÉ 7.4.6. VB Statement for Function Groups ΓòÉΓòÉΓòÉ
  2682.  
  2683. The optional VB statement allows the information to be continued on the next 
  2684. statement line. This can be useful when a single statement exceeds a reasonable 
  2685. length. For example, the VB statement can be used to keep each line under 80 
  2686. characters. 
  2687.  
  2688. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2689.    ΓööΓöÇΓöÇ //VB: ΓöÇΓöÇΓöÿ
  2690.  
  2691.  
  2692. ΓòÉΓòÉΓòÉ 7.4.7. VBPreferredFeatures Statement for Function Groups ΓòÉΓòÉΓòÉ
  2693.  
  2694. The optional VBPreferredFeatures statement specifies the preferred actions. 
  2695.  
  2696. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2697.    Γöé                           ΓöîΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé
  2698.    Γöé                                                    Γöé   Γöé
  2699.    ΓööΓöÇΓöÇ//VBPreferredFeatures: ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ action_name ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÿ
  2700.  
  2701.  action_name            Preferred action name. 
  2702.  
  2703.  
  2704. ΓòÉΓòÉΓòÉ 7.4.8. VBEndPartInfo Statement for Function Groups ΓòÉΓòÉΓòÉ
  2705.  
  2706. The VBEndPartInfo statement specifies the end of the interface information. 
  2707.  
  2708. ΓöÇΓöÇ//VBEndPartInfo: ΓöÇΓöÇ function_group_name ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2709.  
  2710.  function_group_name    Function group name matching the previous 
  2711.                         VBBeginPartInfo statement. 
  2712.  
  2713.  
  2714. ΓòÉΓòÉΓòÉ 7.4.9. Sample Function Group Information ΓòÉΓòÉΓòÉ
  2715.  
  2716. The following is an example of a function group interface: 
  2717.  
  2718.   //
  2719.   //  process function group information
  2720.   //
  2721.   //VBBeginPartInfo: ProcessFunctions, "Process functions"
  2722.   //VBIncludes: <process.h>
  2723.   //VBPartDataFile: 'Process.vbb'
  2724.   //VBComposerInfo: functions, 10701, dde4vr30
  2725.   //VBAction: abort, "Abort program.",,
  2726.   //VB:       void _LNK_CONV abort( )
  2727.   //VBAction: exit, "Exit program.",,
  2728.   //VB:       void _LNK_CONV exit( int exitCode)
  2729.   //VBAction: system, "Execute system command.",,
  2730.   //VB:       void _LNK_CONV system( const char * commandString)
  2731.   //VBEndPartInfo: ProcessFunctions
  2732.  
  2733.  
  2734. ΓòÉΓòÉΓòÉ 7.5. Enumeration Information Syntax ΓòÉΓòÉΓòÉ
  2735.  
  2736. This section describes the interface information for enumerations that Visual 
  2737. Builder uses. Syntax descriptions appear in the recommended order of occurrence 
  2738. in a file. 
  2739.  
  2740. For information about how to read these syntax diagrams, see How to Read Syntax 
  2741. Diagrams. 
  2742.  
  2743.  
  2744. ΓòÉΓòÉΓòÉ 7.5.1. VBBeginEnumInfo Statement ΓòÉΓòÉΓòÉ
  2745.  
  2746. The first statement describing the interface is the VBBeginEnumInfo statement. 
  2747. This statement specifies the enumeration name and description. The enum_name 
  2748. must be a valid and unique C++ enumeration name. 
  2749.  
  2750. ΓöÇΓöÇ//VBBeginEnumInfo: ΓöÇΓöÇ enum_name ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2751.                                       ΓööΓöÇΓöÇ,"description" ΓöÇΓöÿ
  2752.  
  2753.  enum_name              Fully qualified C++ enumeration name. 
  2754.  
  2755.  description            Optional enumeration description. 
  2756.  
  2757.  
  2758. ΓòÉΓòÉΓòÉ 7.5.2. VBIncludes Statement for an Enumeration ΓòÉΓòÉΓòÉ
  2759.  
  2760. The VBIncludes statement describes the include file that contains the 
  2761. definition of the enumeration. 
  2762.  
  2763. ΓöÇΓöÇΓöÇ //VBIncludes: ΓöÇΓöÇΓöÇΓöÇ<include_file>ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2764.                                        ΓööΓöÇΓöÇ include_define ΓöÇΓöÇΓöÿ
  2765.  
  2766.  include_file           Header file that defines the enumeration. If you want 
  2767.                         to specify a link dependency in your application make 
  2768.                         file, use double quotation marks (" ") to delimit the 
  2769.                         file name instead of the angle brackets (<>). 
  2770.  
  2771.  include_define         Optional statement that associates a variable with the 
  2772.                         include statement, enabling generated code to test for 
  2773.                         duplicate include statements. 
  2774.  
  2775.  
  2776. ΓòÉΓòÉΓòÉ 7.5.3. VBPartDataFile Statement for an Enumeration ΓòÉΓòÉΓòÉ
  2777.  
  2778. The optional VBPartDataFile statement specifies the file in which to save the 
  2779. enumeration information. If you do not use this statement, the imported file 
  2780. name is used with a .vbb extension. 
  2781.  
  2782. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2783.    ΓööΓöÇΓöÇ //VBPartDataFile: ΓöÇΓöÇΓöÇ file_name ΓöÇΓöÇΓöÿ
  2784.  
  2785.  file_name              File name in which to save the enumeration interface 
  2786.                         information. 
  2787.  
  2788.  
  2789. ΓòÉΓòÉΓòÉ 7.5.4. VBEnumerators Statement ΓòÉΓòÉΓòÉ
  2790.  
  2791. The VBEnumerators statement describes the enumerators for the enumeration. 
  2792.  
  2793.                        ΓöîΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2794.                                                         Γöé
  2795. ΓöÇΓöÇ//VBEnumerators: ΓöÇΓöÇΓöÇΓöÇΓöÇ enumeratorΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2796.                                        ΓööΓöÇΓöÇ =value ΓöÇΓöÇΓöÿ
  2797.  
  2798.  enumerator             Enumerator name. 
  2799.  
  2800.  value                  Value assigned to this enumerator. 
  2801.  
  2802.  
  2803. ΓòÉΓòÉΓòÉ 7.5.5. VB Statement for an Enumeration ΓòÉΓòÉΓòÉ
  2804.  
  2805. The optional VB statement allows the information to be continued on the next 
  2806. statement line. This can be useful when a single statement exceeds a reasonable 
  2807. length. For example, the VB statement can be used to keep each line under 80 
  2808. characters. 
  2809.  
  2810. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2811.    ΓööΓöÇΓöÇ //VB: ΓöÇΓöÇΓöÿ
  2812.  
  2813.  
  2814. ΓòÉΓòÉΓòÉ 7.5.6. VBEndEnumInfo Statement ΓòÉΓòÉΓòÉ
  2815.  
  2816. The VBEndEnumInfo statement specifies the end of the interface information. 
  2817.  
  2818. ΓöÇΓöÇ//VBEndEnumInfo: ΓöÇΓöÇ enum_name ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2819.  
  2820.  enum_name              Enumeration name matching the previous VBBeginEnumInfo 
  2821.                         statement. 
  2822.  
  2823.  
  2824. ΓòÉΓòÉΓòÉ 7.5.7. Sample Alignment Enumeration for IEntryField ΓòÉΓòÉΓòÉ
  2825.  
  2826. The IEntryField class defined in the ientryfd.hpp header file contains the 
  2827. following nested public Alignment enumeration: 
  2828.  
  2829.   #ifndef _IENTRYFD_
  2830.     #define _IENTRYFD_
  2831.   class IEntryField : public ITextControl  {
  2832.   pubic:
  2833.     enum Alignment {
  2834.       left,
  2835.       center,
  2836.       right
  2837.     };
  2838.   };
  2839.   #endif
  2840.  
  2841. An example of how you could define this Alignment enumeration in an interface 
  2842. file follows: 
  2843.  
  2844.   //VBBeginEnumInfo: IEntryField::Alignment
  2845.   //VBIncludes: <ientryfd.hpp> _IENTRYFD_
  2846.   //VBPartDataFile: 'VBBase.vbb'
  2847.   //VBEnumerators: left
  2848.   //VB:            ,center
  2849.   //VB:            ,right
  2850.   //VBEndEnumInfo: IEntryField::Alignment
  2851.  
  2852.  
  2853. ΓòÉΓòÉΓòÉ 7.6. Type Definition Information Syntax ΓòÉΓòÉΓòÉ
  2854.  
  2855. This section describes the interface information for type definitions that 
  2856. Visual Builder uses. Syntax descriptions appear in the recommended order of 
  2857. occurrence in a file. 
  2858.  
  2859. For information about how to read these syntax diagrams, see How to Read Syntax 
  2860. Diagrams. 
  2861.  
  2862.  
  2863. ΓòÉΓòÉΓòÉ 7.6.1. VBBeginTypedefInfo Statement ΓòÉΓòÉΓòÉ
  2864.  
  2865. The first statement describing the interface is the VBBeginTypedefInfo 
  2866. statement. This statement specifies the type definition name and the type 
  2867. definition description. 
  2868.  
  2869. ΓöÇΓöÇ//VBBeginTypedefInfo: ΓöÇΓöÇ typedef_name ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2870.                                               ΓööΓöÇΓöÇ,"description" ΓöÇΓöÿ
  2871.  
  2872.  typedef_name           Fully qualified C++ type definition name. 
  2873.  
  2874.  description            Optional type definition description. 
  2875.  
  2876.  
  2877. ΓòÉΓòÉΓòÉ 7.6.2. VBIncludes Statement for a Type Definition ΓòÉΓòÉΓòÉ
  2878.  
  2879. The VBIncludes statement describes the include file that contains the type 
  2880. definition. 
  2881.  
  2882. ΓöÇΓöÇΓöÇ //VBIncludes: ΓöÇΓöÇΓöÇΓöÇ<include_file>ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2883.                                        ΓööΓöÇΓöÇ include_define ΓöÇΓöÇΓöÿ
  2884.  
  2885.  include_file           Header file that contains the type definition. If you 
  2886.                         want to specify a link dependency in your application 
  2887.                         make file, use double quotation marks (" ") to delimit 
  2888.                         the file name instead of the angle brackets (<>). 
  2889.  
  2890.  include_define         Optional statement that associates a variable with the 
  2891.                         include statement, enabling generated code to test for 
  2892.                         duplicate include statements. 
  2893.  
  2894.  
  2895. ΓòÉΓòÉΓòÉ 7.6.3. VBPartDataFile Statement for a Type Definition ΓòÉΓòÉΓòÉ
  2896.  
  2897. The optional VBPartDataFile statement specifies the file in which to save the 
  2898. type definition information. If you do not use this statement, the imported 
  2899. file name is used with a .vbb extension. 
  2900.  
  2901. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2902.    ΓööΓöÇΓöÇ //VBPartDataFile: ΓöÇΓöÇΓöÇ file_name ΓöÇΓöÇΓöÿ
  2903.  
  2904.  file_name              File name in which to save the type definition 
  2905.                         interface information. 
  2906.  
  2907.  
  2908. ΓòÉΓòÉΓòÉ 7.6.4. VB Statement for a Type Definition ΓòÉΓòÉΓòÉ
  2909.  
  2910. The optional VB statement allows the information to be continued on the next 
  2911. statement line. This can be useful when a single statement exceeds a reasonable 
  2912. length. For example, you can use this statement to keep each line under 80 
  2913. characters. 
  2914.  
  2915. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2916.    ΓööΓöÇΓöÇ //VB: ΓöÇΓöÇΓöÿ
  2917.  
  2918.  
  2919. ΓòÉΓòÉΓòÉ 7.6.5. VBEndTypedefInfo Statement ΓòÉΓòÉΓòÉ
  2920.  
  2921. The VBEndTypedefInfo statement specifies the end of the interface information. 
  2922.  
  2923. ΓöÇΓöÇ//VBEndTypedefInfo: ΓöÇΓöÇ typedef_name ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2924.  
  2925.  typedef_name           Type definition name matching the previous 
  2926.                         VBBeginTypedefInfo statement. 
  2927.  
  2928.  
  2929. ΓòÉΓòÉΓòÉ 7.6.6. Sample Type Definition Information ΓòÉΓòÉΓòÉ
  2930.  
  2931. The following type definition in the isynonym.hpp file: 
  2932.  
  2933.   typedef int IBoolean;
  2934.  
  2935. Could be defined by the following .vbe file: 
  2936.  
  2937.   //VBBeginTypedefInfo: IBoolean
  2938.   //VBIncludes: <isynonym.hpp> _ISYNONYM_
  2939.   //VBPartDataFile: 'VBBase.vbb'
  2940.   //VBEndTypedefInfo: IBoolean
  2941.  
  2942.  
  2943. ΓòÉΓòÉΓòÉ 7.7. Other Syntax Examples ΓòÉΓòÉΓòÉ
  2944.  
  2945. An example of the clicked event in the IButton part information file follows: 
  2946.  
  2947.   //VBEvent: buttonClickEvent,
  2948.   //VB:      "Notification ID provided to observers when button is clicked"
  2949.   //VB:      buttonClickId
  2950.  
  2951. An example of the importFromFile action with an IString parameter from the IMLE 
  2952. part information file follows: 
  2953.  
  2954.   //VBAction: importFromFile,
  2955.   //VB:       "Inserts the contents of a file into the MLE"
  2956.   //VB:       unsigned long,
  2957.   //VB:       virtual unsigned long importFromFile(const char* fileName,
  2958.   //VB:       EOLFormat type = cfText)
  2959.  
  2960.  
  2961. ΓòÉΓòÉΓòÉ 8. The IBM Class Notification Framework ΓòÉΓòÉΓòÉ
  2962.  
  2963.      Overview 
  2964.  
  2965.      Notifiers and observers 
  2966.  
  2967.      Notification protocol 
  2968.  
  2969.      IBM C++ notification class hierarchy 
  2970.  
  2971.  Personal notes: 
  2972.  
  2973.  
  2974. ΓòÉΓòÉΓòÉ 8.1. Overview ΓòÉΓòÉΓòÉ
  2975.  
  2976. This chapter provides an overview of the IBM class notification framework. You 
  2977. use this framework to implement event and attribute notification for visual and 
  2978. nonvisual parts. Developers coding to the IBM Open Class Library can also use 
  2979. it. 
  2980.  
  2981. The notification framework is different than the previously existing event 
  2982. handler framework. Handlers are capable of stopping the dispatching of events 
  2983. to the remaining handlers in the chain.  This is unsatisfactory for a 
  2984. notification framework, where registered observer objects must always be 
  2985. notified of an event regardless of how the event was handled. 
  2986.  
  2987. The notification framework contains the following entities: 
  2988.  
  2989.      Notifier objects that support the notifier protocol defined by the 
  2990.       INotifier class. 
  2991.  
  2992.      Observer objects that support the observer protocol defined by the 
  2993.       IObserver class. 
  2994.  
  2995.      Notification IDs, which are defined for parts that have been enabled for 
  2996.       event notification 
  2997.  
  2998.      Notification event objects defined by the INotificationEvent class. 
  2999.  
  3000.  For examples of how this can be implemented in code, see C++ Code to Enable 
  3001.  Notification. 
  3002.  
  3003.  
  3004. ΓòÉΓòÉΓòÉ 8.2. Notifiers and Observers ΓòÉΓòÉΓòÉ
  3005.  
  3006. Notifier objects enable other objects in the system to register dependence upon 
  3007. the state of the notifier objects' properties. To register dependence, objects 
  3008. add an observer object to the notifier object by using the following function 
  3009. in the IObserver class: 
  3010.  
  3011. virtual IObserver
  3012.  &handleNotificationsFor (INotifier& aNotifier,
  3013.                           const IEventData& userData = IEventData()),
  3014.  
  3015. The IObserver class also supports removing an observer from a notifier via the 
  3016. following: 
  3017.  
  3018. virtual IObserver
  3019.  &stopHandlingNotificationsFor (INotifier& aNotifier );
  3020.  
  3021. Notifier objects are responsible for publishing their supported notification 
  3022. events, managing the list of observers, and notifying observers when an event 
  3023. occurs. To notify observers of attribute changes or events, notifiers use the 
  3024. following member function defined by the INotifier class: 
  3025.  
  3026. virtual INotifier
  3027.  ¬ifyObservers (const INotificationEvent& anEvent) = 0;
  3028.  
  3029. The INotifier abstract base class defines the notifier protocol and requires 
  3030. its derived classes to completely implement its interface. To ensure that all 
  3031. notifier objects can co-exist, no data is stored in any notifier object. 
  3032.  
  3033. A notifier adds observers to an observer list and uses this list to notify 
  3034. observers in a first-in, first-notified manner. 
  3035.  
  3036. The IObserver class defines the protocol that accepts event signals from the 
  3037. notifier object by overriding the member function in the IObserver class as 
  3038. follows: 
  3039.  
  3040.   virtual IObserver
  3041.    &dispatchNotificationEvent (const INotificationEvent&)=0;
  3042.  
  3043. Because a single list of observers is kept for each notifier, all observers in 
  3044. the list get called when any notification occurs within the notifier. Each 
  3045. observer must test to determine if a given notification event should be 
  3046. processed. Normally, this is done by checking notificationId in an 
  3047. INotificationEvent object. 
  3048.  
  3049. Notifier objects publish the notification events that they support by providing 
  3050. a series of unique identifiers in their interface. These notification IDs are 
  3051. string objects that are defined in the notifier. The string is in the form of 
  3052. the class name followed by the event name, such as 
  3053. IStaticText::backgroundColor. Each notification event provides a unique public 
  3054. static notification ID. 
  3055.  
  3056. Events are typically a notification of changes in the attributes or intrinsic 
  3057. data that can be accessed in a notifier object. Attributes can represent any 
  3058. logical property of a part, such as the balance of an account, the size of a 
  3059. shipment, or the label of a push button. 
  3060.  
  3061. A notification event is the data provided to an observer object when a change 
  3062. occurs in the attributes of an object. Included in this data is the identity of 
  3063. the attribute being changed and the part in which the change has occurred. 
  3064. Also, some of the data supplied to the observer can be the actual data being 
  3065. changed in the notifier object. 
  3066.  
  3067. A notification event can also include observer-specific data. The caller that 
  3068. registers the observer with a notifier provides this data as the userData 
  3069. parameter on the following call in the IObserver class: 
  3070.  
  3071. virtual IObserver
  3072.  &handleNotificationsFor (INotifier&        aNotifier,
  3073.                           const IEventData& userData = IEventData()),
  3074.  
  3075. The notifier passes this data to that observer anytime it notifies the observer 
  3076. of an event. To support the use of existing classes in a part-building tool, it 
  3077. is highly desirable to be able to derive from these classes and add all 
  3078. required notification behavior in the derived class. You do this by multiply 
  3079. inheriting from the base class and the INotifier class. You can then update the 
  3080. derived class to provide the required notifier behavior and the appropriate 
  3081. notification IDs. Ideally, the class can also provide the required notification 
  3082. behavior. Whether this can actually be done depends on the design of the base 
  3083. class. 
  3084.  
  3085.  
  3086. ΓòÉΓòÉΓòÉ 8.3. Notification Protocol ΓòÉΓòÉΓòÉ
  3087.  
  3088. Concrete classes that inherit from the INotifier class implement its protocol. 
  3089. This includes the following: 
  3090.  
  3091.      Enabling, disabling, and querying the ability to signal events. In 
  3092.       general, notifiers are created disabled and must be enabled before they 
  3093.       can signal events. This allows notifier objects to delay the setup to 
  3094.       support notification until the notifier is enabled. (It also allows the 
  3095.       Visual Builder connection objects to initialize themselves and related 
  3096.       connection objects.) The following member functions in the INotifier 
  3097.       class enable you to enable and disable notification: 
  3098.  
  3099.             virtual INotifier
  3100.              &enableNotification   (Boolean enabled = true) = 0,
  3101.              &disableNotification  () = 0;
  3102.  
  3103.      Managing the collection of observers, including adding and removing 
  3104.       observers.  These are defined by the following protected members in 
  3105.       INotifier: 
  3106.  
  3107.             virtual INotifier
  3108.              &addObserver          (IObserver&        anObserver,
  3109.                                     const IEventData& userData) = 0,
  3110.              &removeObserver       (const IObserver&  anObserver) = 0,
  3111.              &removeAllObservers   () = 0;
  3112.  
  3113.      Within the notifier object, calling the following member function every 
  3114.       time an event of interest occurs: 
  3115.  
  3116.               notifyObservers(const INotificationEvent&)
  3117.  
  3118.       While the classes providing notification must call this function, in many 
  3119.       cases it makes sense that the responsibility be delegated to another 
  3120.       class.  For instance, in the IBM Open Class User Interface Class Library, 
  3121.       this responsibility is typically delegated to handler style objects. 
  3122.  
  3123.      The protected member INotifier::addObserver accepts a piece of typeless 
  3124.       data as a const IEventData& that is forwarded to the IObserver instance 
  3125.       with any notification request. This enables a piece of data to be 
  3126.       maintained for each instance of an observer. (One concern in the window 
  3127.       handler framework today is that data cannot be stored in a handler object 
  3128.       because the handler might be handling many windows.) 
  3129.  
  3130.  The IStandardNotifier class provides the concrete implementation of the 
  3131.  notifier protocol and provides the base support for nonvisual parts. The 
  3132.  notifier protocol is also supported in the subclasses of IWindow. These 
  3133.  classes inherit from a notifier class that supports registration of and 
  3134.  notification to observer objects. The notification under the IWindow classes 
  3135.  occurs primarily using the existing handler classes. 
  3136.  
  3137.  
  3138. ΓòÉΓòÉΓòÉ 8.4. IBM C++ Notification Class Hierarchy ΓòÉΓòÉΓòÉ
  3139.  
  3140.                             IBase
  3141.                               Γöé
  3142.                   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3143.                   Γöé                           Γöé
  3144.                 IVBase               INotificationEvent
  3145.                   Γöé
  3146.            ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3147.            Γöé                  Γöé
  3148.        INotifier          IObserver
  3149.            Γöé
  3150.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3151.     Γöé             Γöé
  3152.  IWindow    IStandardNotifier
  3153.     Γöé
  3154.     Γöé
  3155.  IControl
  3156.  
  3157. Within this partial hierarchy, note the following: 
  3158.  
  3159.      The INotifier abstract class defines the notifier protocol. 
  3160.      The IObserver abstract class defines the observer protocol. 
  3161.      The INotificationEvent class implements the notification event object. 
  3162.      The IStandardNotifier and IWindow classes are concrete implementations of 
  3163.       the notifier protocol. 
  3164.      Nonvisual parts would normally be derived from IStandardNotifier. 
  3165.      Visual parts would normally be derived from IWindow or IControl. 
  3166.  
  3167.  
  3168. ΓòÉΓòÉΓòÉ 9. C++ Code to Enable Notification ΓòÉΓòÉΓòÉ
  3169.  
  3170. Overview 
  3171.  
  3172. Code for an observer class 
  3173.  
  3174. Code for a notifier class 
  3175.  
  3176. Sample notification flow 
  3177.  
  3178. Personal notes: 
  3179.  
  3180.  
  3181. ΓòÉΓòÉΓòÉ 9.1. Overview ΓòÉΓòÉΓòÉ
  3182.  
  3183. Normally, parts are connected by using the Composition Editor; however, 
  3184. developers can also create code that uses the notification framework. This 
  3185. chapter describes a sample program that uses the notification framework to test 
  3186. the IAddress class. The following example shows how the streetChangedAction 
  3187. member function (action) in the IAddressTest class is executed when the street 
  3188. attribute changes (streetId) in the address object. 
  3189.  
  3190.  
  3191. ΓòÉΓòÉΓòÉ 9.2. Code for an Observer Class ΓòÉΓòÉΓòÉ
  3192.  
  3193. The first step is to code the connection or observer class to be used. The 
  3194. StreetConnection class in the IAddressTest example follows: 
  3195.  
  3196.   //**************************************************************************
  3197.   // StreetConnection Event-to-Action Connection Class
  3198.   //**************************************************************************
  3199.   class StreetConnection : public IObserver
  3200.   {
  3201.   public:
  3202.     StreetConnection(IAddressTest * newTestTarget)
  3203.     { iTestTarget = newTestTarget;                  //Save source } ;
  3204.     ~StreetConnection () {};
  3205.  
  3206.   protected:
  3207.     IObserver &dispatchNotificationEvent  (const INotificationEvent& anEvent)
  3208.     {
  3209.       if (IAddress::streetId == anEvent.notificationId())
  3210.       {
  3211.         try {iTestTarget->streetChangedAction();}
  3212.         catch (IException& exc) {}
  3213.       }
  3214.       return *this;
  3215.     } ;
  3216.     IAddressTest * iTestTarget;
  3217.   } ;
  3218.  
  3219. The key points in the previous sample code follow: 
  3220.  
  3221.      The StreetConnection class is publicly derived from the IObserver class. 
  3222.  
  3223.      The connection target is required on the StreetConnection constructor and 
  3224.       is saved in ITestTarget to be used later in the dispatchNotificationEvent 
  3225.       member function. 
  3226.  
  3227.      The dispatchNotificationEvent member function is defined, and the code 
  3228.       checks if this event is the street-changed event, streetId, as follows: 
  3229.  
  3230.               if (IAddress::streetId == anEvent.notificationId())
  3231.       followed by the code (action) to execute if the test is true: 
  3232.  
  3233.               try {iTestTarget->streetChangedAction();}
  3234.               catch (IException& exc) {}:
  3235.  
  3236.     //*************************************************************************
  3237.     // main  - Application entry point                                        *
  3238.     //*************************************************************************
  3239.     int main(int argc, char **argv)         //Main procedure with no parameters
  3240.     {
  3241.       IApplication::current().              //Get current
  3242.         setArgs(argc, argv);                //  and set command line parameters
  3243.  
  3244.       IAddress* sourceNotifier;
  3245.       IAddressTest* testTarget;
  3246.       testTarget = new IAddressTest ();
  3247.       sourceNotifier = new IAddress ();
  3248.  
  3249.       {
  3250.         StreetConnection * iStreet = new StreetConnection (testTarget);
  3251.         iStreet->handleNotificationsFor(*sourceNotifier);
  3252.       }
  3253.       {
  3254.         CityConnection * iCity = new CityConnection (testTarget);
  3255.         iCity->handleNotificationsFor(*sourceNotifier);
  3256.       }
  3257.       {
  3258.         StateConnection * iState = new StateConnection (testTarget);
  3259.         iState->handleNotificationsFor(*sourceNotifier);
  3260.       }
  3261.       {
  3262.         ZipConnection * iZip = new ZipConnection (testTarget);
  3263.         iZip->handleNotificationsFor(*sourceNotifier);
  3264.       }
  3265.       sourceNotifier->enableNotification();
  3266.       sourceNotifier->setStreet("");
  3267.       sourceNotifier->setCity("");
  3268.       sourceNotifier->setState("");
  3269.       sourceNotifier->setZip("");
  3270.  
  3271.       delete sourceNotifier;
  3272.       delete testTarget;
  3273.     } /* end main */
  3274.  
  3275.  
  3276. ΓòÉΓòÉΓòÉ 9.3. Code for a Notifier Class ΓòÉΓòÉΓòÉ
  3277.  
  3278. The following code creates a notifier object called sourceNotifier and an 
  3279. observer object called testTarget that is called when events in sourceNotifier 
  3280. are signalled: 
  3281.  
  3282.   testTarget = new IAddressTest ();
  3283.   sourceNotifier = new IAddress ();
  3284.  
  3285. The following code creates a StreetConnection object and adds it as an observer 
  3286. to the sourceNotifier: 
  3287.  
  3288.   StreetConnection * iStreet = new StreetConnection (testTarget);
  3289.   iStreet->handleNotificationsFor(*sourceNotifier);
  3290.  
  3291. The following code enables notification in sourceNotifier and changes the value 
  3292. of the street attribute in the sourceNotifier object: 
  3293.  
  3294.   sourceNotifier->enableNotification();
  3295.   sourceNotifier->setStreet("");
  3296.  
  3297.  
  3298. ΓòÉΓòÉΓòÉ 9.4. Sample Notification Flow ΓòÉΓòÉΓòÉ
  3299.  
  3300. Calling the setStreet member function in the IAddress class starts a flow of 
  3301. control that results in the calling of the streetChangedAction in the 
  3302. IAddressTest class. Follow this flow starting with the setStreet member 
  3303. function in IAddress: 
  3304.  
  3305.   IAddress& IAddress::setStreet (const IString& aStreet)
  3306.   {
  3307.     if (iStreet != aStreet)
  3308.     {
  3309.       iStreet = aStreet;
  3310.       IString eventData(iStreet);
  3311.       notifyObservers(INotificationEvent(streetId, *this,
  3312.                       true, (void*)&eventData));
  3313.     } /* endif */
  3314.     return *this;
  3315.   }
  3316.  
  3317. Because a street connection observer has been added to the address object and 
  3318. event notification has been enabled, executing notifyObservers in setStreet 
  3319. causes dispatchNotificationEvent in StreetConnection to run: 
  3320.  
  3321.   IObserver &dispatchNotificationEvent (const INotificationEvent& anEvent)
  3322.   {
  3323.     if (IAddress::streetId == anEvent.notificationId())
  3324.     {
  3325.       try {iTestTarget->streetChangedAction();}
  3326.       catch (IException& exc) {}
  3327.     }
  3328.     return *this;
  3329.   } ;
  3330.  
  3331. When notifyObservers is called, all observers are called. Each observer must 
  3332. determine if this notification event should be processed. So the 
  3333. dispatchNotificationEvent in StreetConnection compares the notification ID, 
  3334. determines that this is a streetId notification event, and calls 
  3335. streetChangedAction in IAddressTest: 
  3336.  
  3337.   class IAddressTest : public IStandardNotifier
  3338.   {
  3339.     streetChangedAction()
  3340.     { printf("The Street Attribute has been changed\n"); }
  3341.   } ;
  3342.  
  3343. This completes the flow from the street notification (streetId) to the target 
  3344. action, streetChangedAction. 
  3345.  
  3346.  
  3347. ΓòÉΓòÉΓòÉ 10. IBM Open Class Library Conventions ΓòÉΓòÉΓòÉ
  3348.  
  3349.      Overview 
  3350.  
  3351.      File extensions 
  3352.  
  3353.      File names 
  3354.  
  3355.      Class names, function names, and data member names 
  3356.  
  3357.      Enumerations 
  3358.  
  3359.      Function return types 
  3360.  
  3361.      Function arguments 
  3362.  
  3363.      Feature names 
  3364.  
  3365.      Notification IDs 
  3366.  
  3367.      Other standards 
  3368.  
  3369.  Personal notes: 
  3370.  
  3371.  
  3372. ΓòÉΓòÉΓòÉ 10.1. Overview ΓòÉΓòÉΓòÉ
  3373.  
  3374. This appendix introduces you to the conventions used in the IBM Open Class 
  3375. Library, as follows: 
  3376.  
  3377.      File extensions 
  3378.      File names 
  3379.      Class, function, and data member names 
  3380.      Enumerations 
  3381.      Function return types 
  3382.      Function arguments 
  3383.      Feature names (attributes, actions, events), for Visual Builder only 
  3384.      Notification IDs 
  3385.      Other standards 
  3386.  
  3387.  
  3388. ΓòÉΓòÉΓòÉ 10.2. File Extensions ΓòÉΓòÉΓòÉ
  3389.  
  3390.  .c      C code file or C++ template code file. 
  3391.  
  3392.  .cpp    C++ code file. 
  3393.  
  3394.  .def    Import module definition file. 
  3395.  
  3396.  .dll    Dynamic link library file. 
  3397.  
  3398.  .h      C header file or C++ template header file. 
  3399.  
  3400.  .hpp    C++ header file. 
  3401.  
  3402.  .inl    C++ inline functions file. 
  3403.  
  3404.  .lib    Library file. 
  3405.  
  3406.  .mak    Make file. 
  3407.  
  3408.  .rc     Resource file. 
  3409.  
  3410.  .rsp    Import linker automatic response file. 
  3411.  
  3412.  .vbb    Visual Builder class (binary) file. 
  3413.  
  3414.  .vbe    Part information (external) file. 
  3415.  
  3416.  
  3417. ΓòÉΓòÉΓòÉ 10.3. File Names ΓòÉΓòÉΓòÉ
  3418.  
  3419. All files provided by the IBM Open Class Library begin with the letter "i", 
  3420. such as iapp.hpp. File names have a maximum of eight characters, including the 
  3421. "i". Following is a list of the file name extensions that are used: 
  3422.  
  3423.  ixxxxxxx.hpp    IBM Open Class Library header file. 
  3424.  
  3425.  ixxxxxxx.inl    IBM Open Class Library inline functions. 
  3426.  
  3427.  The file name generally indicates the class or classes it contains. For 
  3428.  example, the iapp.hpp file contains the IApplication and ICurrentApplication 
  3429.  classes. 
  3430.  
  3431.  
  3432. ΓòÉΓòÉΓòÉ 10.4. Class Names, Function Names, and Data Member Names ΓòÉΓòÉΓòÉ
  3433.  
  3434. Class names are mixed case, with the first letter of each word capitalized, as 
  3435. in ICurrentApplication. All class names in the global name space begin with the 
  3436. letter "I". 
  3437.  
  3438. Function names and data member names are also mixed case, except the first 
  3439. letter is always lowercase, as in the autoSize data member. Here are some more 
  3440. general rules about class and function names: 
  3441.  
  3442.      Acronyms are uppercase, as in IDBCSBuffer (DBCS is the acronym for 
  3443.       double-byte character set). Other acronyms are GUI (graphical user 
  3444.       interface) and DDE (dynamic data exchange). 
  3445.  
  3446.      Abbreviations are mixed case, as IPresSpaceHandle, which is the class for 
  3447.       presentation space handles. 
  3448.  
  3449.      Functions that query begin with a prefix that implies a query is being 
  3450.       conducted, such as is or has. The IDragItem class, for example, has the 
  3451.       isCopyable function, which queries whether an object can be copied. 
  3452.  
  3453.      Functions that render an object as a different type begin with the as 
  3454.       prefix, as in asUnsignedLong, which renders an object as an unsigned 
  3455.       long. 
  3456.  
  3457.      Functions that provide enabling or disabling capabilities begin with the 
  3458.       enable or disable prefix, respectively. The IEntryField class, for 
  3459.       example, provides the enableAutoScroll function, which enables automatic 
  3460.       scrolling. 
  3461.  
  3462.      Functions that set something begin with the set prefix. The 
  3463.       setDefaultStyle function, to follow the preceding example, is used to set 
  3464.       the default style for a class. 
  3465.  
  3466.      Functions that get something, however, have no get prefix. For example, 
  3467.       many classes use the defaultStyle function to get the default style for 
  3468.       that class. 
  3469.  
  3470.      Functions that act on objects are verbs, such as copy and move. 
  3471.  
  3472.      Function names and arguments are virtually self-explanatory. The 
  3473.       following example would move the IWindow object aWindow to the position 
  3474.       specified by the IPoint object aPoint. 
  3475.  
  3476.               aWindow.moveTo( aPoint );
  3477.  
  3478.      Many functions that toggle the state of an object are provided with an 
  3479.       optional Boolean argument that can be used to perform the opposite action 
  3480.       of the function. This allows the result of a prior query function to be 
  3481.       used as an input argument, such as the following: 
  3482.  
  3483.               Boolean initialVisibility = isVisible();
  3484.               hide();
  3485.               /* Do some hidden work */
  3486.               show(initialVisibility);
  3487.  
  3488.  
  3489. ΓòÉΓòÉΓòÉ 10.5. Enumerations ΓòÉΓòÉΓòÉ
  3490.  
  3491. The conventions for enumeration types and enumerators follow: 
  3492.  
  3493.      The first character of each enumeration name is uppercase. If two words 
  3494.       are joined, each begins with an uppercase letter. 
  3495.  
  3496.      Enumerators use the same naming conventions as functions; they begin with 
  3497.       lowercase letters, but if two words are joined, the second begins with an 
  3498.       uppercase letter. 
  3499.  
  3500.  
  3501. ΓòÉΓòÉΓòÉ 10.6. Function Return Types ΓòÉΓòÉΓòÉ
  3502.  
  3503. The return types for the various types of functions follow: 
  3504.  
  3505.      A testing function typically returns a Boolean (true or false) as 
  3506.       follows: 
  3507.  
  3508.               Boolean isValid() const
  3509.  
  3510.      Other accessor functions typically return an object as follows: 
  3511.  
  3512.               ISize size() const;                 //Returns an object
  3513.               IWindow* owner();                   //Returns a pointer to an object
  3514.  
  3515.      Functions that act on an object return an object reference, as follows: 
  3516.  
  3517.               IWindow& hide();
  3518.  
  3519.       This enables the chaining of function calls, as follows: 
  3520.  
  3521.               aWindow.moveTo(IPoint(10,10)).show();
  3522.  
  3523.  
  3524. ΓòÉΓòÉΓòÉ 10.7. Function Arguments ΓòÉΓòÉΓòÉ
  3525.  
  3526. Function arguments are usually passed using the following conventions: 
  3527.  
  3528.      Built-in types (ints, doubles) and enumerations are passed in by value. 
  3529.  
  3530.      Objects are passed by reference (a const reference if the argument is not 
  3531.       modified by the function). 
  3532.  
  3533.      Optional objects are passed by pointer. For example, a 0 pointer can be 
  3534.       passed. 
  3535.  
  3536.      IWindow objects are usually passed by pointer. 
  3537.  
  3538.      IContainerObjects are usually passed by pointer. 
  3539.  
  3540.      Strings are passed as const char *. This enables you to pass either an 
  3541.       IString or a literal character array. 
  3542.  
  3543.  
  3544. ΓòÉΓòÉΓòÉ 10.8. Feature Names ΓòÉΓòÉΓòÉ
  3545.  
  3546. Give attributes, events, and actions meaningful names, and start them with a 
  3547. lowercase letter to avoid confusion with part or class names. If you follow 
  3548. these simple conventions in choosing your feature names, it is easier for users 
  3549. of your parts to recognize the function of a feature: 
  3550.  
  3551.      Name actions with phrases that indicate activities to be performed, 
  3552.       together with an optional receiver of that activity. Examples of feature 
  3553.       names for actions are startTimer, openWindow, hide, and setFocus. 
  3554.  
  3555.      Name attributes with phrases that indicate the physical property they 
  3556.       represent. Examples of feature names for attributes are height, 
  3557.       buttonLabel, and contents. 
  3558.  
  3559.      Name events with phrases that indicate activities that either have 
  3560.       happened or are about to happen. Examples of feature names for events are 
  3561.       clicked, aboutToCloseWindow, and timeExpired. 
  3562.  
  3563.  Note:  Do not use feature names that start with avl or vb. These are reserved 
  3564.  for use by Visual Builder. 
  3565.  
  3566.  
  3567. ΓòÉΓòÉΓòÉ 10.9. Notification IDs ΓòÉΓòÉΓòÉ
  3568.  
  3569. Notification IDs are defined in the header files as public static data members. 
  3570. The notification ID name is attribute or event name followed by Id. The 
  3571. following is an example of the notification ID for the buttonClick event in the 
  3572. IButton class: 
  3573.  
  3574.   INotificationId const
  3575.     buttonClickId;
  3576.  
  3577. The notification ID is implemented in the code files as strings with the class 
  3578. name followed by the attribute or event name. An example from IButton code file 
  3579. follows: 
  3580.  
  3581.   const INotificationId IButton::buttonClickId="IButton::buttonClick";
  3582.  
  3583.  
  3584. ΓòÉΓòÉΓòÉ 10.10. Other Standards ΓòÉΓòÉΓòÉ
  3585.  
  3586. The following are additional standards followed by the IBM Open Class Library: 
  3587.  
  3588.      Header files are wrapped to ensure that files are not included more than 
  3589.       once. An example from the ibutton.hpp file follows: 
  3590.  
  3591.               #ifndef _IBUTTON_
  3592.                 #define _IBUTTON_
  3593.  
  3594.      All functions that can be inlined are placed in separate .inl files with 
  3595.       a user option (I_NO_INLINES) to determine whether they should be inlined 
  3596.       into the application code. An example from the inotifev.hpp file follows: 
  3597.  
  3598.               #ifndef I_NO_INLINES
  3599.                 #include <inotifev.inl>
  3600.               #endif
  3601.  
  3602.       If you do not want to inline these functions, then define I_NO_INLINES. 
  3603.  
  3604.      isynonym.hpp contains the names of the types and values that are in the 
  3605.       global name space but do not begin with the letter "I". If you have 
  3606.       collisions with other libraries, you can change the names in 
  3607.       isynonym.hpp. 
  3608.  
  3609.  
  3610. ΓòÉΓòÉΓòÉ 11. Code Listings ΓòÉΓòÉΓòÉ
  3611.  
  3612.      Overview 
  3613.  
  3614.      INotifier header code 
  3615.  
  3616.      IStandardNotifier header code 
  3617.  
  3618.      IObserver header code 
  3619.  
  3620.      INotificationEvent header code 
  3621.  
  3622.      IButton header code 
  3623.  
  3624.      Sample IAddress Part 
  3625.  
  3626.         -  Header code 
  3627.  
  3628.         -  Source code 
  3629.  
  3630.         -  Test code 
  3631.  
  3632.  Personal notes: 
  3633.  
  3634.  
  3635. ΓòÉΓòÉΓòÉ 11.1. Overview ΓòÉΓòÉΓòÉ
  3636.  
  3637. This chapter presents sample code listings for the following IBM Open Class 
  3638. Library header files: 
  3639.  
  3640.      INotifier 
  3641.      IStandardNotifier 
  3642.      IObserver 
  3643.      INotificationEvent 
  3644.      IButton 
  3645.  
  3646.  This chapter also presents the following for a sample IAddress part: 
  3647.  
  3648.      Header code (.hpp) 
  3649.      Source code (.cpp) 
  3650.      Test code 
  3651.  
  3652.  There might be differences between these printed samples and the sample code 
  3653.  shipped with Visual Builder. Where differences exist, use the shipped sample 
  3654.  code. 
  3655.  
  3656.  
  3657. ΓòÉΓòÉΓòÉ 11.2. INotifier Header Code ΓòÉΓòÉΓòÉ
  3658.  
  3659. This abstract class contains the notication protocol. 
  3660.  
  3661. #ifndef _INOTIFY_
  3662. #define _INOTIFY_
  3663. /*******************************************************************************
  3664. * FILE NAME: inotify.hpp                                                       *
  3665. *                                                                              *
  3666. * DESCRIPTION:                                                                 *
  3667. *   Declaration of the class:                                                  *
  3668. *     INotifier - Abstract Notifier protocol.                                  *
  3669. *                                                                              *
  3670. * COPYRIGHT:                                                                   *
  3671. *   Licensed Materials - Property of IBM                                       *
  3672. *   (C) Copyright IBM Corporation 1992, 1993, 1995                             *
  3673. *   All Rights Reserved                                                        *
  3674. *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
  3675. *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
  3676. *******************************************************************************/
  3677. #ifndef _IVBASE_
  3678.   #include <ivbase.hpp>
  3679. #endif
  3680. /*----------------------------------------------------------------------------*/
  3681. /* Align classes on a four-byte boundary.                                     */
  3682. /*----------------------------------------------------------------------------*/
  3683. #pragma pack(4)
  3684.  
  3685. // Forward declarations
  3686. class IObserver;
  3687. class IObserverList;
  3688. class INotificationEvent;
  3689. class IEventData;
  3690.  
  3691. typedef const char* const
  3692.   INotificationId;
  3693.  
  3694. class INotifier : public IVBase {
  3695. typedef IVBase
  3696.   Inherited;
  3697.  
  3698. INotifier public 
  3699.  
  3700. public:
  3701.  
  3702. /*------------------------- Constructors/Destructor ----------------------------
  3703. | This class is an abstract base class, so objects cannot be constructed.      |
  3704. |                                                                              |
  3705. ------------------------------------------------------------------------------*/
  3706.  
  3707. /*---------------------------- Activation --------------------------------------
  3708. | The following functions affect the ability of an INotifier to notify         |
  3709. | of events of interest:                                                       |
  3710. |   enableNotification  - Causes the notifier to send notifications to any     |
  3711. |                         observer objects added.                              |
  3712. |   disableNotification - Causes the notifier to stop sending notifications to |
  3713. |                         all observer objects added.                          |
  3714. |   isEnabledForNotification - Returns true if a notifier is sending           |
  3715. |                         notifications to its observers.                      |
  3716. ------------------------------------------------------------------------------*/
  3717. virtual INotifier
  3718.  &enableNotification        ( Boolean enabled = true ) = 0,
  3719.  &disableNotification       ( ) = 0;
  3720.  
  3721. virtual Boolean
  3722.   isEnabledForNotification  ( ) const = 0;
  3723.  
  3724. /*---------------------------- Observer Notification ---------------------------
  3725. | The following function is used to notify observers of a change in a notifier                notification ID, and optional data provided by the   |
  3726. |                         specific instance of the notifier.                   |
  3727. ------------------------------------------------------------------------------*/
  3728. virtual INotifier
  3729.  ¬ifyObservers       ( const INotificationEvent& anEvent) = 0;
  3730.  
  3731. INotifier protected and private 
  3732.  
  3733. protected:
  3734. /*---------------------------- Observer Addition/Removal -----------------------
  3735. | The following functions add and remove observers from the notifier's         |
  3736. | collection:                                                                  |
  3737. |   addObserver         - Adds an observer to the notifier's collection.       |
  3738. |   removeObserver      - Removes an observer from the notifier's collection.  |
  3739. |   removeAllObservers  - Removes all observers from the notifier's collection.|
  3740. ------------------------------------------------------------------------------*/
  3741. virtual INotifier
  3742.  &addObserver           ( IObserver&        anObserver,
  3743.                           const IEventData& userData) = 0,
  3744.  &removeObserver        ( const IObserver&  anObserver) = 0,
  3745.  &removeAllObservers    ( ) = 0;
  3746.  
  3747. /*---------------------------- ObserverList ------------------------------------
  3748. |   observerList          Returns the collection of IObservers.                |
  3749. ------------------------------------------------------------------------------*/
  3750.  
  3751. virtual IObserverList
  3752.  &observerList          ( ) const = 0;
  3753.  
  3754. /*---------------------------- Observer Notification ---------------------------
  3755. | The following function is used to notify observers of a change in a notifier                notification ID, and optional data provided by the   |
  3756. |                         specific instance of the notifier.                   |
  3757. ------------------------------------------------------------------------------*/
  3758. virtual INotifier
  3759.   ¬ifyObservers (const INotificationId& nId) = 0;
  3760.  
  3761. private:
  3762.  
  3763. friend class IObserver;
  3764. };
  3765.  
  3766.  
  3767. /*------------------------------------------------------------------------------
  3768. |  Resume compiler default packing.                                            |
  3769. ------------------------------------------------------------------------------*/
  3770. #pragma pack()
  3771.  
  3772. /*----------------------------- Inline Functions -----------------------------*/
  3773.  
  3774. #endif /* _INOTIFY_ */
  3775.  
  3776.  
  3777. ΓòÉΓòÉΓòÉ 11.3. IStandardNotifier Header Code ΓòÉΓòÉΓòÉ
  3778.  
  3779. The IStandardNotifier class implements the notification (INotifier) protocol. 
  3780. Nonvisual parts are derived from this class. 
  3781.  
  3782. #ifndef _ISTDNTFY_
  3783. #define _ISTDNTFY_
  3784. /*******************************************************************************
  3785. * FILE NAME: istdntfy.hpp                                                      *
  3786. *                                                                              *
  3787. * DESCRIPTION:                                                                 *
  3788. *   Declaration of the class:                                                  *
  3789. *     IStandardNotifier - Concrete implementation of the INotifier protocol.   *
  3790. *                                                                              *
  3791. * COPYRIGHT:                                                                   *
  3792. *   Licensed Materials - Property of IBM                                       *
  3793. *   (C) Copyright IBM Corporation 1992, 1993, 1995                             *
  3794. *   All Rights Reserved                                                        *
  3795. *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
  3796. *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
  3797. *******************************************************************************/
  3798. #ifndef _INOTIFY_
  3799.   #include <inotify.hpp>
  3800. #endif
  3801. #ifndef _IEVTDATA_
  3802.   #include <ievtdata.hpp>
  3803. #endif
  3804. /*----------------------------------------------------------------------------*/
  3805. /* Align classes on a four-byte boundary.                                     */
  3806. /*----------------------------------------------------------------------------*/
  3807. #pragma pack(4)
  3808.  
  3809. class IObserverList;
  3810. class IObserver;
  3811. class INotificationEvent;
  3812.  
  3813. class IStandardNotifier : public INotifier {
  3814. typedef IStandardNotifier
  3815.   Inherited;
  3816. /*******************************************************************************
  3817. * An IStandardNotifier provides a concrete implementation of the INotifier     *
  3818. * protocol. If you want to create classes that provide notification,           *
  3819. * you can do so by inheriting from IStandardNotifier.  Alternatively, you can  *
  3820. * inherit from INotifier directly and provide the notifier protocol yourself.  *
  3821. *******************************************************************************/
  3822.  
  3823. IStandardNotifier public 
  3824.  
  3825. public:
  3826.  
  3827. /*------------------------- Constructors/Destructor ----------------------------
  3828. |  The only constructor for an IStandardNotifier object is the default         |
  3829. |  constructor that accepts no parameters.                                     |
  3830. ------------------------------------------------------------------------------*/
  3831.   IStandardNotifier ( );
  3832.   IStandardNotifier (const IStandardNotifier& partCopy);
  3833.   IStandardNotifier& operator= (const IStandardNotifier& aPart);
  3834.  
  3835. virtual
  3836.   ~IStandardNotifier ( );
  3837.  
  3838. /*---------------------------- Activation --------------------------------------
  3839. | The following functions affect the ability of a part to notify observers     |
  3840. | of events of interest:                                                       |
  3841. |   enableNotification  - Causes the part to send notifications to any         |
  3842. |                         observer objects added.                              |
  3843. |   disableNotification - Causes the part to stop sending notifications to     |
  3844. |                         all observer objects added.                          |
  3845. ------------------------------------------------------------------------------*/
  3846. virtual IStandardNotifier
  3847.  &enableNotification       ( Boolean enable = true),
  3848.  &disableNotification      ( );
  3849.  
  3850. virtual Boolean
  3851.   isEnabledForNotification ( ) const;
  3852.  
  3853. /*---------------------------- Observer Notification ---------------------------
  3854. | The following function is used to notify observers of a change in a notifier& anEvent);
  3855.  
  3856. /*----------------------- Notification Event Descriptions ----------------------
  3857. | These INotificationId strings are used for all notifications that            |
  3858. | IStandardNotifier provides to its observers:                                 |
  3859. |   deleteId - Notification identifier provided to observers when the part     |
  3860. |              object is deleted.                                              |
  3861. ------------------------------------------------------------------------------*/
  3862. static INotificationId const
  3863.   deleteId;
  3864.  
  3865. IStandardNotifier protected and private 
  3866.  
  3867. protected:
  3868. /*---------------------------- Observer Addition/Removal -----------------------
  3869. | The following functions add and remove observers from the notifiers          |
  3870. | collection:                                                                  |
  3871. |   addObserver         - Adds an observer to the part's collection.           |
  3872. |   removeObserver      - Removes an observer from the part's collection.      |
  3873. |   removeAllObservers  - Removes all observers from the part's collection.    |
  3874. ------------------------------------------------------------------------------*/
  3875. virtual IStandardNotifier
  3876.  &addObserver           ( IObserver&        anObserver,
  3877.                           const IEventData& userData = IEventData(0)),
  3878.  &removeObserver        ( const IObserver& anObserver),
  3879.  &removeAllObservers    ( );
  3880.  
  3881. /*---------------------------- ObserverList ------------------------------------
  3882. |   observerList        - Returns the collection of IObservers.                |
  3883. ------------------------------------------------------------------------------*/
  3884. IObserverList
  3885.  &observerList          ( ) const;
  3886.  
  3887. /*---------------------------- Observer Notification ---------------------------
  3888. | The following function is used to notify observers of a change in a notifier                                           */
  3889. /*----------------------------------------------------------------------------*/
  3890. #pragma pack()
  3891.  
  3892.  
  3893. #endif /* _ISTDNTFY_ */
  3894.  
  3895.  
  3896. ΓòÉΓòÉΓòÉ 11.4. IObserver Header Code ΓòÉΓòÉΓòÉ
  3897.  
  3898. IObserver is an abstract class that can be subclassed and added to notifiers to 
  3899. receive event notification. 
  3900.  
  3901. #ifndef _IOBSERVR_
  3902. #define _IOBSERVR_
  3903. /*******************************************************************************
  3904. * FILE NAME: iobservr.hpp                                                      *
  3905. *                                                                              *
  3906. * DESCRIPTION:                                                                 *
  3907. *   Declaration of the class:                                                  *
  3908. *     IObserver - Abstract Observer protocol.                                  *
  3909. *                                                                              *
  3910. * COPYRIGHT:                                                                   *
  3911. *   Licensed Materials - Property of IBM                                       *
  3912. *   (C) Copyright IBM Corporation 1992, 1993, 1995                             *
  3913. *   All Rights Reserved                                                        *
  3914. *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
  3915. *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
  3916. *                                                                              *
  3917. *******************************************************************************/
  3918.  
  3919. #ifndef _IVBASE_
  3920.   #include <ivbase.hpp>
  3921. #endif
  3922.  
  3923. #ifndef _IEVTDATA_
  3924.   #include <ievtdata.hpp>
  3925. #endif
  3926.  
  3927. /*----------------------------------------------------------------------------*/
  3928. /* Align classes on a four-byte boundary.                                     */
  3929. /*----------------------------------------------------------------------------*/
  3930. #pragma pack(4)
  3931.  
  3932. // Forward declarations
  3933. class IObserver;
  3934. class INotificationEvent;
  3935. class INotifier;
  3936.  
  3937. class IObserver : public IVBase {
  3938. typedef IVBase
  3939.   Inherited;
  3940.  
  3941. IObserver public 
  3942.  
  3943. public:
  3944. /*------------------------- Constructors/Destructor ----------------------------
  3945. | This class is an abstract class, so objects cannot be constructed.           |
  3946. |                                                                              |
  3947. ------------------------------------------------------------------------------*/
  3948.  ~IObserver ();
  3949.  
  3950. /*---------------------------- Notifier Attachment -----------------------------
  3951. | These functions permit attaching and detaching the observer object to/from   |
  3952. | a given notifier                                                             |
  3953. |   handleNotificationsFor       - Attaches the observer to the argument       |
  3954. |                                  INotifier object.                           |
  3955. |   stopHandlingNotificationsFor - Detaches the observer from the argument     |
  3956. |                                  INotifier object.                           |
  3957. ------------------------------------------------------------------------------*/
  3958. virtual IObserver
  3959.  &handleNotificationsFor       ( INotifier&        aNotifier,
  3960.                                  const IEventData& userData = IEventData()),
  3961.  &stopHandlingNotificationsFor ( INotifier&        aNotifier );
  3962.  
  3963. IObserver protected and private 
  3964.  
  3965. protected:
  3966. /*---------------------------- Overrides  --------------------------------------
  3967. | The following function must be overriden in a subclass.                      |
  3968. |   dispatchNotificationEvent  - An object of a class that inherits from       |
  3969. |                      INotifier calls this function to notify an observer     |
  3970. |                      of a change in itself.  The notification event          |
  3971. |                      also includes notification-specific information.        |
  3972. ------------------------------------------------------------------------------*/
  3973. virtual IObserver
  3974.  &dispatchNotificationEvent  ( const INotificationEvent&)=0;
  3975.  
  3976. private:
  3977.  
  3978. friend class INotifier;
  3979. friend class IObserverList;
  3980. };
  3981.  
  3982.  
  3983. /*----------------------------------------------------------------------------*/
  3984. /* Resume compiler default packing.                                           */
  3985. /*----------------------------------------------------------------------------*/
  3986. #pragma pack()
  3987.  
  3988. /*----------------------------- Inline Functions -----------------------------*/
  3989.  
  3990. #endif /* _IOBSERVR_ */
  3991.  
  3992.  
  3993. ΓòÉΓòÉΓòÉ 11.5. INotificationEvent Header Code ΓòÉΓòÉΓòÉ
  3994.  
  3995. The class INotificationEvent provides the details of a notification event to an 
  3996. observer object as shown in the following example: 
  3997.  
  3998. #ifndef _INOTIFEV_
  3999. #define _INOTIFEV_
  4000. /*******************************************************************************
  4001. * FILE NAME: inotifev.hpp                                                      *
  4002. *                                                                              *
  4003. * DESCRIPTION:                                                                 *
  4004. *   Declaration of the class:                                                  *
  4005. *     INotificationEvent - The details of a notification to an IObserver       *
  4006. *       object.                                                                *
  4007. *                                                                              *
  4008. * COPYRIGHT:                                                                   *
  4009. *   Licensed Materials - Property of IBM                                       *
  4010. *   (C) Copyright IBM Corporation 1992, 1993, 1995                             *
  4011. *   All Rights Reserved                                                        *
  4012. *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
  4013. *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
  4014. *******************************************************************************/
  4015. #ifndef _INOTIFY_
  4016.   #include <inotify.hpp>
  4017. #endif
  4018.  
  4019. #ifndef _IEVTDATA_
  4020.   #include <ievtdata.hpp>
  4021. #endif
  4022. /*----------------------------------------------------------------------------*/
  4023. /* Align classes on a four-byte boundary.                                     */
  4024. /*----------------------------------------------------------------------------*/
  4025. #pragma pack(4)
  4026.  
  4027. class INotificationEvent : public IBase {
  4028. typedef IBase
  4029.   Inherited;
  4030. /*******************************************************************************
  4031. *  The class INotificationEvent provides the details of a notification event   *
  4032. *  to an observer object.  Included in the event is the notification ID and    *
  4033. *  the notifier object.  Optionally included in the event is notifier-specific *
  4034. *  data (see the notifier for details) and observer-specific data provided     *
  4035. *  to the notifier when the observer was added to the notifier.                *
  4036. *******************************************************************************/
  4037.  
  4038. INotificationEvent public 
  4039.  
  4040. public:
  4041.  
  4042. enum EventType { attribute=1, event};
  4043.  
  4044. /*------------------------- Constructors/Destructor ----------------------------
  4045. ------------------------------------------------------------------------------*/
  4046.   INotificationEvent  ( const INotificationId&   anId,
  4047.                         INotifier&               aNotifier,
  4048.                         Boolean                  notifierAttrChanged=true,
  4049.                         const IEventData&        eventData=IEventData(),
  4050.                         const IEventData&        observerData=IEventData());
  4051.  
  4052.   INotificationEvent  (const INotificationEvent& anEvent);
  4053.  
  4054. /*---------------------------- Accessors ---------------------------------------
  4055. ------------------------------------------------------------------------------*/
  4056. INotificationEvent
  4057.  &setNotifierAttrChanged  ( Boolean                changed=true),
  4058.  &setEventData            ( const IEventData&      eventData ),
  4059.  &setObserverData         ( const IEventData&      observerData);
  4060.  
  4061. INotificationId
  4062.   notificationId       ( ) const;
  4063. INotifier
  4064.  ¬ifier             ( ) const;
  4065. Boolean
  4066.   pnotifierAttrChanged  ( ) const;
  4067. IEventData
  4068.   eventData            ( ) const,
  4069.   observerData         ( ) const;
  4070. //
  4071.  
  4072. INotificationEvent protected and private 
  4073.  
  4074. private:
  4075.  
  4076. INotificationId
  4077.   evtId;
  4078. INotifier
  4079.  *evtNotifier;
  4080. Boolean
  4081.  attrChanged;
  4082. IEventData
  4083.  evtData,
  4084.  obsData;
  4085. };
  4086.  
  4087. /*----------------------------------------------------------------------------*/
  4088. /* Resume compiler default packing.                                           */
  4089. /*----------------------------------------------------------------------------*/
  4090. #pragma pack()
  4091.  
  4092. /*----------------------------- Inline Functions -----------------------------*/
  4093. #ifndef I_NO_INLINES
  4094.   #include <inotifev.inl>
  4095. #endif
  4096. #endif /* _INOTIFEV_ */
  4097.  
  4098.  
  4099. ΓòÉΓòÉΓòÉ 11.6. IButton Header Code ΓòÉΓòÉΓòÉ
  4100.  
  4101. IButton is an abstract class for button controls. 
  4102.  
  4103. #ifndef _IBUTTON_
  4104.   #define _IBUTTON_
  4105. /*******************************************************************************
  4106. * FILE NAME: ibutton.hpp                                                       *
  4107. *                                                                              *
  4108. * DESCRIPTION:                                                                 *
  4109. *   Declaration of the class:                                                  *
  4110. *    IButton - The IButton class is the abstract base class for button controls.
  4111. *                                                                              *
  4112. * COPYRIGHT:                                                                   *
  4113. *   Licensed Materials - Property of IBM                                       *
  4114. *   (C) Copyright IBM Corporation 1992, 1993, 1995                             *
  4115. *   All Rights Reserved                                                        *
  4116. *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
  4117. *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
  4118. *******************************************************************************/
  4119. #ifndef _ITEXTCTL_
  4120.   #include <itextctl.hpp>
  4121. #endif
  4122.  
  4123. #ifndef _IBUTTON1_
  4124.   #include <ibutton1.hpp>
  4125. #endif
  4126.  
  4127. /*----------------------------------------------------------------------------*/
  4128. /* Align classes on a four-byte boundary.                                     */
  4129. /*----------------------------------------------------------------------------*/
  4130. #pragma pack(4)
  4131.  
  4132. // Forward declarations for other classes:
  4133. class IColor;
  4134.  
  4135. class IButton : public ITextControl {
  4136. typedef ITextControl
  4137.   Inherited;
  4138. /*******************************************************************************
  4139. * The IButton class is the abstract base class for button controls.  This      *
  4140. * class contains the common functions for all button controls.  Actual button  *
  4141. * controls are created by deriving from this base class.                       *
  4142. *******************************************************************************/
  4143.  
  4144. public:
  4145. /*----------------------- Style -----------------------------------------------
  4146.   The following functions provide a means to set and query button styles:
  4147.  
  4148.     Style - Nested class that provides static members that define the set of
  4149.             valid button styles.  These styles can be used in conjunction
  4150.             with the styles defined by the nested classes IWindow::Style and
  4151.             IControl::Style.  For example, you could define an instance of
  4152.             the IButton::Style class and initialize it as follows:
  4153.                IButton::Style
  4154.                  style = IControl::tabStop;
  4155.             An object of this type is provided when the button is created.  A
  4156.             customizable default is used if no styles are specified.  Once
  4157.             the object is constructed, you can use IButton, IWindow, and IControl
  4158.             member functions to set or query the object's style.
  4159.  
  4160.             The declaration of the IButton::Style nested class is generated
  4161.             by the INESTEDBITFLAGCLASSDEF2 macro.
  4162.  
  4163.    The valid button styles are:
  4164.      noPointerFocus - Buttons with this style do not set the focus to
  4165.                       themselves when the user clicks on them using the mouse.
  4166.                       This enables the cursor to stay on a control for which
  4167.                       information is required, rather than moving to the
  4168.                       button.  This has no effect on keyboard interaction.
  4169. -----------------------------------------------------------------------------*/
  4170. INESTEDBITFLAGCLASSDEF2(Style, IButton, IWindow, IControl);
  4171.                                 // style class definition
  4172. static const Style
  4173.   noPointerFocus;
  4174.  
  4175. /*-------------------------- Constructor/Destructor ----------------------------
  4176. | Instances of this class cannot be created.                                   |
  4177. ------------------------------------------------------------------------------*/
  4178.   IButton ( );
  4179. virtual
  4180.  ~IButton ( );
  4181.  
  4182. /*------------------------------- Mouse Focus ----------------------------------
  4183. | The following functions are used to set and query whether the button can     |
  4184. | receive the input focus when clicked with the mouse pointer:                 |
  4185. |   enableMouseClickFocus  - Enables the button to receive the focus when the  |
  4186. |                            user clicks on the button using the mouse.        |
  4187. |   disableMouseClickFocus - Prevents the button from receiving the focus      |
  4188. |                            when the user clicks on the button using the      |
  4189. |                            mouse.                                            |
  4190. |   allowsMouseClickFocus  - Queries whether the button can receive the focus. |
  4191. ------------------------------------------------------------------------------*/
  4192. #ifndef IC_MOTIF_FLAGNOP
  4193. IButton
  4194.  &enableMouseClickFocus  ( Boolean turnOn = true ),
  4195.  &disableMouseClickFocus ( );
  4196. Boolean
  4197.   allowsMouseClickFocus  ( ) const;
  4198. #endif  // end of IC_MOTIF_FLAGNOP
  4199.  
  4200. /*--------------------------- Highlighted State --------------------------------
  4201. | These operations test and set a button's highlight state.  A highlighted     |
  4202. | button has the same appearance as if the mouse selection button (mouse       |
  4203. | button 1) was pressed while the mouse pointer was over the button control:   |
  4204. |   isHighlighted  -  Returns true if the button's highlight state is set.     |
  4205. |   highlight      -  Sets the button's highlight state.                       |
  4206. |   unhighlight    -  Turns off the button's highlight state.                  |
  4207. ------------------------------------------------------------------------------*/
  4208. #ifndef IC_MOTIF_FLAGNOP
  4209. Boolean
  4210.   isHighlighted ( ) const;
  4211.  
  4212. virtual IButton
  4213.  &highlight     ( ),
  4214.  &unhighlight   ( );
  4215. #endif  // end of IC_MOTIF_FLAGNOP
  4216.  
  4217. /*----------------------------- Click the Button -------------------------------
  4218. |   click  - Simulates the user clicking on the button control using the       |
  4219. |            mouse selection button.                                           |
  4220. ------------------------------------------------------------------------------*/
  4221. virtual IButton
  4222.  &click         ( );
  4223.  
  4224. #ifdef IC_PM
  4225. //#ifndef IC_MOTIF
  4226. /*----------------------------- Color Functions --------------------------------
  4227. |  foregroundColor         - Returns the foreground color value of the button  |
  4228. |                            or the default if no color for the area has been  |
  4229. |                            set.                                              |
  4230. |  backgroundColor         - Returns the background color value of the button  |
  4231. |                            or the default if no color for the area has been  |
  4232. |                            set.                                              |
  4233. |  disabledForegroundColor - Returns the disabled foreground color value of    |
  4234. |                            the button or the default if no color for the     |
  4235. |                            area has been set.                                |
  4236. |  hiliteForegroundColor   - Returns the hilite foreground color value of the  |
  4237. |                            button or the default if no color for the area    |
  4238. |                            has been set.                                     |
  4239. |  hiliteBackgroundColor   - Returns the hilite background color value of the  |
  4240. |                            button or the default if no color for the area    |
  4241. |                            has been set.                                     |
  4242. ------------------------------------------------------------------------------*/
  4243. virtual IColor
  4244.   foregroundColor         () const,
  4245.   backgroundColor         () const,
  4246.   disabledForegroundColor () const,
  4247.   hiliteForegroundColor   () const,
  4248.   hiliteBackgroundColor   () const;
  4249. //#endif
  4250. #endif
  4251.  
  4252. /*----------------------- Notification Event Descriptions ----------------------
  4253. | These INotificationId strings are used for all notifications that IButton    |
  4254. | provides to its observers:                                                   |
  4255. |   buttonClickId     - Notification identifier provided to observers when the |
  4256. |                       button control is clicked by the user.                 |
  4257. ------------------------------------------------------------------------------*/
  4258. // Attribute Change Notifications
  4259. static INotificationId const
  4260.   buttonClickId;
  4261.  
  4262. /*-------------------------------- Overrides -----------------------------------
  4263. | This class overrides the following inherited functions:                      |
  4264. |   setText - Sets the text for the button and notifies a parent canvas to     |
  4265. |             update the layout for its children, if appropriate.              |
  4266. ------------------------------------------------------------------------------*/
  4267. virtual IButton
  4268.  &setText       ( const char* text ),
  4269.  &setText       ( const IResourceId& text );
  4270.  
  4271. protected:
  4272. private:
  4273. /*--------------------------------- Private ----------------------------------*/
  4274.   IButton       ( const IButton& );
  4275. IButton
  4276.  &operator=     ( const IButton& );
  4277.  
  4278. public:
  4279. /*--------------------- Obsolete data and Functions ----------------------------
  4280. | The following enumerations are defined:                                      |
  4281. |   ColorArea - Used to replace the color for a particular region.             |
  4282. |               Values are:                                                    |
  4283. |                 foreground          - Sets the color of the foreground text. |
  4284. |                 disabledForeground  - Sets the foreground color for disabled |
  4285. |                                       text.                                  |
  4286. |                 background          - Sets the color of the background of    |
  4287. |                                       the button window.                     |
  4288. |                 highlightForeground - Sets the foreground color for          |
  4289. |                                       highlighted text.                      |
  4290. |                 border              - Sets the color of the border that      |
  4291. |                                       surrounds the button window.           |
  4292. |  setColor - Changes the color of the given region.                           |
  4293. |  color    - Returns the color of the given region.                           |
  4294. ------------------------------------------------------------------------------*/
  4295. enum ColorArea {
  4296.   foreground,
  4297.   background,
  4298.   disabledForeground,
  4299.   highlightForeground,
  4300.   border
  4301. };
  4302. IButton
  4303.  &setColor      ( ColorArea value, const IColor& color );
  4304. IColor
  4305.   color         ( ColorArea value ) const;
  4306. };  // class IButton
  4307.  
  4308. INESTEDBITFLAGCLASSFUNCS(Style, IButton);
  4309.                                   // global style functions
  4310.  
  4311. /*----------------------------------------------------------------------------*/
  4312. /* Resume compiler default packing.                                           */
  4313. /*----------------------------------------------------------------------------*/
  4314. #pragma pack()
  4315.  
  4316. #endif  /* _IBUTTON_ */
  4317.  
  4318.  
  4319. ΓòÉΓòÉΓòÉ 11.7. Sample IAddress Part ΓòÉΓòÉΓòÉ
  4320.  
  4321. The IAddress nonvisual part contains several attributes, including street, 
  4322. city, state and zip. 
  4323.  
  4324.  
  4325. ΓòÉΓòÉΓòÉ 11.7.1. IAddress Header Code (iadd.hpp) ΓòÉΓòÉΓòÉ
  4326.  
  4327. #ifndef _IADD_
  4328.   #define _IADD_
  4329. /*******************************************************************************
  4330. * FILE NAME: iadd.hpp                                                          *
  4331. *                                                                              *
  4332. * DESCRIPTION:                                                                 *
  4333. *   Declaration of the class:                                                  *
  4334. *    IAddress - Address Class                                                  *
  4335. *                                                                              *
  4336. * COPYRIGHT:                                                                   *
  4337. *   Licensed Materials - Property of IBM                                       *
  4338. *   (C) Copyright IBM Corporation 1994, 1995                                   *
  4339. *   All Rights Reserved                                                        *
  4340. *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
  4341. *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
  4342. *******************************************************************************/
  4343. #ifndef _ISTRING_
  4344.   #include <istring.hpp>
  4345. #endif
  4346. #ifndef _ISTDNTFY_
  4347.   #include <istdntfy.hpp>
  4348. #endif
  4349. /*----------------------------------------------------------------------------*/
  4350. /* Align classes on a four-byte boundary.                                     */
  4351. /*----------------------------------------------------------------------------*/
  4352. #pragma pack(4)
  4353.  
  4354. class IAddress : public IStandardNotifier
  4355. {
  4356. public:
  4357. /*--------------------------- PUBLIC -----------------------------------------*/
  4358. /*------------------------- Constructors/Destructor ----------------------------
  4359. ------------------------------------------------------------------------------*/
  4360.   IAddress ();
  4361.   IAddress (const IAddress& partCopy);
  4362. virtual
  4363.   ~IAddress ();
  4364.   IAddress& operator= (const IAddress& aIAddress);
  4365.  
  4366. /*-------------------------------- Attributes ----------------------------------
  4367. | The following members support attributes for this class:                     |
  4368. |    street                     - Returns the street attribute.                |
  4369. |    city                       - Returns the city attribute.                  |
  4370. |    state                      - Returns the state attribute.                 |
  4371. |    zip                        - Returns the zip attribute.                   |
  4372. |    setStreet                  - Sets the street attribute.                   |
  4373. |    setCity                    - Sets the city attribute.                     |
  4374. |    setState                   - Sets the state attribute.                    |
  4375. |    setZip                     - Sets the zip attribute.                      |
  4376. ------------------------------------------------------------------------------*/
  4377. virtual IString
  4378.   street () const,
  4379.   city () const,
  4380.   state () const,
  4381.   zip () const;
  4382.  
  4383. virtual IAddress
  4384.  &setStreet (const IString& aStreet),
  4385.  &setCity (const IString& aCity),
  4386.  &setState (const IString& aState),
  4387.  &setZip (const IString& aZip);
  4388.  
  4389. /*-------------------------------- Actions -------------------------------------
  4390. | These operations or services provided by this class:                         |
  4391. |   setStreetToDefault          - Sets street to a default value.              |
  4392. |   setCityToDefault            - Sets city to a default value.                |
  4393. |   setStateToDefault           - Sets state to a default value.               |
  4394. |   setZipToDefault             - Sets zip to a default value.                 |
  4395. |   setToDefault                - Sets all attributes to their default values. |
  4396. ------------------------------------------------------------------------------*/
  4397. virtual IAddress
  4398.  &setStreetToDefault (),
  4399.  &setCityToDefault (),
  4400.  &setStateToDefault (),
  4401.  &setZipToDefault (),
  4402.  &setToDefault ();
  4403.  
  4404. /*----------------------- Notification Event Descriptions ----------------------
  4405. | These INotificationId strings are used for all notifications that IWindow    |
  4406. | provides to its observers:                                                   |
  4407. |   streetId                    - Notification identifier provided to observers|
  4408. |                                 when the street attribute changes.           |
  4409. |   cityId                      - Notification identifier provided to observers|
  4410. |                                 when the city attribute changes.             |
  4411. |   stateId                     - Notification identifier provided to observers|
  4412. |                                 when the state attribute changes.            |
  4413. |   zipId                       - Notification identifier provided to observers|
  4414. |                                 when the zip attribute changes.              |
  4415. ------------------------------------------------------------------------------*/
  4416. static INotificationId const
  4417.   streetId,
  4418.   cityId,
  4419.   stateId,
  4420.   zipId;
  4421.  
  4422. private:
  4423. /*--------------------------- PRIVATE ----------------------------------------*/
  4424.   IString iStreet;
  4425.   IString iCity;
  4426.   IString iState;
  4427.   IString iZip;
  4428. };
  4429.  
  4430. /*----------------------------------------------------------------------------*/
  4431. /* Resume compiler default packing.                                           */
  4432. /*----------------------------------------------------------------------------*/
  4433. #pragma pack()
  4434.  
  4435. #endif
  4436.  
  4437.  
  4438. ΓòÉΓòÉΓòÉ 11.7.2. IAddress Source Code (iadd.cpp) ΓòÉΓòÉΓòÉ
  4439.  
  4440. /*******************************************************************************
  4441. * FILE NAME: iadd.cpp                                                          *
  4442. *                                                                              *
  4443. * DESCRIPTION:                                                                 *
  4444. *   Class implementation of the class:                                         *
  4445. *    IAddress - Address Class                                                  *
  4446. *                                                                              *
  4447. * COPYRIGHT:                                                                   *
  4448. *   Licensed Materials - Property of IBM                                       *
  4449. *   (C) Copyright IBM Corporation 1994, 1995                                   *
  4450. *   All Rights Reserved                                                        *
  4451. *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
  4452. *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
  4453. *******************************************************************************/
  4454.  
  4455. #ifndef _IADD_
  4456.   #include <iadd.hpp>                  //IAddress class header
  4457. #endif
  4458.  
  4459. #ifndef _INOTIFEV_
  4460.   #include <inotifev.hpp>
  4461. #endif
  4462.  
  4463. const INotificationId IAddress::streetId="IAddress::street";
  4464. const INotificationId IAddress::cityId="IAddress::city";
  4465. const INotificationId IAddress::stateId="IAddress::state";
  4466. const INotificationId IAddress::zipId="IAddress::zip";
  4467.  
  4468. /*------------------------------------------------------------------------------
  4469. | IAddress::IAddress                                                           |
  4470. |                                                                              |
  4471. | Standard constructor.                                                        |
  4472. ------------------------------------------------------------------------------*/
  4473. IAddress::IAddress() : IStandardNotifier (),
  4474.   iStreet("101 Main Street"),
  4475.   iCity("Hometown"),
  4476.   iState("NC"),
  4477.   iZip("27511")
  4478. {
  4479. }
  4480.  
  4481. /*------------------------------------------------------------------------------
  4482. | IAddress::IAddress                                                           |
  4483. |                                                                              |
  4484. | Standard copy constructor.                                                   |
  4485. ------------------------------------------------------------------------------*/
  4486. IAddress::IAddress (const IAddress& partCopy)
  4487.   : IStandardNotifier (partCopy),
  4488.   iStreet(partCopy.street()),
  4489.   iCity(partCopy.city()),
  4490.   iState(partCopy.state()),
  4491.   iZip(partCopy.zip())
  4492. {
  4493. }
  4494.  
  4495. /*------------------------------------------------------------------------------
  4496. | IAddress::~IAddress                                                          |
  4497. |                                                                              |
  4498. | Empty destructor here for page tuning.                                       |
  4499. ------------------------------------------------------------------------------*/
  4500. IAddress::~IAddress()
  4501. {
  4502. }
  4503.  
  4504. /*------------------------------------------------------------------------------
  4505. | IAddress::IAddress                                                           |
  4506. |                                                                              |
  4507. | Standard operator=                                                           |
  4508. ------------------------------------------------------------------------------*/
  4509. IAddress& IAddress::operator= (const IAddress& aIAddress)
  4510. {
  4511.   if (this == &aIAddress) {
  4512.     return *this;
  4513.   } /* endif */
  4514.   IStandardNotifier::operator=(aIAddress);
  4515.   setStreet(aIAddress.street());
  4516.   setCity(aIAddress.city());
  4517.   setState(aIAddress.state());
  4518.   setZip(aIAddress.zip());
  4519.   return *this;
  4520. }
  4521.  
  4522. /*------------------------------------------------------------------------------
  4523. | IAddress::street                                                             |
  4524. |                                                                              |
  4525. | Returns the street attribute.                                                |
  4526. ------------------------------------------------------------------------------*/
  4527. IString IAddress::street () const
  4528. {
  4529.   return iStreet;
  4530. }
  4531.  
  4532. /*------------------------------------------------------------------------------
  4533. | IAddress::setStreet                                                          |
  4534. |                                                                              |
  4535. | Sets the street attribute.                                                   |
  4536. ------------------------------------------------------------------------------*/
  4537. IAddress& IAddress::setStreet (const IString& aStreet)
  4538. {
  4539.   if (iStreet != aStreet)
  4540.   {
  4541.     iStreet = aStreet;
  4542.     IString eventData(iStreet);
  4543.     notifyObservers(INotificationEvent(streetId, *this,
  4544.                     true, (void*)&eventData));
  4545.   } /* endif */
  4546.   return *this;
  4547. }
  4548.  
  4549. /*------------------------------------------------------------------------------
  4550. | IAddress::city                                                               |
  4551. |                                                                              |
  4552. | Returns the city attribute.                                                  |
  4553. ------------------------------------------------------------------------------*/
  4554. IString IAddress::city () const
  4555. {
  4556.   return iCity;
  4557. }
  4558.  
  4559. /*------------------------------------------------------------------------------
  4560. | IAddress::setCity                                                            |
  4561. |                                                                              |
  4562. | Sets the city attribute.                                                     |
  4563. ------------------------------------------------------------------------------*/
  4564. IAddress& IAddress::setCity (const IString& aCity)
  4565. {
  4566.   if (iCity != aCity)
  4567.   {
  4568.     iCity = aCity;
  4569.     IString eventData(iCity);
  4570.     notifyObservers(INotificationEvent(cityId, *this,
  4571.                     true, (void*)&eventData));
  4572.   } /* endif */
  4573.   return *this;
  4574. }
  4575.  
  4576. /*------------------------------------------------------------------------------
  4577. | IAddress::state                                                              |
  4578. |                                                                              |
  4579. | Returns the state attribute.                                                 |
  4580. ------------------------------------------------------------------------------*/
  4581. IString IAddress::state () const
  4582. {
  4583.   return iState;
  4584. }
  4585.  
  4586. /*------------------------------------------------------------------------------
  4587. | IAddress::setState                                                           |
  4588. |                                                                              |
  4589. | Sets the state attribute.                                                    |
  4590. ------------------------------------------------------------------------------*/
  4591. IAddress& IAddress::setState (const IString& aState)
  4592. {
  4593.   if (iState != aState)
  4594.   {
  4595.     iState = aState;
  4596.     IString eventData(iState);
  4597.     notifyObservers(INotificationEvent(stateId, *this,
  4598.                     true, (void*)&eventData));
  4599.   } /* endif */
  4600.   return *this;
  4601. }
  4602.  
  4603. /*------------------------------------------------------------------------------
  4604. | IAddress::zip                                                                |
  4605. |                                                                              |
  4606. | Returns the zip attribute.                                                   |
  4607. ------------------------------------------------------------------------------*/
  4608. IString IAddress::zip () const
  4609. {
  4610.   return iZip;
  4611. }
  4612.  
  4613. /*------------------------------------------------------------------------------
  4614. | IAddress::setZip                                                             |
  4615. |                                                                              |
  4616. | Sets the zip attribute.                                                      |
  4617. ------------------------------------------------------------------------------*/
  4618. IAddress& IAddress::setZip (const IString& aZip)
  4619. {
  4620.   if (iZip != aZip)
  4621.   {
  4622.     iZip = aZip;
  4623.     IString eventData(iZip);
  4624.     notifyObservers(INotificationEvent(zipId, *this,
  4625.                     true, (void*)&eventData));
  4626.   } /* endif */
  4627.   return *this;
  4628. }
  4629.  
  4630. /*------------------------------------------------------------------------------
  4631. | IAddress::.setStreetToDefault                                                |
  4632. |                                                                              |
  4633. | Performs the setStreetToDefault action.                                      |
  4634. ------------------------------------------------------------------------------*/
  4635. IAddress& IAddress::setStreetToDefault ()
  4636. {
  4637.   setStreet("101 Main Street");
  4638.   return *this;
  4639. }
  4640.  
  4641. /*------------------------------------------------------------------------------
  4642. | IAddress::setCityToDefault                                                   |
  4643. |                                                                              |
  4644. | Performs the setCityToDefault action.                                        |
  4645. ------------------------------------------------------------------------------*/
  4646. IAddress& IAddress::setCityToDefault ()
  4647. {
  4648.   setCity("Hometown");
  4649.   return *this;
  4650. }
  4651.  
  4652. /*------------------------------------------------------------------------------
  4653. | IAddress::setStateToDefault                                                  |
  4654. |                                                                              |
  4655. | Performs the setStateToDefault action.                                       |
  4656. ------------------------------------------------------------------------------*/
  4657. IAddress& IAddress::setStateToDefault ()
  4658. {
  4659.   setState("NC");
  4660.   return *this;
  4661. }
  4662.  
  4663. /*------------------------------------------------------------------------------
  4664. | IAddress::setZipToDefault                                                    |
  4665. |                                                                              |
  4666. | Performs the setZipToDefault action.                                         |
  4667. ------------------------------------------------------------------------------*/
  4668. IAddress& IAddress::setZipToDefault ()
  4669. {
  4670.   setZip("27511");
  4671.   return *this;
  4672. }
  4673.  
  4674. /*------------------------------------------------------------------------------
  4675. | IAddress::setToDefault                                                       |
  4676. |                                                                              |
  4677. | Performs the setToDefault action.                                            |
  4678. ------------------------------------------------------------------------------*/
  4679. IAddress& IAddress::setToDefault ()
  4680. {
  4681.   setStreetToDefault();
  4682.   setCityToDefault();
  4683.   setStateToDefault();
  4684.   setZipToDefault();
  4685.   return *this;
  4686. }
  4687.  
  4688.  
  4689. ΓòÉΓòÉΓòÉ 11.7.3. IAddress Test Code (iadd.cxx) ΓòÉΓòÉΓòÉ
  4690.  
  4691. /*******************************************************************************
  4692. * FILE NAME: iadd.cxx                                                          *
  4693. *                                                                              *
  4694. * COPYRIGHT:                                                                   *
  4695. *   Licensed Materials - Property of IBM                                       *
  4696. *   (C) Copyright IBM Corporation 1994, 1995                                   *
  4697. *   All Rights Reserved                                                        *
  4698. *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
  4699. *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
  4700. *******************************************************************************/
  4701.  
  4702. #include <iadd.hpp>
  4703. #include <stdio.h>
  4704. #ifndef _IOBSERVR_
  4705.   #include <iobservr.hpp>
  4706. #endif
  4707. #ifndef _INOTIFEV_
  4708.   #include <inotifev.hpp>
  4709. #endif
  4710. #ifndef _IAPP_
  4711.   #include <iapp.hpp>
  4712. #endif
  4713.  
  4714. class IAddressTest : public IStandardNotifier
  4715. {
  4716. public:
  4717.   IAddressTest () {}
  4718.   ~IAddressTest () {}
  4719.  
  4720.   streetChangedAction()
  4721.   { printf("The Street Attribute has been changed\n"); }
  4722.  
  4723.   cityChangedAction()
  4724.   { printf("The City Attribute has been changed\n"); }
  4725.  
  4726.   stateChangedAction()
  4727.   { printf("The State Attribute has been changed\n"); }
  4728.  
  4729.   zipChangedAction()
  4730.   { printf("The Zip Attribute has been changed\n"); }
  4731. } ;
  4732.  
  4733. //**************************************************************************
  4734. // StreetConnection Event-to-Action Connection Class
  4735. //**************************************************************************
  4736. class StreetConnection : public IObserver
  4737. {
  4738. public:
  4739.   StreetConnection(IAddressTest * newTestTarget)
  4740.   { iTestTarget = newTestTarget;                  //Save source } ;
  4741.   ~StreetConnection () {};
  4742.  
  4743. protected:
  4744.   IObserver& dispatchNotificationEvent  (const INotificationEvent& anEvent)
  4745.   {
  4746.     if (IAddress::streetId == anEvent.notificationId())
  4747.     {
  4748.       try {iTestTarget->streetChangedAction();}
  4749.       catch (IException& exc) {}
  4750.     }
  4751.     return *this;
  4752.   } ;
  4753.   IAddressTest * iTestTarget;
  4754. } ;
  4755.  
  4756. //**************************************************************************
  4757. // CityConnection Event-to-Action Connection Class
  4758. //**************************************************************************
  4759. class CityConnection : public IObserver
  4760. {
  4761. public:
  4762.   CityConnection(IAddressTest * newTestTarget)
  4763.   { iTestTarget = newTestTarget;                  //Save source } ;
  4764.   ~CityConnection () {};
  4765.  
  4766. protected:
  4767.   IObserver& dispatchNotificationEvent  (const INotificationEvent& anEvent)
  4768.   {
  4769.     if (IAddress::cityId == anEvent.notificationId())
  4770.     {
  4771.       try {iTestTarget->cityChangedAction();}
  4772.       catch (IException& exc) {}
  4773.     }
  4774.     return *this;
  4775.   } ;
  4776.   IAddressTest * iTestTarget;
  4777. } ;
  4778.  
  4779. //**************************************************************************
  4780. // StateConnection Event-to-Action Connection Class
  4781. //**************************************************************************
  4782. class StateConnection : public IObserver
  4783. {
  4784. public:
  4785.   StateConnection(IAddressTest * newTestTarget)
  4786.   { iTestTarget = newTestTarget;                  //Save source } ;
  4787.   ~StateConnection () {};
  4788.  
  4789. protected:
  4790.   IObserver& dispatchNotificationEvent  (const INotificationEvent& anEvent)
  4791.   {
  4792.     if (IAddress::stateId == anEvent.notificationId())
  4793.     {
  4794.       try {iTestTarget->stateChangedAction();}
  4795.       catch (IException& exc) {}
  4796.     }
  4797.     return *this;
  4798.   } ;
  4799.   IAddressTest * iTestTarget;
  4800. } ;
  4801.  
  4802. //**************************************************************************
  4803. // ZipConnection Event-to-Action Connection Class
  4804. //**************************************************************************
  4805. class ZipConnection : public IObserver
  4806. {
  4807. public:
  4808.   ZipConnection(IAddressTest * newTestTarget)
  4809.   { iTestTarget = newTestTarget;                  //Save source } ;
  4810.   ~ZipConnection () {};
  4811.  
  4812. protected:
  4813.   IObserver& dispatchNotificationEvent  (const INotificationEvent& anEvent)
  4814.   {
  4815.     if (IAddress::zipId == anEvent.notificationId())
  4816.     {
  4817.       try {iTestTarget->zipChangedAction();}
  4818.       catch (IException& exc) {}
  4819.     }
  4820.     return *this;
  4821.   } ;
  4822.   IAddressTest * iTestTarget;
  4823. } ;
  4824.  
  4825. //*************************************************************************
  4826. // main  - Application entry point                                        *
  4827. //*************************************************************************
  4828. int main(int argc, char **argv)         //Main procedure with no parameters
  4829. {
  4830.   IApplication::current().              //Get current
  4831.     setArgs(argc, argv);                //  and set command line parameters
  4832.  
  4833.   IAddress * sourceNotifier;
  4834.   IAddressTest * testTarget;
  4835.   testTarget = new IAddressTest ();
  4836.   sourceNotifier = new IAddress ();
  4837.  
  4838.   {
  4839.     StreetConnection * iStreet = new StreetConnection (testTarget);
  4840.     iStreet->handleNotificationsFor(*sourceNotifier);
  4841.   }
  4842.   {
  4843.     CityConnection * iCity = new CityConnection (testTarget);
  4844.     iCity->handleNotificationsFor(*sourceNotifier);
  4845.   }
  4846.   {
  4847.     StateConnection * iState = new StateConnection (testTarget);
  4848.     iState->handleNotificationsFor(*sourceNotifier);
  4849.   }
  4850.   {
  4851.     ZipConnection * iZip = new ZipConnection (testTarget);
  4852.     iZip->handleNotificationsFor(*sourceNotifier);
  4853.   }
  4854.   sourceNotifier->enableNotification();
  4855.   sourceNotifier->setStreet("");
  4856.   sourceNotifier->setCity("");
  4857.   sourceNotifier->setState("");
  4858.   sourceNotifier->setZip("");
  4859.  
  4860.   delete sourceNotifier;
  4861.   delete testTarget;
  4862. } /* end main */
  4863.  
  4864.  
  4865. ΓòÉΓòÉΓòÉ 12. VisualAge C++ Classes by Include and Data File ΓòÉΓòÉΓòÉ
  4866.  
  4867.  
  4868.  Name                                          Include File    Data File
  4869.  
  4870.  AnyNetSockets                                 anysock.hh      VBSOM
  4871.  
  4872.  AttributeDef                                  attribdf.hh     VBSOM
  4873.  
  4874.  BOA                                           boa.hh          VBSOM
  4875.  
  4876.  ConstantDef                                   constdef.hh     VBSOM
  4877.  
  4878.  Contained                                     containd.hh     VBSOM
  4879.  
  4880.  Container                                     containr.hh     VBSOM
  4881.  
  4882.  Context                                       cntxt.hh        VBSOM
  4883.  
  4884.  dictKeyCharPjw                                keycpjw.hh      VBSOM
  4885.  
  4886.  DrawingArea                                   darea.hpp       DArea
  4887.  
  4888.  ExceptionDef                                  excptdef.hh     VBSOM
  4889.  
  4890.  floatSamples                                  float.h         VBSample
  4891.  
  4892.  I0String                                      i0string.hpp
  4893.  
  4894.  IABag<..>                                     iabag.h         VBCC
  4895.  
  4896.  IAccelerator                                  iaccel.hpp
  4897.  
  4898.  IACollection<..>                              iacllct.h
  4899.  
  4900.  IAddress                                      iadd.hpp        VBSample
  4901.  
  4902.  IADeque<..>                                   iadeque.h       VBCC
  4903.  
  4904.  IAEqualityCollection<..>                      iaequal.h       VBCC
  4905.  
  4906.  IAEqualityKeyCollection<..>                   iaeqkey.h       VBCC
  4907.  
  4908.  IAEqualityKeySortedCollection<..>             iaeqksrt.h      VBCC
  4909.  
  4910.  IAEqualitySequence<..>                        iaeqseq.h       VBCC
  4911.  
  4912.  IAEqualitySortedCollection<..>                iaeqsrt.h       VBCC
  4913.  
  4914.  IAHeap<..>                                    iaheap.h        VBCC
  4915.  
  4916.  IAKeyBag<..>                                  iakeybag.h      VBCC
  4917.  
  4918.  IAKeyCollection<..>                           iakey.h         VBCC
  4919.  
  4920.  IAKeySet<..>                                  iakeyset.h      VBCC
  4921.  
  4922.  IAKeySortedBag<..>                            iaksbag.h       VBCC
  4923.  
  4924.  IAKeySortedCollection<..>                     iaksrt.h        VBCC
  4925.  
  4926.  IAKeySortedSet<..>                            iaksset.h       VBCC
  4927.  
  4928.  IAlias                                        ialias.hpp      VBRapSht
  4929.  
  4930.  IAliasClientMgr                               ialscmgr.hpp    VBRapSht
  4931.  
  4932.  IAMap<..>                                     iamap.h         VBCC
  4933.  
  4934.  IAnimatedButton                               ianimbut.hpp
  4935.  
  4936.  IAOrderedCollection<..>                       iaorder.h
  4937.  
  4938.  IApplication                                  iapp.hpp
  4939.  
  4940.  IAPriorityQueue<..>                           iaprioqu.h      VBCC
  4941.  
  4942.  IAQueue<..>                                   iaqueue.h       VBCC
  4943.  
  4944.  IARelation<..>                                iarel.h         VBCC
  4945.  
  4946.  IArrest                                       iarrest.hpp     VBRapSht
  4947.  
  4948.  IArrestClientMgr                              iarscmgr.hpp    VBRapSht
  4949.  
  4950.  IASequence<..>                                iaseq.h
  4951.  
  4952.  IASequentialCollection<..>                    iasqntl.h
  4953.  
  4954.  IASet<..>                                     iaset.h         VBCC
  4955.  
  4956.  IASortedBag<..>                               iasrtbag.h      VBCC
  4957.  
  4958.  IASortedCollection<..>                        iasrt.h         VBCC
  4959.  
  4960.  IASortedMap<..>                               iasrtmap.h      VBCC
  4961.  
  4962.  IASortedRelation<..>                          iasrtrel.h      VBCC
  4963.  
  4964.  IASortedSet<..>                               iasrtset.h      VBCC
  4965.  
  4966.  IAStack<..>                                   iastack.h       VBCC
  4967.  
  4968.  IBase                                         ibase.hpp
  4969.  
  4970.  IBaseComboBox                                 icombobs.hpp
  4971.  
  4972.  IBaseListBox                                  ilistbas.hpp
  4973.  
  4974.  IBaseSpinButton                               ispinbas.hpp
  4975.  
  4976.  IBitFlag                                      ibitflag.hpp
  4977.  
  4978.  IBitmapControl                                ibmpctl.hpp
  4979.  
  4980.  IButton                                       ibutton.hpp
  4981.  
  4982.  ICalcAdditionChip                             icalcac.hpp     icalcprt
  4983.  
  4984.  ICalcClearFunction                            icalcclr.hpp    icalcprt
  4985.  
  4986.  ICalcDivisionChip                             icalcdc.hpp     icalcprt
  4987.  
  4988.  ICalcEqualFunction                            icalceql.hpp    icalcprt
  4989.  
  4990.  ICalcFunction                                 icalcfnc.hpp    icalcprt
  4991.  
  4992.  ICalcMultiplicationChip                       icalcmc.hpp     icalcprt
  4993.  
  4994.  ICalcOperator                                 icalcop.hpp     icalcprt
  4995.  
  4996.  ICalcPU                                       icalcpu.hpp     icalcprt
  4997.  
  4998.  ICalcSubtractionChip                          icalcsc.hpp     icalcprt
  4999.  
  5000.  ICalcTally                                    icalctly.hpp    icalcprt
  5001.  
  5002.  ICanvas                                       icanvas.hpp
  5003.  
  5004.  ICheckBox                                     icheckbx.hpp
  5005.  
  5006.  ICircularSlider                               icslider.hpp
  5007.  
  5008.  ICLibErrorInfo                                iexcept.hpp
  5009.  
  5010.  IClipboard                                    iclipbrd.hpp
  5011.  
  5012.  ICollectionViewComboBox<..>                   icombovw.hpp
  5013.  
  5014.  ICollectionViewListBox<..>                    ilistcvw.hpp
  5015.  
  5016.  IColor                                        icolor.hpp
  5017.  
  5018.  IComboBox                                     icombobx.hpp
  5019.  
  5020.  ICompany                                      icompany.hpp    VBSample
  5021.  
  5022.  IContainerColumn                              icnrcol.hpp
  5023.  
  5024.  IContainerControl                             icnrctl.hpp
  5025.  
  5026.  IContainerObject                              icnrobj.hpp
  5027.  
  5028.  IControl                                      icontrol.hpp
  5029.  
  5030.  ICurrentApplication                           iapp.hpp
  5031.  
  5032.  ICurrentThread                                ithread.hpp
  5033.  
  5034.  ICustomButton                                 icustbut.hpp
  5035.  
  5036.  ICustomer                                     icust.hpp       VBSample
  5037.  
  5038.  IDate                                         idate.hpp
  5039.  
  5040.  IDynamicLinkLibrary                           ireslib.hpp
  5041.  
  5042.  IElemPointer<..>                              iptr.h          VBCC
  5043.  
  5044.  IEntryField                                   ientryfd.hpp
  5045.  
  5046.  IErrorInfo                                    iexcept.hpp
  5047.  
  5048.  IFileDialog                                   ifiledlg.hpp
  5049.  
  5050.  IFlyOverHelpHandler                           iflyhhdr.hpp
  5051.  
  5052.  IFlyText                                      iflytext.hpp
  5053.  
  5054.  IFont                                         ifont.hpp
  5055.  
  5056.  IFontDialog                                   ifontdlg.hpp
  5057.  
  5058.  IFrameWindow                                  iframe.hpp
  5059.  
  5060.  IGraphicPushButton                            igraphbt.hpp
  5061.  
  5062.  IGroupBox                                     igroupbx.hpp
  5063.  
  5064.  IGUIErrorInfo                                 iexcept.hpp
  5065.  
  5066.  IHandle                                       ihandle.hpp
  5067.  
  5068.  IHandler                                      ihandler.hpp
  5069.  
  5070.  IHelpWindow                                   ihelp.hpp
  5071.  
  5072.  IIconControl                                  iiconctl.hpp
  5073.  
  5074.  IInfoArea                                     iinfoa.hpp
  5075.  
  5076.  IKeypad                                       ikeypad.hpp     icalcprt
  5077.  
  5078.  ILastSeen                                     ilstseen.hpp    VBRapSht
  5079.  
  5080.  ILastSeenClientMgr                            ilscmgr.hpp     VBRapSht
  5081.  
  5082.  IListBox                                      ilistbox.hpp
  5083.  
  5084.  IMenu                                         imenu.hpp
  5085.  
  5086.  IMenuBar                                      imenubar.hpp
  5087.  
  5088.  IMenuCascade                                  imnItem.hpp
  5089.  
  5090.  IMenuHandler                                  imenuhdr.hpp
  5091.  
  5092.  IMenuItem                                     imnitem.hpp
  5093.  
  5094.  IMenuSeparator                                imnItem.hpp
  5095.  
  5096.  IMessageBox                                   imsgbox.hpp
  5097.  
  5098.  IMM24FramesPerSecondTime                      immtime.hpp     VBMM
  5099.  
  5100.  IMM25FramesPerSecondTime                      immtime.hpp     VBMM
  5101.  
  5102.  IMM30FramesPerSecondTime                      immtime.hpp     VBMM
  5103.  
  5104.  IMMAmpMixer                                   immamix.hpp     VBMM
  5105.  
  5106.  IMMAudioBuffer                                immabuf.hpp     VBMM
  5107.  
  5108.  IMMAudioCD                                    immcdda.hpp     VBMM
  5109.  
  5110.  IMMAudioCDContents                            immcdda.hpp     VBMM
  5111.  
  5112.  IMMAudioHeader                                immahead.hpp    VBMM
  5113.  
  5114.  IMMCDXA                                       immcdxa.hpp     VBMM
  5115.  
  5116.  IMMConfigurableAudio                          immaud.hpp      VBMM
  5117.  
  5118.  IMMDevice                                     immdev.hpp      VBMM
  5119.  
  5120.  IMMDigitalVideo                               immdigvd.hpp    VBMM
  5121.  
  5122.  IMMErrorInfo                                  immexcpt.hpp    VBMM
  5123.  
  5124.  IMMFileMedia                                  immfilem.hpp    VBMM
  5125.  
  5126.  IMMHourMinSecFrameTime                        immtime.hpp     VBMM
  5127.  
  5128.  IMMHourMinSecTime                             immtime.hpp     VBMM
  5129.  
  5130.  IMMMasterAudio                                immmaud.hpp     VBMM
  5131.  
  5132.  IMMMillisecondTime                            immtime.hpp     VBMM
  5133.  
  5134.  IMMMinSecFrameTime                            immtime.hpp     VBMM
  5135.  
  5136.  IMMPlayableDevice                             immplayd.hpp    VBMM
  5137.  
  5138.  IMMPlayerPanel                                immplypn.hpp    VBMM
  5139.  
  5140.  IMMRecordable                                 immrecrd.hpp    VBMM
  5141.  
  5142.  IMMRemovableMedia                             immremed.hpp    VBMM
  5143.  
  5144.  IMMSequencer                                  immsequ.hpp     VBMM
  5145.  
  5146.  IMMSpeed                                      immspeed.hpp    VBMM
  5147.  
  5148.  IMMTime                                       immtime.hpp     VBMM
  5149.  
  5150.  IMMTrackMinSecFrameTime                       immttime.hpp    VBMM
  5151.  
  5152.  IMMWaveAudio                                  immwave.hpp     VBMM
  5153.  
  5154.  IMngPointer<..>                               iptr.h          VBCC
  5155.  
  5156.  ImplementationDef                             impldef.hh      VBSOM
  5157.  
  5158.  ImplRepository                                implrep.hh      VBSOM
  5159.  
  5160.  IMultiCellCanvas                              imcelcv.hpp
  5161.  
  5162.  IMultiLineEdit                                imle.hpp
  5163.  
  5164.  INotebook                                     inotebk.hpp
  5165.  
  5166.  INotebook::PageSettings                       inotebk.hpp
  5167.  
  5168.  INotifier                                     inotify.hpp
  5169.  
  5170.  InterfaceDef                                  intfacdf.hh     VBSOM
  5171.  
  5172.  INumericSpinButton                            ispinnum.hpp
  5173.  
  5174.  IObserver                                     iobservr.hpp
  5175.  
  5176.  IOrderedRecord                                iordrrec.hpp    VBSample
  5177.  
  5178.  ioSamples                                     io.h            VBSample
  5179.  
  5180.  IOutlineBox                                   ioutlbox.hpp
  5181.  
  5182.  IPair                                         ipoint.hpp
  5183.  
  5184.  IPartOrderedCollection<..>                    ipartccl.h      VBCC
  5185.  
  5186.  IPercentAvailable                             ipercent.hpp
  5187.  
  5188.  IPerson                                       iperson.hpp     VBRapSht
  5189.  
  5190.  IPoint                                        ipoint.hpp
  5191.  
  5192.  IPointArray                                   iptarray.hpp
  5193.  
  5194.  IPopUpMenu                                    ipopmenu.hpp
  5195.  
  5196.  IProfile                                      iprofile.hpp
  5197.  
  5198.  IProgressIndicator                            islider.hpp
  5199.  
  5200.  IPushButton                                   ipushbut.hpp
  5201.  
  5202.  IPXSockets                                    ipxsock.hh      VBSOM
  5203.  
  5204.  IRadioButton                                  iradiobt.hpp
  5205.  
  5206.  IRange                                        ipoint.hpp
  5207.  
  5208.  IRBag<..>                                     irbag.h         VBCC
  5209.  
  5210.  IRDeque<..>                                   irdeque.h       VBCC
  5211.  
  5212.  IRecord                                       irecord.hpp     VBSample
  5213.  
  5214.  IRectangle                                    irect.hpp
  5215.  
  5216.  IRefCounted                                   irefcnt.hpp
  5217.  
  5218.  IREqualitySequence<..>                        ireqseq.h       VBCC
  5219.  
  5220.  IResource                                     ireslock.hpp
  5221.  
  5222.  IResourceId                                   ireslib.hpp
  5223.  
  5224.  IResourceLibrary                              ireslib.hpp
  5225.  
  5226.  IRHeap<..>                                    irheap.h        VBCC
  5227.  
  5228.  IRKeyBag<..>                                  irkeybag.h      VBCC
  5229.  
  5230.  IRKeySet<..>                                  irkeyset.h      VBCC
  5231.  
  5232.  IRKeySortedBag<..>                            irksbag.h       VBCC
  5233.  
  5234.  IRKeySortedSet<..>                            irksset.h       VBCC
  5235.  
  5236.  IRMap<..>                                     irmap.h         VBCC
  5237.  
  5238.  IRPriorityQueue<..>                           irprioqu.h      VBCC
  5239.  
  5240.  IRQueue<..>                                   irqueue.h       VBCC
  5241.  
  5242.  IRRelation<..>                                irrel.h         VBCC
  5243.  
  5244.  IRSequence<..>                                irseq.h
  5245.  
  5246.  IRSet<..>                                     irset.h         VBCC
  5247.  
  5248.  IRSortedBag<..>                               irsrtbag.h      VBCC
  5249.  
  5250.  IRSortedMap<..>                               irsrtmap.h      VBCC
  5251.  
  5252.  IRSortedRelation<..>                          irsrtrel.h      VBCC
  5253.  
  5254.  IRSortedSet<..>                               irsrtset.h      VBCC
  5255.  
  5256.  IRStack<..>                                   irstack.h       VBCC
  5257.  
  5258.  IScrollBar                                    iscroll.hpp
  5259.  
  5260.  ISetCanvas                                    isetcv.hpp
  5261.  
  5262.  ISettingButton                                isetbut.hpp
  5263.  
  5264.  ISize                                         ipoint.hpp
  5265.  
  5266.  ISlider                                       islider.hpp
  5267.  
  5268.  ISplitCanvas                                  isplitcv.hpp
  5269.  
  5270.  IStandardNotifier                             istdntfy.hpp
  5271.  
  5272.  IStaticText                                   istattxt.hpp
  5273.  
  5274.  IString                                       istring.hpp
  5275.  
  5276.  IStringGenerator<..>                          istrgen.hpp
  5277.  
  5278.  ISubmenu                                      isubmenu.hpp
  5279.  
  5280.  ISuspect                                      isuspect.hpp    VBRapSht
  5281.  
  5282.  ISuspectClientMgr                             isuscmgr.hpp    VBRapSht
  5283.  
  5284.  ISuspectWindowFactory                         isuswfac.hpp    VBRapSht
  5285.  
  5286.  ISystemErrorInfo                              iexcept.hpp
  5287.  
  5288.  ITextControl                                  itextctl.hpp
  5289.  
  5290.  ITextSpinButton                               ispintxt.hpp
  5291.  
  5292.  ITime                                         itime.hpp
  5293.  
  5294.  ITitle                                        ititle.hpp
  5295.  
  5296.  IToolBar                                      itbar.hpp
  5297.  
  5298.  IToolBarButton                                itbarbut.hpp
  5299.  
  5300.  ITrace                                        itrace.hpp
  5301.  
  5302.  IVAvlKeySortedSet<..>                         ivksset.h       VBCC
  5303.  
  5304.  IVBag<..>                                     ivbag.h         VBCC
  5305.  
  5306.  IVBagOnBase<..>                               ivbag.h         VBCC
  5307.  
  5308.  IVBagOnBSTKeySortedSet<..>                    ivbag.h         VBCC
  5309.  
  5310.  IVBagOnHashKeySet<..>                         ivbag.h         VBCC
  5311.  
  5312.  IVBagOnSortedDilutedSequence<..>              ivbag.h         VBCC
  5313.  
  5314.  IVBagOnSortedLinkedSequence<..>               ivbag.h         VBCC
  5315.  
  5316.  IVBagOnSortedTabularSequence<..>              ivbag.h         VBCC
  5317.  
  5318.  IVBase                                        ivbase.hpp
  5319.  
  5320.  IVBBooleanPart                                ivbbool.hpp     VBSample
  5321.  
  5322.  IVBCheckMenuHandler                           ivbmenuh.hpp
  5323.  
  5324.  IVBCnrPopupMenuHandler                        ivbmenuh.hpp
  5325.  
  5326.  IVBContainerControl<..>                       ivbcnr.h
  5327.  
  5328.  IVBDataTypePart                               ivbdtype.hpp    VBSample
  5329.  
  5330.  IVBDoublePart                                 ivbdbl.hpp      VBSample
  5331.  
  5332.  IVBDragDropHandler                            ivbdragh.hpp
  5333.  
  5334.  IVBFactory                                    VBBase          abstract
  5335.  
  5336.  IVBFileDialog                                 ivbfiled.hpp
  5337.  
  5338.  IVBFlyText                                    ivbfly.hpp
  5339.  
  5340.  IVBFontDialog                                 ivbfontd.hpp
  5341.  
  5342.  IVBLongPart                                   ivblong.hpp     VBSample
  5343.  
  5344.  IVBMinSize                                    ipoint.hpp      vbbase
  5345.  
  5346.  IVBMinSizeViewPortHandler                     ivbvpmsz.hpp
  5347.  
  5348.  IVBNotebookPage                               ivbnbkpg.hpp
  5349.  
  5350.  IVBPopupMenuHandler                           ivbmenuh.hpp
  5351.  
  5352.  IVBShortPart                                  ivbshort.hpp    VBSample
  5353.  
  5354.  IVBSTKeySortedSet<..>                         ivksset.h       VBCC
  5355.  
  5356.  IVBStringPart                                 ivbstrng.hpp    VBSample
  5357.  
  5358.  IVBTitle                                      ititle.hpp
  5359.  
  5360.  IVBUnsignedLongPart                           ivbulong.hpp    VBSample
  5361.  
  5362.  IVBUnsignedShortPart                          ivbushrt.hpp    VBSample
  5363.  
  5364.  IVBVariableClass<..>                          ivbvcls.h
  5365.  
  5366.  IVBVariableClassBase                          ivbvclss.hpp
  5367.  
  5368.  IVBVariableClassPointer<..>                   ivbvclsp.h
  5369.  
  5370.  IVBVariablePart<..>                           ivbvprt.h
  5371.  
  5372.  IVBVariablePartBase                           ivbvpart.hpp
  5373.  
  5374.  IVBVariablePartPointer<..>                    ivbvprtp.h
  5375.  
  5376.  IVDeque<..>                                   ivdeque.h       VBCC
  5377.  
  5378.  IVDequeOnBase<..>                             ivdeque.h       VBCC
  5379.  
  5380.  IVDequeOnDilutedSequence<..>                  ivdeque.h       VBCC
  5381.  
  5382.  IVDilutedSequence<..>                         ivseq.h         VBCC
  5383.  
  5384.  IVEqualitySequence<..>                        iveqseq.h       VBCC
  5385.  
  5386.  IVEqualitySequenceOnBase<..>                  iveqseq.h       VBCC
  5387.  
  5388.  IVEqualitySequenceOnDilutedSequence<..>       iveqseq.h       VBCC
  5389.  
  5390.  IVEqualitySequenceOnTabularSequence<..>       iveqseq.h       VBCC
  5391.  
  5392.  IVGAvlKeySortedSet<..>                        ivksset.h       VBCC
  5393.  
  5394.  IVGBag<..>                                    ivbag.h         VBCC
  5395.  
  5396.  IVGBagOnBSTKeySortedSet<..>                   ivbag.h         VBCC
  5397.  
  5398.  IVGBagOnHashKeySet<..>                        ivbag.h         VBCC
  5399.  
  5400.  IVGBagOnSortedDilutedSequence<..>             ivbag.h         VBCC
  5401.  
  5402.  IVGBagOnSortedLinkedSequence<..>              ivbag.h         VBCC
  5403.  
  5404.  IVGBagOnSortedTabularSequence<..>             ivbag.h         VBCC
  5405.  
  5406.  IVGBSTKeySortedSet<..>                        ivksset.h       VBCC
  5407.  
  5408.  IVGDeque<..>                                  ivdeque.h       VBCC
  5409.  
  5410.  IVGDequeOnDilutedSequence<..>                 ivdeque.h       VBCC
  5411.  
  5412.  IVGDilutedSequence<..>                        ivseq.h         VBCC
  5413.  
  5414.  IVGEqualitySequence<..>                       iveqseq.h       VBCC
  5415.  
  5416.  IVGEqualitySequenceOnDilutedSequence<..>      iveqseq.h       VBCC
  5417.  
  5418.  IVGEqualitySequenceOnTabularSequence<..>      iveqseq.h       VBCC
  5419.  
  5420.  IVGHashKeyBag<..>                             ivkeybag.h      VBCC
  5421.  
  5422.  IVGHashKeySet<..>                             ivkeyset.h      VBCC
  5423.  
  5424.  IVGHeap<..>                                   ivheap.h        VBCC
  5425.  
  5426.  IVGHeapOnDilutedSequence<..>                  ivheap.h        VBCC
  5427.  
  5428.  IVGKeyBag<..>                                 ivkeybag.h      VBCC
  5429.  
  5430.  IVGKeySet<..>                                 ivkeyset.h      VBCC
  5431.  
  5432.  IVGKeySetOnBSTKeySortedSet<..>                ivkeyset.h      VBCC
  5433.  
  5434.  IVGKeySetOnSortedDilutedSequence<..>          ivkeyset.h      VBCC
  5435.  
  5436.  IVGKeySetOnSortedLinkedSequence<..>           ivkeyset.h      VBCC
  5437.  
  5438.  IVGKeySetOnSortedTabularSequence<..>          ivkeyset.h      VBCC
  5439.  
  5440.  IVGKeySortedBag<..>                           ivksbag.h       VBCC
  5441.  
  5442.  IVGKeySortedBagOnSortedDilutedSequence<..>    ivksbag.h       VBCC
  5443.  
  5444.  IVGKeySortedBagOnSortedTabularSequence<..>    ivksbag.h       VBCC
  5445.  
  5446.  IVGKeySortedSet<..>                           ivksset.h       VBCC
  5447.  
  5448.  IVGKeySortedSetOnSortedDilutedSequence<..>    ivksset.h       VBCC
  5449.  
  5450.  IVGKeySortedSetOnSortedLinkedSequence<..>     ivksset.h       VBCC
  5451.  
  5452.  IVGKeySortedSetOnSortedTabularSequence<..>    ivksset.h       VBCC
  5453.  
  5454.  IVGLinkedSequence<..>                         ivseq.h         VBCC
  5455.  
  5456.  IVGMap<..>                                    ivmap.h         VBCC
  5457.  
  5458.  IVGMapOnBSTKeySortedMap<..>                   ivsrtmap.h      VBCC
  5459.  
  5460.  IVGMapOnBSTKeySortedSet<..>                   ivmap.h         VBCC
  5461.  
  5462.  IVGMapOnHashKeySet<..>                        ivmap.h         VBCC
  5463.  
  5464.  IVGMapOnSortedDilutedSequence<..>             ivmap.h         VBCC
  5465.  
  5466.  IVGMapOnSortedLinkedSequence<..>              ivmap.h         VBCC
  5467.  
  5468.  IVGMapOnSortedTabularSequence<..>             ivmap.h         VBCC
  5469.  
  5470.  IVGPriorityQueue<..>                          ivprioqu.h      VBCC
  5471.  
  5472.  IVGQueue<..>                                  ivqueue.h       VBCC
  5473.  
  5474.  IVGQueueOnDilutedSequence<..>                 ivqueue.h       VBCC
  5475.  
  5476.  IVGQueueOnTabularSequence<..>                 ivqueue.h       VBCC
  5477.  
  5478.  IVGRelation<..>                               ivrel.h         VBCC
  5479.  
  5480.  IVGSequence<..>                               ivseq.h
  5481.  
  5482.  IVGSet<..>                                    ivset.h         VBCC
  5483.  
  5484.  IVGSetOnBSTKeySortedSet<..>                   ivset.h         VBCC
  5485.  
  5486.  IVGSetOnHashKeySet<..>                        ivset.h         VBCC
  5487.  
  5488.  IVGSetOnSortedDilutedSequence<..>             ivset.h         VBCC
  5489.  
  5490.  IVGSetOnSortedLinkedSequence<..>              ivset.h         VBCC
  5491.  
  5492.  IVGSetOnSortedTabularSequence<..>             ivset.h         VBCC
  5493.  
  5494.  IVGSortedBag<..>                              ivsrtbag.h      VBCC
  5495.  
  5496.  IVGSortedBagOnSortedDilutedSequence<..>       ivsrtbag.h      VBCC
  5497.  
  5498.  IVGSortedBagOnSortedLinkedSequence<..>        ivsrtbag.h      VBCC
  5499.  
  5500.  IVGSortedBagOnSortedTabularSequence<..>       ivsrtbag.h      VBCC
  5501.  
  5502.  IVGSortedMap<..>                              ivsrtmap.h      VBCC
  5503.  
  5504.  IVGSortedMapOnSortedDilutedSequence<..>       ivsrtmap.h      VBCC
  5505.  
  5506.  IVGSortedMapOnSortedLinkedSequence<..>        ivsrtmap.h      VBCC
  5507.  
  5508.  IVGSortedMapOnSortedTabularSequence<..>       ivsrtmap.h      VBCC
  5509.  
  5510.  IVGSortedRelation<..>                         ivsrtrel.h      VBCC
  5511.  
  5512.  IVGSortedRelationOnSortedDilutedSequence<..>  ivsrtrel.h      VBCC
  5513.  
  5514.  IVGSortedRelationOnSortedTabularSequence<..>  ivsrtrel.h      VBCC
  5515.  
  5516.  IVGSortedSet<..>                              ivsrtset.h      VBCC
  5517.  
  5518.  IVGSortedSetOnBSTKeySortedSet<..>             ivsrtset.h      VBCC
  5519.  
  5520.  IVGSortedSetOnSortedDilutedSequence<..>       ivsrtset.h      VBCC
  5521.  
  5522.  IVGSortedSetOnSortedLinkedSequence<..>        ivsrtset.h      VBCC
  5523.  
  5524.  IVGSortedSetOnSortedTabularSequence<..>       ivsrtset.h      VBCC
  5525.  
  5526.  IVGStack<..>                                  ivstack.h       VBCC
  5527.  
  5528.  IVGStackOnDilutedSequence<..>                 ivstack.h       VBCC
  5529.  
  5530.  IVGStackOnTabularSequence<..>                 ivstack.h       VBCC
  5531.  
  5532.  IVGTabularSequence<..>                        ivseq.h         VBCC
  5533.  
  5534.  IVHashKeyBag<..>                              ivkeybag.h      VBCC
  5535.  
  5536.  IVHashKeySet<..>                              ivkeyset.h      VBCC
  5537.  
  5538.  IVHeap<..>                                    ivheap.h        VBCC
  5539.  
  5540.  IVHeapOnBase<..>                              ivheap.h        VBCC
  5541.  
  5542.  IVHeapOnDilutedSequence<..>                   ivheap.h        VBCC
  5543.  
  5544.  IViewPort                                     ivport.hpp
  5545.  
  5546.  IVKeyBag<..>                                  ivkeybag.h      VBCC
  5547.  
  5548.  IVKeyBagOnBase<..>                            ivkeybag.h      VBCC
  5549.  
  5550.  IVKeySet<..>                                  ivkeyset.h      VBCC
  5551.  
  5552.  IVKeySetOnBase<..>                            ivkeyset.h      VBCC
  5553.  
  5554.  IVKeySetOnBSTKeySortedSet<..>                 ivkeyset.h      VBCC
  5555.  
  5556.  IVKeySetOnSortedDilutedSequence<..>           ivkeyset.h      VBCC
  5557.  
  5558.  IVKeySetOnSortedLinkedSequence<..>            ivkeyset.h      VBCC
  5559.  
  5560.  IVKeySetOnSortedTabularSequence<..>           ivkeyset.h      VBCC
  5561.  
  5562.  IVKeySortedBag<..>                            ivksbag.h       VBCC
  5563.  
  5564.  IVKeySortedBagOnBase<..>                      ivksbag.h       VBCC
  5565.  
  5566.  IVKeySortedBagOnSortedDilutedSequence<..>     ivksbag.h       VBCC
  5567.  
  5568.  IVKeySortedBagOnSortedTabularSequence<..>     ivksbag.h       VBCC
  5569.  
  5570.  IVKeySortedSet<..>                            ivksset.h       VBCC
  5571.  
  5572.  IVKeySortedSetOnBase<..>                      ivksset.h       VBCC
  5573.  
  5574.  IVKeySortedSetOnSortedLinkedSequence<..>      ivksset.h       VBCC
  5575.  
  5576.  IVKeySortedSetOnSortedTabularSequence<..>     ivksset.h       VBCC
  5577.  
  5578.  IVLinkedSequence<..>                          ivseq.h         VBCC
  5579.  
  5580.  IVMap<..>                                     ivmap.h         VBCC
  5581.  
  5582.  IVMapOnBase<..>                               ivmap.h         VBCC
  5583.  
  5584.  IVMapOnBSTKeySortedSet<..>                    ivmap.h         VBCC
  5585.  
  5586.  IVMapOnHashKeySet<..>                         ivmap.h         VBCC
  5587.  
  5588.  IVMapOnSortedDilutedSequence<..>              ivmap.h         VBCC
  5589.  
  5590.  IVMapOnSortedLinkedSequence<..>               ivmap.h         VBCC
  5591.  
  5592.  IVMapOnSortedTabularSequence<..>              ivmap.h         VBCC
  5593.  
  5594.  IVPriorityQueue<..>                           ivprioqu.h      VBCC
  5595.  
  5596.  IVPriorityQueueOnBase<..>                     ivprioqu.h      VBCC
  5597.  
  5598.  IVQueue<..>                                   ivqueue.h       VBCC
  5599.  
  5600.  IVQueueOnBase<..>                             ivqueue.h       VBCC
  5601.  
  5602.  IVQueueOnDilutedSequence<..>                  ivqueue.h       VBCC
  5603.  
  5604.  IVQueueOnTabularSequence<..>                  ivqueue.h       VBCC
  5605.  
  5606.  IVRelation<..>                                ivrel.h         VBCC
  5607.  
  5608.  IVRelationOnBase<..>                          ivrel.h         VBCC
  5609.  
  5610.  IVSequence<..>                                ivseq.h
  5611.  
  5612.  IVSequenceOnBase<..>                          ivseq.h
  5613.  
  5614.  IVSet<..>                                     ivset.h         VBCC
  5615.  
  5616.  IVSetOnBase<..>                               ivset.h         VBCC
  5617.  
  5618.  IVSetOnBSTKeySortedSet<..>                    ivset.h         VBCC
  5619.  
  5620.  IVSetOnHashKeySet<..>                         ivset.h         VBCC
  5621.  
  5622.  IVSetOnSortedDilutedSequence<..>              ivset.h         VBCC
  5623.  
  5624.  IVSetOnSortedLinkedSequence<..>               ivset.h         VBCC
  5625.  
  5626.  IVSetOnSortedTabularSequence<..>              ivset.h         VBCC
  5627.  
  5628.  IVSortedBag<..>                               ivsrtbag.h      VBCC
  5629.  
  5630.  IVSortedBagOnBase<..>                         ivsrtbag.h      VBCC
  5631.  
  5632.  IVSortedBagOnSortedDilutedSequence<..>        ivsrtbag.h      VBCC
  5633.  
  5634.  IVSortedBagOnSortedLinkedSequence<..>         ivsrtbag.h      VBCC
  5635.  
  5636.  IVSortedBagOnSortedTabularSequence<..>        ivsrtbag.h      VBCC
  5637.  
  5638.  IVSortedMap<..>                               ivsrtmap.h      VBCC
  5639.  
  5640.  IVSortedMapOnBase<..>                         ivsrtmap.h      VBCC
  5641.  
  5642.  IVSortedMapOnSortedDilutedSequence<..>        ivsrtmap.h      VBCC
  5643.  
  5644.  IVSortedMapOnSortedLinkedSequence<..>         ivsrtmap.h      VBCC
  5645.  
  5646.  IVSortedMapOnSortedTabularSequence<..>        ivsrtmap.h      VBCC
  5647.  
  5648.  IVSortedRelation<..>                          ivsrtrel.h      VBCC
  5649.  
  5650.  IVSortedRelationOnBase<..>                    ivsrtrel.h      VBCC
  5651.  
  5652.  IVSortedRelationOnSortedDilutedSequence<..>   ivsrtrel.h      VBCC
  5653.  
  5654.  IVSortedRelationOnSortedTabularSequence<..>   ivsrtrel.h      VBCC
  5655.  
  5656.  IVSortedSet<..>                               ivsrtset.h      VBCC
  5657.  
  5658.  IVSortedSetOnBase<..>                         ivsrtset.h      VBCC
  5659.  
  5660.  IVSortedSetOnBSTKeySortedSet<..>              ivsrtset.h      VBCC
  5661.  
  5662.  IVSortedSetOnSortedLinkedSequence<..>         ivsrtset.h      VBCC
  5663.  
  5664.  IVSortedSetOnSortedTabularSequence<..>        ivsrtset.h      VBCC
  5665.  
  5666.  IVStack<..>                                   ivstack.h       VBCC
  5667.  
  5668.  IVStackOnBase<..>                             ivstack.h       VBCC
  5669.  
  5670.  IVStackOnTabularSequence<..>                  ivstack.h       VBCC
  5671.  
  5672.  IVTabularSequence<..>                         ivseq.h         VBCC
  5673.  
  5674.  IWindow                                       iwindow.hpp
  5675.  
  5676.  mathSamples                                   math.h          VBSample
  5677.  
  5678.  ModuleDef                                     moduledf.hh     VBSOM
  5679.  
  5680.  M_SOMPPersistentObject                        po.hh           VBSOM
  5681.  
  5682.  NBSockets                                     nbsock.hh       VBSOM
  5683.  
  5684.  NVList                                        nvlist.hh       VBSOM
  5685.  
  5686.  OAContract                                    Contrctg.hpp    OANONVIS
  5687.  
  5688.  OAContractor                                  Cntrctor.hpp    OANONVIS
  5689.  
  5690.  OASkill                                       skillg.hpp      OANONVIS
  5691.  
  5692.  OASkillBase                                   SkllBase.hpp    OANONVIS
  5693.  
  5694.  ObjectMgr                                     om.hh           VBSOM
  5695.  
  5696.  OperationDef                                  operatdf.hh     VBSOM
  5697.  
  5698.  ORB                                           orb.hh          VBSOM
  5699.  
  5700.  ParameterDef                                  paramdef.hh     VBSOM
  5701.  
  5702.  Principal                                     principl.hh     VBSOM
  5703.  
  5704.  Repository                                    repostry.hh     VBSOM
  5705.  
  5706.  Request                                       request.hh      VBSOM
  5707.  
  5708.  Sockets                                       somssock.hh     VBSOM
  5709.  
  5710.  SOMAPI                                        somapi.h        VBSOM
  5711.  
  5712.  SOMClass                                      somcls.hh       VBSOM
  5713.  
  5714.  SOMClassMgr                                   somcm.hh        VBSOM
  5715.  
  5716.  SOMDClientProxy                               somdcprx.hh     VBSOM
  5717.  
  5718.  SOMDMetaproxy                                 somdmprx.hh     VBSOM
  5719.  
  5720.  SOMDObject                                    somdobj.hh      VBSOM
  5721.  
  5722.  SOMDObjectMgr                                 somdom.hh       VBSOM
  5723.  
  5724.  SOMDServer                                    somdserv.hh     VBSOM
  5725.  
  5726.  SOMDServerMgr                                 servmgr.hh      VBSOM
  5727.  
  5728.  SOMEClientEvent                               clientev.hh     VBSOM
  5729.  
  5730.  SOMEEMan                                      eman.hh         VBSOM
  5731.  
  5732.  SOMEEMRegisterData                            emregdat.hh     VBSOM
  5733.  
  5734.  SOMEEvent                                     event.hh        VBSOM
  5735.  
  5736.  SOMESinkEvent                                 sinkev.hh       VBSOM
  5737.  
  5738.  SOMETimerEvent                                timerev.hh      VBSOM
  5739.  
  5740.  SOMEWorkProcEvent                             workprev.hh     VBSOM
  5741.  
  5742.  somf_MCollectible                             mcollect.hh     VBSOM
  5743.  
  5744.  somf_MLinkable                                mlink.hh        VBSOM
  5745.  
  5746.  somf_MOrderableCollectible                    morder.hh       VBSOM
  5747.  
  5748.  somf_TAssoc                                   tassoc.hh       VBSOM
  5749.  
  5750.  somf_TCollectibleLong                         tclong.hh       VBSOM
  5751.  
  5752.  somf_TCollection                              tcollect.hh     VBSOM
  5753.  
  5754.  somf_TDeque                                   tdeq.hh         VBSOM
  5755.  
  5756.  somf_TDequeIterator                           tdeqitr.hh      VBSOM
  5757.  
  5758.  somf_TDequeLinkable                           tdeqlink.hh     VBSOM
  5759.  
  5760.  somf_TDictionary                              tdict.hh        VBSOM
  5761.  
  5762.  somf_TDictionaryIterator                      tdictitr.hh     VBSOM
  5763.  
  5764.  somf_THashTable                               thash.hh        VBSOM
  5765.  
  5766.  somf_THashTableIterator                       thashitr.hh     VBSOM
  5767.  
  5768.  somf_TIterator                                titeratr.hh     VBSOM
  5769.  
  5770.  somf_TPrimitiveLinkedList                     tpll.hh         VBSOM
  5771.  
  5772.  somf_TPrimitiveLinkedListIterator             tpllitr.hh      VBSOM
  5773.  
  5774.  somf_TPriorityQueue                           tpq.hh          VBSOM
  5775.  
  5776.  somf_TPriorityQueueIterator                   tpqitr.hh       VBSOM
  5777.  
  5778.  somf_TSequence                                tseq.hh         VBSOM
  5779.  
  5780.  somf_TSequenceIterator                        tseqitr.hh      VBSOM
  5781.  
  5782.  somf_TSet                                     tset.hh         VBSOM
  5783.  
  5784.  somf_TSetIterator                             tsetitr.hh      VBSOM
  5785.  
  5786.  somf_TSortedSequence                          tss.hh          VBSOM
  5787.  
  5788.  somf_TSortedSequenceIterator                  tssitr.hh       VBSOM
  5789.  
  5790.  somf_TSortedSequenceNode                      tssnode.hh      VBSOM
  5791.  
  5792.  SOMMBeforeAfter                               sombacls.hh     VBSOM
  5793.  
  5794.  SOMMBeforeAfterDispatcher                     sombadis.hh     VBSOM
  5795.  
  5796.  SOMMCooperative                               sommeta.hh      VBSOM
  5797.  
  5798.  SOMMCooperativeRedispatched                   sommeta.hh      VBSOM
  5799.  
  5800.  SOMMCooperativeSistered                       sommeta.hh      VBSOM
  5801.  
  5802.  SOMMSingleInstance                            snglicls.hh     VBSOM
  5803.  
  5804.  SOMMTraced                                    somtrcls.hh     VBSOM
  5805.  
  5806.  SOMOA                                         somoa.hh        VBSOM
  5807.  
  5808.  SOMObject                                     somobj.hh       VBSOM
  5809.  
  5810.  SOMPAscii                                     fsagm.hh        VBSOM
  5811.  
  5812.  SOMPAsciiMediaInterface                       fmi.hh          VBSOM
  5813.  
  5814.  SOMPAttrEncoderDecoder                        defedidl.hh     VBSOM
  5815.  
  5816.  SOMPBinary                                    fsgm.hh         VBSOM
  5817.  
  5818.  SOMPBinaryFileMedia                           fmib.hh         VBSOM
  5819.  
  5820.  SOMPEncoderDecoderAbstract                    eda.hh          VBSOM
  5821.  
  5822.  SOMPFileMediaAbstract                         fma.hh          VBSOM
  5823.  
  5824.  SOMPIdAssigner                                poid.hh         VBSOM
  5825.  
  5826.  SOMPIdAssignerAbstract                        poida.hh        VBSOM
  5827.  
  5828.  SOMPIOGroup                                   iogrp.hh        VBSOM
  5829.  
  5830.  SOMPIOGroupMgrAbstract                        iogma.hh        VBSOM
  5831.  
  5832.  SOMPKeyedSet                                  srkset.hh       VBSOM
  5833.  
  5834.  SOMPMediaInterfaceAbstract                    mia.hh          VBSOM
  5835.  
  5836.  SOMPNameSpaceMgr                              nsma.hh         VBSOM
  5837.  
  5838.  SOMPObjectSet                                 objset.hh       VBSOM
  5839.  
  5840.  SOMPPersistentId                              pid.hh          VBSOM
  5841.  
  5842.  SOMPPersistentObject                          po.hh           VBSOM
  5843.  
  5844.  SOMPPersistentStorageMgr                      psma.hh         VBSOM
  5845.  
  5846.  SOMR                                          somr.hh         VBSOM
  5847.  
  5848.  SOMRLinearizable                              linear.hh       VBSOM
  5849.  
  5850.  SOMRNameable                                  nameable.hh     VBSOM
  5851.  
  5852.  SOMRReplicable                                somrmcls.hh     VBSOM
  5853.  
  5854.  SOMRReplicableObject                          somrcls.hh      VBSOM
  5855.  
  5856.  SOMRReplicbl                                  replicbl.hh     VBSOM
  5857.  
  5858.  SOMStringTableC                               somstrt.hh      VBSOM
  5859.  
  5860.  SOMTAttributeEntryC                           scattrib.hh     VBSOM
  5861.  
  5862.  SOMTBaseClassEntryC                           scbase.hh       VBSOM
  5863.  
  5864.  SOMTClassEntryC                               scclass.hh      VBSOM
  5865.  
  5866.  SOMTCommonEntryC                              sccommon.hh     VBSOM
  5867.  
  5868.  SOMTConstEntryC                               scconst.hh      VBSOM
  5869.  
  5870.  SOMTDataEntryC                                scdata.hh       VBSOM
  5871.  
  5872.  SOMTEmitC                                     scemit.hh       VBSOM
  5873.  
  5874.  SOMTEntryC                                    scentry.hh      VBSOM
  5875.  
  5876.  SOMTEnumEntryC                                scenum.hh       VBSOM
  5877.  
  5878.  SOMTEnumNameEntryC                            scenumnm.hh     VBSOM
  5879.  
  5880.  SOMTMetaClassEntryC                           scmeta.hh       VBSOM
  5881.  
  5882.  SOMTMethodEntryC                              scmethod.hh     VBSOM
  5883.  
  5884.  SOMTModuleEntryC                              scmodule.hh     VBSOM
  5885.  
  5886.  SOMTParameterEntryC                           scparm.hh       VBSOM
  5887.  
  5888.  SOMTPassthruEntryC                            scpass.hh       VBSOM
  5889.  
  5890.  SOMTSequenceEntryC                            scseqnce.hh     VBSOM
  5891.  
  5892.  SOMTStringEntryC                              scstring.hh     VBSOM
  5893.  
  5894.  SOMTStructEntryC                              scstruct.hh     VBSOM
  5895.  
  5896.  SOMTTemplateOutputC                           sctmplt.hh      VBSOM
  5897.  
  5898.  SOMTTypedefEntryC                             sctdef.hh       VBSOM
  5899.  
  5900.  SOMTUnionEntryC                               scunion.hh      VBSOM
  5901.  
  5902.  SOMTUserDefinedTypeEntryC                     scusrtyp.hh     VBSOM
  5903.  
  5904.  SOMUTId                                       somida.hh       VBSOM
  5905.  
  5906.  SOMUTStringId                                 somsid.hh       VBSOM
  5907.  
  5908.  stdioSamples                                  stdio.h         VBSample
  5909.  
  5910.  stdlibSamples                                 stdlib.h        VBSample
  5911.  
  5912.  TCPIPSockets                                  tcpsock.hh      VBSOM
  5913.  
  5914.  TCPIPSockets32                                tcp32.hh        VBSOM
  5915.  
  5916.  TSIdentification                              tsident.hh      VBSOM
  5917.  
  5918.  TypeDef                                       typedef.hh      VBSOM
  5919.  
  5920.  
  5921. ΓòÉΓòÉΓòÉ 13. Glossary ΓòÉΓòÉΓòÉ
  5922.  
  5923.  
  5924. ΓòÉΓòÉΓòÉ <hidden> Glossary description ΓòÉΓòÉΓòÉ
  5925.  
  5926. This glossary defines terms and abbreviations that are used in this book. If 
  5927. you do not find the term you are looking for, refer to the IBM Dictionary of 
  5928. Computing, New York:McGraw-Hill, 1994. 
  5929.  
  5930. This glossary includes terms and definitions from the American National 
  5931. Standard Dictionary for Information Systems, ANSI X3.172-1990, copyright 1990 
  5932. by the American National Standards Institute (ANSI). Copies may be purchased 
  5933. from the American National Standards Institute, 1430 Broadway, New York, New 
  5934. York 10018. 
  5935.  
  5936.  
  5937. ΓòÉΓòÉΓòÉ <hidden> Glossary listing ΓòÉΓòÉΓòÉ
  5938.  
  5939. A
  5940. abstract class
  5941. access
  5942. action
  5943. argument
  5944. attribute
  5945. attribute-to-action connection
  5946. attribute-to-attribute connection
  5947. attribute-to-member function connection
  5948. attribute-to-parameter connection
  5949. B
  5950. base class
  5951. behavior
  5952. C
  5953. caller
  5954. category
  5955. class
  5956. Class Editor
  5957. class hierarchy
  5958. class library
  5959. class member function
  5960. client area object
  5961. client object
  5962. collection
  5963. Common User Access (CUA)
  5964. composite part
  5965. Composition Editor
  5966. concrete class
  5967. connection
  5968. const
  5969. construction from parts
  5970. constructor
  5971. CUA
  5972. cursored emphasis
  5973. custom logic connection
  5974. D
  5975. data abstraction
  5976. data member
  5977. data model
  5978. data object
  5979. declaration
  5980. DEF file
  5981. derivation
  5982. destructor
  5983. DLL
  5984. dynamic link library (DLL)
  5985. E
  5986. encapsulation
  5987. event
  5988. event-to-action connection
  5989. event-to-attribute connection
  5990. event-to-member function connection
  5991. expansion area
  5992. F
  5993. feature
  5994. full attribute
  5995. free-form surface
  5996. G
  5997. graphical user interface (GUI)
  5998. GUI
  5999. H
  6000. handles
  6001. header file
  6002. I
  6003. inheritance
  6004. instance
  6005. L
  6006. legacy code
  6007. loaded
  6008. M
  6009. main part
  6010. member
  6011. member function
  6012. member function call
  6013. member function name
  6014. message
  6015. model
  6016. module definition file
  6017. N
  6018. nested class
  6019. nonvisual part
  6020. no-event attribute
  6021. no-set attribute
  6022. notebook part
  6023. O
  6024. object
  6025. object class
  6026. object factory
  6027. object-oriented programming
  6028. observer
  6029. operation
  6030. overloading
  6031. P
  6032. palette
  6033. parent class
  6034. part
  6035. part event
  6036. part event ID
  6037. part interface
  6038. Part Interface Editor
  6039. parts palette
  6040. preferred features
  6041. primary selection
  6042. private
  6043. process
  6044. program
  6045. protected
  6046. prototype
  6047. primitive part
  6048. process
  6049. property
  6050. pure virtual function
  6051. R
  6052. receiver
  6053. resource file
  6054. S
  6055. selection handles
  6056. server
  6057. service
  6058. settings view
  6059. sticky
  6060. structure
  6061. subpart
  6062. superclass
  6063. T
  6064. tear-off attribute
  6065. template
  6066. thread
  6067. tool bar
  6068. U
  6069. UI
  6070. unloaded
  6071. user interface (UI)
  6072. V
  6073. variable
  6074. view
  6075. virtual function
  6076. visual part
  6077. visual programming tool
  6078. W
  6079. white space
  6080. window
  6081.  
  6082.  
  6083. ΓòÉΓòÉΓòÉ <hidden> abstract class ΓòÉΓòÉΓòÉ
  6084.  
  6085. A class that provides common behavior across a set of subclasses but is not 
  6086. itself designed to have instances that work. An abstract class represents a 
  6087. concept; classes derived from it represent implementations of the concept. For 
  6088. example, IControl is the abstract base class for control view windows; the 
  6089. ICanvas and IListBox classes are controls derived from IControl. An abstract 
  6090. class must have at least one pure virtual function. 
  6091.  
  6092. See also  base class. 
  6093.  
  6094.  
  6095. ΓòÉΓòÉΓòÉ <hidden> access ΓòÉΓòÉΓòÉ
  6096.  
  6097. A property of a class that determines whether a class member is accessible in 
  6098. an expression or declaration. 
  6099.  
  6100.  
  6101. ΓòÉΓòÉΓòÉ <hidden> action ΓòÉΓòÉΓòÉ
  6102.  
  6103. A specification of a function that a part can perform. The visual builder uses 
  6104. action specifications to generate connections between parts. Actions are 
  6105. resolved to member function calls in the generated code. 
  6106.  
  6107. Compare to  event and  attribute. 
  6108.  
  6109.  
  6110. ΓòÉΓòÉΓòÉ <hidden> argument ΓòÉΓòÉΓòÉ
  6111.  
  6112. A data element, or value, included as part of a member function call. Arguments 
  6113. provide additional information that the called member function can use to 
  6114. perform the requested operation. 
  6115.  
  6116.  
  6117. ΓòÉΓòÉΓòÉ <hidden> attribute ΓòÉΓòÉΓòÉ
  6118.  
  6119. A specification of a property of a part. For example, a customer part could 
  6120. have a name attribute and an address attribute. An attribute can itself be a 
  6121. part with its own behavior and attributes. 
  6122.  
  6123. The visual builder uses attribute specifications to generate code to get and 
  6124. set part properties. 
  6125.  
  6126. Compare to  event and  action. 
  6127.  
  6128.  
  6129. ΓòÉΓòÉΓòÉ <hidden> attribute-to-action connection ΓòÉΓòÉΓòÉ
  6130.  
  6131. A connection that starts an action whenever an attribute's value changes. It is 
  6132. similar to an event-to-action connection because the attribute's event ID is 
  6133. used to notify the action when the value of the attribute changes. 
  6134.  
  6135. See also  connection. Compare to  event-to-action connection. 
  6136.  
  6137.  
  6138. ΓòÉΓòÉΓòÉ <hidden> attribute-to-attribute connection ΓòÉΓòÉΓòÉ
  6139.  
  6140. A connection from an attribute of one part to an attribute of another part. 
  6141. When one attribute is updated, the other attribute is updated automatically. 
  6142.  
  6143. See also  connection. 
  6144.  
  6145.  
  6146. ΓòÉΓòÉΓòÉ <hidden> attribute-to-member function connection ΓòÉΓòÉΓòÉ
  6147.  
  6148. A connection from an attribute of a part to a member function. The connected 
  6149. attribute receives its value from the member function, which can make 
  6150. calculations based on the values of other parts. 
  6151.  
  6152. See also  connection. 
  6153.  
  6154.  
  6155. ΓòÉΓòÉΓòÉ <hidden> attribute-to-parameter connection ΓòÉΓòÉΓòÉ
  6156.  
  6157. A connection that satisfies a parameter of an action or member function by 
  6158. supplying an attribute's value. 
  6159.  
  6160. See also  connection. 
  6161.  
  6162.  
  6163. ΓòÉΓòÉΓòÉ <hidden> base class ΓòÉΓòÉΓòÉ
  6164.  
  6165. A class from which other classes or parts are derived. A base class may itself 
  6166. be derived from another base class. 
  6167.  
  6168. See also  abstract class. 
  6169.  
  6170.  
  6171. ΓòÉΓòÉΓòÉ <hidden> behavior ΓòÉΓòÉΓòÉ
  6172.  
  6173. The set of external characteristics that an object exhibits. 
  6174.  
  6175.  
  6176. ΓòÉΓòÉΓòÉ <hidden> caller ΓòÉΓòÉΓòÉ
  6177.  
  6178. An object that sends a member function call to another object. 
  6179.  
  6180. Contrast with  receiver. 
  6181.  
  6182.  
  6183. ΓòÉΓòÉΓòÉ <hidden> category ΓòÉΓòÉΓòÉ
  6184.  
  6185. In the Composition Editor, a selectable grouping of parts represented by an 
  6186. icon in the left-most column. Selecting a category displays the parts belonging 
  6187. to that category in the next column. 
  6188.  
  6189. See also  parts palette. 
  6190.  
  6191.  
  6192. ΓòÉΓòÉΓòÉ <hidden> class ΓòÉΓòÉΓòÉ
  6193.  
  6194. An aggregate that can contain functions, types, and user-defined operators, in 
  6195. addition to data. Classes can be defined hierarchically, allowing one class to 
  6196. be an expansion of another, and can restrict access to its members. 
  6197.  
  6198.  
  6199. ΓòÉΓòÉΓòÉ <hidden> Class Editor ΓòÉΓòÉΓòÉ
  6200.  
  6201. The editor you use to specify the names of files that Visual Builder writes to 
  6202. when you generate default code. You can also use this editor to do the 
  6203. following: 
  6204.  
  6205.      Enter a description of the part 
  6206.      Specify a different .vbb file in which to store the part 
  6207.      See the name of the part's base class 
  6208.      Modify the part's default constructor 
  6209.      Enter additional constructor and destructor code 
  6210.      Specify a .lib file for the part 
  6211.      Specify a resource DLL and ID to assign an icon to the part 
  6212.      Specify other files that you want to include when you build your 
  6213.       application 
  6214.  
  6215.  Compare to  Composition Editor and  Part Interface Editor. 
  6216.  
  6217.  
  6218. ΓòÉΓòÉΓòÉ <hidden> class hierarchy ΓòÉΓòÉΓòÉ
  6219.  
  6220. A tree-like structure showing relationships among object classes. It places one 
  6221. abstract class at the top (a base class) and one or more layers of less 
  6222. abstract classes below it. 
  6223.  
  6224.  
  6225. ΓòÉΓòÉΓòÉ <hidden> class library ΓòÉΓòÉΓòÉ
  6226.  
  6227. A collection of classes. 
  6228.  
  6229.  
  6230. ΓòÉΓòÉΓòÉ <hidden> class member function ΓòÉΓòÉΓòÉ
  6231.  
  6232. See  member function. 
  6233.  
  6234.  
  6235. ΓòÉΓòÉΓòÉ <hidden> client area object ΓòÉΓòÉΓòÉ
  6236.  
  6237. An intermediate window between a frame window (IFrameWindow) and its controls 
  6238. and other child windows. 
  6239.  
  6240.  
  6241. ΓòÉΓòÉΓòÉ <hidden> client object ΓòÉΓòÉΓòÉ
  6242.  
  6243. An object that requests services from other objects. 
  6244.  
  6245.  
  6246. ΓòÉΓòÉΓòÉ <hidden> collection ΓòÉΓòÉΓòÉ
  6247.  
  6248. A set of features in which each feature is an object. 
  6249.  
  6250.  
  6251. ΓòÉΓòÉΓòÉ <hidden> Common User Access (CUA) ΓòÉΓòÉΓòÉ
  6252.  
  6253. An IBM architecture for designing graphical user interfaces using a set of 
  6254. standard components and terminology. 
  6255.  
  6256.  
  6257. ΓòÉΓòÉΓòÉ <hidden> composite part ΓòÉΓòÉΓòÉ
  6258.  
  6259. A part that is composed of a part and one or more subparts. A composite part 
  6260. can contain visual parts, nonvisual parts, or both. 
  6261.  
  6262. See also  nonvisual part, part, subpart, and  visual part. 
  6263.  
  6264.  
  6265. ΓòÉΓòÉΓòÉ <hidden> Composition Editor ΓòÉΓòÉΓòÉ
  6266.  
  6267. A view that is used to build a graphical user interface and to make connections 
  6268. between parts. 
  6269.  
  6270. Compare to  Class Editor and  Part Interface Editor. 
  6271.  
  6272.  
  6273. ΓòÉΓòÉΓòÉ <hidden> concrete class ΓòÉΓòÉΓòÉ
  6274.  
  6275. A subclass of an abstract class that is a specialization of the abstract class. 
  6276.  
  6277.  
  6278. ΓòÉΓòÉΓòÉ <hidden> connection ΓòÉΓòÉΓòÉ
  6279.  
  6280. A formal, explicit relationship between parts. Making connections is the basic 
  6281. technique for building any visual application because that defines the way in 
  6282. which parts communicate with one another. The visual builder generates the code 
  6283. that then implements these connections. 
  6284.  
  6285. See also  attribute-to-action connection, attribute-to-attribute connection, 
  6286. attribute-to-member function connection, attribute-to-parameter connection, 
  6287. custom logic connection, event-to-action connection, event-to-attribute 
  6288. connection, and  event-to-member function connection. 
  6289.  
  6290.  
  6291. ΓòÉΓòÉΓòÉ <hidden> const ΓòÉΓòÉΓòÉ
  6292.  
  6293. An attribute of a data object that declares that the object cannot be changed. 
  6294.  
  6295.  
  6296. ΓòÉΓòÉΓòÉ <hidden> construction from parts ΓòÉΓòÉΓòÉ
  6297.  
  6298. A software development technology in which applications are assembled from 
  6299. existing and reusable software components, known as parts. 
  6300.  
  6301.  
  6302. ΓòÉΓòÉΓòÉ <hidden> constructor ΓòÉΓòÉΓòÉ
  6303.  
  6304. A special class member function that has the same name as the class and is used 
  6305. to construct and possibly initialize class objects. 
  6306.  
  6307.  
  6308. ΓòÉΓòÉΓòÉ <hidden> CUA ΓòÉΓòÉΓòÉ
  6309.  
  6310. See  Common User Access. 
  6311.  
  6312.  
  6313. ΓòÉΓòÉΓòÉ <hidden> cursored emphasis ΓòÉΓòÉΓòÉ
  6314.  
  6315. When the selection cursor is on a choice, that choice has cursored emphasis. 
  6316.  
  6317.  
  6318. ΓòÉΓòÉΓòÉ <hidden> custom logic connection ΓòÉΓòÉΓòÉ
  6319.  
  6320. A connection that causes your customized C or C++ code to be run. This 
  6321. connection can be triggered either when an attribute's value changes or an 
  6322. event occurs. 
  6323.  
  6324.  
  6325. ΓòÉΓòÉΓòÉ <hidden> data abstraction ΓòÉΓòÉΓòÉ
  6326.  
  6327. A data type with a private representation and a public set of operations. The 
  6328. C++ language uses the concept of classes to implement data abstraction. 
  6329.  
  6330.  
  6331. ΓòÉΓòÉΓòÉ <hidden> data member ΓòÉΓòÉΓòÉ
  6332.  
  6333. Private data that belongs to a given object and is hidden from direct access by 
  6334. all other objects. Data members can only be accessed by the member functions of 
  6335. the defining class and its subclasses. 
  6336.  
  6337.  
  6338. ΓòÉΓòÉΓòÉ <hidden> data model ΓòÉΓòÉΓòÉ
  6339.  
  6340. A combination of the base classes and parts shipped with the product and the 
  6341. classes and parts you save and create. They are saved in a file named 
  6342. vbbase.vbb. 
  6343.  
  6344.  
  6345. ΓòÉΓòÉΓòÉ <hidden> data object ΓòÉΓòÉΓòÉ
  6346.  
  6347. A storage area used to hold a value. 
  6348.  
  6349.  
  6350. ΓòÉΓòÉΓòÉ <hidden> declaration ΓòÉΓòÉΓòÉ
  6351.  
  6352. A description that makes an external object or function available to a function 
  6353. or a block. 
  6354.  
  6355.  
  6356. ΓòÉΓòÉΓòÉ <hidden> DEF file ΓòÉΓòÉΓòÉ
  6357.  
  6358. See  module definition file. 
  6359.  
  6360.  
  6361. ΓòÉΓòÉΓòÉ <hidden> derivation ΓòÉΓòÉΓòÉ
  6362.  
  6363. The creation of a new or abstract class from an existing or base class. 
  6364.  
  6365.  
  6366. ΓòÉΓòÉΓòÉ <hidden> destructor ΓòÉΓòÉΓòÉ
  6367.  
  6368. A special class member function that has the same name as the class and is used 
  6369. to destruct class objects. 
  6370.  
  6371.  
  6372. ΓòÉΓòÉΓòÉ <hidden> DLL ΓòÉΓòÉΓòÉ
  6373.  
  6374. See  dynamic link library. 
  6375.  
  6376.  
  6377. ΓòÉΓòÉΓòÉ <hidden> dynamic link library (DLL) ΓòÉΓòÉΓòÉ
  6378.  
  6379. In OS/2, a library containing data and code objects that can be used by 
  6380. programs or applications during loading or at run time. Although they are not 
  6381. part of the program's executable (.exe) file, they are sometimes required for 
  6382. an .exe file to run properly. 
  6383.  
  6384.  
  6385. ΓòÉΓòÉΓòÉ <hidden> encapsulation ΓòÉΓòÉΓòÉ
  6386.  
  6387. The hiding of a software object's internal representation. The object provides 
  6388. an interface that queries and manipulates the data without exposing its 
  6389. underlying structure. 
  6390.  
  6391.  
  6392. ΓòÉΓòÉΓòÉ <hidden> event ΓòÉΓòÉΓòÉ
  6393.  
  6394. A specification of a notification from a part. 
  6395.  
  6396. Compare to  action, attribute, and  part event. 
  6397.  
  6398.  
  6399. ΓòÉΓòÉΓòÉ <hidden> event-to-action connection ΓòÉΓòÉΓòÉ
  6400.  
  6401. A connection that causes an action to be performed when an event occurs. 
  6402.  
  6403. See also  connection. 
  6404.  
  6405.  
  6406. ΓòÉΓòÉΓòÉ <hidden> event-to-attribute connection ΓòÉΓòÉΓòÉ
  6407.  
  6408. A connection that changes the value of an attribute when a certain event 
  6409. occurs. 
  6410.  
  6411. See also  connection. 
  6412.  
  6413.  
  6414. ΓòÉΓòÉΓòÉ <hidden> event-to-member function connection ΓòÉΓòÉΓòÉ
  6415.  
  6416. A connection from an event of a part to a member function. When the connected 
  6417. event occurs, the member function is executed. 
  6418.  
  6419. See also  connection. 
  6420.  
  6421.  
  6422. ΓòÉΓòÉΓòÉ <hidden> expansion area ΓòÉΓòÉΓòÉ
  6423.  
  6424. The section of a multicell canvas between the current cell grid and the outer 
  6425. edge of the canvas. Visually, this area is bounded by the rightmost column 
  6426. gridline and the bottommost row gridline. 
  6427.  
  6428.  
  6429. ΓòÉΓòÉΓòÉ <hidden> feature ΓòÉΓòÉΓòÉ
  6430.  
  6431. A major component of a software product that can be installed separately. 
  6432.  
  6433. In Visual Builder, an action, attribute, or event that is available from a 
  6434. part's part interface and that other parts can connect to. 
  6435.  
  6436.  
  6437. ΓòÉΓòÉΓòÉ <hidden> full attribute ΓòÉΓòÉΓòÉ
  6438.  
  6439. An attribute that has all of the behaviors and characteristics that an 
  6440. attribute can have:  a data member, a get member function, a set member 
  6441. function, and an event identifier. 
  6442.  
  6443.  
  6444. ΓòÉΓòÉΓòÉ <hidden> free-form surface ΓòÉΓòÉΓòÉ
  6445.  
  6446. The large open area of the Composition Editor window. The free-form surface 
  6447. holds the visual parts contained in the views you build and representations of 
  6448. the nonvisual parts (models) that your application includes. 
  6449.  
  6450.  
  6451. ΓòÉΓòÉΓòÉ <hidden> graphical user interface (GUI) ΓòÉΓòÉΓòÉ
  6452.  
  6453. A type of interface that enables users to communicate with a program by 
  6454. manipulating graphical features, rather than by entering commands. Typically, a 
  6455. graphical user interface includes a combination of graphics, pointing devices, 
  6456. menu bars and other menus, overlapping windows, and icons. 
  6457.  
  6458.  
  6459. ΓòÉΓòÉΓòÉ <hidden> GUI ΓòÉΓòÉΓòÉ
  6460.  
  6461. See  graphical user interface. 
  6462.  
  6463.  
  6464. ΓòÉΓòÉΓòÉ <hidden> handles ΓòÉΓòÉΓòÉ
  6465.  
  6466. Small squares that appear on the corners of a selected visual part in the 
  6467. visual builder. Handles are used to resize parts. 
  6468.  
  6469. Compare to  primary selection. 
  6470.  
  6471.  
  6472. ΓòÉΓòÉΓòÉ <hidden> header file ΓòÉΓòÉΓòÉ
  6473.  
  6474. A file that contains system-defined control information that precedes user 
  6475. data. 
  6476.  
  6477.  
  6478. ΓòÉΓòÉΓòÉ <hidden> inheritance ΓòÉΓòÉΓòÉ
  6479.  
  6480. A mechanism by which an object class can use the attributes, relationships, and 
  6481. member functions defined in more abstract classes related to it (its base 
  6482. classes). 
  6483.  
  6484. An object-oriented programming technique that allows you to use existing 
  6485. classes as bases for creating other classes. 
  6486.  
  6487.  
  6488. ΓòÉΓòÉΓòÉ <hidden> instance ΓòÉΓòÉΓòÉ
  6489.  
  6490. Synonym for  object, a particular instantiation of a data type. 
  6491.  
  6492.  
  6493. ΓòÉΓòÉΓòÉ <hidden> legacy code ΓòÉΓòÉΓòÉ
  6494.  
  6495. Existing code that a user might have. Legacy applications often have 
  6496. character-based, nongraphical user interfaces; usually they are written in a 
  6497. nonobject-oriented language, such as C or COBOL. 
  6498.  
  6499.  
  6500. ΓòÉΓòÉΓòÉ <hidden> loaded ΓòÉΓòÉΓòÉ
  6501.  
  6502. The state of the mouse pointer between the time you select a part from the 
  6503. parts palette and deposit the part on the free-form surface. 
  6504.  
  6505.  
  6506. ΓòÉΓòÉΓòÉ <hidden> main part ΓòÉΓòÉΓòÉ
  6507.  
  6508. The part that users see when they start an application. This is the part from 
  6509. which the main() function C++ code for the application is generated. 
  6510.  
  6511. The main part is a special kind of composite part. 
  6512.  
  6513. See also  part and  subpart. 
  6514.  
  6515.  
  6516. ΓòÉΓòÉΓòÉ <hidden> member ΓòÉΓòÉΓòÉ
  6517.  
  6518. A data object in a structure or a union. 
  6519.  
  6520. In C++, classes and structures can also contain functions and types as members. 
  6521.  
  6522.  
  6523. ΓòÉΓòÉΓòÉ <hidden> member function ΓòÉΓòÉΓòÉ
  6524.  
  6525. An operator or function that is declared as a member of a class. A member 
  6526. function has access to the private and protected data members and member 
  6527. functions of objects of its class. 
  6528.  
  6529.  
  6530. ΓòÉΓòÉΓòÉ <hidden> member function call ΓòÉΓòÉΓòÉ
  6531.  
  6532. A communication from one object to another that requests the receiving object 
  6533. to execute a member function. 
  6534.  
  6535. A member function call consists of a member function name that indicates the 
  6536. requested member function and the arguments to be used in executing the member 
  6537. function. The member function call always returns some object to the requesting 
  6538. object as the result of performing the member function. 
  6539.  
  6540. Synonym for  message. 
  6541.  
  6542.  
  6543. ΓòÉΓòÉΓòÉ <hidden> member function name ΓòÉΓòÉΓòÉ
  6544.  
  6545. The component of a member function call that specifies the requested operation. 
  6546.  
  6547.  
  6548. ΓòÉΓòÉΓòÉ <hidden> message ΓòÉΓòÉΓòÉ
  6549.  
  6550. A request from one object that the receiving object implement a member 
  6551. function. Because data is encapsulated and not directly accessible, a message 
  6552. is the only way to send data from one object to another. Each message specifies 
  6553. the name of the receiving object, the member function to be implemented, and 
  6554. any arguments the member function needs for implementation. 
  6555.  
  6556. Synonym for  member function call. 
  6557.  
  6558.  
  6559. ΓòÉΓòÉΓòÉ <hidden> model ΓòÉΓòÉΓòÉ
  6560.  
  6561. A nonvisual part that represents the state and behavior of a object, such as a 
  6562. customer or an account. 
  6563.  
  6564. Contrast with  view. 
  6565.  
  6566.  
  6567. ΓòÉΓòÉΓòÉ <hidden> module definition file ΓòÉΓòÉΓòÉ
  6568.  
  6569. A file that describes the code segments within a load module. 
  6570.  
  6571. Synonym for DEF file. 
  6572.  
  6573.  
  6574. ΓòÉΓòÉΓòÉ <hidden> nested class ΓòÉΓòÉΓòÉ
  6575.  
  6576. A class defined within the scope of another class. 
  6577.  
  6578.  
  6579. ΓòÉΓòÉΓòÉ <hidden> nonvisual part ΓòÉΓòÉΓòÉ
  6580.  
  6581. A part that has no visual representation at run time. A nonvisual part 
  6582. typically represents some real-world object that exists in the business 
  6583. environment. 
  6584.  
  6585. Compare to  model. Contrast with  view and  visual part. 
  6586.  
  6587.  
  6588. ΓòÉΓòÉΓòÉ <hidden> no-event attribute ΓòÉΓòÉΓòÉ
  6589.  
  6590. An attribute that does not have an event identifier. 
  6591.  
  6592.  
  6593. ΓòÉΓòÉΓòÉ <hidden> no-set attribute ΓòÉΓòÉΓòÉ
  6594.  
  6595. An attribute that does not have a set member function. 
  6596.  
  6597.  
  6598. ΓòÉΓòÉΓòÉ <hidden> notebook part ΓòÉΓòÉΓòÉ
  6599.  
  6600. A visual part that resembles a bound notebook containing pages separated into 
  6601. sections by tabbed divider pages. A user can turn the pages of a notebook or 
  6602. select the tabs to move from one section to another. 
  6603.  
  6604.  
  6605. ΓòÉΓòÉΓòÉ <hidden> object ΓòÉΓòÉΓòÉ
  6606.  
  6607. A computer representation of something that a user can work with to perform a 
  6608. task. An object can appear as text or an icon. 
  6609.  
  6610. A collection of data and member functions that operate on that data, which 
  6611. together represent a logical entity in the system. In object-oriented 
  6612. programming, objects are grouped into classes that share common data 
  6613. definitions and member functions. Each object in the class is said to be an 
  6614. instance of the class. 
  6615.  
  6616. An instance of an object class consisting of attributes, a data structure, and 
  6617. operational member functions. It can represent a person, place, thing, event, 
  6618. or concept. Each instance has the same properties, attributes, and member 
  6619. functions as other instances of the object class, though it has unique values 
  6620. assigned to its attributes. 
  6621.  
  6622.  
  6623. ΓòÉΓòÉΓòÉ <hidden> object class ΓòÉΓòÉΓòÉ
  6624.  
  6625. A template for defining the attributes and member functions of an object. An 
  6626. object class can contain other object classes. An individual representation of 
  6627. an object class is called an object. 
  6628.  
  6629.  
  6630. ΓòÉΓòÉΓòÉ <hidden> object factory ΓòÉΓòÉΓòÉ
  6631.  
  6632. A nonvisual part capable of dynamically creating new instances of a specified 
  6633. part. For example, during the execution of an application, an object factory 
  6634. can create instances of a new class to collect the data being generated. 
  6635.  
  6636.  
  6637. ΓòÉΓòÉΓòÉ <hidden> object-oriented programming ΓòÉΓòÉΓòÉ
  6638.  
  6639. A programming approach based on the concepts of data abstraction and 
  6640. inheritance. Unlike procedural programming techniques, object-oriented 
  6641. programming concentrates on those data objects that comprise the problem and 
  6642. how they are manipulated, not on how something is accomplished. 
  6643.  
  6644.  
  6645. ΓòÉΓòÉΓòÉ <hidden> observer ΓòÉΓòÉΓòÉ
  6646.  
  6647. An object that receives notification from a notifier object. 
  6648.  
  6649.  
  6650. ΓòÉΓòÉΓòÉ <hidden> operation ΓòÉΓòÉΓòÉ
  6651.  
  6652. A member function or service that can be requested of an object. 
  6653.  
  6654.  
  6655. ΓòÉΓòÉΓòÉ <hidden> overloading ΓòÉΓòÉΓòÉ
  6656.  
  6657. An object-oriented programming technique that allows you to redefine functions 
  6658. and most standard C++ operators when the functions and operators are used with 
  6659. class types. 
  6660.  
  6661.  
  6662. ΓòÉΓòÉΓòÉ <hidden> palette ΓòÉΓòÉΓòÉ
  6663.  
  6664. See  parts palette. 
  6665.  
  6666.  
  6667. ΓòÉΓòÉΓòÉ <hidden> parent class ΓòÉΓòÉΓòÉ
  6668.  
  6669. The class from which another part or class inherits data, member functions, or 
  6670. both. 
  6671.  
  6672.  
  6673. ΓòÉΓòÉΓòÉ <hidden> part ΓòÉΓòÉΓòÉ
  6674.  
  6675. A self-contained software object with a standardized public interface, 
  6676. consisting of a set of external features that allow the part to interact with 
  6677. other parts. A part is implemented as a class that supports the INotifier 
  6678. protocol and has a part interface defined. 
  6679.  
  6680. The parts on the palette can be used as templates to create instances or 
  6681. objects. 
  6682.  
  6683.  
  6684. ΓòÉΓòÉΓòÉ <hidden> part event ΓòÉΓòÉΓòÉ
  6685.  
  6686. A representation of a change that occurs to a part. The events on a part's 
  6687. interface enable other interested parts to receive notification when something 
  6688. about the part changes. For example, a push button generates an event signaling 
  6689. that it has been clicked, which might cause another part to display a window. 
  6690.  
  6691.  
  6692. ΓòÉΓòÉΓòÉ <hidden> part event ID ΓòÉΓòÉΓòÉ
  6693.  
  6694. The name of a part static-data member used to identify which notification is 
  6695. being signaled. 
  6696.  
  6697.  
  6698. ΓòÉΓòÉΓòÉ <hidden> part interface ΓòÉΓòÉΓòÉ
  6699.  
  6700. A set of external features that allows a part to interact with other parts. A 
  6701. part's interface is made up of three characteristics: attributes, actions, and 
  6702. events. 
  6703.  
  6704.  
  6705. ΓòÉΓòÉΓòÉ <hidden> Part Interface Editor ΓòÉΓòÉΓòÉ
  6706.  
  6707. An editor that the application developer uses to create and modify attributes, 
  6708. actions, and events, which together make up the interface of a part. 
  6709.  
  6710. Compare to  Class Editor and  Composition Editor. 
  6711.  
  6712.  
  6713. ΓòÉΓòÉΓòÉ <hidden> parts palette ΓòÉΓòÉΓòÉ
  6714.  
  6715. The parts palette holds a collection of visual and nonvisual parts used in 
  6716. building additional parts for an application. The parts palette is organized 
  6717. into categories. Application developers can add parts to the palette for use in 
  6718. defining applications or other parts. 
  6719.  
  6720.  
  6721. ΓòÉΓòÉΓòÉ <hidden> preferred features ΓòÉΓòÉΓòÉ
  6722.  
  6723. A subset of the part's features that appear in a pop-up connection menu. 
  6724. Generally, they are the features used most often. 
  6725.  
  6726.  
  6727. ΓòÉΓòÉΓòÉ <hidden> primary selection ΓòÉΓòÉΓòÉ
  6728.  
  6729. In the Composition Editor, the part used as a base for an action that affects 
  6730. several parts. For example, an alignment tool will align all selected parts 
  6731. with the primary selection. Primary selection is indicated by closed (solid) 
  6732. selection handles, while the other selected parts have open selection handles. 
  6733.  
  6734. See also  selection handles. 
  6735.  
  6736.  
  6737. ΓòÉΓòÉΓòÉ <hidden> private ΓòÉΓòÉΓòÉ
  6738.  
  6739. Pertaining to a class member that is accessible only to member functions and 
  6740. friends of that class. 
  6741.  
  6742.  
  6743. ΓòÉΓòÉΓòÉ <hidden> process ΓòÉΓòÉΓòÉ
  6744.  
  6745. A program running under OS/2, along with the resources associated with it 
  6746. (memory, threads, file system resources, and so on). 
  6747.  
  6748.  
  6749. ΓòÉΓòÉΓòÉ <hidden> program ΓòÉΓòÉΓòÉ
  6750.  
  6751. One or more files containing a set of instructions conforming to a particular 
  6752. programming language syntax. 
  6753.  
  6754. A self-contained, executable module. Multiple copies of the same program can be 
  6755. run in different processes. 
  6756.  
  6757.  
  6758. ΓòÉΓòÉΓòÉ <hidden> protected ΓòÉΓòÉΓòÉ
  6759.  
  6760. Pertaining to a class member that is only accessible to member functions and 
  6761. friends of that class, or to member functions and friends of classes derived 
  6762. from that class. 
  6763.  
  6764.  
  6765. ΓòÉΓòÉΓòÉ <hidden> prototype ΓòÉΓòÉΓòÉ
  6766.  
  6767. A function declaration or definition that includes both the return type of the 
  6768. function and the types of its arguments. 
  6769.  
  6770.  
  6771. ΓòÉΓòÉΓòÉ <hidden> primitive part ΓòÉΓòÉΓòÉ
  6772.  
  6773. A basic building block of other parts. A primitive part can be relatively 
  6774. complex in terms of the function it provides. 
  6775.  
  6776.  
  6777. ΓòÉΓòÉΓòÉ <hidden> process ΓòÉΓòÉΓòÉ
  6778.  
  6779. A collection of code, data, and other system resources, including at least one 
  6780. thread of execution, that performs a data processing task. 
  6781.  
  6782.  
  6783. ΓòÉΓòÉΓòÉ <hidden> property ΓòÉΓòÉΓòÉ
  6784.  
  6785. A unique characteristic of a part. 
  6786.  
  6787.  
  6788. ΓòÉΓòÉΓòÉ <hidden> pure virtual function ΓòÉΓòÉΓòÉ
  6789.  
  6790. A virtual function that has a function definition of = 0;. 
  6791.  
  6792.  
  6793. ΓòÉΓòÉΓòÉ <hidden> receiver ΓòÉΓòÉΓòÉ
  6794.  
  6795. The object that receives a member function call. 
  6796.  
  6797. Contrast with  caller. 
  6798.  
  6799.  
  6800. ΓòÉΓòÉΓòÉ <hidden> resource file ΓòÉΓòÉΓòÉ
  6801.  
  6802. A file that contains data used by an application, such as text strings and 
  6803. icons. 
  6804.  
  6805.  
  6806. ΓòÉΓòÉΓòÉ <hidden> selection handles ΓòÉΓòÉΓòÉ
  6807.  
  6808. In the Composition Editor, small squares that appear on the corners of a 
  6809. selected visual part. Selection handles are used to resize parts. 
  6810.  
  6811. See also  primary selection. 
  6812.  
  6813.  
  6814. ΓòÉΓòÉΓòÉ <hidden> server ΓòÉΓòÉΓòÉ
  6815.  
  6816. A computer that provides services to multiple users or workstations in a 
  6817. network; for example, a file server, a print server, or a mail server. 
  6818.  
  6819.  
  6820. ΓòÉΓòÉΓòÉ <hidden> service ΓòÉΓòÉΓòÉ
  6821.  
  6822. A specific behavior that an object is responsible for exhibiting. 
  6823.  
  6824.  
  6825. ΓòÉΓòÉΓòÉ <hidden> settings view ΓòÉΓòÉΓòÉ
  6826.  
  6827. A view of a part that provides a way to display and set the attributes and 
  6828. options associated with the part. 
  6829.  
  6830.  
  6831. ΓòÉΓòÉΓòÉ <hidden> sticky ΓòÉΓòÉΓòÉ
  6832.  
  6833. In the Composition Editor, the mode that enables you to add multiple parts of 
  6834. the same class (for example, three push buttons) without going back and forth 
  6835. between the parts palette and the free-form surface. 
  6836.  
  6837.  
  6838. ΓòÉΓòÉΓòÉ <hidden> structure ΓòÉΓòÉΓòÉ
  6839.  
  6840. A construct that contains an ordered group of data objects. Unlike an array, 
  6841. the data objects within a structure can have varied data types. 
  6842.  
  6843.  
  6844. ΓòÉΓòÉΓòÉ <hidden> subpart ΓòÉΓòÉΓòÉ
  6845.  
  6846. A part that is used to create another part. 
  6847.  
  6848. See also  nonvisual part, part, and  visual part. 
  6849.  
  6850.  
  6851. ΓòÉΓòÉΓòÉ <hidden> superclass ΓòÉΓòÉΓòÉ
  6852.  
  6853. See  abstract class and  base class. 
  6854.  
  6855.  
  6856. ΓòÉΓòÉΓòÉ <hidden> tear-off attribute ΓòÉΓòÉΓòÉ
  6857.  
  6858. An attribute that an application developer has exposed to work with as though 
  6859. it were a stand-alone part. 
  6860.  
  6861.  
  6862. ΓòÉΓòÉΓòÉ <hidden> template ΓòÉΓòÉΓòÉ
  6863.  
  6864. A family of classes or functions with variable types. 
  6865.  
  6866.  
  6867. ΓòÉΓòÉΓòÉ <hidden> thread ΓòÉΓòÉΓòÉ
  6868.  
  6869. A unit of execution within a process. 
  6870.  
  6871.  
  6872. ΓòÉΓòÉΓòÉ <hidden> tool bar ΓòÉΓòÉΓòÉ
  6873.  
  6874. The strip of icons along the top of the free-form surface. The tool bar 
  6875. contains tools to help you construct composite parts. 
  6876.  
  6877.  
  6878. ΓòÉΓòÉΓòÉ <hidden> UI ΓòÉΓòÉΓòÉ
  6879.  
  6880. See  user interface. 
  6881.  
  6882.  
  6883. ΓòÉΓòÉΓòÉ <hidden> unloaded ΓòÉΓòÉΓòÉ
  6884.  
  6885. The state of the mouse pointer before you select a part from the parts palette 
  6886. and after you deposit a part on the free-form surface. In addition, you can 
  6887. unload the mouse pointer by pressing the Esc key. 
  6888.  
  6889.  
  6890. ΓòÉΓòÉΓòÉ <hidden> user interface (UI) ΓòÉΓòÉΓòÉ
  6891.  
  6892. The hardware, software, or both that enable a user to interact with a computer. 
  6893.  
  6894. The term user interface normally refers to the visual presentation and its 
  6895. underlying software with which a user interacts. 
  6896.  
  6897.  
  6898. ΓòÉΓòÉΓòÉ <hidden> variable ΓòÉΓòÉΓòÉ
  6899.  
  6900. A storage place within an object for a data feature. The data feature is an 
  6901. object, such as number or date, stored as an attribute of the containing 
  6902. object. 
  6903.  
  6904. A part that receives an identity at run time. A variable by itself contains no 
  6905. data or program logic; it must be connected such that it receives runtime 
  6906. identity from a part elsewhere in the application. 
  6907.  
  6908.  
  6909. ΓòÉΓòÉΓòÉ <hidden> view ΓòÉΓòÉΓòÉ
  6910.  
  6911. A visual part, such as a window, push button, or entry field. 
  6912.  
  6913. A visual representation that can display and change the underlying model 
  6914. objects of an application. Views are both the end result of developing an 
  6915. application and the basic unit of composition of user interfaces. 
  6916.  
  6917. Compare to  visual part. Contrast with  model. 
  6918.  
  6919.  
  6920. ΓòÉΓòÉΓòÉ <hidden> virtual function ΓòÉΓòÉΓòÉ
  6921.  
  6922. A function of a class that is declared with the keyword virtual. The 
  6923. implementation that is executed when you make a call to a virtual function 
  6924. depends on the type of the object for which it is called. This is determined at 
  6925. run time. 
  6926.  
  6927.  
  6928. ΓòÉΓòÉΓòÉ <hidden> visual part ΓòÉΓòÉΓòÉ
  6929.  
  6930. A part that has a visual representation at run time. Visual parts, such as 
  6931. windows, push buttons, and entry fields, make up the user interface of an 
  6932. application. 
  6933.  
  6934. Compare to  view. Contrast with  nonvisual part. 
  6935.  
  6936.  
  6937. ΓòÉΓòÉΓòÉ <hidden> visual programming tool ΓòÉΓòÉΓòÉ
  6938.  
  6939. A tool that provides a means for specifying programs graphically. Application 
  6940. programmers write applications by manipulating graphical representations of 
  6941. components. 
  6942.  
  6943.  
  6944. ΓòÉΓòÉΓòÉ <hidden> white space ΓòÉΓòÉΓòÉ
  6945.  
  6946. Space characters, tab characters, form-feed characters, and new-line 
  6947. characters. 
  6948.  
  6949.  
  6950. ΓòÉΓòÉΓòÉ <hidden> window ΓòÉΓòÉΓòÉ
  6951.  
  6952. A rectangular area of the screen with visible boundaries in which information 
  6953. is displayed. Windows can overlap on the screen, giving it the appearance of 
  6954. one window being on top of another. 
  6955.  
  6956. In the Composition Editor, a window is a part that can be used as a container 
  6957. for other visual parts, such as push buttons.