GUIDEMO_Treeview.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577
  1. /*********************************************************************
  2. * SEGGER Microcontroller GmbH & Co. KG *
  3. * Solutions for real time microcontroller applications *
  4. **********************************************************************
  5. * *
  6. * (c) 1996 - 2015 SEGGER Microcontroller GmbH & Co. KG *
  7. * *
  8. * Internet: www.segger.com Support: support@segger.com *
  9. * *
  10. **********************************************************************
  11. ** emWin V5.32 - Graphical user interface for embedded applications **
  12. All Intellectual Property rights in the Software belongs to SEGGER.
  13. emWin is protected by international copyright laws. Knowledge of the
  14. source code may not be used to write a similar product. This file may
  15. only be used in accordance with the following terms:
  16. The software has been licensed to STMicroelectronics International
  17. N.V. a Dutch company with a Swiss branch and its headquarters in Plan-
  18. les-Ouates, Geneva, 39 Chemin du Champ des Filles, Switzerland for the
  19. purposes of creating libraries for ARM Cortex-M-based 32-bit microcon_
  20. troller products commercialized by Licensee only, sublicensed and dis_
  21. tributed under the terms and conditions of the End User License Agree_
  22. ment supplied by STMicroelectronics International N.V.
  23. Full source code is available at: www.segger.com
  24. We appreciate your understanding and fairness.
  25. ----------------------------------------------------------------------
  26. Licensing information
  27. Licensor: SEGGER Software GmbH
  28. Licensed to: STMicroelectronics International NV
  29. Licensed SEGGER software: emWin
  30. License number: GUI-00429
  31. License model: Buyout SRC [Buyout Source Code License, signed November 29th 2012]
  32. Licensed product: -
  33. Licensed platform: STMs ARM Cortex-M based 32 BIT CPUs
  34. Licensed number of seats: -
  35. ----------------------------------------------------------------------
  36. File : GUIDEMO_Treeview.c
  37. Purpose : Treeview demo
  38. ----------------------------------------------------------------------
  39. */
  40. #include "GUIDEMO.h"
  41. #if (SHOW_GUIDEMO_TREEVIEW && GUI_WINSUPPORT)
  42. /*********************************************************************
  43. *
  44. * Types
  45. *
  46. **********************************************************************
  47. */
  48. enum {
  49. JOB_INC_SEL = 1,
  50. JOB_DEC_SEL,
  51. JOB_OPEN,
  52. JOB_CLOSE,
  53. JOB_SETIMAGE,
  54. JOB_SETROWMODE,
  55. JOB_HIDELINES,
  56. JOB_SHOWLINES
  57. };
  58. /*********************************************************************
  59. *
  60. * ACTION_ITEM
  61. */
  62. typedef struct {
  63. int Delay;
  64. int Job;
  65. const char * pDescription;
  66. } ACTION_ITEM;
  67. /*********************************************************************
  68. *
  69. * SPRITE
  70. */
  71. typedef struct {
  72. int xPos; // X-position of sprite
  73. int yPos; // Y-position of sprite
  74. int dx; // X-step
  75. int dy; // Y-step
  76. int NumImages; // Number of images in apImages
  77. GUI_CONST_STORAGE GUI_BITMAP ** apImages; // Pointer to images
  78. GUI_HSPRITE hSprite; // Handle of sprite
  79. int Index; // Index of currently used bitmap
  80. } SPRITE;
  81. /*********************************************************************
  82. *
  83. * Static data
  84. *
  85. **********************************************************************
  86. */
  87. /*********************************************************************
  88. *
  89. * _bmSmilie
  90. */
  91. static const GUI_COLOR _ColorsSmilie[] = {
  92. #if (GUI_USE_ARGB)
  93. 0xFFFFFFFF, 0xFF000000, 0xFF70FF70
  94. #else
  95. 0xFFFFFF, 0x000000, 0x70FF70
  96. #endif
  97. };
  98. static const GUI_LOGPALETTE _PalSmilie = {
  99. 3, // Number of entries
  100. 1, // Has transparency
  101. &_ColorsSmilie[0]
  102. };
  103. static const unsigned char _acSmilie[] = {
  104. 0x00, 0x55, 0x40, 0x00, 0x01, 0xAA, 0x90, 0x00,
  105. 0x06, 0xAA, 0xA4, 0x00, 0x19, 0x6A, 0x59, 0x00,
  106. 0x69, 0x6A, 0x5A, 0x40, 0x6A, 0xA6, 0xAA, 0x40,
  107. 0x6A, 0xA6, 0xAA, 0x40, 0x6A, 0xA6, 0xAA, 0x40,
  108. 0x6A, 0xAA, 0xAA, 0x40, 0x1A, 0x6A, 0x69, 0x00,
  109. 0x06, 0x95, 0xA4, 0x00, 0x01, 0xAA, 0x90, 0x00,
  110. 0x00, 0x55, 0x40, 0x00
  111. };
  112. static const GUI_BITMAP _bmSmilie = {
  113. 13, // XSize
  114. 13, // YSize
  115. 4, // BytesPerLine
  116. 2, // BitsPerPixel
  117. _acSmilie, // Pointer to picture data (indices)
  118. &_PalSmilie // Pointer to palette
  119. };
  120. /*********************************************************************
  121. *
  122. * _bmBookOpen
  123. */
  124. static GUI_CONST_STORAGE GUI_COLOR _ColorsBookOpen[] = {
  125. #if (GUI_USE_ARGB)
  126. 0xFFFF0000, 0xFFFFFFFF, 0xFF000000, 0xFF008000, 0xFF808080, 0xFFC0C0C0
  127. #else
  128. 0x0000FF, 0xFFFFFF, 0x000000, 0x008000, 0x808080, 0xC0C0C0
  129. #endif
  130. };
  131. static GUI_CONST_STORAGE GUI_LOGPALETTE _PalBookOpen = {
  132. 6, // Number of entries
  133. 1, // Has transparency
  134. &_ColorsBookOpen[0]
  135. };
  136. static GUI_CONST_STORAGE unsigned char _acBookOpen[] = {
  137. 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  138. 0x04, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  139. 0x23, 0x15, 0x40, 0x00, 0x04, 0x44, 0x00, 0x00,
  140. 0x23, 0x11, 0x40, 0x04, 0x41, 0x14, 0x00, 0x00,
  141. 0x23, 0x11, 0x54, 0x41, 0x11, 0x14, 0x22, 0x00,
  142. 0x23, 0x11, 0x12, 0x51, 0x11, 0x14, 0x13, 0x20,
  143. 0x23, 0x11, 0x12, 0x51, 0x11, 0x14, 0x13, 0x20,
  144. 0x23, 0x11, 0x12, 0x51, 0x11, 0x14, 0x13, 0x20,
  145. 0x23, 0x11, 0x12, 0x51, 0x11, 0x14, 0x13, 0x20,
  146. 0x23, 0x11, 0x12, 0x51, 0x11, 0x14, 0x13, 0x20,
  147. 0x23, 0x31, 0x12, 0x51, 0x11, 0x45, 0x13, 0x20,
  148. 0x02, 0x33, 0x12, 0x51, 0x44, 0x51, 0x13, 0x20,
  149. 0x00, 0x23, 0x12, 0x44, 0x51, 0x11, 0x13, 0x20,
  150. 0x00, 0x02, 0x33, 0x33, 0x33, 0x33, 0x33, 0x20,
  151. 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20
  152. };
  153. static GUI_CONST_STORAGE GUI_BITMAP _bmBookOpen = {
  154. 15, // XSize
  155. 15, // YSize
  156. 8, // BytesPerLine
  157. 4, // BitsPerPixel
  158. _acBookOpen, // Pointer to picture data (indices)
  159. &_PalBookOpen // Pointer to palette
  160. };
  161. /*********************************************************************
  162. *
  163. * _bmBookClosed
  164. */
  165. static GUI_CONST_STORAGE GUI_COLOR _ColorsBookClosed[] = {
  166. #if (GUI_USE_ARGB)
  167. 0xFFFF0000,0xFF008000,0xFF000000,0xFFC0C0C0
  168. #else
  169. 0x0000FF,0x008000,0x000000,0xC0C0C0
  170. #endif
  171. };
  172. static GUI_CONST_STORAGE GUI_LOGPALETTE _PalBookClosed = {
  173. 4, // number of entries
  174. 1, // Has transparency
  175. &_ColorsBookClosed[0]
  176. };
  177. static GUI_CONST_STORAGE unsigned char _acBookClosed[] = {
  178. 0x00, 0x02, 0x80, 0x00,
  179. 0x00, 0x29, 0x60, 0x00,
  180. 0x02, 0x95, 0x58, 0x00,
  181. 0x29, 0x55, 0x56, 0x00,
  182. 0x95, 0x55, 0x55, 0x80,
  183. 0xA5, 0x55, 0x55, 0x60,
  184. 0x99, 0x55, 0x55, 0x58,
  185. 0x96, 0x55, 0x55, 0x5A,
  186. 0x95, 0x95, 0x55, 0xAC,
  187. 0x25, 0x65, 0x5A, 0xFC,
  188. 0x09, 0x59, 0xAF, 0xFA,
  189. 0x02, 0x56, 0xFF, 0xE8,
  190. 0x00, 0x96, 0xFE, 0x80,
  191. 0x00, 0x26, 0xE8, 0x00,
  192. 0x00, 0x0A, 0x80, 0x00
  193. };
  194. static GUI_CONST_STORAGE GUI_BITMAP _bmBookClosed = {
  195. 16, // XSize
  196. 15, // YSize
  197. 4, // BytesPerLine
  198. 2, // BitsPerPixel
  199. _acBookClosed, // Pointer to picture data (indices)
  200. &_PalBookClosed // Pointer to palette
  201. };
  202. #if GUIDEMO_SHOW_SPRITES
  203. /*********************************************************************
  204. *
  205. * Dolphin bitmap arrays
  206. */
  207. static GUI_CONST_STORAGE GUI_BITMAP * _apImages_0[] = {
  208. &bmDolphin_00,
  209. &bmDolphin_01,
  210. &bmDolphin_02,
  211. &bmDolphin_03,
  212. &bmDolphin_04,
  213. };
  214. static GUI_CONST_STORAGE GUI_BITMAP * _apImages_1[] = {
  215. &bmDolphin_10,
  216. &bmDolphin_11,
  217. &bmDolphin_12,
  218. &bmDolphin_13,
  219. &bmDolphin_14,
  220. };
  221. /*********************************************************************
  222. *
  223. * Sprite array
  224. */
  225. static SPRITE _aSprite[] = {
  226. { -90, 20, 10, 3, GUI_COUNTOF(_apImages_1), _apImages_1 },
  227. { 290, 150, -8, -2, GUI_COUNTOF(_apImages_0), _apImages_0 },
  228. };
  229. #endif
  230. /*********************************************************************
  231. *
  232. * _aAction
  233. */
  234. static const ACTION_ITEM _aAction[] = {
  235. { 600, JOB_INC_SEL, "Moving cursor..." },
  236. { 500, JOB_OPEN, NULL },
  237. { 400, JOB_INC_SEL, NULL },
  238. { 300, JOB_OPEN, NULL },
  239. { 200, JOB_INC_SEL, NULL },
  240. { 200, JOB_INC_SEL, "Open and close nodes..." },
  241. { 200, JOB_INC_SEL, NULL },
  242. { 200, JOB_INC_SEL, NULL },
  243. { 200, JOB_OPEN, NULL },
  244. { 200, JOB_INC_SEL, NULL },
  245. { 200, JOB_INC_SEL, NULL },
  246. { 200, JOB_INC_SEL, NULL },
  247. { 200, JOB_INC_SEL, NULL },
  248. { 200, JOB_OPEN, NULL },
  249. { 900, JOB_SETROWMODE, "Change selection mode..." },
  250. { 900, JOB_DEC_SEL, NULL },
  251. { 10, JOB_DEC_SEL, NULL },
  252. { 10, JOB_DEC_SEL, NULL },
  253. { 10, JOB_DEC_SEL, NULL },
  254. { 10, JOB_DEC_SEL, NULL },
  255. { 10, JOB_DEC_SEL, NULL },
  256. { 10, JOB_DEC_SEL, NULL },
  257. { 10, JOB_DEC_SEL, NULL },
  258. { 10, JOB_DEC_SEL, NULL },
  259. { 200, JOB_CLOSE, NULL },
  260. { 200, JOB_OPEN, NULL },
  261. { 200, JOB_CLOSE, NULL },
  262. { 200, JOB_OPEN, NULL },
  263. { 900, JOB_SETIMAGE, "Setting images..." },
  264. { 100, JOB_INC_SEL, NULL },
  265. { 100, JOB_INC_SEL, NULL },
  266. { 100, JOB_SETIMAGE, NULL },
  267. { 100, JOB_INC_SEL, NULL },
  268. { 100, JOB_SETIMAGE, NULL },
  269. { 100, JOB_INC_SEL, NULL },
  270. { 100, JOB_SETIMAGE, NULL },
  271. { 900, JOB_HIDELINES, "Show/hide lines..." },
  272. { 200, JOB_SHOWLINES, NULL },
  273. { 200, JOB_HIDELINES, NULL },
  274. { 200, JOB_SHOWLINES, NULL },
  275. { 200, JOB_HIDELINES, NULL },
  276. { 200, JOB_SHOWLINES, NULL },
  277. {1800, 0, NULL },
  278. };
  279. /*********************************************************************
  280. *
  281. * Static code
  282. *
  283. **********************************************************************
  284. */
  285. /*********************************************************************
  286. *
  287. * _MoveSprite
  288. */
  289. #if GUIDEMO_SHOW_SPRITES
  290. static void _MoveSprite(SPRITE * pSprite, int xMax, int yMax) {
  291. //
  292. // Set new index
  293. //
  294. pSprite->Index += 1;
  295. if (pSprite->Index >= pSprite->NumImages) {
  296. pSprite->Index = 0;
  297. }
  298. //
  299. // Adjust X-position
  300. //
  301. pSprite->xPos += pSprite->dx;
  302. if (pSprite->xPos > xMax) {
  303. pSprite->xPos = -(int)pSprite->apImages[pSprite->Index]->XSize;
  304. }
  305. if (pSprite->xPos < -(int)pSprite->apImages[pSprite->Index]->XSize) {
  306. pSprite->xPos = xMax;
  307. }
  308. //
  309. // Adjust Y-position
  310. //
  311. pSprite->yPos += pSprite->dy;
  312. if (pSprite->yPos < 0) {
  313. pSprite->dy = -pSprite->dy;
  314. }
  315. if (pSprite->yPos > (yMax - pSprite->apImages[pSprite->Index]->YSize)) {
  316. pSprite->dy = -pSprite->dy;
  317. }
  318. //
  319. // Change sprite
  320. //
  321. GUI_SPRITE_SetBitmapAndPosition(pSprite->hSprite, pSprite->apImages[pSprite->Index], pSprite->xPos, pSprite->yPos);
  322. }
  323. #endif
  324. /*********************************************************************
  325. *
  326. * _InitTreeview
  327. *
  328. * Function description
  329. * Adds some data to the treeview widget
  330. */
  331. static void _InitTreeview(WM_HWIN hTree) {
  332. TREEVIEW_ITEM_Handle hItem, hNode;
  333. hNode = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_NODE, 0, 0, "Local disk");
  334. hItem = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_NODE, hNode, TREEVIEW_INSERT_FIRST_CHILD, "Pictures");
  335. TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_NODE, hItem, TREEVIEW_INSERT_BELOW, "Movies");
  336. hNode = TREEVIEW_GetItem(hTree, 0, TREEVIEW_GET_FIRST);
  337. hNode = TREEVIEW_GetItem(hTree, hNode, TREEVIEW_GET_FIRST_CHILD);
  338. hItem = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_NODE, hNode, TREEVIEW_INSERT_FIRST_CHILD, "BMP");
  339. hItem = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_NODE, hItem, TREEVIEW_INSERT_BELOW, "GIF");
  340. hItem = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_NODE, hItem, TREEVIEW_INSERT_BELOW, "JPEG");
  341. TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_NODE, hItem, TREEVIEW_INSERT_BELOW, "PNG");
  342. hNode = TREEVIEW_GetItem(hTree, hNode, TREEVIEW_GET_FIRST_CHILD);
  343. hItem = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_LEAF, hNode, TREEVIEW_INSERT_FIRST_CHILD, "Cat.bmp");
  344. hItem = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_LEAF, hItem, TREEVIEW_INSERT_BELOW, "Dog.bmp");
  345. TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_LEAF, hItem, TREEVIEW_INSERT_BELOW, "Frog.bmp");
  346. hNode = TREEVIEW_GetItem(hTree, hNode, TREEVIEW_GET_NEXT_SIBLING);
  347. hItem = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_LEAF, hNode, TREEVIEW_INSERT_FIRST_CHILD, "Flowchart.gif");
  348. hItem = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_LEAF, hItem, TREEVIEW_INSERT_BELOW, "Projects.gif");
  349. TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_LEAF, hItem, TREEVIEW_INSERT_BELOW, "Interlaced.gif");
  350. hNode = TREEVIEW_GetItem(hTree, hNode, TREEVIEW_GET_NEXT_SIBLING);
  351. hItem = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_LEAF, hNode, TREEVIEW_INSERT_FIRST_CHILD, "Tree.jpeg");
  352. hItem = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_LEAF, hItem, TREEVIEW_INSERT_BELOW, "Joerg.jpeg");
  353. TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_LEAF, hItem, TREEVIEW_INSERT_BELOW, "Paul.jpeg");
  354. hNode = TREEVIEW_GetItem(hTree, hNode, TREEVIEW_GET_NEXT_SIBLING);
  355. TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_LEAF, hNode, TREEVIEW_INSERT_FIRST_CHILD, "Parrot.png");
  356. hNode = TREEVIEW_GetItem(hTree, hNode, TREEVIEW_GET_PARENT);
  357. hNode = TREEVIEW_GetItem(hTree, hNode, TREEVIEW_GET_NEXT_SIBLING);
  358. hItem = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_LEAF, hNode, TREEVIEW_INSERT_FIRST_CHILD, "Smilie.gif");
  359. TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_LEAF, hItem, TREEVIEW_INSERT_BELOW, "Cats.gif");
  360. TREEVIEW_SetAutoScrollH(hTree, 1);
  361. TREEVIEW_SetAutoScrollV(hTree, 1);
  362. TREEVIEW_ITEM_Expand(TREEVIEW_GetItem(hTree, 0, TREEVIEW_GET_FIRST));
  363. WM_SetFocus(hTree);
  364. }
  365. /*********************************************************************
  366. *
  367. * _Action
  368. *
  369. * Function description
  370. * Does some action with the treeview widget
  371. */
  372. static void _Action(WM_HWIN hTree, int xSize, int ySize) {
  373. TREEVIEW_ITEM_Handle hItem;
  374. TREEVIEW_ITEM_INFO Info;
  375. I32 TimeNext;
  376. unsigned Index;
  377. #if GUIDEMO_SHOW_SPRITES
  378. unsigned i;
  379. #else
  380. GUI_USE_PARA(xSize);
  381. GUI_USE_PARA(ySize);
  382. #endif
  383. Index = 0;
  384. do {
  385. TimeNext = GUIDEMO_GetTime() + _aAction[Index].Delay;
  386. if (_aAction[Index].pDescription) {
  387. GUIDEMO_SetInfoText(_aAction[Index].pDescription);
  388. }
  389. do {
  390. if (GUIDEMO_CheckCancel()) {
  391. return;
  392. }
  393. #if GUIDEMO_SHOW_SPRITES
  394. if (GUIDEMO_GetConfFlag(GUIDEMO_CF_SHOW_SPRITES)) {
  395. for (i = 0; i < GUI_COUNTOF(_aSprite); i++) {
  396. _MoveSprite(&_aSprite[i], xSize, ySize);
  397. }
  398. }
  399. #endif
  400. GUI_Delay(100);
  401. } while (GUIDEMO_GetTime() < TimeNext);
  402. hItem = TREEVIEW_GetSel(hTree);
  403. TREEVIEW_ITEM_GetInfo(hItem, &Info);
  404. switch (_aAction[Index].Job) {
  405. case JOB_HIDELINES:
  406. TREEVIEW_SetHasLines(hTree, 0);
  407. break;
  408. case JOB_SHOWLINES:
  409. TREEVIEW_SetHasLines(hTree, 1);
  410. break;
  411. case JOB_SETROWMODE:
  412. TREEVIEW_SetSelMode(hTree, TREEVIEW_SELMODE_ROW);
  413. break;
  414. case JOB_SETIMAGE:
  415. if (Info.IsNode) {
  416. if (Info.IsExpanded) {
  417. TREEVIEW_ITEM_SetImage(hItem, TREEVIEW_BI_OPEN, &_bmBookOpen);
  418. } else {
  419. TREEVIEW_ITEM_SetImage(hItem, TREEVIEW_BI_CLOSED, &_bmBookClosed);
  420. }
  421. } else {
  422. TREEVIEW_ITEM_SetImage(hItem, TREEVIEW_BI_LEAF, &_bmSmilie);
  423. }
  424. break;
  425. case JOB_INC_SEL:
  426. TREEVIEW_IncSel(hTree);
  427. break;
  428. case JOB_DEC_SEL:
  429. TREEVIEW_DecSel(hTree);
  430. break;
  431. case JOB_OPEN:
  432. TREEVIEW_ITEM_Expand(hItem);
  433. break;
  434. case JOB_CLOSE:
  435. TREEVIEW_ITEM_Collapse(hItem);
  436. break;
  437. }
  438. } while (++Index < GUI_COUNTOF(_aAction));
  439. }
  440. /*********************************************************************
  441. *
  442. * _cbDialog
  443. *
  444. * Function description
  445. * Callback of dialog
  446. */
  447. static void _cbDialog(WM_MESSAGE * pMsg) {
  448. WM_HWIN hItem;
  449. WM_HWIN hDlg;
  450. hDlg = pMsg->hWin;
  451. switch (pMsg->MsgId) {
  452. case WM_INIT_DIALOG:
  453. hItem = WM_GetDialogItem(hDlg, GUI_ID_TREEVIEW0);
  454. _InitTreeview(hItem);
  455. break;
  456. case WM_PAINT:
  457. break;
  458. }
  459. }
  460. /*********************************************************************
  461. *
  462. * _DemoTreeview
  463. *
  464. * Function description
  465. * Creates the dialog and starts the demo
  466. */
  467. static void _DemoTreeview(void) {
  468. GUI_WIDGET_CREATE_INFO aCreate[] = {
  469. { FRAMEWIN_CreateIndirect, "Explorer", 0, 0, 0, 0, 0 },
  470. { TREEVIEW_CreateIndirect, NULL, GUI_ID_TREEVIEW0, 0, 0, 0, 0 },
  471. };
  472. #if GUIDEMO_SHOW_SPRITES
  473. unsigned i;
  474. #endif
  475. WM_HWIN hClient;
  476. WM_HWIN hTree;
  477. WM_HWIN hWin;
  478. int xSizeClient;
  479. int ySizeClient;
  480. int xSize;
  481. int ySize;
  482. xSize = LCD_GetXSize();
  483. ySize = LCD_GetYSize();
  484. aCreate[0].xSize = xSize / 2;
  485. aCreate[0].ySize = ySize;
  486. aCreate[1].xSize = xSize / 2;
  487. aCreate[1].ySize = ySize;
  488. hWin = GUI_CreateDialogBox(aCreate, GUI_COUNTOF(aCreate), _cbDialog, WM_HBKWIN, 0, 0);
  489. hClient = WM_GetClientWindow(hWin);
  490. xSizeClient = WM_GetWindowSizeX(hClient);
  491. ySizeClient = WM_GetWindowSizeY(hClient);
  492. hTree = WM_GetDialogItem(hWin, GUI_ID_TREEVIEW0);
  493. WM_SetSize(hTree, xSizeClient, ySizeClient);
  494. //
  495. // Create the sprites
  496. //
  497. #if GUIDEMO_SHOW_SPRITES
  498. if (GUIDEMO_GetConfFlag(GUIDEMO_CF_SHOW_SPRITES)) {
  499. for (i = 0; i < GUI_COUNTOF(_aSprite); i++) {
  500. _aSprite[i].hSprite = GUI_SPRITE_Create(_aSprite[i].apImages[0], _aSprite[i].xPos, _aSprite[i].yPos);
  501. }
  502. }
  503. #endif
  504. _Action(hTree, xSize, ySize);
  505. //
  506. // Delete the sprites
  507. //
  508. #if GUIDEMO_SHOW_SPRITES
  509. if (GUIDEMO_GetConfFlag(GUIDEMO_CF_SHOW_SPRITES)) {
  510. for (i = 0; i < GUI_COUNTOF(_aSprite); i++) {
  511. GUI_SPRITE_Delete(_aSprite[i].hSprite);
  512. }
  513. }
  514. #endif
  515. WM_DeleteWindow(hWin);
  516. }
  517. /*********************************************************************
  518. *
  519. * Public code
  520. *
  521. **********************************************************************
  522. */
  523. /*********************************************************************
  524. *
  525. * GUIDEMO_Treeview
  526. */
  527. void GUIDEMO_Treeview(void) {
  528. GUIDEMO_ConfigureDemo("Treeview widget", "Shows a hierarchical view of\nthe files in a directory and\nsome moving sprites", GUIDEMO_SHOW_INFO | GUIDEMO_SHOW_CONTROL);
  529. GUIDEMO_DrawBk();
  530. _DemoTreeview();
  531. GUIDEMO_NotifyStartNext();
  532. }
  533. #else
  534. void GUIDEMO_Treeview_C(void);
  535. void GUIDEMO_Treeview_C(void) {}
  536. #endif // SHOW_GUIDEMO_TREEVIEW && GUI_WINSUPPORT
  537. /*************************** End of file ****************************/