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_create_folder(void* ctx, void* obj) { int ret = 0; const char* name = NULL; FtkWidget* win = (FtkWidget*)ctx; FtkWidget* dialog = NULL; PrivInfo* priv = (PrivInfo*)ftk_widget_user_data(win); dialog = ftk_file_browser_input_dialog(win, _("Please input folder 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 folder_name[FTK_MAX_PATH+1] = {0}; ftk_strs_cat(folder_name, FTK_MAX_PATH, priv->path, "/", name, NULL); if(ftk_fs_create_dir(folder_name) == RET_OK) { ftk_file_browser_load(win); } else { ftk_tips(_("Create folder failed.")); } ftk_logd("%s: create %s\n", __func__, folder_name); } } ftk_widget_unref(dialog); ftk_logd("%s: ret=%d\n", __func__, ret); return RET_OK; }
static Ret button_browser_clicked(void* ctx, void* obj) { FtkWidget* win = ftk_file_browser_create(FTK_FILE_BROWER_APP); ftk_file_browser_set_path(win, "./"); ftk_file_browser_load(win); return RET_OK; }
static Ret button_single_choose_clicked(void* ctx, void* obj) { FtkWidget* win = ftk_file_browser_create(FTK_FILE_BROWER_SINGLE_CHOOSER); ftk_file_browser_set_choosed_handler(win, on_file_selected, NULL); ftk_file_browser_set_path(win, "./"); ftk_file_browser_load(win); return RET_OK; }
static Ret _app_music_browser(FtkWidget *thiz) { FtkWidget* win = ftk_file_browser_create(FTK_FILE_BROWER_SINGLE_CHOOSER); ftk_window_set_animation_hint(win, "app_main_window"); ftk_file_browser_set_path(win, "/media/DATA/Musics"); ftk_file_browser_set_filter(win, "audio/mp3"); ftk_file_browser_set_choosed_handler(win, _app_music_selected, thiz); ftk_file_browser_load(win); return RET_OK; }
static int lua_ftk_file_browser_load(lua_State* L) { tolua_Error err = {0}; Ret retv; FtkWidget* thiz; int param_ok = tolua_isusertype(L, 1, "FtkWidget", 0, &err); return_val_if_fail(param_ok, 0); thiz = tolua_tousertype(L, 1, 0); retv = ftk_file_browser_load(thiz); tolua_pushnumber(L, (lua_Number)retv); return 1; }
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; }