home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / trialva / ibmcppw / include / idmitem.hpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-02-22  |  10.7 KB  |  389 lines

  1. #ifndef _IDMITEM_
  2. #define _IDMITEM_
  3. /*******************************************************************************
  4. * FILE NAME: idmitem.hpp                                                       *
  5. *                                                                              *
  6. * DESCRIPTION:                                                                 *
  7. *   Declaration of the classes:                                                *
  8. *     IDMItem                                                                  *
  9. *                                                                              *
  10. * COPYRIGHT:                                                                   *
  11. *   IBM Open Class Library                                                     *
  12. *   (C) Copyright International Business Machines Corporation 1992, 1996       *
  13. *   Licensed Material - Program-Property of IBM - All Rights Reserved.         *
  14. *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
  15. *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
  16. *                                                                              *
  17. *******************************************************************************/
  18. #include <irefcnt.hpp>
  19. #include <iwindow.hpp>
  20. #include <idmcomm.hpp>
  21. #include <istring.hpp>
  22.  
  23.  
  24. class IDragItem;
  25. typedef IDragItem _DRAGITEM;
  26.  
  27. struct IDataObject;
  28.  
  29. class IDMSourceRenderEvent;
  30. class IDMSourcePrepareEvent;
  31. class IDMSourceEndEvent;
  32. class IDMSourceDiscardEvent;
  33. class IDMSourcePrintEvent;
  34. class IDMTargetDropEvent;
  35. class IDMTargetEndEvent;
  36. class IDMSourceOperation;
  37. class IDMTargetOperation;
  38. class IDMOperation;
  39. class IDMRenderer;
  40. class IDMSourceRenderer;
  41. class IDMTargetRenderer;
  42. class IDMImage;
  43. class IDMItemData;
  44. class IDragItemWrapper;
  45. class IDMSourceOperationData;
  46. class IDMTargetOperationData;
  47. class IDMTargetRendererData;
  48.  
  49.  
  50. #pragma pack(4)
  51.  
  52. class IDMItem : public IRefCounted {
  53. typedef IRefCounted
  54.   Inherited;
  55. typedef IDM::DropIndicator
  56.   DropIndicator;
  57. public:
  58. /*------------------------------ IDMItem::Handle -----------------------------*/
  59. typedef IReference< IDMItem > Handle;
  60.  
  61. /*------------------------------- Constructors -------------------------------*/
  62.   IDMItem ( IDMSourceOperation* sourceOperation,
  63.             const IString&      types,
  64.             const unsigned long supportedOperations = unknown,
  65.             const unsigned long attributes = none);
  66.  
  67.   IDMItem ( IDMTargetOperation* targetOperation,
  68.             _DRAGITEM*          dragItem );
  69.  
  70.   IDMItem ( const IDMItem&      dragItem );
  71.  
  72.   IDMItem ( const Handle&       item );
  73.  
  74. virtual
  75.  ~IDMItem ( );
  76.  
  77. IDMItem
  78.  &operator = ( const IDMItem& item );
  79.  
  80. Handle
  81.   operator = ( const Handle&  item );
  82.  
  83. /*----------------------  Supported Operations Flags  ------------------------*/
  84. static const unsigned long
  85.   IC_IMPORTU unknown,
  86.   IC_IMPORTU copyable,
  87.   IC_IMPORTU moveable,
  88.   IC_IMPORTU linkable;
  89.  
  90. /*----------------------------  Attribute Flags ------------------------------*/
  91. static const unsigned long
  92.   IC_IMPORTU none,
  93.   IC_IMPORTU open,
  94.   IC_IMPORTU reference,
  95.   IC_IMPORTU group,
  96.   IC_IMPORTU container,
  97.   IC_IMPORTU prepare,
  98.   IC_IMPORTU removableMedia;
  99.  
  100. /*-------------------------- Item Attributes ---------------------------------*/
  101. virtual IWindowHandle
  102.   sourceWindowHandle    ( ) const;
  103.  
  104. virtual IWindow
  105.  *sourceWindow          ( ) const;
  106.  
  107. virtual IString
  108.   containerName         ( ) const,
  109.   sourceName            ( ) const,
  110.   targetName            ( ) const;
  111.  
  112. virtual unsigned long
  113.   attributes            ( ) const,
  114.   supportedOperations   ( ) const;
  115.  
  116. virtual ISize
  117.   imageOffset           ( ) const;
  118.  
  119. IDMItem
  120.  &setSourceWindowHandle ( IWindowHandle window ),
  121.  &setContainerName      ( const char*   containerName ),
  122.  &setTargetName         ( const char*   targetName ),
  123.  &setSourceName         ( const char*   sourceName );
  124.  
  125. virtual Boolean
  126.   isOpen                 ( ) const,
  127.   isReference            ( ) const,
  128.   isGroup                ( ) const,
  129.   isContainer            ( ) const,
  130.   isOnRemovableMedia     ( ) const,
  131.   requiresPreparation    ( ) const;
  132.  
  133. virtual IDMItem
  134.  &setRequiresPreparation ( Boolean requiresPrep     = true ),
  135.  &setOpen                ( Boolean open             = true ),
  136.  &setReference           ( Boolean reference        = true ),
  137.  &setGroup               ( Boolean group            = true ),
  138.  &setContainer           ( Boolean container        = true ),
  139.  &setOnRemovableMedia    ( Boolean onRemovableMedia = true );
  140.  
  141. /*-------------------------- Item Operations ---------------------------------*/
  142. virtual Boolean
  143.   canBeCopied            ( ) const,
  144.   canBeLinked            ( ) const,
  145.   canBeMoved             ( ) const;
  146.  
  147. virtual IDMItem
  148.  &enableCopy             ( Boolean        copyable = true ),
  149.  &enableLink             ( Boolean        linkable = true ),
  150.  &enableMove             ( Boolean        moveable = true );
  151.  
  152. virtual unsigned long
  153.   supportedOperationsFor ( const IString& selectedRMFs ) const;
  154.  
  155. /*-------------------------------- Item Types --------------------------------*/
  156. virtual IString
  157.   trueType          ( ) const,
  158.   types             ( ) const;
  159.  
  160. virtual Boolean
  161.   hasType           ( const char* aType ) const;
  162.  
  163. virtual IDMItem
  164.  &setTrueType       ( const char* aType ),
  165.  &setTypes          ( const char* types ),
  166.  &addType           ( const char* aType ),
  167.  &removeType        ( const char* aType );
  168.  
  169. /*---------------------  Rendering Mechanisms and Formats  -------------------*/
  170. virtual IString
  171.   nativeRMF    ( ) const,
  172.   nativeRM     ( ) const,
  173.   nativeRF     ( ) const,
  174.   rmfs         ( ) const;
  175.  
  176. virtual Boolean
  177.   supportsRMF  ( const IString& rmf ),
  178.   supportsRMF  ( const IString& rm,
  179.                  const IString& rf );
  180.  
  181. virtual IDMItem
  182.  &setNativeRMF ( const IString& rmf ),
  183.  &setNativeRMF ( const IString& rm,
  184.                  const IString& rf ),
  185.  &setRMFs      ( const IString& rmfs ),
  186.  &addRMF       ( const IString& rmf ),
  187.  &addRMF       ( const IString& rm,
  188.                  const IString& rf ),
  189.  &removeRMF    ( const IString& rmf ),
  190.  &removeRMF    ( const IString& rm,
  191.                  const IString& rf );
  192.  
  193. static void
  194.   appendRMF        ( IString& rmfs,
  195.                      const IString& rmf ),
  196.   deleteRMF        ( IString& rmfs,
  197.                      const IString& rmf );
  198.  
  199. static IString
  200.   compressedRMFs   ( const IString& rmfs ),
  201.   matchingRMFs     ( const IString& rmfs1,
  202.                      const IString& rmfs2,
  203.                      Boolean        firstOnly = false ),
  204.   rfForThisProcess ( ),
  205.   rfFrom           ( const IString& rmf ),
  206.   rmfFrom          ( const IString& rm,
  207.                      const IString& rf ),
  208.   rmFrom           ( const IString& rmf ),
  209.   rmfsFrom         ( const IString& rmfs ),
  210.   rmfsFrom         ( const IString& rm,
  211.                      const IString& rf );
  212.  
  213. /*---------------------------- Selected Renderer -----------------------------*/
  214. unsigned
  215.   renderer       ( ) const;
  216.  
  217. IString
  218.   selectedRMF    ( ) const;
  219.  
  220. IDMItem
  221.  &setRenderer    ( unsigned       position ),
  222.  &setSelectedRMF ( const IString& rmf );
  223.  
  224. /*------------------------------- Drop Status --------------------------------*/
  225. DropIndicator
  226.   dropStatus    ( ) const;
  227.  
  228. IDMItem
  229.  &setDropStatus ( DropIndicator status );
  230.  
  231. /*----------------------------- Item Rendering -------------------------------*/
  232. virtual Boolean
  233.   sourceRender  ( IDMSourceRenderEvent&  event ),
  234. #ifndef IC_WIN_FLAGNOP
  235.   sourcePrepare ( IDMSourcePrepareEvent& event ),
  236. #endif
  237.   sourceEnd     ( IDMSourceEndEvent&     event );
  238.  
  239. #ifndef IC_WIN_FLAGNOP
  240. virtual Boolean
  241.   sourceDiscard ( IDMSourceDiscardEvent& event ),
  242.   sourcePrint   ( IDMSourcePrintEvent&   event );
  243. #endif
  244. virtual Boolean
  245.   targetDrop    ( IDMTargetDropEvent&    event ),
  246.   targetEnd     ( IDMTargetEndEvent&     event );
  247.  
  248. /*---------------------------- Drag Image Support ----------------------------*/
  249. virtual IDMImage
  250.  &image    ( );
  251.  
  252. virtual IDMItem
  253.  &setImage ( IDMImage& image );
  254.  
  255. Boolean
  256.   hasImage ( ) const;
  257.  
  258. /*------------------------------ Source Items --------------------------------*/
  259. static Boolean
  260.   generateSourceItems ( IDMSourceOperation* sourceOperation );
  261.  
  262. /*------------------------ Source and Target Operation -----------------------*/
  263. virtual IDMSourceOperation
  264.  *sourceOperation ( );
  265.  
  266. virtual IDMTargetOperation
  267.  *targetOperation ( );
  268.  
  269. /*------------------------------ Item Contents -------------------------------*/
  270. virtual IString
  271.   contents     ( ) const;
  272.  
  273. virtual unsigned long
  274.   contentsSize ( ) const;
  275.  
  276. virtual Boolean
  277.   setContents  ( const IString& data );
  278.  
  279. virtual void
  280.  *object       ( ) const;
  281.  
  282. virtual IDMItem
  283.  &setObject    ( void*          pointerToObject );
  284.  
  285. /*--------------------------- Item Utilities ---------------------------------*/
  286. static Handle
  287.   sourceItemFor     ( const Handle& targetItem );
  288.  
  289. Boolean
  290.   isTargetTheSource ( ) const;
  291.  
  292.  
  293. protected:
  294. /*-------------------------------- Source Name -------------------------------*/
  295. IString
  296.   generateSourceName ( );
  297.  
  298. /*--------------------------------- Item Data --------------------------------*/
  299. IString
  300.   strContents;
  301.  
  302.  
  303. private:
  304. /*--------------------------------- Private ----------------------------------*/
  305. friend class IDMSourceOperation;
  306. friend class IDMTargetOperation;
  307. friend class IDMSourceRenderEvent;
  308. friend class IDMSourceRenderer;
  309. friend class IDMTargetRenderer;
  310. friend class IDMTargetEndEvent;
  311. friend class IDMItemUtilities;
  312. friend class IDMTargetOperationData;
  313. friend class IDragInfoWrapper;
  314. friend class IDMTargetRendererData;
  315. friend class IDMItemData;
  316.  
  317. unsigned long
  318.   dragSupOps,
  319.   dragAttrs;
  320.  
  321. IWindowHandle
  322.   sourceWndh;
  323.  
  324. IDMImage
  325.  *pIDMImage;
  326.  
  327. ISize
  328.   sizeImageOffset;
  329.  
  330. IString
  331.   strContainerName,
  332.   strSourceName,
  333.   strTargetName,
  334.   strTypes,
  335.   strRMFs,
  336.   strSelectedRMF;
  337.  
  338. IDMSourceOperation
  339.  *pDMSrcOperation;
  340.  
  341. IDMTargetOperation
  342.  *pDMTgtOperation;
  343.  
  344. unsigned
  345.   rendererPosition;
  346.  
  347. DropIndicator
  348.   drpStatus;
  349.  
  350. void
  351.  *pObject;
  352.  
  353. Boolean
  354.   bTargetTheSource;
  355.  
  356.  
  357. IDragItemWrapper
  358.  *pDragItemWrapper;
  359.  
  360. _DRAGITEM
  361.  *PMDragItem    ( );
  362.  
  363. void
  364.   setPMDragItem ( _DRAGITEM* pDragItem ),
  365.   asPMDragItem  ( _DRAGITEM* pDragItem );
  366.  
  367. static IString
  368.   stringFromHandle ( const IStringHandle& hstr ),
  369.   nextRMOrRFFrom   ( const IString&       rmfs,
  370.                      unsigned&            position );
  371.  
  372. IStringHandle
  373.   handleFromString ( IString              inputStr);
  374.  
  375. static void
  376.   setHSTR          ( unsigned long&       oldHSTR,
  377.                      const IStringHandle& newHSTR );
  378.  
  379. IDMItemData
  380.  *fDMItemData;
  381.  
  382. }; // IDMItem
  383.  
  384. #pragma pack()
  385.  
  386.   #include <idmitem.inl>
  387.  
  388. #endif // _IDMITEM_
  389.