comparison dw.hpp @ 2893:5ae86b395927

C++: Implement the Tree widget.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Fri, 23 Dec 2022 02:18:48 +0000
parents 387a6242fa77
children 5a6bf6bd3001
comparison
equal deleted inserted replaced
2892:387a6242fa77 2893:5ae86b395927
1016 bool ItemEnterConnected, ColumnClickConnected; 1016 bool ItemEnterConnected, ColumnClickConnected;
1017 #ifdef DW_CPP11 1017 #ifdef DW_CPP11
1018 std::function<int(char *)> _ConnectItemEnter; 1018 std::function<int(char *)> _ConnectItemEnter;
1019 std::function<int(int)> _ConnectColumnClick; 1019 std::function<int(int)> _ConnectColumnClick;
1020 #else 1020 #else
1021 int (*_ConnectItemEnter)(HTREEITEM, char *, void *); 1021 int (*_ConnectItemEnter)(char *);
1022 int (*_ConnectColumnClick)(char *, int, int, void *); 1022 int (*_ConnectColumnClick)(int);
1023 #endif 1023 #endif
1024 static int _OnItemEnter(HWND window, char *text, void *data) { 1024 static int _OnItemEnter(HWND window, char *text, void *data) {
1025 if(reinterpret_cast<Containers *>(data)->_ConnectItemEnter) 1025 if(reinterpret_cast<Containers *>(data)->_ConnectItemEnter)
1026 return reinterpret_cast<Containers *>(data)->_ConnectItemEnter(text); 1026 return reinterpret_cast<Containers *>(data)->_ConnectItemEnter(text);
1027 return reinterpret_cast<Containers *>(data)->OnItemEnter(text); 1027 return reinterpret_cast<Containers *>(data)->OnItemEnter(text);
1133 void SetColumnTitle(const char *title) { dw_filesystem_set_column_title(hwnd, title); } 1133 void SetColumnTitle(const char *title) { dw_filesystem_set_column_title(hwnd, title); }
1134 void SetFile(int row, const char *filename, HICN icon) { dw_filesystem_set_file(hwnd, allocpointer, row, filename, icon); } 1134 void SetFile(int row, const char *filename, HICN icon) { dw_filesystem_set_file(hwnd, allocpointer, row, filename, icon); }
1135 void SetItem(int column, int row, void *data) { dw_filesystem_set_item(hwnd, allocpointer, column, row, data); } 1135 void SetItem(int column, int row, void *data) { dw_filesystem_set_item(hwnd, allocpointer, column, row, data); }
1136 }; 1136 };
1137 1137
1138 class Tree : virtual public Focusable, virtual public ObjectView
1139 {
1140 private:
1141 bool TreeExpandConnected;
1142 #ifdef DW_CPP11
1143 std::function<int(HTREEITEM)> _ConnectTreeExpand;
1144 #else
1145 int (*_ConnectTreeExpand)(HTREEITEM);
1146 #endif
1147 static int _OnTreeExpand(HWND window, HTREEITEM item, void *data) {
1148 if(reinterpret_cast<Tree *>(data)->_ConnectTreeExpand)
1149 return reinterpret_cast<Tree *>(data)->_ConnectTreeExpand(item);
1150 return reinterpret_cast<Tree *>(data)->OnTreeExpand(item);
1151 }
1152 void SetupTree() {
1153 if(IsOverridden(Tree::OnTreeExpand, this)) {
1154 dw_signal_connect(hwnd, DW_SIGNAL_TREE_EXPAND, DW_SIGNAL_FUNC(_OnTreeExpand), this);
1155 TreeExpandConnected = true;
1156 }
1157 }
1158 protected:
1159 // Our signal handler functions to be overriden...
1160 // If they are not overridden and an event is generated, remove the unused handler
1161 virtual int OnTreeExpand(HTREEITEM item) {
1162 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_TREE_EXPAND);
1163 TreeExpandConnected = false;
1164 return FALSE;
1165 }
1166 public:
1167 // Constructors
1168 Tree(unsigned long id) { SetHWND(dw_tree_new(id)); SetupObjectView(); SetupTree(); }
1169 Tree() { SetHWND(dw_tree_new(0)); SetupObjectView(); SetupTree(); }
1170
1171 // User functions
1172 void Clear() { dw_tree_clear(hwnd); }
1173 HTREEITEM GetParent(HTREEITEM item) { return dw_tree_get_parent(hwnd, item); }
1174 char *GetTitle(HTREEITEM item) { return dw_tree_get_title(hwnd, item); }
1175 HTREEITEM Insert(const char *title, HICN icon, HTREEITEM parent, void *itemdata) { return dw_tree_insert(hwnd, title, icon, parent, itemdata); }
1176 HTREEITEM Insert(const char *title, HTREEITEM item, HICN icon, HTREEITEM parent, void *itemdata) { return dw_tree_insert_after(hwnd, item, title, icon, parent, itemdata); }
1177 void Change(HTREEITEM item, const char *title, HICN icon) { dw_tree_item_change(hwnd, item, title, icon); }
1178 void Collapse(HTREEITEM item) { dw_tree_item_collapse(hwnd, item); }
1179 void Delete(HTREEITEM item) { dw_tree_item_delete(hwnd, item); }
1180 void Expand(HTREEITEM item) { dw_tree_item_expand(hwnd, item); }
1181 void *GetData(HTREEITEM item) { dw_tree_item_get_data(hwnd, item); }
1182 void Select(HTREEITEM item) { dw_tree_item_select(hwnd, item); }
1183 void SetData(HTREEITEM item, void *itemdata) { dw_tree_item_set_data(hwnd, item, itemdata); }
1184 #ifdef DW_CPP11
1185 void ConnectTreeExpand(std::function<int(HTREEITEM)> userfunc)
1186 #else
1187 void ConnectTreeExpand(int (*userfunc)(HTREEITEM))
1188 #endif
1189 {
1190 _ConnectTreeExpand = userfunc;
1191 if(!TreeExpandConnected) {
1192 dw_signal_connect(hwnd, DW_SIGNAL_TREE_EXPAND, DW_SIGNAL_FUNC(_OnTreeExpand), this);
1193 TreeExpandConnected = true;
1194 }
1195 }
1196 };
1197
1198
1138 class App 1199 class App
1139 { 1200 {
1140 protected: 1201 protected:
1141 App() { } 1202 App() { }
1142 static App *_app; 1203 static App *_app;