home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / powergui / dm / dragview / dragview.cpp next >
Encoding:
C/C++ Source or Header  |  1996-10-29  |  7.4 KB  |  236 lines

  1. //*********************************************************
  2. // Direct Manipulation - Drag Information Viewer
  3. //
  4. // Copyright (C) 1994, Law, Leong, Love, Olson, Tsuji.
  5. // Copyright (c) 1997 John Wiley & Sons, Inc. 
  6. // All Rights Reserved.
  7. //*********************************************************
  8. #include <ibase.hpp>
  9. #include <iframe.hpp>
  10. #include <imle.hpp>
  11. #include <idmrendr.hpp>
  12. #include <idmhndlr.hpp>
  13. #include <idmevent.hpp>
  14. #include <idmprov.hpp>
  15. #include <idmimage.hpp>
  16. #include <idmcomm.hpp>
  17. #include <itrace.hpp>
  18. #include "dragview.hpp"
  19. #include "dragview.h"
  20.  
  21. /*------------------------------------------------------------------------------
  22. | main                                                                         |
  23. ------------------------------------------------------------------------------*/
  24. int main()
  25.   {
  26.   // Create the frame window.
  27.   IFrameWindow
  28.     frame( "Drag Information Viewer", WND_MAIN );
  29.  
  30.   // Create the MLE.
  31.   IMultiLineEdit
  32.     mle( 1000, &frame, &frame, IRectangle(),
  33.          IMultiLineEdit::defaultStyle()  &
  34.          ~IMultiLineEdit::wordWrap       |
  35.          IMultiLineEdit::horizontalScroll );
  36.  
  37.   // Replace default target renderer with the viewer target renderer.
  38.   DragViewTargetRenderer
  39.     targetRenderer;
  40.   IDMRenderer::setDefaultTargetRenderer( targetRenderer );
  41.  
  42.   // Enable the MLE as a target.
  43.   IDMHandler::enableDropOn( &mle );
  44.  
  45.   // Construct and set the item provider for the drag viewer item.
  46.   IDMItemProviderFor< DragViewItem >
  47.     itemProvider;
  48.  
  49.   mle.setItemProvider( &itemProvider );
  50.  
  51.   frame
  52.     .setClient( &mle )
  53.     .sizeTo( ISize(350, 300) )
  54.     .setFocus()
  55.     .show();
  56.  
  57.   IApplication::current().run();
  58.   return 0;
  59.   }
  60.  
  61.  
  62. DragViewItem::DragViewItem( const IDMItem::Handle& item )
  63.     : IDMItem( item )
  64.   {
  65.   IMODTRACE_DEVELOP( "DragViewItem::DragViewItem" );
  66.   }
  67.  
  68.  
  69. DragViewItem :: ~DragViewItem()
  70.   {
  71.   IMODTRACE_DEVELOP( "DragViewItem::~DragViewItem" );
  72.   }
  73.  
  74.  
  75. Boolean DragViewItem :: targetDrop( IDMTargetDropEvent& event )
  76.   {
  77.   IMODTRACE_DEVELOP( "DragViewItem::targetDrop" );
  78.  
  79.   // Determine via the rendering mechanism if this item represents
  80.   // an Open Class Library object.
  81.   if ( rmfs().includes( IDM::rmLibrary ) )
  82.     displayIOCItem( event );
  83.   else
  84.     displayItem( event );
  85.  
  86.   return(true);
  87.   }
  88.  
  89.  
  90. DragViewItem& DragViewItem::displayIOCItem( IDMTargetDropEvent& event )
  91.   {
  92.   IDMTargetOperation::Handle
  93.     pTgtOperH = IDMTargetOperation::targetOperation();
  94.   IMultiLineEdit
  95.    *pMLE = (IMultiLineEdit *)pTgtOperH->targetWindow();
  96.    IString
  97.      operation,
  98.      imageStyle;
  99.  
  100.   if ( pTgtOperH->operation() == IDMOperation::drag )
  101.     operation = "drag";
  102.   else if ( pTgtOperH->operation() == IDMOperation::move )
  103.     operation = "move";
  104.   else if ( pTgtOperH->operation() == IDMOperation::copy )
  105.     operation = "copy";
  106.   else if ( pTgtOperH->operation() == IDMOperation::link )
  107.     operation = "link";
  108.   else
  109.     operation = "unknown";
  110.  
  111.   if ( image().style() & IDMImage::bmp )
  112.     imageStyle = "Bitmap";
  113.   else if ( image().style() & IDMImage::ptr )
  114.     imageStyle = "Icon";
  115.   else if ( image().style() & IDMImage::polygon )
  116.     imageStyle = "Polygon";
  117.   else
  118.     imageStyle = "Unknown";
  119.  
  120.   pMLE->add( "******  Open Class Library Drag  ******" )
  121.        .add( "\r\n  Target Operation" )
  122.        .add( IString( "\r\n    >> operation = " + operation ) )
  123.        .add( "\r\n  Target Item" )
  124.        .add( IString( "\r\n    >> Source window = " +
  125.                              sourceWindowHandle().asString().d2x() ) )
  126.        .add( IString( "\r\n    >> Directory = " + containerName() ) )
  127.        .add( IString( "\r\n    >> File name = " + sourceName() ) )
  128.        .add( IString( "\r\n    >> Target name (suggested) = " + targetName() ) )
  129.        .add( IString( "\r\n    >> Types = " + types() ) )
  130.        .add( IString( "\r\n    >> RMFs = " + rmfs() ) )
  131.        .add( IString( "\r\n    >> object = " +
  132.                              IString( (unsigned long)object() ).d2x() ) )
  133.        .add( IString( "\r\n    >> contents = " + contents() ) )
  134.        .add( "\r\n  Drag Image" )
  135.        .add( IString( "\r\n    >> style = " + imageStyle ) )
  136.        .add( "\r\n  Target Drop Event" )
  137.        .add( IString( "\r\n    >> target info = " +
  138.                              IString( event.targetInfo() ) ) )
  139.        .add( IString( "\r\n    >> drop position = " +
  140.                              event.dropPosition().asString() ) )
  141.        .add( "\r\n---------------------------------------" )
  142.        .add( "\r\n\r\n" );
  143.  
  144.   return( *this );
  145.   }
  146.  
  147.  
  148. DragViewItem& DragViewItem::displayItem( IDMTargetDropEvent& event )
  149.   {
  150.   IDMTargetOperation::Handle
  151.     pTgtOperH = IDMTargetOperation::targetOperation();
  152.   IMultiLineEdit
  153.    *pMLE = (IMultiLineEdit *)pTgtOperH->targetWindow();
  154.    IString
  155.      operation,
  156.      imageStyle;
  157.  
  158.   if ( pTgtOperH->operation() == IDMOperation::drag )
  159.     operation = "drag";
  160.   else if ( pTgtOperH->operation() == IDMOperation::move )
  161.     operation = "move";
  162.   else if ( pTgtOperH->operation() == IDMOperation::copy )
  163.     operation = "copy";
  164.   else if ( pTgtOperH->operation() == IDMOperation::link )
  165.     operation = "link";
  166.   else
  167.     operation = "unknown";
  168.  
  169.   if ( image().style() & IDMImage::bmp )
  170.     imageStyle = "Bitmap";
  171.   else if ( image().style() & IDMImage::ptr )
  172.     imageStyle = "Icon";
  173.   else if ( image().style() & IDMImage::polygon )
  174.     imageStyle = "Polygon";
  175.   else
  176.     imageStyle = "Unknown";
  177.  
  178.   pMLE->add( "******  Desktop Drag  ******" )
  179.        .add( "\r\n  Target Operation" )
  180.        .add( IString( "\r\n    >> operation = " + operation ) )
  181.        .add( "\r\n  Target Item" )
  182.        .add( IString( "\r\n    >> Source window = " +
  183.                              sourceWindowHandle().asString().d2x() ) )
  184.        .add( IString( "\r\n    >> Directory = " + containerName() ) )
  185.        .add( IString( "\r\n    >> File name = " + sourceName() ) )
  186.        .add( IString( "\r\n    >> Target name (suggested) = " + targetName() ) )
  187.        .add( IString( "\r\n    >> Types = " + types() ) )
  188.        .add( IString( "\r\n    >> RMFs = " + rmfs() ) )
  189.        .add( "\r\n  Drag Image" )
  190.        .add( IString( "\r\n    >> style = " + imageStyle ) )
  191.        .add( "\r\n  Target Drop Event" )
  192.        .add( IString( "\r\n    >> target info = " +
  193.                              IString( event.targetInfo() ) ) )
  194.        .add( IString( "\r\n    >> drop position = " +
  195.                              event.dropPosition().asString() ) )
  196.        .add( "\r\n---------------------------------------" )
  197.        .add( "\r\n\r\n" );
  198.  
  199.   return( *this );
  200.   }
  201.  
  202.  
  203. DragViewTargetRenderer::DragViewTargetRenderer( )
  204.   {
  205.   }
  206.  
  207.  
  208. DragViewTargetRenderer::~DragViewTargetRenderer( )
  209.   {
  210.   }
  211.  
  212.  
  213. IDM::DropIndicator DragViewTargetRenderer::
  214.                    canRender( const IDMItem::Handle& )
  215.   {
  216.   return(IDM::ok);
  217.   }
  218.  
  219.  
  220. DragViewTargetRenderer& DragViewTargetRenderer::
  221.                         targetRender( IDMTargetDropEvent&    event,
  222.                                       const IDMItem::Handle& dragItem )
  223.   {
  224.   IMODTRACE_DEVELOP( "DragViewTargetRenderer::targetRender" );
  225.  
  226.   // Call targetDrop override for the drag viewer item.
  227.   Boolean
  228.     bRc = dragItem->targetDrop( event );
  229.  
  230.   // Indicate to the source that rendering of the item has completed.
  231.   informSourceOfCompletion( dragItem, ((bRc) ? IDM::targetSuccessful
  232.                                              : IDM::targetFailed) );
  233.  
  234.   return( *this );
  235.   }
  236.