Hello! I have a problem with TreeViewFunctions. When i try to select multiple lines with my mouse i get instant crash.
Here is my Select function:
void Tree::Select(void* root, void* userdata, void* obj, Int32 mode)
{
TreeNode* res = (TreeNode*)obj;
if (!res) return;
if (!res->root) {
switch (mode)
{
case SELECTION_NEW:
parent->clickID.clear();
parent->SelectClick(&(*res->arrayCell));
break;
case SELECTION_ADD:
parent->SelectClick(&(*res->arrayCell));
break;
case SELECTION_SUB:
parent->clickID.erase(std::find(parent->clickID.begin(), parent->clickID.end(), &(*res->arrayCell)));
break;
}
}
else {
switch (mode)
{
case SELECTION_NEW:
parent->objID.clear();
parent->SelectObject(&(*res->cell));
break;
case SELECTION_ADD:
parent->SelectObject(&(*res->cell));
break;
case SELECTION_SUB:
parent->objID.erase(std::find(parent->objID.begin(), parent->objID.end(), &(*res->cell)));
break;
}
}
}
And Tree class with TreeNode:
class TreeNode {
public:
Bool root = false, open = false;
MainMap::iterator cell;
MainMapCellArray::iterator arrayCell;
TreeNode* next = nullptr;
TreeNode* pred = nullptr;
TreeNode* down = nullptr;
};
class Tree : public TreeViewFunctions {
public:
ManageDialog* parent;
MainMap* lst;
Int32 currObj;
Int32 level = 0;
virtual void* GetFirst(void* root, void* userdata);
virtual void* GetNext(void* root, void* userdata, void* obj);
virtual void* GetDown(void* root, void* userdata, void* obj);
virtual void DrawCell(void* root, void* userdata, void* obj, Int32 col, DrawInfo* drawinfo, const GeData& bgColor);
virtual Bool IsSelected(void* root, void* userdata, void* obj);
virtual Bool IsOpened(void* root, void* userdata, void* obj);
virtual String GetName(void* root, void* userdata, void* obj);
virtual Int GetId(void* root, void* userdata, void* obj);
virtual void* GetPred(void* root, void* userdata, void* obj);
virtual void CreateContextMenu(void* root, void* userdata, void* obj, Int32 lColumn, BaseContainer* bc);
virtual Bool ContextMenuCall(void* root, void* userdata, void* obj, Int32 lColumn, Int32 lCommand);
virtual void Select(void* root, void* userdata, void* obj, Int32 mode);
virtual void Open(void* root, void* userdata, void* obj, Bool onoff);
virtual void InsertObject(void* root, void* userdata, void* obj, Int32 dragtype, void* dragobject, Int32 insertmode, Bool bCopy);
virtual Int32 AcceptDragObject(void* root, void* userdata, void* obj, Int32 dragtype, void* dragobject, Bool& bAllowCopy);
virtual Int32 GetDragType(void* root, void* userdata, void* obj);
virtual Int32 GetHeaderColumnWidth(void* root, void* userdata, Int32 col, GeUserArea* area);
virtual void SetName(void* root, void* userdata, void* obj, const maxon::String& str);
virtual Int32 DoubleClick(void* root, void* userdata, void* obj, Int32 col, MouseInfo* mouseinfo);
};
Few questions:
When i select with mouse drag, what does Select get as obj
? Is that an array of TreeNodes or TreeView recursively calls Select for each element?
When i do return;
at start of Select i still get crash, i suppose problem can be in something else. What should i do to make it work properly?
Thanks!