home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1996 November / VPR9611B.ISO / vabasic / ntclnt.exe / DISK8 / data.8 / datab / INCLUDE / VWCOMP.HH < prev    next >
Text File  |  1996-07-29  |  7KB  |  221 lines

  1. //----------------------------------------------------------------
  2. // $Source: /rcs/vwrcs/components/intel/vwcomp.hh,v $
  3. // Checked in by: $Author: andres $
  4. // $Date: 1996/06/11 17:08:56 $              $Revision: 1.20 $
  5. //----------------------------------------------------------------
  6. //         Copyright(c) 1992, Visual Edge Software Ltd.
  7. //
  8. // ALL RIGHTS RESERVED. This notice is intended as a precaution
  9. // against inadvertent publication, and shall not be deemed to
  10. // consitute an acknowledgment that publication has occurred
  11. // nor to imply any waiver of confidentiality. The year included
  12. // in the notice is the year of the creation of the work.
  13. //----------------------------------------------------------------
  14. // DESCRIPTION:
  15. //      This file contains the declaration for the VwGuiComponent
  16. //      class. 
  17. //----------------------------------------------------------------
  18. //      Copyright (c) International Business Machines Inc, 1995
  19.  
  20. #ifndef VWCOMP_HH
  21. #define VWCOMP_HH
  22.  
  23. #include <vwglobal.hh>
  24. #include <vstring.hh>
  25. #include <varray.hh>
  26. #include <vwmeasur.hh>
  27. #include <vcatalog.hh>
  28. #include <object.hh>
  29.  
  30. class VwContainer;
  31. class VwComponent;
  32. class VwFormBase;
  33. class VwApplication;
  34. class VwCallback;
  35.  
  36.  
  37. //
  38. // Place holder for future class holding callback specific data
  39. //
  40. class VwCallbackData;
  41.  
  42. #ifdef NOTEMPLATES
  43. #       ifndef VwCallbackListDefined
  44. #               define VwCallbackListDefined
  45. #               define CLASSNAME        VwCallbackList
  46. #               define ENTRYTYPE        VwCallback*
  47. #               include <mst/varray.mst>
  48. #       endif
  49.  
  50. #       ifndef VwClientDataListDefined
  51. #               define VwClientDataListDefined
  52. #               define CLASSNAME        VwClientDataList
  53. #               define ENTRYTYPE        void*
  54. #               include <mst/varray.mst>
  55. #       endif
  56. #       ifndef VwComponentListDefined
  57. #               define VwComponentListDefined
  58. #               define CLASSNAME        VwComponentList
  59. #               define ENTRYTYPE        VwComponent*
  60. #               include <mst/varray.mst>
  61. #       endif
  62. #else
  63.         typedef VeArray<VwCallback *>    VwCallbackList;
  64.         typedef VeArray<void *>          VwClientDataList;
  65.         typedef VeArray<VwComponent *>   VwComponentList;
  66. #endif
  67.  
  68. typedef void (*VwCallbackProcedurePtr_t) (VwComponent *, void *,
  69.                                           VwCallbackData * = 0);
  70.  
  71. //
  72. // The following type is identical to the above one execept for the
  73. // default 3rd parameter.  This type is required because using the
  74. // other type causes compiler errors when the type is used as a
  75. // function parameter type as in AddDestroyCallback(). 
  76. //
  77. typedef void (*VwCallbackProcPtr_t) (VwComponent *, void *,
  78.                                           VwCallbackData *);
  79.  
  80. //
  81. // Message catalog
  82. //
  83. extern VeCatalog *VwCompoCat;
  84.  
  85. class VwComponent : public VeObject
  86. {
  87.  
  88. public:
  89.         RTTI_H(VeClass,VeObject);
  90.  
  91.         // overides the new and delete to be sure that 
  92.         // they are called in the DLL
  93. #ifdef __DEBUG_ALLOC__
  94.         VMETHODDECL(void*) operator new(size_t size, const char *, size_t);
  95.         VMETHODDECL(void ) operator delete(void* ptr, const char *, size_t); 
  96. #else
  97.         VMETHODDECL(void*) operator new(size_t size );
  98.         VMETHODDECL(void ) operator delete(void* ptr ); 
  99. #endif
  100.  
  101.         virtual VOPERDECL ~VwComponent();
  102.  
  103.         //
  104.         // Property Accesors
  105.         //
  106.         VVIRTUALDECL(const String)      Name();
  107.         VVIRTUALDECL(VwStatus)          PutName(String);
  108.         VVIRTUALDECL(VwContainer*)      Parent();
  109.  
  110.         VVIRTUALDECL(VwFormBase*)       Form();
  111.  
  112.         VVIRTUALDECL(const String)      Tag();
  113.         VVIRTUALDECL(VwStatus)          PutTag(String);
  114.  
  115.         VVIRTUALDECL(void*)             UserData ();
  116.         VVIRTUALDECL(VwStatus)          PutUserData (void * );
  117.  
  118.         VVIRTUALDECL(VwInt)             Index();
  119.         VVIRTUALDECL(VwStatus)          PutIndex(VwInt);
  120.  
  121.         VVIRTUALDECL(void)              UserModeChangeNotify();
  122.  
  123.         VVIRTUALDECL(void*)             NativeObject();
  124.  
  125.         //
  126.         //this method deletes a component and all its descendants
  127.         //
  128.         VVIRTUALDECL(void)              Destroy();
  129.     VVIRTUALDECL(VwBool)        IsDestroyInProgress();
  130.     VVIRTUALDECL(void)        PutIsDestroyInProgress(VwBool);
  131.  
  132.         //
  133.         // Return the VwApplication instance associated with
  134.         // this components
  135.         //
  136.         VVIRTUALDECL(VwApplication*)    Application();
  137.  
  138.         //
  139.         // Destroy callback put method.
  140.         //
  141.         VMETHODDECL(void)               AddDestroyCallback(VwCallbackProcPtr_t,
  142.                                                                    void *data = 0);
  143.  
  144.         VMETHODDECL(void*)              RemoveDestroyCallback(VwCallbackProcPtr_t,
  145.                                                                           void *data);
  146.  
  147.         VMETHODDECL(VwClientDataList)   RemoveDestroyCallbacks(VwCallbackProcPtr_t);
  148.  
  149.         VVIRTUALDECL(void)              DispatchDestroyCallbacks();
  150.  
  151.     VMETHODDECL(VwInt)             ErrorCode();
  152.     VMETHODDECL(void)              ClearErrorCode();
  153.     VMETHODDECL(VobMixinFactory*)    MixinFactory();
  154.     
  155.  
  156. protected:
  157.         
  158.         VeString        itsName;
  159.         VwContainer*    itsParent;
  160.         VwInt           itsIndex;
  161.         VeString        itsTag;
  162.         void*           itsUserData;
  163.     VwInt           itsErrorCode;
  164.  
  165.         //
  166.         // Protected Constructor to prevent instantiation
  167.         //
  168.         VOPERDECL VwComponent(const String name, VwContainer *parent);
  169.  
  170.         VMETHODDECL(VwBool) IsDynamicallyAllocated();
  171.  
  172.         //
  173.         // Destroy callbacks list
  174.         //
  175.         VwCallbackList itsDestroyCbList;
  176.  
  177.     //
  178.     // Keeps track of components that have not been destroyed.
  179.     // Components should add to this table just before executing
  180.     // user code in a call back. Upon return from user callback
  181.     // they should check if they are still in the LiveObjectTable
  182.     // before accessing any of their properties.
  183.     // In general events should call user code last. In which
  184.     // case they don't have to add themselves to the LiveObjectTable.
  185.     //
  186.     VMETHODDECL(VwComponentList *)    LiveObjectList();
  187.  
  188. private:
  189.     static VMETHODDECL(void)    NotifyApplication(VwComponent*, void*);
  190.  
  191.     VwBool            isDestroyInProgress;
  192.         VwBool                  isDynamicallyAllocated;
  193.         static VwBool       allocatedFromNew;
  194. };
  195.  
  196. /*
  197.  * Property name constants
  198.  */
  199. #define VwPname         "Name"
  200. #define VwPparent       "Parent"
  201. #define VwPindex        "Index"
  202. #define VwPtag          "Tag"
  203.  
  204. class VwCallback {
  205. public:
  206.         VwCallback(VwCallbackProcPtr_t cb, void * clientData = 0)
  207.                 : itsCbProc(cb), itsClientData(clientData) {}
  208.  
  209.         virtual void Dispatch(VwComponent *cmp);
  210.  
  211.         void    *ClientData() {return itsClientData;}
  212.  
  213.         VwCallbackProcPtr_t CallbackProc() {return itsCbProc;}
  214.  
  215. private:
  216.         VwCallbackProcPtr_t itsCbProc;
  217.         void                    *itsClientData;
  218. };
  219.  
  220. #endif /* VWCOMPONENT_HH */     
  221.