You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
5.5 KiB
156 lines
5.5 KiB
/*********
|
|
*
|
|
* This file is part of BibleTime's source code, http://www.bibletime.info/.
|
|
*
|
|
* Copyright 1999-2006 by the BibleTime developers.
|
|
* The BibleTime source code is licensed under the GNU General Public License version 2.0.
|
|
*
|
|
**********/
|
|
|
|
|
|
|
|
#ifndef CDRAGDROPMGR_H
|
|
#define CDRAGDROPMGR_H
|
|
|
|
//TQt includes
|
|
#include <tqstring.h>
|
|
#include <tqcstring.h>
|
|
#include <tqdragobject.h>
|
|
#include <tqvaluelist.h>
|
|
|
|
//forward declarations
|
|
class TQDropEvent;
|
|
class TQWidget;
|
|
|
|
/** This class is the drag'n' drop manager for BibleTime.
|
|
* The dnd is managed by XML code, which defines the type of the drag/drop, the items and the action (moe, copy etc.).
|
|
* It's possible to create the XML code by passing a list of keys etc.
|
|
*
|
|
* Functions:
|
|
* - dnd_type(), returns either CDragDropMgr::Action_Drag or CDragDropMgr::Action_Drop
|
|
* - dnd_action(), returns either CDragDropMgr::Move or CDragDropMgr::Copy
|
|
* - dnd_acceptDrop(), returns true or false. True if the drop could be handled by the CDragDropMgr class, otherwise false
|
|
*
|
|
*
|
|
* The functions which create the XML stuff can't be reimplemented, too. Otherwise we could not guarantee for good XML code
|
|
* which works everywhere.
|
|
*
|
|
* @author The BibleTime team
|
|
*/
|
|
class CDragDropMgr {
|
|
public:
|
|
//The class which represents one single drag&drop entry (e.g. a bookmark or a portion of text)
|
|
class Item {
|
|
public:
|
|
/**
|
|
* The possible types of Drag&Drop actions.
|
|
*/
|
|
enum Type {
|
|
Bookmark = 0, /* A bookmark: Has a key, a module and a description*/
|
|
Text, /* Simple text, e.g. can be dropped on a module to start a search in this module using the dropped text */
|
|
Unknown /* For situatiosn like CDragDropMgr::dndType */
|
|
};
|
|
/**
|
|
* This function returns the type of drag this item has
|
|
*/
|
|
const CDragDropMgr::Item::Type& type() const;
|
|
/**
|
|
* Returns the key, ony valid if type() == Bookmark
|
|
*/
|
|
const TQString& bookmarkKey() const;
|
|
/**
|
|
* Returns the module name, ony valid if type() == Bookmark
|
|
*/
|
|
const TQString& bookmarkModule() const;
|
|
/**
|
|
* Returns the bookmark description, ony valid if type() == Bookmark
|
|
*/
|
|
const TQString& bookmarkDescription() const;
|
|
/**
|
|
* Returns the text which is used by this DragDrop Item, only valid if type() == Text
|
|
*/
|
|
const TQString& text() const;
|
|
|
|
// protected:
|
|
friend class CDragDropMgr;
|
|
/*
|
|
* We use protected constructor and destructor because creation of objects
|
|
* of this class sould only be possible for CDragDropMgr
|
|
*/
|
|
|
|
/** Constructor for a text item
|
|
* This constructor automatically sets the type member to Text
|
|
* This is also the default constructor
|
|
*/
|
|
Item(const TQString& text = TQString() );
|
|
/** Constructor for a Bookmark item
|
|
* This constructor automatically sets the type member to Bookmark
|
|
*/
|
|
Item(const TQString& moduleName, const TQString& key, const TQString& description);
|
|
virtual ~Item();
|
|
|
|
private:
|
|
Type m_type; //the member to save the type of the action
|
|
TQString m_bookmarkModuleName; //the modules which is used by this item, only valid for type() == Bookmark
|
|
TQString m_bookmarkKey; //the key of a bookmark, only valid if type() == Bookmark
|
|
TQString m_bookmarkDescription; //the description of a bookmark, only valid if type() == Bookmark
|
|
TQString m_text; //the text of this item, only valid if type() == Text
|
|
}
|
|
; //end of class CDragDropMgr::Item
|
|
|
|
//the item list we're using
|
|
typedef TQValueList<Item> ItemList;
|
|
|
|
/** Return whether the drop should be accepted
|
|
* This functions tests whether the drop should be accepted or not. It returns true if the drop object
|
|
* is supported by the CDragDropMgr and if it cotains valid data. Oterwise this function returns false.
|
|
*/
|
|
static const bool canDecode( const TQMimeSource* const mime );
|
|
/**
|
|
* This function returns the drag object with the data which represents the items given as parameter
|
|
* If the list is invalid or empty we return NULL.
|
|
*/
|
|
static TQDragObject* const dragObject( CDragDropMgr::ItemList& items, TQWidget* dragSource );
|
|
|
|
/**
|
|
* Decodes the XML stuff we passed to the dragObject at creation time.
|
|
* Returns a list of CDragDropMgr::Item objects.
|
|
* If it's a wrong dropEvent we return an empty ist
|
|
*/
|
|
static CDragDropMgr::ItemList decode( const TQMimeSource* const src );
|
|
/**
|
|
* Returns which type the given drop event has, if it's a mixed one (both bookmarks and plain text),
|
|
* which shouldn't happen, it return Item::Unknown.
|
|
* It also returns Unknown if the drop event is not supported.
|
|
*/
|
|
static CDragDropMgr::Item::Type dndType( const TQMimeSource* e );
|
|
|
|
protected:
|
|
//The class which represents our XML drag object stuff
|
|
class BTDrag : public TQTextDrag {
|
|
public:
|
|
BTDrag( const TQString& xml, TQWidget* dragSource = 0, const char* name = 0);
|
|
//reimplemented static publoc function to provide functionality for BibleTime XML drags
|
|
static bool canDecode( const TQMimeSource * e );
|
|
virtual bool provides( const char* type ) const;
|
|
virtual const char* format( int i = 0 ) const;
|
|
|
|
virtual TQByteArray encodedData( const char* type ) const;
|
|
|
|
protected:
|
|
friend class CDragDropMgr;
|
|
//made protected because the BibleTime classes may not manage the data of BTDrag
|
|
// virtual void setText(const TQString& text);
|
|
|
|
//made protected because the BibleTime classes should not manage the DRag&Drop stuff themself
|
|
static bool decode(const TQMimeSource* e, TQString& str);
|
|
static bool decode(const TQMimeSource* e, TQString& str, TQCString& subtype);
|
|
};
|
|
|
|
//protected constructor and destructor because we do not allow inheritance, functionality is provided by static functions
|
|
CDragDropMgr();
|
|
virtual ~CDragDropMgr();
|
|
};
|
|
|
|
#endif
|