📄 addressbook_edit.c
字号:
#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 + -