亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? addressbook.c

?? 在uclinux下寫的一個 address book 程序
?? C
字號:
#include <stdlib.h>#include <string.h>#include "glib.h"#include "emtk.h"#include "laf/laf.h"#include "glist_stable.h"#include "db.h"#include "common_util.h"#include "addressbook.h"#include "addressbook_edit.h"#include "i18n.h"#ifdef FONT_TABLE    #include "font_table.h"#else    #define lookupFont(a, b) (FONT1)    #define init_font_table(a)    #define unload_font_table()#endif#ifdef LAUNCHER_SUPPORT    #include "deskmsg.h"#endif#define MAX_SEARCH_CHARS 20typedef struct {    int address_id;    char *title;    char *phone;} AddressListItem;#define ADDRESSLISTITEM(p) ((AddressListItem *) p)int font1_idx;int app_window_id, table_id, entry_id, new_btn_id;GList *address_list;int database_context;int edit_window = 0;void addressbook_ime_activate (int flag){#ifdef LAUNCHER_SUPPORT	DESKTOP_CHANNEL channel;    MSG msg;    int msgLen;        msgLen = msg_command_input_control(        (flag) ?         MSG_COMMAND_INPUT_ACTIVATE :        MSG_COMMAND_INPUT_DEACTIVATE,         &msg);        desktop_channel_connect_specified_channel_name(&channel, "/tmp/ime");    desktop_channel_send(&channel, &msg, msgLen);    desktop_channel_disconnect(&channel);#endif		}static gint addressListCompareFunc(gconstpointer a, gconstpointer b);static void makeItemFromAddress(AddressListItem *item, Address *address);static void destroyAddressListItem(AddressListItem *item) {        g_return_if_fail(item != NULL);        g_free(item->title);    g_free(item->phone);    g_free(item);}static int addresslistIdCompareFunc(gconstpointer a, gconstpointer b) {    AddressListItem *item = ADDRESSLISTITEM(a);        return !(item->address_id == (int) b);}static void updateView() {    GList *item;        emtk_table_remove_all(table_id);        for (item = address_list; item != NULL; item = g_list_next(item)) {        emtk_table_append_label_new(table_id, lookupFont("en_US", SMALL_FONT), FALSE, ADDRESSLISTITEM(item->data)->title, 0);        emtk_table_append_label_new(table_id, lookupFont("en_US", SMALL_FONT), FALSE, ADDRESSLISTITEM(item->data)->phone, 1);    }}static void editWndCallback(AddressbookOperation operation, Address *address) {    GList *item;    AddressListItem *addr_item;        edit_window = 0;        switch (operation) {        case ADDRESS_NEW:                        g_warning("%s Address book entry is not new, but new operation is invoked\n", __FUNCTION__);                        if (address->new && address->dirty && !addressbook_record_empty(address)) {                addressbook_record_save(database_context, address);            }                        addr_item = g_new0(AddressListItem, 1);            makeItemFromAddress(addr_item, address);            address_list = g_list_append(address_list, addr_item);            address_list = g_list_sort_stable(address_list, addressListCompareFunc);                        break;        case ADDRESS_MODIFIED:                        if (!addressbook_record_empty(address) && address->dirty) {                addressbook_record_save(database_context, address);            } else {                break;            }                        item = g_list_find_custom(address_list,                (gpointer) address->address_id, addresslistIdCompareFunc);                        addr_item = ADDRESSLISTITEM(item->data);            makeItemFromAddress(addr_item, address);                        printf("Empty address delete\n");            // empty addressbook entry, delete it.            break;        case ADDRESS_DELETE:                    item = g_list_find_custom(address_list,                 (gpointer) address->address_id, addresslistIdCompareFunc);                            g_return_if_fail(item != NULL);                        addr_item = ADDRESSLISTITEM(item->data);                        destroyAddressListItem(addr_item);                        address_list = g_list_remove(address_list, item->data);                        addressbook_record_delete(database_context, address);            break;#if 0        case ADDRESS_DUPLICATE:                                    //addressbook_record            break;#endif        default:            g_warning("unknown operation\n");    }        updateView();}static gint addressListCompareFunc(gconstpointer a, gconstpointer b) {    return strcasecmp(ADDRESSLISTITEM(a)->title, ADDRESSLISTITEM(b)->title);}static void closeApp(int wid, void *data){	int *feedback = (int*) data;    GList *item;    AddressListItem *addritem;        for (item = address_list; item != NULL; item = g_list_next(item)) {        addritem = ADDRESSLISTITEM(item->data);        destroyAddressListItem(addritem);    }        g_list_free(address_list);    	addressbook_ime_activate (FALSE);		*feedback = EMTK_APP_WINDOW_DESTROY_WITH_EMTK_CLOSE;}static void tableRowSelected(int id, void *data, int row) {    Address *addr;    AddressListItem *addr_item;        addr_item = ADDRESSLISTITEM(g_list_nth_data(address_list, row));        g_return_if_fail(addr_item != NULL);    addr = addressbook_record_load(database_context, addr_item->address_id);        edit_window = addressbook_edit_window(addr, editWndCallback);}static int lookup(const char *term) {        GList *item;    AddressListItem *addr;    int length;        length = strlen(term);        for(item = address_list; item != NULL; item = g_list_next(item)) {                addr = ADDRESSLISTITEM(item->data);                if (strncasecmp(term, addr->title, length) == 0)            return g_list_position(address_list, item);            }        return -1;}static void search_entry_changed(int eid, void *data, void *userData) {    char *term;    char *newTerm;    int position;    term = g_new0(char, MAX_SEARCH_CHARS + 1);    emtk_entry_get_value(eid, term, MAX_SEARCH_CHARS);       position = lookup(term);       if (position >= 0)   	    emtk_table_set_focus(table_id, position);	else {        newTerm = g_strndup(term, strlen(term) - 1);       	emtk_entry_set_value(eid, newTerm, strlen(newTerm));		g_free(newTerm);	}        g_free(term);}static void new_address(int bid, void *data) {    Address *addr;        addr = addressbook_record_new();        edit_window = addressbook_edit_window(addr, editWndCallback);}static void drawWnd(int window, WindowRect *clientRect) {    table_id = emtk_table_new(window, 0, 0, APP_WIN_W - SCROLLBAR_WIDTH, 					ADDRESSBOOK_LIST_HEIGHT, 2, ADDRESSBOOK_LIST_SIZE+1, 0);    emtk_table_add_column_new(table_id, 200);    emtk_table_add_column_new(table_id, 120 - SCROLLBAR_WIDTH);    emtk_table_set_highlight_color(table_id, emtk_app_get_hl_color());        emtk_window_add_object(window, table_id);        emtk_table_add_vscrollbar_new(table_id, SCROLLBAR_WIDTH, 							VSCROLLBAR_ALIGN_RIGHT | VSCROLLBAR_ALWAYS_SHOWN);    emtk_table_set_one_click_activate(table_id, TRUE);    emtk_table_set_selection_callback(table_id, tableRowSelected, NULL);        entry_id = emtk_entry_new(window, 0, clientRect->h - 8, 						emtk_string_display_length(_("Look Up"), 										lookupFont("en_US", SMALL_FONT)), 				        KEY_TYPE_ANY, 90, MAX_SEARCH_CHARS + 1, 						lookupFont("en_US", SMALL_FONT), 			            lookupFont("en_US", SMALL_FONT), _("Look Up"));    emtk_entry_set_value_change_callback(entry_id, search_entry_changed, NULL);        	emtk_window_add_object(window, entry_id);        new_btn_id = emtk_button_new(window, 145, clientRect->h - 20, 40, 19, lookupFont("en_US", SMALL_FONT), _("New"), 0, new_address, NULL);        emtk_window_add_object(window, new_btn_id);    #if 0    emtk_window_add_object(window, emtk_button_new(window, 200, clientRect->h - 20, 40, 19, FONT1, "se", 0, searchAddr, NULL));#endif	addressbook_ime_activate (TRUE);}static void makeItemFromAddress(AddressListItem *item, Address *addr) {    g_return_if_fail(item != NULL);    g_return_if_fail(addr != NULL);        if (!strEmpty(addr->personal->lastName)) {        if (!strEmpty(addr->personal->firstName)) {            item->title = g_strconcat(addr->personal->lastName, ", ",                                      addr->personal->firstName,                                      NULL);        } else {            item->title = g_strdup(addr->personal->lastName);        }    } else {        if (!strEmpty(addr->personal->firstName)) {            item->title = g_strdup(addr->personal->firstName);        } else {            if (!strEmpty(addr->business->company)) {                item->title = g_strdup(addr->business->company);            } else {                item->title = g_strdup(_("-Unnamed-"));            }        }    }        if (!strEmpty(addr->personal->phone)) {        item->phone = g_strconcat(addr->personal->phone,    "P",  NULL);    } else if (!strEmpty(addr->personal->mobile)) {        item->phone = g_strconcat(addr->personal->mobile,   "MP", NULL);    } else if (!strEmpty(addr->personal->fax)) {        item->phone = g_strconcat(addr->personal->fax,      "FP", NULL);    } else if (!strEmpty(addr->business->phone)) {        item->phone = g_strconcat(addr->business->phone,    "B",  NULL);    } else if (!strEmpty(addr->business->mobile)) {        item->phone = g_strconcat(addr->business->mobile,   "MB", NULL);    } else if (!strEmpty(addr->business->fax)) {        item->phone = g_strconcat(addr->business->fax,      "FB", NULL);    } else {        item->phone = g_strdup("");    }        item->address_id = addr->address_id;    }static int addItem(int key, char *data) {    Address *addr;    AddressListItem *item;        item = g_new0(AddressListItem, 1);        deserialize(&addr, data);        makeItemFromAddress(item, addr);        address_list = g_list_append(address_list, item);        addressbook_record_destroy(addr);        return TRUE;}static void init() {        app_window_id = emtk_app_window_new(_("Address"), lookupFont("en_US", SMALL_FONT), drawWnd, closeApp, NULL);        db_iterate(database_context, addItem);        address_list = g_list_sort_stable(address_list, addressListCompareFunc);        updateView();}#ifdef LAUNCHER_SUPPORTstatic void addressbook_desktop_msg(MSG *msg, gpointer user_data) {    g_return_if_fail(msg != NULL);        if (msg->type == MSG_TYPE_COMMAND && msg->subtype == MSG_COMMAND_CLOSE) {        if (edit_window)            emtk_app_close_window(edit_window);        emtk_app_close_window(app_window_id);    }}#endifint main(int argc, char **argv) {    #ifdef LAUNCHER_SUPPORT    DESKTOP_CHANNEL channel;        if(!desktop_channel_listen_connect(&channel, addressbook_desktop_msg, NULL)) {        printf("Failed opening channel for listening\n");        return 1;    }#endif    init_font_table(NULL);    i18n_init();        database_context = addressbook_record_db_open();        if (!(database_context > 0)) {        fprintf(stderr, "Error opening addressbook database, exiting\n");        exit(1);    }        emtk_app_init(&argc, &argv);    emtk_app_root(APP_WIN_X, APP_WIN_Y, APP_WIN_W, APP_WIN_H);        init();        emtk_app_run();        addressbook_record_db_close(database_context);        unload_font_table();    #ifdef LAUNCHER_SUPPORT    desktop_channel_listen_disconnect(&channel);#endif        exit(0);    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产自产拍高清av| 亚洲一线二线三线视频| 久久精品国产澳门| 日韩一区二区三区免费看| 五月开心婷婷久久| 日韩欧美一级片| 精品一区二区三区久久| 国产午夜精品久久| 成人一道本在线| 亚洲最大的成人av| 欧美一区二区三区思思人| 九九九精品视频| 国产精品美女久久久久久久| 色偷偷成人一区二区三区91| 亚洲国产视频在线| 欧美白人最猛性xxxxx69交| 久久精品国产网站| 亚洲国产成人午夜在线一区| 精品免费国产二区三区| 国产高清不卡二三区| 18欧美亚洲精品| 在线播放日韩导航| 国产精品一二三四五| 亚洲精品免费看| 日韩你懂的在线观看| 北岛玲一区二区三区四区| 亚洲国产精品天堂| 亚洲三级在线观看| 欧美电影影音先锋| 国产寡妇亲子伦一区二区| 亚洲一卡二卡三卡四卡| 精品国产污网站| 91成人免费网站| 国内精品伊人久久久久影院对白| 一区二区中文视频| 日韩精品中文字幕一区二区三区| 99re成人精品视频| 九九精品一区二区| 亚洲福利视频三区| 国产精品不卡视频| 不卡一区二区三区四区| 蜜桃久久久久久久| 国产精品久久久久一区| 日韩一区和二区| 色视频成人在线观看免| 国产一区二区三区精品欧美日韩一区二区三区 | 视频一区欧美精品| 亚洲国产精品高清| 日韩三级.com| 欧美日韩国产天堂| 成人黄色免费短视频| 免费不卡在线观看| 亚洲va国产va欧美va观看| 亚洲欧美综合色| 欧美激情艳妇裸体舞| 欧美r级电影在线观看| 美美哒免费高清在线观看视频一区二区| 粉嫩嫩av羞羞动漫久久久| 欧美一区二区成人| 欧美色手机在线观看| av亚洲精华国产精华精华| 狠狠色丁香婷婷综合久久片| 日韩电影一区二区三区| 亚洲国产一二三| 亚洲国产精品一区二区www| 亚洲视频在线观看三级| 国产精品国产a| 一区二区欧美国产| 亚洲欧美一区二区久久| 国产精品成人在线观看| 中文字幕精品一区二区精品绿巨人| 精品99久久久久久| 精品成人在线观看| www国产精品av| 久久影院电视剧免费观看| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美一卡2卡3卡4卡| 日韩一区和二区| 日韩欧美自拍偷拍| 2021国产精品久久精品| 久久久亚洲午夜电影| 国产精品毛片高清在线完整版| 欧洲一区在线电影| 国产成人免费视频精品含羞草妖精| 精品一区二区三区欧美| 国产精品一区二区黑丝| 懂色av一区二区三区免费观看 | 国产大陆精品国产| 国产成人精品综合在线观看 | 99久久精品国产毛片| 99精品久久99久久久久| 在线一区二区三区| 在线电影院国产精品| 精品国产一区二区三区不卡 | 国产成人免费在线视频| 成人性生交大片免费| 91美女在线视频| 欧美日韩免费观看一区二区三区| 91精品婷婷国产综合久久竹菊| 91精品国产欧美一区二区| www激情久久| 亚洲视频免费在线观看| 日韩精品欧美成人高清一区二区| 麻豆精品新av中文字幕| 成人高清视频免费观看| 欧美性受极品xxxx喷水| 日韩一二在线观看| 国产精品久久久久久久久久久免费看 | 欧美日韩精品一区二区三区| 日韩免费在线观看| 国产精品黄色在线观看| 亚洲第一久久影院| 国产成人综合视频| 日本久久电影网| 精品福利av导航| 亚洲人成人一区二区在线观看 | 精品国产一二三| 亚洲欧美成人一区二区三区| 日韩不卡在线观看日韩不卡视频| 国产成人一区二区精品非洲| 欧美三级视频在线观看| 久久久噜噜噜久久中文字幕色伊伊 | 欧美成人乱码一区二区三区| 国产精品久久福利| 老司机一区二区| 色婷婷综合久久久| 久久久久九九视频| 五月天丁香久久| 一本大道久久a久久精二百| 精品成人私密视频| 天天爽夜夜爽夜夜爽精品视频| 国产电影一区二区三区| 国产精品美女久久久久久久久 | 久久99这里只有精品| 91精品福利在线| 久久精品视频免费观看| 日本女优在线视频一区二区| 91麻豆免费视频| 国产欧美在线观看一区| 美女mm1313爽爽久久久蜜臀| 欧美日韩在线播| 亚洲欧美日韩系列| 国产sm精品调教视频网站| 日韩免费一区二区三区在线播放| 亚洲一区二区三区四区在线| av成人免费在线| 中文字幕av不卡| 精品影视av免费| 日韩午夜精品电影| 日韩精品三区四区| 欧美军同video69gay| 亚洲一区二区三区国产| 色婷婷一区二区| 亚洲欧美精品午睡沙发| 99久精品国产| 亚洲视频免费观看| 白白色亚洲国产精品| 国产精品色哟哟| 成人久久久精品乱码一区二区三区| 欧美成人性战久久| 麻豆极品一区二区三区| 制服视频三区第一页精品| 亚洲成av人影院| 欧美剧情片在线观看| 天天亚洲美女在线视频| 欧美一区二区三区在线看| 日韩制服丝袜av| 日韩一级黄色大片| 久久精品国产精品青草| 精品久久久影院| 国产在线播放一区| 国产欧美在线观看一区| 成人国产精品免费网站| 成人免费在线观看入口| 色欧美片视频在线观看在线视频| 亚洲黄一区二区三区| 在线观看国产91| 日韩黄色小视频| 欧美成人官网二区| 国产精品中文欧美| 中文字幕一区二区三区蜜月| 色婷婷综合久久久| 日韩综合在线视频| 精品国产成人系列| 白白色 亚洲乱淫| 洋洋成人永久网站入口| 日韩一区二区三区电影在线观看 | 欧美日韩一区二区不卡| 日本欧美一区二区三区乱码 | 国产亚洲欧美激情| 99r精品视频| 午夜不卡av在线| 久久婷婷色综合| 91香蕉视频黄| 日本一区中文字幕| xnxx国产精品| 欧美性生交片4| 精品一区二区三区的国产在线播放| 国产欧美日韩不卡| 欧美色涩在线第一页|