Mercurial > dwindows
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; |