// $Id: TVirtualDragManager.h,v 1.1 2004/09/08 16:03:57 brun Exp $
// Author: Valeriy Onuchin   12/08/04

/*************************************************************************
 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TVirtualDragManager
#define ROOT_TVirtualDragManager


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TVirtualDragManager                                                  //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TGFrame
#include "TGFrame.h"
#endif

enum EDragType { kDragNone, kDragMove, kDragCopy,
                 kDragLink, kDragLasso, kDragResize };


class TVirtualDragManager  {

protected:
   Bool_t         fMoveWaiting;  // kTRUE if source is clicked but not moved
   Bool_t         fDragging;     // in dragging mode?
   Bool_t         fDropping;     // drop is in progress
   Bool_t         fPasting;      // paste action is in progress
   EDragType      fDragType;     // dragging type
   TGFrame       *fSource;       // frame being dragged
   TGFrame       *fFrameUnder;   // frame under drag
   TGFrame       *fTarget;       // drop target
   TGFrame       *fPasteFrame;   //

protected:
   virtual void  Init();

public:
   TVirtualDragManager();
   virtual          ~TVirtualDragManager() {}

   EDragType         GetEDragType() const { return fDragType; }
   Bool_t            IsMoveWaiting() const { return fMoveWaiting; }
   Bool_t            IsDragging() const { return fDragging; }
   Bool_t            IsDropping() const { return fDropping; }
   Bool_t            IsPasting() const { return fPasting; }
   TGFrame          *GetTarget() const { return fTarget; }
   TGFrame          *GetSource() const { return fSource; }
   TGFrame          *GetFrameUnder() const { return fFrameUnder; }
   TGFrame          *GetPasteFrame() const { return fPasteFrame; }

   virtual void      SetTarget(TGFrame *f) { fTarget = f; }
   virtual void      SetSource(TGFrame *f) { fSource = f; }
   virtual void      SetPasteFrame(TGFrame *f) { fPasteFrame = f; }

   virtual Bool_t    StartDrag(TGFrame * = 0, Int_t = 0, Int_t = 0) { return kFALSE; }
   virtual Bool_t    EndDrag() { return kFALSE; }
   virtual Bool_t    Drop() { return kFALSE; }
   virtual Bool_t    Cancel(Bool_t = kTRUE) { return kFALSE; }

   virtual Bool_t    HandleEvent(Event_t *) { return kFALSE; }
   virtual Bool_t    HandleTimerEvent(Event_t *, TTimer *) { return kFALSE; }
   virtual Bool_t    IgnoreEvent(Event_t *) { return kTRUE; }
   virtual void      SetEditable(Bool_t) {}

   virtual Int_t     GetStrartDragX() const { return 0; }
   virtual Int_t     GetStrartDragY() const { return 0; }
   virtual Int_t     GetEndDragX() const { return 0; }
   virtual Int_t     GetEndDragY() const { return 0; }

   static  TVirtualDragManager  *Instance();

   ClassDef(TVirtualDragManager,0)  // drag and drop manager
};

R__EXTERN TVirtualDragManager *gDragManager; // global drag manager

#endif
 TVirtualDragManager.h:1
 TVirtualDragManager.h:2
 TVirtualDragManager.h:3
 TVirtualDragManager.h:4
 TVirtualDragManager.h:5
 TVirtualDragManager.h:6
 TVirtualDragManager.h:7
 TVirtualDragManager.h:8
 TVirtualDragManager.h:9
 TVirtualDragManager.h:10
 TVirtualDragManager.h:11
 TVirtualDragManager.h:12
 TVirtualDragManager.h:13
 TVirtualDragManager.h:14
 TVirtualDragManager.h:15
 TVirtualDragManager.h:16
 TVirtualDragManager.h:17
 TVirtualDragManager.h:18
 TVirtualDragManager.h:19
 TVirtualDragManager.h:20
 TVirtualDragManager.h:21
 TVirtualDragManager.h:22
 TVirtualDragManager.h:23
 TVirtualDragManager.h:24
 TVirtualDragManager.h:25
 TVirtualDragManager.h:26
 TVirtualDragManager.h:27
 TVirtualDragManager.h:28
 TVirtualDragManager.h:29
 TVirtualDragManager.h:30
 TVirtualDragManager.h:31
 TVirtualDragManager.h:32
 TVirtualDragManager.h:33
 TVirtualDragManager.h:34
 TVirtualDragManager.h:35
 TVirtualDragManager.h:36
 TVirtualDragManager.h:37
 TVirtualDragManager.h:38
 TVirtualDragManager.h:39
 TVirtualDragManager.h:40
 TVirtualDragManager.h:41
 TVirtualDragManager.h:42
 TVirtualDragManager.h:43
 TVirtualDragManager.h:44
 TVirtualDragManager.h:45
 TVirtualDragManager.h:46
 TVirtualDragManager.h:47
 TVirtualDragManager.h:48
 TVirtualDragManager.h:49
 TVirtualDragManager.h:50
 TVirtualDragManager.h:51
 TVirtualDragManager.h:52
 TVirtualDragManager.h:53
 TVirtualDragManager.h:54
 TVirtualDragManager.h:55
 TVirtualDragManager.h:56
 TVirtualDragManager.h:57
 TVirtualDragManager.h:58
 TVirtualDragManager.h:59
 TVirtualDragManager.h:60
 TVirtualDragManager.h:61
 TVirtualDragManager.h:62
 TVirtualDragManager.h:63
 TVirtualDragManager.h:64
 TVirtualDragManager.h:65
 TVirtualDragManager.h:66
 TVirtualDragManager.h:67
 TVirtualDragManager.h:68
 TVirtualDragManager.h:69
 TVirtualDragManager.h:70
 TVirtualDragManager.h:71
 TVirtualDragManager.h:72
 TVirtualDragManager.h:73
 TVirtualDragManager.h:74
 TVirtualDragManager.h:75
 TVirtualDragManager.h:76
 TVirtualDragManager.h:77
 TVirtualDragManager.h:78
 TVirtualDragManager.h:79
 TVirtualDragManager.h:80
 TVirtualDragManager.h:81
 TVirtualDragManager.h:82
 TVirtualDragManager.h:83
 TVirtualDragManager.h:84
 TVirtualDragManager.h:85
 TVirtualDragManager.h:86