TreeViewFunctions Resize and Move Columns
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 18/02/2009 at 08:40, xxxxxxxx wrote:
User Information:
Cinema 4D Version: 11
Platform: Windows ; Mac ; Mac OSX ;
Language(s) : C++ ;---------
Sorry but I can't figure out how to do resizing and moving columns in a TreeView created by code?
Any idea anyone?> virtual Bool UserCanResizeCol(void* root, void* userdata, LONG lColID);
> virtual Bool UserCanMoveCol(void* root, void* userdata, LONG lColID);
> virtual Bool ColumnMoved(void* root, void* userdata, LONG lColID, LONG lInsertBeforeCol, LONG* plIndexMap);don't seem to do a lot even if I return TRUE in the first two...
Best regards and thanks in advance
Macm -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 24/02/2009 at 09:24, xxxxxxxx wrote:
I get the feeling I have to do it all by myself (with Timer(), a polling loop, SetMousePointer(), storing the column weights and all that stuff?).
Am I right? (Please tell me I am not
Best
Macm -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 25/02/2009 at 03:47, xxxxxxxx wrote:
You probably have just forgotten to set the TREEVIEW_MOVE_COLUMN and TREEVIEW_RESIZE_HEADER container elements to TRUE.
Here is a simple working example (just diplays the current object hierarchy)
>
\> #define ID_ACTIVEOBJECT 1000472 \> \> #include "c4d.h" \> #include "c4d_symbols.h" \> #include "c4d_colors.h" \> \> \> struct DebugNode \> { \> }; \> \> \> class Function2 : public TreeViewFunctions \> { \> public: \> virtual void\* GetFirst(void \*root,void \*userdata) \> { \> return GetActiveDocument()->GetFirstObject(); \> } \> \> virtual void\* GetNext(void \*root,void \*userdata,void \*obj) \> { \> return ((BaseObject\* )obj)->GetNext(); \> } \> \> virtual void\* GetPred(void \*root,void \*userdata,void \*obj) \> { \> return ((BaseObject\* )obj)->GetPred(); \> } \> \> virtual void\* GetDown(void \*root,void \*userdata,void \*obj) \> { \> return ((BaseObject\* )obj)->GetDown(); \> } \> \> virtual Bool IsSelected(void\* root, void\* userdata, void\* obj) \> { \> return FALSE; \> } \> \> virtual void Select(void\* root, void\* userdata, void\* obj, LONG mode) \> { \> } \> \> virtual Bool IsOpened(void\* root, void\* userdata, void\* obj) \> { \> return TRUE; \> } \> \> virtual void Open(void\* root, void\* userdata, void\* obj, Bool onoff) \> { \> } \> \> virtual String GetName(void\* root, void\* userdata, void\* obj) \> { \> return ((BaseObject\* )obj)->GetName(); \> } \> \> virtual VLONG GetId(void\* root, void\* userdata, void\* obj) \> { \> return ((BaseObject\* )obj)->GetType(); \> } \> \> virtual LONG GetDragType(void\* root, void\* userdata, void\* obj) \> { \> return NOTOK; \> } \> \> virtual LONG GetHeaderColumnWidth(void \*root,void \*userdata,LONG col,GeUserArea \*ua) \> { \> if (!ua) return 0; \> return ua->DrawGetTextWidth("8888")+4; \> } \> \> virtual LONG GetColumnWidth(void \*root,void \*userdata,void \*obj,LONG col, GeUserArea\* pArea) \> { \> return pArea->DrawGetTextWidth("0123456789"); \> } \> \> virtual Bool DrawHeaderCell(void \*root, void \*userdata, LONG col, DrawInfo \*drawinfo) \> { \> String name; \> drawinfo->frame->DrawSetPen(COLOR_BG); \> drawinfo->frame->DrawRectangle(drawinfo->xpos, drawinfo->ypos, drawinfo->xpos + drawinfo->width-1, drawinfo->ypos + drawinfo->height-1); \> drawinfo->frame->DrawSetFont(FONT_STANDARD); \> \> switch (col) \> { \> case 'tree': name = "Hierarchy"; break; \> case 'drt0': name = "Column1"; break; \> case 'drt1': name = "Column2"; break; \> case 'drt2': name = "Column3"; break; \> } \> \> drawinfo->frame->DrawSetTextCol(COLOR_TEXT,COLOR_BG); \> drawinfo->frame->DrawText(name,drawinfo->xpos+4,drawinfo->ypos); \> \> drawinfo->frame->DrawSetPen(COLOR_EDGEWH); \> drawinfo->frame->DrawLine(drawinfo->xpos, drawinfo->ypos, drawinfo->xpos + drawinfo->width-1, drawinfo->ypos ); \> drawinfo->frame->DrawLine(drawinfo->xpos, drawinfo->ypos, drawinfo->xpos, drawinfo->ypos + drawinfo->height-1); \> \> drawinfo->frame->DrawSetPen(COLOR_EDGEDK); \> drawinfo->frame->DrawLine(drawinfo->xpos + drawinfo->width-1, drawinfo->ypos, drawinfo->xpos + drawinfo->width-1, drawinfo->ypos + drawinfo->height-1); \> drawinfo->frame->DrawLine(drawinfo->xpos, drawinfo->ypos + drawinfo->height-1, drawinfo->xpos + drawinfo->width-1, drawinfo->ypos + drawinfo->height-1); \> \> return TRUE; \> } \> \> \> virtual Bool UserCanResizeCol(void \*root, void \*userdata, LONG lColID) \> { \> return TRUE; \> } \> \> virtual Bool UserCanMoveCol(void \*root, void \*userdata, LONG lColID) \> { \> return TRUE; \> } \> \> virtual Bool ColumnMoved(void \*root, void \*userdata, LONG lColID, LONG lInsertBeforeCol, LONG\* plIndexMap, const BaseContainer\* pbcLayout) \> { \> return TRUE; \> } \> \> \> \> } functable; \> \> \> class ActiveObjectDialog : public GeDialog \> { \> private: \> TreeViewCustomGui \*tree; \> DebugNode root_of_docs; \> \> \> public: \> ActiveObjectDialog(); \> \> virtual Bool CreateLayout(void); \> virtual Bool InitValues(void); \> virtual void DestroyWindow(); \> virtual Bool Command(LONG id,const BaseContainer &msg;); \> virtual Bool CoreMessage(LONG id,const BaseContainer &msg;); \> }; \> \> ActiveObjectDialog::ActiveObjectDialog() \> { \> tree = NULL; \> } \> \> void ActiveObjectDialog::DestroyWindow() \> { \> tree = NULL; \> } \> \> Bool ActiveObjectDialog::CreateLayout(void) \> { \> // first call the parent instance \> Bool res = GeDialog::CreateLayout(); \> \> SetTitle("C++SDK Demo - Active Object Properties"); \> \> GroupBegin(0,BFH_SCALEFIT|BFV_SCALEFIT,0,0,String(),0); \> BaseContainer treedata; \> treedata.SetBool(TREEVIEW_BORDER, TRUE); \> treedata.SetBool(TREEVIEW_HAS_HEADER, TRUE); \> treedata.SetBool(TREEVIEW_FIXED_LAYOUT, TRUE); \> treedata.SetBool(TREEVIEW_MOVE_COLUMN, TRUE); \> treedata.SetBool(TREEVIEW_RESIZE_HEADER, TRUE); \> tree = (TreeViewCustomGui\* )AddCustomGui(10001,CUSTOMGUI_TREEVIEW,String(),BFH_SCALEFIT|BFV_SCALEFIT,0,0,treedata); \> GroupEnd(); \> \> if (tree) \> { \> BaseContainer layout; \> layout.SetLong('tree',LV_TREE); \> layout.SetLong('drt0',LV_USER); \> layout.SetLong('drt1',LV_USER); \> layout.SetLong('drt2',LV_USER); \> tree->SetLayout(4,layout); \> } \> \> return res; \> } \> \> Bool ActiveObjectDialog::InitValues(void) \> { \> // first call the parent instance \> if (!GeDialog::InitValues()) return FALSE; \> \> if (tree) \> { \> tree->SetRoot(&root;\_of_docs,&functable;,NULL); \> tree->Refresh(); \> } \> \> return TRUE; \> } \> \> Bool ActiveObjectDialog::Command(LONG id,const BaseContainer &msg;) \> { \> // switch (id) \> { \> } \> return GeDialog::Command(id,msg); \> } \> \> \> \> Bool ActiveObjectDialog::CoreMessage(LONG id,const BaseContainer &msg;) \> { \> // switch (id) \> { \> } \> return GeDialog::CoreMessage(id,msg); \> } \> \> \> \> class ActiveObjectDialogCommand : public CommandData \> { \> public: \> ActiveObjectDialog dlg; \> \> virtual Bool Execute(BaseDocument \*doc) \> { \> return dlg.Open(TRUE,ID_ACTIVEOBJECT,-1,-1,500,300); \> } \> \> virtual LONG GetState(BaseDocument \*doc) \> { \> return CMD_ENABLED; \> } \> \> virtual Bool RestoreLayout(void \*secret) \> { \> return dlg.RestoreLayout(ID_ACTIVEOBJECT,0,secret); \> } \> }; \> \> \> Bool RegisterActiveObjectDlg(void) \> { \> // decide by name if the plugin shall be registered - just for user convenience \> String name=GeLoadString(IDS_ACTIVEOBJECT); if (!name.Content()) return TRUE; \> return RegisterCommandPlugin(ID_ACTIVEOBJECT,name,0,NULL,String("C++ SDK Active Object"),gNew ActiveObjectDialogCommand); \> } \>
cheers,
Matthias -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 25/02/2009 at 03:54, xxxxxxxx wrote:
Oh thanks Matthias,
you made my day
Best
Macm