demo_popup.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #include "ftk.h"
  2. static Ret button_close_clicked(void* ctx, void* obj)
  3. {
  4. ftk_widget_unref(ctx);
  5. return RET_OK;
  6. }
  7. static FtkListItemInfo g_infos[4];
  8. static Ret on_menu_item_clicked(void* ctx, void* data)
  9. {
  10. FtkListItemInfo* info = data;
  11. ftk_logd("%s: %s is selected\n", __func__, info->text);
  12. return RET_OK;
  13. }
  14. static Ret button_normal_clicked(void* ctx, void* obj)
  15. {
  16. FtkBitmap* icon = ftk_theme_load_image(ftk_default_theme(), "info"FTK_STOCK_IMG_SUFFIX);
  17. FtkWidget* thiz = ftk_popup_menu_create(0, 0, 0, 200, icon, "Edit");
  18. size_t i = 0;
  19. for(i = 0; i < FTK_ARRAY_SIZE(g_infos); i++)
  20. {
  21. g_infos[i].type = FTK_LIST_ITEM_NORMAL;
  22. ftk_popup_menu_add(thiz, g_infos+i);
  23. }
  24. ftk_bitmap_unref(icon);
  25. ftk_widget_show_all(thiz, 1);
  26. return RET_OK;
  27. }
  28. static Ret button_radio_clicked(void* ctx, void* obj)
  29. {
  30. FtkBitmap* icon = ftk_theme_load_image(ftk_default_theme(), "info"FTK_STOCK_IMG_SUFFIX);
  31. FtkWidget* thiz = ftk_popup_menu_create(0, 0, 0, 200, icon, "Edit");
  32. size_t i = 0;
  33. for(i = 0; i < FTK_ARRAY_SIZE(g_infos); i++)
  34. {
  35. g_infos[i].type = FTK_LIST_ITEM_RADIO;
  36. g_infos[i].state = i == 0;
  37. ftk_popup_menu_add(thiz, g_infos+i);
  38. }
  39. ftk_bitmap_unref(icon);
  40. ftk_widget_show_all(thiz, 1);
  41. return RET_OK;
  42. }
  43. static Ret button_check_clicked(void* ctx, void* obj)
  44. {
  45. FtkBitmap* icon = ftk_theme_load_image(ftk_default_theme(), "info"FTK_STOCK_IMG_SUFFIX);
  46. FtkWidget* thiz = ftk_popup_menu_create(0, 0, 0, 200, icon, "Edit");
  47. size_t i = 0;
  48. for(i = 0; i < FTK_ARRAY_SIZE(g_infos); i++)
  49. {
  50. g_infos[i].type = FTK_LIST_ITEM_CHECK;
  51. g_infos[i].state = i%2;
  52. ftk_popup_menu_add(thiz, g_infos+i);
  53. }
  54. ftk_bitmap_unref(icon);
  55. ftk_widget_show_all(thiz, 1);
  56. return RET_OK;
  57. }
  58. #ifdef FTK_AS_PLUGIN
  59. #include "ftk_app_demo.h"
  60. FTK_HIDE int FTK_MAIN(int argc, char* argv[]);
  61. FtkApp* ftk_app_demo_popup_create()
  62. {
  63. return ftk_app_demo_create(_("popup"), ftk_main);
  64. }
  65. #else
  66. #define FTK_HIDE extern
  67. #endif /*FTK_AS_PLUGIN*/
  68. FTK_HIDE int FTK_MAIN(int argc, char* argv[])
  69. {
  70. int width = 0;
  71. int height = 0;
  72. FtkWidget* win = NULL;
  73. FtkWidget* button = NULL;
  74. FTK_INIT(argc, argv);
  75. g_infos[0].text = "Copy";
  76. g_infos[1].text = "Paste";
  77. g_infos[2].text = "Cut";
  78. g_infos[3].text = "Select All";
  79. g_infos[0].extra_user_data = on_menu_item_clicked;
  80. g_infos[1].extra_user_data = on_menu_item_clicked;
  81. g_infos[2].extra_user_data = on_menu_item_clicked;
  82. g_infos[3].extra_user_data = on_menu_item_clicked;
  83. win = ftk_app_window_create();
  84. width = ftk_widget_width(win);
  85. height = ftk_widget_height(win);
  86. button = ftk_button_create(win, 0, height/6, width/3, 50);
  87. ftk_widget_set_text(button, "Normal");
  88. ftk_button_set_clicked_listener(button, button_normal_clicked, NULL);
  89. button = ftk_button_create(win, 2*width/3, height/6, width/3, 50);
  90. ftk_widget_set_text(button, "Radio");
  91. ftk_button_set_clicked_listener(button, button_radio_clicked, NULL);
  92. button = ftk_button_create(win, 0, height/2, width/3, 50);
  93. ftk_widget_set_text(button, "CheckBox");
  94. ftk_button_set_clicked_listener(button, button_check_clicked, NULL);
  95. button = ftk_button_create(win, 2*width/3, height/2, width/3, 50);
  96. ftk_widget_set_text(button, "Quit");
  97. ftk_button_set_clicked_listener(button, button_close_clicked, win);
  98. ftk_widget_set_text(win, "pupup");
  99. ftk_widget_show_all(win, 1);
  100. FTK_QUIT_WHEN_WIDGET_CLOSE(win);
  101. FTK_RUN();
  102. return 0;
  103. }