00001
00002
00003
00004
00005
00006
00007
00008 #ifndef FXEXTREELIST_H
00009 #define FXEXTREELIST_H
00010
00011 #ifndef FXTREELIST_H
00012 #include <fox/FXTreeList.h>
00013 using namespace FX;
00014 #endif
00015 namespace FXEX {
00016 class FXExTreeItem;
00017
00018
00019
00020
00021
00022 class FXAPI FXExTreeList: public FXTreeList {
00023 FXDECLARE(FXExTreeList)
00024
00025 protected:
00026 FXuint itemID;
00027 FXTextField* labelEdit;
00028 FXbool editable;
00029 FXExTreeItem* mEditItem;
00030 FXbool flgEditTimer;
00031 FXbool flgEnter;
00032 FXDragType* offerTypes;
00033 FXint offerCount;
00034 FXDragType* acceptTypes;
00035 FXint acceptCount;
00036 FXExTreeItem* dragItem;
00037 FXDragAction dragAction;
00038 FXDragAction exportMode;
00039 FXDragAction dropAction;
00040 FXbool isTarget;
00041 FXExTreeItem* targetItem;
00042 FXint targetState;
00043 FXint targetType;
00044 FXbool lastAcceptable;
00045
00046 protected:
00047
00048 FXExTreeList(){}
00049
00050 public:
00051 enum {
00052 ID_LABELEDIT=FXTreeList::ID_LAST,
00053 ID_EDITTIMER,
00054 ID_OPENTIMER,
00055 ID_EDITEND,
00056 ID_NEXTLINE,
00057 ID_LAST
00058 };
00059
00060 public:
00061 long onLeftBtnPress(FXObject* sender, FXSelector sel, void* ptr);
00062 long onLeftBtnRelease(FXObject* sender, FXSelector sel, void* ptr);
00063 long onEditTimer(FXObject* sender, FXSelector sel, void* ptr);
00064 long onEditKeyPress(FXObject* sender, FXSelector sel, void* ptr);
00065 long onKeyRelease(FXObject* sender, FXSelector sel, void* ptr);
00066 long onEditFocusOut(FXObject* sender, FXSelector sel, void* ptr);
00067 long onPaint(FXObject* sender, FXSelector sel, void* ptr);
00068 long onMotion(FXObject* sender, FXSelector sel, void* ptr);
00069 long onBeginDrag(FXObject* sender, FXSelector sel, void* ptr);
00070 long onEndDrag(FXObject* sender, FXSelector sel, void* ptr);
00071 long onDragged(FXObject* sender, FXSelector sel, void* ptr);
00072 long onDNDEnter(FXObject* sender, FXSelector sel, void* ptr);
00073 long onDNDLeave(FXObject* sender, FXSelector sel, void* ptr);
00074 long onDNDMotion(FXObject* sender, FXSelector sel, void* ptr);
00075 long onDNDRequest(FXObject* sender, FXSelector sel, void* ptr);
00076 long onDNDDrop(FXObject* sender, FXSelector sel, void* ptr);
00077 long onRightBtnRelease(FXObject* sender, FXSelector sel, void* ptr);
00078 long onOpenTimer(FXObject* sender, FXSelector sel, void* ptr);
00079 long onTipTimer(FXObject* sender, FXSelector sel, void* ptr);
00080 long onEditEnd(FXObject* sender, FXSelector sel, void* ptr);
00081
00082 public:
00083
00084 inline FXbool isEditable() const { return editable; }
00085
00086
00087 inline void setEditable(FXbool b) { editable = b; }
00088
00089
00090 inline void setExportMode(FXDragAction a) { exportMode = a; }
00091
00092
00093 inline FXbool isLastAcceptable() const { return lastAcceptable; }
00094
00095
00096 inline void setLastAcceptable(FXbool b) { lastAcceptable = b; }
00097
00098 public:
00099
00100 FXExTreeList(FXComposite *p,FXint nvis,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0);
00101
00102
00103 virtual FXTreeItem* createItem(const FXString& text,FXIcon* oi,FXIcon* ci,void* ptr);
00104
00105
00106 virtual FXExTreeItem* newItem(FXTreeItem* parent, FXTreeItem* prev, FXTreeItem* next);
00107
00108
00109 virtual FXTreeItem* copyItem(FXTreeItem* src,FXTreeItem* parent,FXTreeItem* prev,FXTreeItem* next, FXuint ignore=0);
00110
00111
00112 virtual FXTreeItem* moveItem(FXTreeItem* src, FXTreeItem* parent, FXTreeItem* prev, FXTreeItem* next);
00113
00114
00115 FXTreeItem* copySelectedItems(FXTreeItem* parent, FXTreeItem* prev, FXTreeItem* next, FXbool desel = TRUE);
00116
00117
00118 FXTreeItem* moveSelectedItems(FXTreeItem* parent, FXTreeItem* prev, FXTreeItem* next);
00119
00120
00121 void removeSelectedItems(FXuint ignore = 0);
00122
00123
00124 FXbool isAncestor(FXTreeItem* anc, FXTreeItem* desc);
00125
00126
00127 FXbool checkAncestor(FXTreeItem* src, FXTreeItem* parent, FXTreeItem* prev, FXTreeItem* next);
00128
00129
00130 void getItemPos(FXTreeItem* item, FXint& x, FXint& y);
00131
00132
00133 FXint getDescHeight(FXTreeItem* item);
00134
00135
00136 FXTreeItem* getAfterDelItem();
00137
00138
00139 void editItem(FXTreeItem* item, int how = 0);
00140
00141
00142 void editEnd();
00143
00144
00145 void editCancel();
00146
00147
00148 virtual void moveContents(FXint x, FXint y);
00149
00150
00151 virtual void beforeDrag() {}
00152
00153
00154 virtual void checkDrop(FXEvent* e);
00155
00156
00157 virtual void offerSelectedData(FXint type, FXStream* stream);
00158
00159
00160 virtual void offerData(FXint type, FXStream* stream, FXTreeItem* item){}
00161
00162
00163 virtual FXTreeItem* acceptData(FXint type, FXuchar* buffer, FXuint size, FXTreeItem* parent, FXTreeItem* prev, FXTreeItem* next) { return NULL; }
00164
00165
00166 FXbool isDragSource(FXTreeItem* item);
00167
00168
00169 virtual ~FXExTreeList();
00170 };
00171
00172 }
00173 #endif // FXEXTREELIST_H