Beispiel #1
0
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;
}
Beispiel #2
0
static void test_ftk_strs_cat()
{
	char path[FTK_MAX_PATH] = {0};
	
	assert(strcmp(ftk_strs_cat(path, FTK_MAX_PATH, NULL), "") == 0);
	assert(strcmp(ftk_strs_cat(path, FTK_MAX_PATH, "/", NULL), "/") == 0);
	assert(strcmp(ftk_strs_cat(path, FTK_MAX_PATH, "/", "a", NULL), "/a") == 0);
	assert(strcmp(ftk_strs_cat(path, FTK_MAX_PATH, "/", NULL, "/", "b", NULL), "/") == 0);
	assert(strcmp(ftk_strs_cat(path, FTK_MAX_PATH, "/", "a", "/", "b", NULL), "/a/b") == 0);

	return;
}
Beispiel #3
0
static Ret ftk_init_font(void)
{
	FtkFont* font = NULL;
#if defined(USE_FREETYPE) && defined(ANDROID) && defined(ANDROID_NDK)
	font = ftk_font_freetype_create(FTK_FONT, 0, 0, FTK_FONT_SIZE);
#else
	char filename[FTK_MAX_PATH + 1] = {0};
	ftk_strs_cat(filename, FTK_MAX_PATH, 
		ftk_config_get_data_dir(ftk_default_config()), "/data/", FTK_FONT, NULL);
	ftk_normalize_path(filename);
#ifdef USE_FREETYPE
	font = ftk_font_freetype_create(filename, 0, 0, FTK_FONT_SIZE);
#else
	font = ftk_font_default_create(filename, 0, 0, 0);
#endif
#endif
	
	if(font != NULL)
	{
		ftk_set_font(font);
	}
	else
	{
		ftk_deinit();
		ftk_loge("load font failed.\n");
		exit(0);
	}

	return RET_OK;
}
FtkAnimationTrigger* ftk_animation_trigger_default_create(const char* theme, const char* name)
{
	FtkAnimationTrigger* thiz = FTK_NEW_PRIV(FtkAnimationTrigger);

	if(thiz != NULL)
	{
		char filename[FTK_MAX_PATH + 1] = {0};

		ftk_strs_cat(filename, FTK_MAX_PATH, 
			ftk_config_get_data_dir(ftk_default_config()), "/theme/", theme, "/", name, NULL);

		ftk_normalize_path(filename);
		thiz->on_event = ftk_animation_trigger_default_on_event;
		thiz->destroy = ftk_animation_trigger_default_destroy;

		if(ftk_animation_trigger_parse_file(thiz, filename) == RET_OK)
		{	
			//ftk_animation_trigger_default_dump(thiz);
			ftk_logd("%s: them=%s\n", __func__, theme);
		}
		else
		{
			FTK_FREE(thiz);
		}
	}

	return thiz;
}
Beispiel #5
0
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;
}
Beispiel #6
0
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;
}
Beispiel #7
0
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;
}
Beispiel #8
0
static Ret ftk_init_theme(const char* theme)
{
	char filename[FTK_MAX_PATH + 1] = {0};

	ftk_set_theme(ftk_theme_create(theme == NULL));

	if(theme != NULL)
	{
#if !defined(ANDROID) && !defined(ANDROID_NDK)
		ftk_strs_cat(filename, FTK_MAX_PATH, 
			ftk_config_get_data_dir(ftk_default_config()), "/theme/", theme, "/theme.xml", NULL);
#else
		ftk_strs_cat(filename, FTK_MAX_PATH, 
			ftk_config_get_data_dir(ftk_default_config()), "/theme/", theme, "/theme.wav", NULL);
#endif
		ftk_normalize_path(filename);
		ftk_theme_parse_file(ftk_default_theme(), filename);
	}

	return RET_OK;
}
Beispiel #9
0
Ret ftk_config_load(FtkConfig* thiz, const char* progname)
{
	char path[FTK_MAX_PATH+1] = {0};
	char cwd[FTK_MAX_PATH+1] = {0};
	char filename[FTK_MAX_PATH+1] = {0};
	const char* base = progname + strlen(progname);

	while(base > progname)
	{
		if(*base == '/' || *base == '\\')
		{
			break;
		}
		base--;
	}

	if(base > progname)
	{
		ftk_strncpy(path, progname, base-progname);
	}

	if(ftk_path_is_abs(progname))
	{
		ftk_strs_cat(filename, sizeof(filename), path, "/ftk.cnf", NULL);
	}
	else
	{
		ftk_getcwd(cwd, sizeof(cwd));
		ftk_strs_cat(filename, sizeof(filename), cwd, "/", path, "/ftk.cnf", NULL);
	}
	ftk_normalize_path(filename);
	if(!ftk_mmap_exist(filename))
	{
		return RET_FAIL;
	}

	return ftk_config_load_file(thiz, filename);
}
Beispiel #10
0
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;
}
Beispiel #11
0
static FtkBitmap* ftk_file_browser_load_mime_icon(const char* file_name)
{
	char* p = NULL;
	char icon_name[FTK_MAX_PATH+1] = {0};
	char mime_type[FTK_MIME_TYPE_LEN + 1] = {0};
	
	ftk_strcpy(mime_type, ftk_file_get_mime_type(file_name));

	p = strrchr(mime_type, '/');
	return_val_if_fail(p != NULL, NULL);

	*p = '\0';
	ftk_strs_cat(icon_name, FTK_MAX_PATH, "mime_", mime_type, FTK_STOCK_IMG_SUFFIX, NULL);

	return ftk_theme_load_image(ftk_default_theme(), icon_name);
}
Beispiel #12
0
Ret		   ftk_file_browser_load(FtkWidget* thiz)
{
	FtkFileInfo info = {0};
	FtkFsHandle handle = NULL;
	FtkListItemInfo item = {0};
	const char* mime_type = NULL;
	char path[FTK_MAX_PATH+1] = {0};
	PrivInfo* priv = ftk_widget_user_data(thiz);
	return_val_if_fail(priv != NULL && priv->path != NULL, RET_FAIL);	

	handle = ftk_dir_open(priv->path);
	if(handle == NULL)
	{
		ftk_logd("%s: open %s\n", __func__, priv->path);
	}
	return_val_if_fail(handle != NULL, RET_FAIL);

	ftk_list_model_reset(priv->model);
	ftk_list_model_disable_notify(priv->model);

	if(!ftk_fs_is_root(priv->path))
	{
		item.value = 1;
		item.text = _("..");
		item.type = FTK_LIST_ITEM_NORMAL;
		item.left_icon = ftk_theme_load_image(ftk_default_theme(), "up"FTK_STOCK_IMG_SUFFIX);
		ftk_list_model_add(priv->model, &item);
	}

	/*directory go first.*/
	while(ftk_dir_read(handle, &info) == RET_OK)
	{
		if(info.name[0] == '.') continue;

		if(info.is_dir)
		{
			item.value = 1;
			item.text = info.name;
			item.type = ftk_file_browser_get_display_style(priv, 1);
			item.left_icon = ftk_theme_load_image(ftk_default_theme(), "folder"FTK_STOCK_IMG_SUFFIX);
			ftk_list_model_add(priv->model, &item);
		}
	}
	ftk_dir_close(handle);

	if(priv->filter_mime_type == NULL || strcmp(priv->filter_mime_type, FTK_MIME_DIR) != 0)
	{
		handle = ftk_dir_open(priv->path);
		while(ftk_dir_read(handle, &info) == RET_OK)
		{
			if(info.name[0] == '.') continue;
			if(info.is_dir) continue;

			if(priv->filter_mime_type != NULL)
			{
				ftk_strs_cat(path, FTK_MAX_PATH, priv->path, "/", info.name, NULL);
				mime_type = ftk_file_get_mime_type(path);
				if(strstr(priv->filter_mime_type, mime_type) != NULL)
				{
					continue;
				}
			}
				
			item.value = 0;
			item.type = ftk_file_browser_get_display_style(priv, 0);
			item.text = info.name;
			item.left_icon = ftk_file_browser_load_mime_icon(info.name);
			ftk_list_model_add(priv->model, &item);
		}
		ftk_dir_close(handle);
	}

	ftk_window_set_focus(thiz, priv->list_view);
	ftk_list_view_set_cursor(priv->list_view, 0);
	ftk_list_model_enable_notify(priv->model);
	ftk_list_model_notify(priv->model);
	ftk_widget_show_all(thiz, 1);

	return RET_OK;
}