demo_progress_bar.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include "ftk.h"
  2. #include "ftk_util.h"
  3. static void on_window_destroy(void* user_data)
  4. {
  5. FtkSource* timer = user_data;
  6. ftk_source_disable(timer);
  7. ftk_main_loop_remove_source(ftk_default_main_loop(), timer);
  8. return;
  9. }
  10. static Ret update_progress(void* ctx)
  11. {
  12. int percent = 0;
  13. char text[32] = {0};
  14. FtkWidget* progress_bar = ctx;
  15. percent = ftk_progress_bar_get_percent(progress_bar);
  16. if(percent == 100)
  17. {
  18. return RET_REMOVE;
  19. }
  20. ftk_progress_bar_set_percent(progress_bar, percent + 10);
  21. ftk_itoa(text, sizeof(text), ftk_progress_bar_get_percent(progress_bar));
  22. strcat(text, "%");
  23. ftk_widget_set_text(progress_bar, text);
  24. return RET_OK;
  25. }
  26. #ifdef FTK_AS_PLUGIN
  27. #include "ftk_app_demo.h"
  28. FTK_HIDE int FTK_MAIN(int argc, char* argv[]);
  29. FtkApp* ftk_app_demo_progress_bar_create()
  30. {
  31. return ftk_app_demo_create(_("progress_bar"), ftk_main);
  32. }
  33. #else
  34. #define FTK_HIDE extern
  35. #endif /*FTK_AS_PLUGIN*/
  36. FTK_HIDE int FTK_MAIN(int argc, char* argv[])
  37. {
  38. int width = 0;
  39. int height = 0;
  40. FtkWidget* win = NULL;
  41. FtkWidget* progress_bar = NULL;
  42. FtkSource* timer = NULL;
  43. FTK_INIT(argc, argv);
  44. win = ftk_app_window_create();
  45. width = ftk_widget_width(win);
  46. height = ftk_widget_height(win);
  47. width = width - 20;
  48. progress_bar = ftk_progress_bar_create(win, 10, height/6, width, 32);
  49. ftk_progress_bar_set_percent(progress_bar, 20);
  50. timer = ftk_source_timer_create(1000, update_progress, progress_bar);
  51. ftk_main_loop_add_source(ftk_default_main_loop(), timer);
  52. ftk_widget_set_user_data(progress_bar, on_window_destroy, timer);
  53. progress_bar = ftk_progress_bar_create(win, 10, height/3, width, 20);
  54. ftk_progress_bar_set_percent(progress_bar, 20);
  55. timer = ftk_source_timer_create(1000, update_progress, progress_bar);
  56. ftk_main_loop_add_source(ftk_default_main_loop(), timer);
  57. ftk_widget_set_user_data(progress_bar, on_window_destroy, timer);
  58. ftk_progress_bar_set_interactive(progress_bar, 1);
  59. progress_bar = ftk_progress_bar_create(win, 10, height/2, width, 32);
  60. ftk_progress_bar_set_percent(progress_bar, 20);
  61. timer = ftk_source_timer_create(1000, update_progress, progress_bar);
  62. ftk_main_loop_add_source(ftk_default_main_loop(), timer);
  63. ftk_widget_set_user_data(progress_bar, on_window_destroy, timer);
  64. ftk_widget_set_text(win, "progress_bar demo");
  65. ftk_widget_show_all(win, 1);
  66. FTK_QUIT_WHEN_WIDGET_CLOSE(win);
  67. FTK_RUN();
  68. return 0;
  69. }