在開始今天的list主題之前,先看一下icon的執行效果。
今天說的list其實和這個icon差不多。大家只需要把這些icon想像成一條一條的item就可以了。同樣,list的demo**中也會有乙個more的button,每次單擊一下,就會增加幾個item。閒話不多說,先看一下demo**是怎麼樣的。
#include "ftk.h"
#include "ftk_list_view.h"
#include "ftk_list_render_default.h"
#include "ftk_list_model_default.h"
#define idc_test_button 1000
int g_index = 0;
ftkbitmap* left_icon = null;
ftkbitmap* right_icon = null;
static ret button_quit_clicked(void* ctx, void* obj)
static ret button_more_clicked(void* ctx, void* obj)
; ftklistiteminfo info = ;
ftklistmodel* model = ctx;
for(i = 0; i < 4; i++)
return ret_ok;
}ret on_item_clicked(void* ctx, void* list)
ftk_logd("%s: %d/%d\n", __func__,
ftk_list_view_get_selected(list),
ftk_list_model_get_total(model));
return ret_ok;
}int ftk_main(int argc, char* argv)
; ftkwidget* win = null;
ftkwidget* button = null;
ftkwidget* list = null;
ftklistmodel* model = null;
ftklistrender* render = null;
ftklistiteminfo info = ;
char filename[ftk_max_path+1] = ;
ftk_init(argc, argv);
width = ftk_widget_width(win);
height = ftk_widget_height(win);
list = ftk_list_view_create(win, 10, 5, width - 20, 3 * height/4-5);
ftk_list_view_set_clicked_listener(list, on_item_clicked, null);
model = ftk_list_model_default_create(10);
render = ftk_list_render_default_create();
ftk_snprintf(filename, ftk_max_path, "%s/alarm/%s",testdata_dir, ftk_stock_img_suffix);
left_icon = ftk_bitmap_factory_load(ftk_default_bitmap_factory(), filename);
ftk_snprintf(filename, ftk_max_path, "%s/search/%s", testdata_dir, ftk_stock_img_suffix);
right_icon = ftk_bitmap_factory_load(ftk_default_bitmap_factory(), filename);
g_index = 0;
for(g_index = 0; g_index < 4; g_index++)
ftk_list_view_init(list, model, render, 40);
ftk_list_model_unref(model);
button = ftk_button_create(win, width/4, 3 * height/4 + 5, width/4, 60);
ftk_widget_set_text(button, "more");
ftk_button_set_clicked_listener(button, button_more_clicked, model);
button = ftk_button_create(win, width/2, 3 * height/4 + 5, width/4, 60);
ftk_widget_set_text(button, "quit");
ftk_button_set_clicked_listener(button, button_quit_clicked, win);
ftk_window_set_focus(win, button);
ftk_widget_set_text(win, "list view demo");
ftk_widget_show_all(win, 1);
ftk_widget_set_attr(win, ftk_attr_quit_when_close);
ftk_run();
return 0;
}
細細看來,**的流程非常眼熟。大家可以把注意力集中到list、model、render和info這幾個變數上。其中,尤其需要注意的是list和info。list提供了乙個顯示空間,而info則用來表示每乙個list的item。當然,每乙個list item被選中的時候,on_item_clicked函式都會被呼叫。當然,除此之外系統也建立了兩個button,兩個callback函式分別是button_quit_clicked和button_more_clicked。具體的細節分析一下**即可。
好了,說了這麼多,還是等著看下次的執行效果吧。
ftk學習記(label篇)
還是接著上面的一篇博文。之前曾經答應過大家,讓大家看一下最簡單的ftk程式是怎麼執行的。所以,這裡我們上傳一下。label,顧名思義,就是乙個標籤。更直白一點,就是在視窗上某個地點顯示一串文字。當然,你可以根據自己的需要靈活修改文字的型別 大小 顏色 背景等資訊,總之就是這麼個意思。閒話少說,我們可...
ftk學習記(icon篇)
在開始今天的文章之前,我們還是先看一下上一節的效果圖。大家可以參照上一節的講解,是不是存在這樣的button,是不是存在這樣的wait box控制項,同樣是不是可以看到wait box活動的情形。當然,有條件的朋友最好自己編譯一下這個demo 按步驟除錯每一行 今天,如標題所示,我們所學習的是ico...
ftk學習記(label篇)
還是接著上面的一篇博文。由於還是編輯模式。所以臨時還不能看到在網頁中是怎麼顯示的。include ftk.h typedef struct timerinfo timerinfo static ret timeout void ctx if info times 0 else int main in...