Logo Search packages:      
Sourcecode: codeblocks version File versions  Download package

wxFNBDropTarget.h

#ifndef _WX_FNB_DROP_TARGET_H 
#define _WX_FNB_DROP_TARGET_H

#include <wx/wx.h>
#include <wx/dnd.h>

/**
\brief Contains the information about dragged page (page index and container).
*/
00010 class wxFNBDragInfo
{
      wxWindow * m_Container;
      int m_PageIndex;  
public:           
      /**
      Constructor
      \param container - pointer to wxPageContainer object which contains dragged page
      \param pageindex - index of dragged page
      */
00020       wxFNBDragInfo(wxWindow * container, int pageindex) : m_Container(container), m_PageIndex(pageindex){} 

      /**
       * \brief default constructor
       */
00025       wxFNBDragInfo() : m_Container(0), m_PageIndex(0){} 

      /**
      Returns wxPageContainer object which contains dragged page
      */
00030       wxWindow * GetContainer() {return m_Container;}

      /**
      Returns the index of dragged page
      */
00035       int GetPageIndex() {return m_PageIndex;}
};

class wxFNBDragInfoDataObject : public wxDataObjectSimple
{
public:
    wxFNBDragInfoDataObject(const wxDataFormat& format):wxDataObjectSimple(format)
    {}

    wxFNBDragInfo DragInfo;

    wxFNBDragInfo *GetData()
    {
        return &DragInfo;
    }

    // get the size of our data
    virtual size_t GetDataSize() const
    { return sizeof(wxFNBDragInfo); }

    // copy our data to the buffer
    virtual bool GetDataHere(void *buf) const
    {
        memcpy(buf, &DragInfo, sizeof(wxFNBDragInfo));
        return true;
    }

    // copy data from buffer to our data
    virtual bool SetData(size_t WXUNUSED(len), const void *buf)
    {
        // don't check the len. Under Win98 the value of 'len' == 0
        memcpy(&DragInfo, buf, sizeof(wxFNBDragInfo));
        return true;
    }
};

/**
\brief Used for processing drag-n-drop opeartions
*/
template <class T>
00075 class wxFNBDropTarget : public wxDropTarget
{
private:
      typedef wxDragResult (T::*pt2Func)(wxCoord, wxCoord, int, wxWindow *);
      T* m_pParent;
      pt2Func m_pt2CallbackFunc;
      wxFNBDragInfoDataObject * m_DataObject;
public:
      /**
      \brief Constructor
      \param pParent - Object that will handle drag-n-drop operation
      \param pt2CallbackFunc - Pointer to callback method which should be called after dragging the notebook page
      */
00088     wxFNBDropTarget(T* pParent, pt2Func pt2CallbackFunc)
            : m_pParent(pParent)
            , m_pt2CallbackFunc(pt2CallbackFunc)
            , m_DataObject(NULL)
      {
            m_DataObject = new wxFNBDragInfoDataObject(wxDataFormat(wxT("wxFNB")));
            SetDataObject(m_DataObject);
      }
      /**
      \brief Virtual Destructor
      */
00099       virtual ~wxFNBDropTarget(void) {}
      /**
      \brief Used for processing drop operation
      \param x - X-coordinate
      \param y - Y-coordinate
      \param def - Result of drag-n-drop operation
      */
00106     virtual wxDragResult OnData(wxCoord x, wxCoord y, wxDragResult WXUNUSED(def))
      {           
            GetData();
            wxFNBDragInfo * draginfo = (wxFNBDragInfo *)m_DataObject->GetData();
            if(!draginfo) 
            {
                  return wxDragNone;
            }
            return (m_pParent->*m_pt2CallbackFunc)(x, y, draginfo->GetPageIndex(), (T *)draginfo->GetContainer());      
      }
};

/**
 * \ingroup wxFlatNotebook
 * This class represents a source for a drag and drop operation
 * We override wxDropSource class to provide user with a feedback
 *
 * \version 1.0
 * first version
 *
 * \date 10-11-2006
 *
 * \author Eran
 */
00130 class wxFNBDropSource : public wxDropSource 
{
      wxWindow* m_win;
public:
      /**
       * Parameterized constructor
       * \param win 
       * \param iconCopy 
       * \param iconMove 
       * \param iconNone 
       */
00141       wxFNBDropSource(wxWindow* win = NULL)
      : wxDropSource(win)
            , m_win( win )
      {
      }

      /**
       * Destructor
       */
00150       virtual ~wxFNBDropSource()
      {
      }

      /**
       * give some custom UI feedback during the drag and drop operation in this function. It is called on each mouse move, so your implementation must not be too slow
       * \param effect The effect to implement. One of wxDragCopy, wxDragMove, wxDragLink and wxDragNone
       * \return 
       */
      virtual bool GiveFeedback(wxDragResult effect);
};
#endif

Generated by  Doxygen 1.6.0   Back to index