예제 #1
0
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;
}
예제 #2
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;
}
예제 #3
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;
}
예제 #4
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;
}
예제 #5
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;
}
예제 #6
0
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;
}