static Ret _bt_on_item_clicked(void *ctx, void *list) { FtkListItemInfo* info = NULL; FtkListModel* model = ftk_list_view_get_model(list); int i = ftk_list_view_get_selected(list); printf("%s : clicked index %d\n", __func__, i); ftk_list_model_get_data(model, i, (void**)&info); if(info != NULL && !info->disable) { info->state = !info->state; } if (i < _bt_dev_num) { FtkWidget *label = ftk_widget_lookup((FtkWidget *)ctx, IDC_INFO); if (label) ftk_widget_set_text(label, "접속 중"); _bt_connect = i; _timer = ftk_source_timer_create(300, _bt_connect_start, ctx); ftk_main_loop_add_source(ftk_default_main_loop(), _timer); } return RET_OK; }
static Ret ftk_file_browser_on_item_clicked(void* ctx, void* list) { FtkWidget* win = (FtkWidget*)ctx; FtkListItemInfo* info = NULL; int i = ftk_list_view_get_selected((FtkWidget*)list); PrivInfo* priv = (PrivInfo*)ftk_widget_user_data(win); FtkListModel* model = ftk_list_view_get_model((FtkWidget*)list); return_val_if_fail(priv != NULL, RET_FAIL); ftk_list_model_get_data(model, i, (void**)&info); if(info != NULL && info->text != NULL) { char* p = NULL; char path[FTK_MAX_PATH+1] = {0}; char* file_name = info->text; if(strcmp(file_name, _("..")) == 0) { ftk_strcpy(path, priv->path); if((p = strrchr(path, FTK_PATH_DELIM)) != NULL) { if(p == path) { p[1] = '\0'; } else { *p = '\0'; } } ftk_file_browser_set_path(win, path); ftk_file_browser_load(win); } else if(info->value) /*enter selected folder*/ { ftk_strs_cat(path, FTK_MAX_PATH, priv->path, "/", file_name, NULL); ftk_file_browser_set_path(win, path); ftk_file_browser_load(win); } else if(priv->type == FTK_FILE_BROWER_SINGLE_CHOOSER) { if(priv->on_choosed != NULL) { ftk_strs_cat(path, FTK_MAX_PATH, priv->path, "/", file_name, NULL); priv->on_choosed(priv->on_choosed_ctx, 0, path); ftk_widget_unref(win); } } else if(priv->type == FTK_FILE_BROWER_MULTI_CHOOSER) { info->state = !info->state; } } return RET_OK; }
static Ret ftk_file_browser_on_ok(void* ctx, void* obj) { int i = 0; FtkWidget* win = (FtkWidget*)ctx; FtkListItemInfo* info = NULL; char path[FTK_MAX_PATH+1] = {0}; PrivInfo* priv = (PrivInfo*)ftk_widget_user_data(win); return_val_if_fail(priv != NULL && priv->on_choosed != NULL, RET_FAIL); if(priv->type == FTK_FILE_BROWER_SINGLE_CHOOSER) { i = ftk_list_view_get_selected(priv->list_view); ftk_list_model_get_data(priv->model, i, (void**)&info); if(info != NULL) { ftk_strs_cat(path, FTK_MAX_PATH, priv->path, "/", info->text, NULL); priv->on_choosed(priv->on_choosed_ctx, 0, path); } } else { int index = 0; int n = ftk_list_model_get_total(priv->model); for(i = 0; i < n; i++) { ftk_list_model_get_data(priv->model, i, (void**)&info); if(info != NULL && info->state) { ftk_strs_cat(path, FTK_MAX_PATH, priv->path, "/", info->text, NULL); priv->on_choosed(priv->on_choosed_ctx, index++, path); } } priv->on_choosed(priv->on_choosed_ctx, -1, NULL); } ftk_widget_unref((FtkWidget*)ctx); return RET_OK; }
static Ret ftk_file_browser_on_rename(void* ctx, void* obj) { int i = 0; int ret = 0; const char* name = NULL; FtkWidget* win = (FtkWidget*)ctx; FtkWidget* dialog = NULL; FtkListItemInfo* info = NULL; PrivInfo* priv = (PrivInfo*)ftk_widget_user_data(win); i = ftk_list_view_get_selected(priv->list_view); ftk_list_model_get_data(priv->model, i, (void**)&info); return_val_if_fail(info != NULL, RET_FAIL); if(strcmp(info->text, _("..")) == 0) { return RET_FAIL; } dialog = ftk_file_browser_input_dialog(win, _("Please input new name:")); ret = ftk_dialog_run(dialog); if(ret == ID_OK) { name = ftk_entry_get_text(ftk_widget_lookup(dialog, ID_ENTRY)); if(name != NULL) { char new_name[FTK_MAX_PATH+1] = {0}; char old_name[FTK_MAX_PATH+1] = {0}; ftk_strs_cat(old_name, FTK_MAX_PATH, priv->path, "/", info->text, NULL); ftk_strs_cat(new_name, FTK_MAX_PATH, priv->path, "/", name, NULL); if(ftk_fs_move(old_name, new_name) == RET_OK) { ftk_file_browser_load(win); } else { ftk_tips(_("Rename failed.")); } ftk_logd("%s: %s --> %s\n", __func__, old_name, new_name); } } ftk_widget_unref(dialog); ftk_logd("%s: ret=%d\n", __func__, ret); return RET_OK; }
static Ret ftk_file_browser_on_remove(void* ctx, void* obj) { int i = 0; int ret = 0; const char* buttons[3]; FtkWidget* win = (FtkWidget*)ctx; FtkListItemInfo* info = NULL; PrivInfo* priv = (PrivInfo*)ftk_widget_user_data(win); char message[FTK_MAX_PATH + 30] = {0}; buttons[0] = _("Yes"); buttons[1] = _("No"); buttons[2] = NULL; i = ftk_list_view_get_selected(priv->list_view); ftk_list_model_get_data(priv->model, i, (void**)&info); return_val_if_fail(info != NULL, RET_FAIL); if(strcmp(info->text, _("..")) == 0) { return RET_FAIL; } ftk_strs_cat(message, sizeof(message), _("Are you sure to remove:\n "), info->text, NULL); if((ret = ftk_question(_("Remove"), message, buttons)) == 1) { char path[FTK_MAX_PATH+1] = {0}; ftk_strs_cat(path, FTK_MAX_PATH, priv->path, "/", info->text, NULL); if(ftk_fs_delete(path) == RET_OK) { ftk_list_model_remove(priv->model, i); } else { ftk_strs_cat(message, sizeof(message), _("Remove failed:\n"), info->text, NULL); ftk_tips(message); } } return RET_OK; }
static Ret ftk_list_render_default_paint(FtkListRender* thiz, FtkCanvas* canvas, int pos, int x, int y, int w, int h) { int dx = 0; int dy = 0; DECL_PRIV(thiz, priv); FtkBitmap* right_icon = NULL; FtkListItemInfo* info = NULL; return_val_if_fail(thiz != NULL && canvas != NULL && w > 0 && h > 0, RET_FAIL); ftk_list_model_get_data(priv->model, pos, (void**)&info); return_val_if_fail(info != NULL, RET_FAIL); if(info->disable) { ftk_canvas_draw_bg_image(canvas, priv->bg_disable, FTK_BG_FOUR_CORNER, x, y, w, h); } if(info->left_icon != NULL) { ftk_canvas_draw_bg_image(canvas, info->left_icon, FTK_BG_CENTER, x, y, h, h); } switch(info->type) { case FTK_LIST_ITEM_RADIO: { right_icon = info->state ? priv->radio_on : priv->radio_off; break; } case FTK_LIST_ITEM_CHECK: { right_icon = info->state ? priv->check_on : priv->check_off; break; } case FTK_LIST_ITEM_MORE: { right_icon = priv->more; break; } default: { right_icon = info->right_icon; break; } } if(right_icon != NULL) { ftk_canvas_draw_bg_image(canvas, right_icon, FTK_BG_CENTER, x+w-h, y, h, h); } if(info->text != NULL) { int text_width = w; int visible_start = 0; FtkTextLine line = {0}; const char* text = NULL; FtkTextLayout* text_layout = ftk_default_text_layout(); text_width = info->left_icon != NULL ? text_width - h : text_width; text_width = right_icon != NULL ? text_width - h : text_width; dy = y + FTK_HALF(h); dx = FTK_H_MARGIN + (info->left_icon != NULL ? x + h : x); priv->marquee_width = text_width; ftk_list_render_default_focus_check(thiz); ftk_text_layout_init(text_layout, info->text, -1, ftk_canvas_get_gc(canvas)->font, text_width); ftk_text_layout_get_visual_line(text_layout, &line); do { visible_start = 0; if(priv->marquee_attr == 0 || pos != priv->focus_item) { break; } else if(!(priv->marquee_attr & FTK_MARQUEE_RIGHT2LEFT)) { /*NOT support down to up scroll yet.*/ break; } else if(!(priv->marquee_attr & FTK_MARQUEE_AUTO)) { /*IF text is short dont scroll it.*/ break; } else if((priv->marquee_attr & FTK_MARQUEE_ONCE) && (priv->marquee_cycle_times) > 0) { break; } else if((priv->marquee_attr & FTK_MARQUEE_AUTO) && (line.len == strlen(info->text))) { priv->marquee_state = MARQUEE_NONE; break; } if(priv->marquee_state == MARQUEE_NONE) { priv->marquee_state = MARQUEE_BEGIN; } visible_start = priv->visible_start; ftk_text_layout_init(text_layout, utf8_move_forward(info->text, visible_start), -1, ftk_canvas_get_gc(canvas)->font, text_width); ftk_text_layout_get_visual_line(text_layout, &line); if((line.extent + 20) < text_width) { priv->marquee_state = MARQUEE_END; ftk_source_timer_modify(priv->marquee_timer, MARQUEE_PAUSE_INTERVAL); } }while(0); text = utf8_move_forward(info->text, visible_start); ftk_text_layout_init(text_layout, text, -1, ftk_canvas_get_gc(canvas)->font, text_width); if(ftk_text_layout_get_visual_line(text_layout, &line) == RET_OK) { ftk_canvas_draw_string(canvas, dx + line.xoffset, dy, line.text, line.len, 1); } } return RET_OK; }