class EditableTree : public TreeCtrl { public: typedef EditableTree CLASSNAME; EditableTree() : selId_(0) { editNode_.SetCtrl(edit_); edit_.SetFrame(NullFrame()); OpenDeep(0, true); WhenSel = THISBACK(OnSelect); } void AddNode() { CloseEdit(); selId_ = Add(0); Open(selId_); BeginEdit(); } void BeginEdit() { editNode_.image = selNode_.image; SetNode(selId_, editNode_); String editval = "NODE" + AsString(selId_); edit_.SetData(editval); edit_.Show(); edit_.AutoSize(); edit_.SetFocus();//todo: at first not select because IsOpen is false*. edit_.SetSelection(editval.GetCount()); } void CloseEdit() { if (selId_ > 0) { selNode_.value = ~edit_; SetNode(selId_, Node(~edit_)); edit_.Hide(); } } void OnSelect() { CloseEdit(); selId_ = GetSel()[0]; selNode_ = GetNode(selId_); BeginEdit(); } private: int selId_; EditString edit_; Node selNode_; Node editNode_; }; GUI_APP_MAIN { TopWindow wnd; Button btn; wnd.Add(btn.SetLabel("Add").LeftPos(10).TopPos(10)); EditableTree tree; wnd.Add(tree.VSizePos(40).HSizePos()); btn <<= callback(&tree, &EditableTree::AddNode); wnd.Run(); }
Report message to a moderator