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 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_set_path(lua_State* L) { tolua_Error err = {0}; Ret retv; FtkWidget* thiz; const char* path; int param_ok = tolua_isusertype(L, 1, "FtkWidget", 0, &err) && tolua_isstring(L, 2, 0, &err); return_val_if_fail(param_ok, 0); thiz = tolua_tousertype(L, 1, 0); path = tolua_tostring(L, 2, 0); retv = ftk_file_browser_set_path(thiz, path); tolua_pushnumber(L, (lua_Number)retv); return 1; }