⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addressbook_edit.c

📁 在uclinux下写的一个 address book 程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <string.h>#include "emtk.h"#include "laf/laf.h"#include "db.h"#include "common_util.h"#include "addressbook.h"#include "addressbook_record.h"#include "i18n.h"#ifdef LAUNCHER_SUPPORT    #include "deskmsg.h"#endif#ifdef FONT_TABLE    #include "font_table.h"#else    #define lookupFont(a, b) (FONT1)#endifenum { PERSONAL, BUSINESS, SUMMARY };enum { ACTION_ADDRESS_DELETE = 1, ACTION_ADDRESS_DUPLICATE };enum { SHORTCUT_KEYBOARD, SHORTCUT_HANDWRITE, SHORTCUT_ENGLISH, SHORTCUT_CHINESE, SHORTCUT_THAI, };static Address *address;static int edit_window, done_id, delete_id, personal_id, business_id, summary_id;static int personal_table, business_table, summary_clist = 0;static int last_btn, last_table;static int record_menu;static int confirm_dialog;static int edit_client_window;static AddressbookCallback updateView;static int personal_labels[PERSONAL_NUM_OF_FIELDS];static int last_personal_label;static int toolbar_id;static int ime_keyboard, ime_handwrite, ime_english, ime_thai;static int ime_state = 0;static int last_ime = 0;static void ime_message(int code);#define changeField(entry, temp, field) \    g_free(field); \    emtk_entry_get_value(entry, temp, 100); \    field = g_strdup(temp);static void personalChangeCb(int entry, void *data, void *userData) {        char temp[100];    int row = emtk_table_get_focus(personal_table);        switch(row) {        case 0:            changeField(entry, temp, address->personal->lastName);            break;        case 1:            changeField(entry, temp, address->personal->firstName);            break;        case 2:            changeField(entry, temp, address->personal->nickName);            break;        case 3:            changeField(entry, temp, address->personal->phone);            break;        case 4:            changeField(entry, temp, address->personal->mobile);            break;        case 5:            changeField(entry, temp, address->personal->fax);            break;        case 6:            changeField(entry, temp, address->personal->email1);            break;        case 7:            changeField(entry, temp, address->personal->email2);            break;        case 8:            changeField(entry, temp, address->personal->email3);            break;        case 9:            changeField(entry, temp, address->personal->address);            break;        case 10:            changeField(entry, temp, address->personal->city);            break;        default:            printf("unknown\n");    }    address->dirty = TRUE;}static void businessChangeCb(int entry, void *data, void *userData) {    char temp[100];    int row = emtk_table_get_focus(business_table);        switch(row) {        case 0:            changeField(entry, temp, address->business->company);            break;        case 1:            changeField(entry, temp, address->business->jobTitle);            break;        case 2:            changeField(entry, temp, address->business->address);            break;        case 3:            changeField(entry, temp, address->business->city);            break;        case 4:            changeField(entry, temp, address->business->country);            break;        case 5:            changeField(entry, temp, address->business->phone);            break;        case 6:            changeField(entry, temp, address->business->mobile);            break;        case 7:            changeField(entry, temp, address->business->fax);            break;        case 8:            changeField(entry, temp, address->business->email);            break;        case 9:            changeField(entry, temp, address->business->assistantName);            break;        case 10:            changeField(entry, temp, address->business->assistantPhone);            break;        default:    }    address->dirty = TRUE;}static void responseHandler(int dialog, int response) {    switch(response) {        case EMTK_DIALOG_OK:            updateView(ADDRESS_DELETE, address);            emtk_app_close_window(edit_window);            break;        case EMTK_DIALOG_CANCEL:            // do nothing            break;    }}static void drawConfirmDialog(int window, WindowRect *clientRect) {    emtk_window_add_object(window, emtk_label_new(window, 20, 20, lookupFont("en_US", SMALL_FONT), FALSE, _("Delete selected address entry?")));}static void showConfirmDialog(int id, void *data) {//    WindowRect rect = {0, 160, APP_WIN_W, 80};    WindowRect rect = {0, APP_WIN_H - 80, APP_WIN_W, 80};    confirm_dialog = emtk_app_dialog_new(_("Delete Address"), 									lookupFont("en_US", SMALL_FONT), 									lookupFont("en_US", SMALL_FONT), 									drawConfirmDialog, 									EMTK_DIALOG_OK | EMTK_DIALOG_CANCEL, 									&rect, responseHandler, NULL);}static void menuHandler(int id, void *data) {    int action = (int) data;        switch (action) {        case ACTION_ADDRESS_DELETE:            showConfirmDialog(0, NULL);            break;#if 0        case ACTION_ADDRESS_DUPLICATE:            new = addressbook_record_duplicate(address);                                                       if (address->new)                updateView(ADDRESS_NEW, address);            else                updateView(ADDRESS_MODIFIED, address);                        updateView(ADDRESS_DUPLICATE, new);#endif        default:            g_warning("Unknown item is selected\n");            break;    }}static void closeWnd(int window, void *data) {    int *feedback = (int *) data;    if (address->dirty) {        if (address->new) {            updateView(ADDRESS_NEW, address);        } else            updateView(ADDRESS_MODIFIED, address);    }        addressbook_record_destroy(address);    summary_clist = 0;        last_ime = 0;    ime_state = 0;    ime_message(0);        *feedback = EMTK_APP_WINDOW_DESTROY_ONLY;}static void doneBtnHandler(int id, void *data) {    emtk_app_close_window(edit_window);}static void construct_summary() {    char *str;        if (summary_clist == 0) {        summary_clist = emtk_clist_new(edit_client_window, 0, 21, APP_WIN_W - SCROLLBAR_WIDTH, ADDRESSBOOK_LIST_HEIGHT, ADDRESSBOOK_LIST_SIZE, 0);        emtk_window_add_object(edit_client_window, summary_clist);                emtk_clist_add_vscrollbar_new(summary_clist, SCROLLBAR_WIDTH, VSCROLLBAR_ALIGN_RIGHT);    }        emtk_clist_remove_all(summary_clist);        emtk_clist_append_label_new(summary_clist, lookupFont("en_US", SMALL_FONT), FALSE, _("Personal"));        if (!strEmpty(address->personal->firstName)) {        str = g_strconcat(_("First name:"), address->personal->firstName, NULL);        emtk_clist_append_label_new(summary_clist, lookupFont("en_US", SMALL_FONT), FALSE, str);        g_free(str);    }        if (!strEmpty(address->personal->lastName)) {        str = g_strconcat(_("Last name:"), address->personal->lastName, NULL);        emtk_clist_append_label_new(summary_clist, lookupFont("en_US", SMALL_FONT), FALSE, str);        g_free(str);    }        if (!strEmpty(address->personal->nickName)) {        str = g_strconcat(_("Nickname:"), address->personal->nickName, NULL);        emtk_clist_append_label_new(summary_clist, lookupFont("en_US", SMALL_FONT), FALSE, str);        g_free(str);    }        if (!strEmpty(address->personal->phone)) {        str = g_strconcat(_("Phone:"), address->personal->phone, NULL);        emtk_clist_append_label_new(summary_clist, lookupFont("en_US", SMALL_FONT), FALSE, str);        g_free(str);    }        if (!strEmpty(address->personal->mobile)) {        str = g_strconcat(_("Mobile:"), address->personal->mobile, NULL);        emtk_clist_append_label_new(summary_clist, lookupFont("en_US", SMALL_FONT), FALSE, str);        g_free(str);    }        emtk_clist_append_label_new(summary_clist, lookupFont("en_US", SMALL_FONT), FALSE, _("Business"));        if (!strEmpty(address->business->company)) {        emtk_clist_append_label_new(summary_clist, lookupFont("en_US", SMALL_FONT), FALSE, address->business->company);    }        if (!strEmpty(address->business->jobTitle)) {        emtk_clist_append_label_new(summary_clist, lookupFont("en_US", SMALL_FONT), FALSE, address->business->jobTitle);    }        if (!strEmpty(address->business->address)) {        emtk_clist_append_label_new(summary_clist, lookupFont("en_US", SMALL_FONT), FALSE, address->business->address);    }        if (!strEmpty(address->business->city)) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -