home *** CD-ROM | disk | FTP | other *** search
/ The Developer Connection…ice Driver Kit for OS/2 3 / DEV3-D1.ISO / devtools / dataflex / objbrows.pkg < prev    next >
Encoding:
Text File  |  1993-05-19  |  6.3 KB  |  207 lines

  1.  
  2.  
  3. // **********************************************************************
  4. // * System: DataFlex 3.0 System Utilities                              *
  5. // *Program: OBJBROWS.PKG                                               *
  6. // * Author: James Ricci 8/1/90                                         *
  7. // *Purpose: To allow browsing of object parentage in a program.        *
  8. // **********************************************************************
  9.  
  10. #CHKSUB 1 1 // Verify the UI subsystem.
  11.  
  12. USE UI
  13.  
  14.  
  15. REGISTER_PROCEDURE Exit_Object
  16.  
  17. // Define Object Button Class
  18. CLASS Object_Button IS A BUTTON
  19.  
  20.   PROCEDURE CONSTRUCT_OBJECT INTEGER @Object_Img
  21.     FORWARD SEND CONSTRUCT_OBJECT @Object_Img
  22.     ITEM_LIST
  23.       ON_ITEM "" SEND Object_Selected
  24.     END_ITEM_LIST
  25.   END_PROCEDURE  
  26.   
  27.   // Set the 41 rightmost characters of the name of the object passed.
  28.   PROCEDURE Store_ID INTEGER @ID
  29.     SET AUX_VALUE ITEM 0 TO @ID
  30.     IF @ID NE 0  SET VALUE ITEM 0 TO (RIGHT(NAME(@ID),41))
  31.     ELSE         SET VALUE ITEM 0 TO "NULL"  
  32.   END_PROCEDURE
  33.   
  34.   // Meant to be overriden by user.
  35.   PROCEDURE Object_Selected
  36.     SEND Display_Object (AUX_VALUE(CURRENT_OBJECT,CURRENT))
  37.   END_PROCEDURE
  38.   
  39. END_CLASS
  40.  
  41.  
  42. // Define Main Object Button Class
  43. CLASS Main_Object_Button IS AN Object_Button
  44.  
  45.   PROCEDURE CONSTRUCT_OBJECT INTEGER @Object_Img
  46.     FORWARD SEND CONSTRUCT_OBJECT @Object_Img
  47.     PROPERTY INTEGER Browse_State PUBLIC TRUE
  48.   END_PROCEDURE  
  49.   
  50.   // Meant to be overriden by user.
  51.   PROCEDURE Object_Selected
  52.     LOCAL INTEGER @ID
  53.     IF (NOT(Browse_State(CURRENT_OBJECT))) BEGIN
  54.       GET PRIOR_SCOPE TO @ID
  55.       SET CURRENT_SCOPE TO @ID
  56.       SET VALUE OF @ID TO (Value(CURRENT_OBJECT,0))
  57.       SET ITEM_CHANGED_STATE OF @ID ITEM CURRENT TO TRUE
  58.       DELEGATE SEND Exit_Object
  59.     END  
  60.   END_PROCEDURE
  61.   
  62. END_CLASS
  63.  
  64.  
  65. // Define LIST object to be used by Object_Browser.
  66. CLASS Object_List IS A LIST
  67.   
  68.   // Construct the object.
  69.   PROCEDURE CONSTRUCT_OBJECT INTEGER @Object_Img
  70.     FORWARD SEND CONSTRUCT_OBJECT @Object_Img
  71.   END_PROCEDURE
  72.   
  73.   // Delete all children to display new list.
  74.   PROCEDURE Initialize
  75.     SEND DELETE_DATA
  76.   END_PROCEDURE
  77.   
  78.   // Set the parent object to the id passed.
  79.   PROCEDURE Store_ID INTEGER @ID
  80.     SEND ADD_ITEM Msg_Object_Selected (RIGHT(NAME(@ID),41))
  81.     SET CURRENT_ITEM TO (ITEM_COUNT(CURRENT_OBJECT)-1)
  82.     SET AUX_VALUE TO @ID
  83.   END_PROCEDURE
  84.  
  85.   // Meant to be overriden by user.
  86.   PROCEDURE Object_Selected
  87.     SEND Display_Object (AUX_VALUE(CURRENT_OBJECT,CURRENT))
  88.   END_PROCEDURE
  89.   
  90.   // Show first items when activated.
  91.   PROCEDURE ACTIVATE
  92.   IF (NOT(ACTIVE_STATE(CURRENT_OBJECT))) SET CURRENT_ITEM TO 0
  93.     FORWARD SEND ACTIVATE
  94.   END_PROCEDURE
  95.   
  96. END_CLASS
  97.  
  98.  
  99. CLASS Object_Browser IS A CLIENT
  100.  
  101.   // Construct Object.
  102.   PROCEDURE Construct_Object INTEGER @Main_Img;
  103.                       INTEGER @Parent_Img INTEGER @Current_Img INTEGER @Child_Img
  104.     SET LOCATION          TO 5 15 ABSOLUTE
  105.     SET SCOPE_STATE       TO TRUE
  106.     SET BLOCK_MOUSE_STATE TO TRUE
  107.     SET POPUP_STATE       TO TRUE
  108.     
  109.     ON_KEY KCANCEL SEND Exit_Object
  110.     ON_KEY KEY_CTRL+KEY_F10 SEND MSG_NONE
  111.     ON_KEY KEY_ALT+KEY_F10  SEND MSG_NONE
  112.     
  113.     // Button to select current object as context.
  114.     OBJECT Current_Button IS A Main_Object_Button @Current_Img
  115.     END_OBJECT
  116.     
  117.     // List of children. Clicking on a child should make it the current object.
  118.     Object Child_List IS AN Object_List @Child_Img
  119.     END_OBJECT
  120.     
  121.     // Button to make parent object the current object
  122.     OBJECT Parent_Button IS AN Object_Button @Parent_Img
  123.     END_OBJECT
  124.     
  125.   END_PROCEDURE                    
  126.  
  127.   // Display object with ID passed.
  128.   PROCEDURE Display_Object INTEGER @ID
  129.     LOCAL INTEGER @Counter @Old @Child
  130.     IF @ID NE 0 BEGIN
  131.       SEND Store_ID TO (Current_Button(CURRENT_OBJECT)) @ID
  132.       IF @ID NE DESKTOP;
  133.          SEND Store_ID  TO (Parent_Button(CURRENT_OBJECT))  (PARENT(@ID))
  134.       ELSE;   
  135.          SEND Store_ID  TO (Parent_Button(CURRENT_OBJECT))  0
  136.       SEND Initialize    TO (Child_List(CURRENT_OBJECT))     
  137.       MOVE CURRENT_OBJECT TO @Old      
  138.       SET DYNAMIC_UPDATE_STATE OF (Child_List(CURRENT_OBJECT)) TO FALSE
  139.       FOR @Counter FROM 1 TO (CHILD_COUNT(@ID))
  140.         MOVE @ID TO CURRENT_OBJECT
  141.         GET OBJECT_ID OF (-@Counter) TO @Child
  142.         MOVE @Old TO CURRENT_OBJECT
  143.         IF (@Child GT 0) SEND Store_ID TO (Child_List(CURRENT_OBJECT)) @Child
  144.       LOOP
  145.       SET DYNAMIC_UPDATE_STATE OF (Child_List(CURRENT_OBJECT)) TO TRUE
  146.     END
  147.   END_PROCEDURE
  148.   
  149.   // Cancel current scope.
  150.   PROCEDURE Exit_Object
  151.     SET CURRENT_SCOPE TO (PRIOR_SCOPE(DESKTOP))
  152.     SEND DEACTIVATE 
  153.   END_PROCEDURE
  154.   
  155.   // POPUP override
  156.   PROCEDURE POPUP
  157.     IF (NOT(ACTIVE_STATE(CURRENT_OBJECT))) BEGIN
  158.       SEND Display_Object DESKTOP
  159.       FORWARD SEND POPUP
  160.     END
  161.   END_PROCEDURE
  162.   
  163.   // Return the Browse_State of the object. For use by children.
  164.   PROCEDURE SET Browse_State INTEGER @State
  165.    SET Browse_State OF (Current_Button(CURRENT_OBJECT)) TO @State
  166.   END_FUNCTION
  167.   
  168. END_CLASS
  169.  
  170.  
  171. /Object_List_Img
  172. ╔═════════════════════════════════════════════════╗
  173. ║ Parent Object:                                  ║
  174. ║ _______________________________________________ ║
  175. ║─────────────────────────────────────────────────║
  176. ║ Current Object:                                 ║
  177. ║ _______________________________________________ ║
  178. ║─────────────────────────────────────────────────║
  179. ║ Child Objects:                                  ║
  180. ║ _______________________________________________ ║
  181. ║ _______________________________________________ ║
  182. ║ _______________________________________________ ║
  183. ║ _______________________________________________ ║
  184. ║ _______________________________________________ ║
  185. ╚═════════════════════════════════════════════════╝
  186. /*
  187.  
  188.  
  189. SUB_PAGE  Parent_Button_Img   FROM  Object_List_Img 1
  190. SUB_PAGE  Current_Button_Img  FROM  Object_List_Img 2
  191. SUB_PAGE  Child_List_Img      FROM  Object_List_Img VERTICAL 3 5
  192.  
  193.  
  194.  
  195. // Popup that will display objects for creation of context records.
  196. OBJECT Object_List IS A Object_Browser Object_List_Img;
  197.                    Parent_Button_Img Current_Button_Img Child_List_Img
  198. END_OBJECT
  199.  
  200.  
  201. PROCEDURE Browse_Objects
  202.   SEND POPUP TO Object_List
  203. END_PROCEDURE
  204.  
  205. ON_KEY KEY_CTRL+KEY_F10 SEND Browse_Objects
  206.  
  207.