demo_listview.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #include "ftk.h"
  2. #include "ftk_list_view.h"
  3. #include "ftk_list_render_default.h"
  4. #include "ftk_list_model_default.h"
  5. #define IDC_TEST_BUTTON 1000
  6. static int g_index = 0;
  7. static FtkBitmap* left_icon = NULL;
  8. static FtkBitmap* right_icon = NULL;
  9. static Ret button_quit_clicked(void* ctx, void* obj)
  10. {
  11. ftk_widget_unref(ctx);
  12. return RET_OK;
  13. }
  14. static Ret button_more_clicked(void* ctx, void* obj)
  15. {
  16. int i = 0;
  17. char text[32] = {0};
  18. FtkListItemInfo info = {0};
  19. FtkListModel* model = ctx;
  20. for(i = 0; i < 4; i++)
  21. {
  22. g_index++;
  23. ftk_snprintf(text, sizeof(text), "item%04d", g_index);
  24. info.text = (text);
  25. info.left_icon = left_icon;
  26. info.right_icon = right_icon;
  27. info.type = g_index%4;
  28. ftk_list_model_add(model, &info);
  29. }
  30. return RET_OK;
  31. }
  32. Ret on_item_clicked(void* ctx, void* list)
  33. {
  34. FtkListItemInfo* info = NULL;
  35. FtkListModel* model = ftk_list_view_get_model(list);
  36. int i = ftk_list_view_get_selected(list);
  37. ftk_list_model_get_data(model, i, (void**)&info);
  38. if(info != NULL)
  39. {
  40. info->state = !info->state;
  41. }
  42. ftk_logd("%s: %d/%d\n", __func__,
  43. ftk_list_view_get_selected(list),
  44. ftk_list_model_get_total(model));
  45. return RET_OK;
  46. }
  47. #ifdef FTK_AS_PLUGIN
  48. #include "ftk_app_demo.h"
  49. FTK_HIDE int FTK_MAIN(int argc, char* argv[]);
  50. FtkApp* ftk_app_demo_listview_create()
  51. {
  52. return ftk_app_demo_create(_("listview"), ftk_main);
  53. }
  54. #else
  55. #define FTK_HIDE extern
  56. #endif /*FTK_AS_PLUGIN*/
  57. FTK_HIDE int FTK_MAIN(int argc, char* argv[])
  58. {
  59. int width = 0;
  60. int height = 0;
  61. FtkWidget* win = NULL;
  62. FtkWidget* button = NULL;
  63. FtkWidget* list = NULL;
  64. FtkListModel* model = NULL;
  65. FtkListRender* render = NULL;
  66. FtkListItemInfo info = {0};
  67. char filename[FTK_MAX_PATH+1] = {0};
  68. FTK_INIT(argc, argv);
  69. win = ftk_app_window_create();
  70. width = ftk_widget_width(win);
  71. height = ftk_widget_height(win);
  72. list = ftk_list_view_create(win, 10, 5, width - 20, 3 * height/4-5);
  73. ftk_list_view_set_clicked_listener(list, on_item_clicked, NULL);
  74. model = ftk_list_model_default_create(10);
  75. render = ftk_list_render_default_create();
  76. ftk_snprintf(filename, FTK_MAX_PATH, "%s/alarm/%s",
  77. ftk_config_get_test_data_dir(ftk_default_config()), FTK_STOCK_IMG_SUFFIX);
  78. left_icon = ftk_bitmap_factory_load(ftk_default_bitmap_factory(), filename);
  79. ftk_snprintf(filename, FTK_MAX_PATH, "%s/search/%s",
  80. ftk_config_get_test_data_dir(ftk_default_config()), FTK_STOCK_IMG_SUFFIX);
  81. right_icon = ftk_bitmap_factory_load(ftk_default_bitmap_factory(), filename);
  82. g_index = 0;
  83. for(g_index = 0; g_index < 4; g_index++)
  84. {
  85. info.text = "滚动文字:Only those who attempt the absurd can achieve the impossible.";
  86. info.left_icon = left_icon;
  87. info.right_icon = right_icon;
  88. info.type = g_index%4;
  89. ftk_list_model_add(model, &info);
  90. }
  91. ftk_list_render_default_set_marquee_attr(render, FTK_MARQUEE_AUTO | FTK_MARQUEE_RIGHT2LEFT | FTK_MARQUEE_FOREVER);
  92. ftk_list_view_init(list, model, render, 40);
  93. ftk_list_model_unref(model);
  94. button = ftk_button_create(win, width/4, 3 * height/4 + 5, width/4, 60);
  95. ftk_widget_set_text(button, "more");
  96. ftk_widget_set_font_size(button, 20);
  97. ftk_button_set_clicked_listener(button, button_more_clicked, model);
  98. button = ftk_button_create(win, width/2, 3 * height/4 + 5, width/4, 60);
  99. ftk_widget_set_text(button, "quit");
  100. ftk_button_set_clicked_listener(button, button_quit_clicked, win);
  101. ftk_window_set_focus(win, button);
  102. ftk_widget_set_text(win, "list view demo");
  103. ftk_widget_show_all(win, 1);
  104. FTK_QUIT_WHEN_WIDGET_CLOSE(win);
  105. FTK_RUN();
  106. return 0;
  107. }