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

📄 todo.c

📁 uclinux 下写的一个 todo 程序
💻 C
📖 第 1 页 / 共 2 页
字号:
}static void insertItem(Todo *todo, int row) {        list = g_list_insert(list, todo, row);        printf("newtablerow  = %d\n", newTableRow());        update_table();}static void newBtnHandler(int id, void *data) {    Todo *todo;    int position;        todo = g_new0(Todo, 1);        if (selected) {        todo->dueDate = selected->dueDate;        todo->priority = selected->priority;        position = ++current_row;    } else {        todo->dueDate = NO_DUE_DATE;        todo->priority = 1;        position = 0;    }        selected = todo;        todo->title = g_strdup("");    todo->completed = FALSE;        todo->new       = TRUE;        insertItem(todo, position);        emtk_table_set_focus(table_id, position);    }static void appendItem(Todo *todo) {    ListWidgets *widgets;    char *priorityStr, *dateStr;    GDate *now, *dueDate;        now = g_date_new();    dueDate = g_date_new();    g_date_set_time(now, time(NULL));        widgets = g_new0(ListWidgets, 1);        widgets->cbid = emtk_table_append_checkbox_new(table_id, FONT1, "box_checked.png", "box_blank.png", "", 0, checkboxHandler, NULL, 0);    emtk_checkbox_set_state(widgets->cbid, todo->completed);        priorityStr = g_strdup_printf("%d", todo->priority);        widgets->pbid = emtk_table_append_button_new(table_id, 20, 18, FONT2, priorityStr, 0, priorityButtonHandler, NULL, 1);    emtk_button_set_border_width(widgets->pbid, 0);        free(priorityStr);        widgets->eid = emtk_entry_new(t_window, 0, 12, 0, KEY_TYPE_ANY, APP_WINDOW_W - 108, 50, FONT1, FONT1, NULL);    emtk_entry_set_value(widgets->eid, todo->title, strlen(todo->title));        emtk_entry_set_value_change_callback(widgets->eid, entryValChanged, NULL);        emtk_table_append_entry(table_id, widgets->eid, 2);        if (todo->dueDate > 0) {                g_date_set_time(dueDate, todo->dueDate);         dateStr = g_new0(char, DATE_STR_BUFFER_LEN);                if (g_date_compare(now, dueDate) > 0) {            g_date_strftime(dateStr, DATE_STR_BUFFER_LEN, DATE_FORMAT_OVERDUE, dueDate);            widgets->dbid = emtk_table_append_button_new(table_id, 50, 20, FONT2, dateStr, 0, dueDateBtnHandler, NULL, 3);            emtk_button_set_foreground_color(widgets->dbid, DATE_DUE_COLOR);        } else {            g_date_strftime(dateStr, DATE_STR_BUFFER_LEN, DATE_FORMAT, dueDate);            widgets->dbid = emtk_table_append_button_new(table_id, 50, 20, FONT2, dateStr, 0, dueDateBtnHandler, NULL, 3);        }            } else {        dateStr = g_strdup("--");        widgets->dbid = emtk_table_append_button_new(table_id, 50, 20, FONT2, dateStr, 0, dueDateBtnHandler, NULL, 3);    }        table_widgets = g_list_append(table_widgets, widgets);        g_free(dateStr);        g_date_free(now);    g_date_free(dueDate);}static int addEntry(int key, char *data) {        Todo *todo;        deserialize(&todo, data);    list = g_list_append(list, todo);        return TRUE;}static void drawListWnd(int window, WindowRect *clientRect) {    GList *item;    Todo *todo;        t_window = window;        emtk_window_add_object(window, emtk_button_new(window, 0, clientRect->h - 20, 60, 19, FONT1, _("New"), 0, newBtnHandler, NULL));    emtk_window_add_object(window, emtk_button_new(window, 65, clientRect->h - 20, 60, 19, FONT1, _("Delete..."), 0, deleteBtnHandler, NULL));        table_id = emtk_table_new(window, 0, 0, clientRect->w - 13, 								APP_LIST_HEIGHT , 4, APP_LIST_SIZE, 0);        emtk_table_set_one_click_activate(table_id, TRUE);    emtk_table_set_selection_callback(table_id, tableSelectionHandler, NULL);        emtk_table_add_column_new(table_id, 20);    emtk_table_set_column_margin(table_id, 0, 1);    emtk_table_add_column_new(table_id, 25);    emtk_table_set_column_margin(table_id, 1, 0);    emtk_table_add_column_new(table_id, clientRect->w - 108);    emtk_table_set_column_margin(table_id, 2, 0);    emtk_table_add_column_new(table_id, 50);    emtk_table_set_column_margin(table_id, 3, 0);        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, 13, 						VSCROLLBAR_ALIGN_RIGHT | VSCROLLBAR_ALWAYS_SHOWN);        priority_menu = emtk_menu_new(window, 50, ((APP_WINDOW_H-90) >> 1), 									30, 18, 5, 0, FONT1,         FONT2, NULL, 0, prioritySelectionHandler, NULL);    emtk_menu_set_one_click_activate(priority_menu, TRUE);    emtk_menu_set_highlight_color(priority_menu, emtk_app_get_hl_color());    emtk_menu_append_item(priority_menu, "1");    emtk_menu_append_item(priority_menu, "2");    emtk_menu_append_item(priority_menu, "3");    emtk_menu_append_item(priority_menu, "4");    emtk_menu_append_item(priority_menu, "5");#if 0        due_date_menu = emtk_menu_new(window, 100, 50, 100, 18, 5, 0, FONT1,         FONT2, NULL, 0, dueDateSelectionHandler, NULL);#endif		due_date_menu = emtk_menu_new(window, 						((APP_WINDOW_W-100) >> 1), 						((APP_WINDOW_H-90) >> 1), 						100, 18, 5, 0, FONT1, 				        FONT2, NULL, 0, dueDateSelectionHandler, NULL);    emtk_menu_set_one_click_activate(due_date_menu, TRUE);    emtk_menu_set_highlight_color(due_date_menu, emtk_app_get_hl_color());    emtk_menu_append_item(due_date_menu, _("Today"));    emtk_menu_append_item(due_date_menu, _("Tomorrow"));    emtk_menu_append_item(due_date_menu, _("One week later"));    emtk_menu_append_item(due_date_menu, _("No Date"));    emtk_menu_append_item(due_date_menu, _("Choose date..."));        list = NULL;        db_iterate(db, addEntry);        list = g_list_sort_stable(list, todoListSortPriority);        for (item = list; item != NULL; item = g_list_next(item)) {        todo = TODO(item->data);        appendItem(todo);    }#ifdef LAUNCHER_SUPPORT    	todo_ime_activate (TRUE);#endif	}static void purgeCompletedItems() {    int i, num_items = 0;    Todo *todo;    ListWidgets *widgets;    int *table_widget_index;    int records;        records = g_list_length(list);        table_widget_index = g_new0(int, records);        for (i = records; i > 0; i--) {        todo = TODO(g_list_nth_data(list, i - 1));                if (todo && todo->completed) {            table_widget_index[num_items++] = i - 1;        }            }        for (i = 0; i < num_items; i++) {                todo = TODO(g_list_nth_data(list, table_widget_index[i]));                list = g_list_remove(list, todo);            todo_record_delete(db, todo);                g_free(todo->title);        g_free(todo);                widgets = (ListWidgets *) g_list_nth_data(table_widgets, table_widget_index[i]);                table_widgets = g_list_remove(table_widgets, widgets);                g_free(widgets);                emtk_table_remove_row(table_id, table_widget_index[i], TRUE);    }        if (g_list_length(list) > 0) {        selected = TODO(list->data);    } else {        selected = NULL;    }        current_row = 0;    emtk_table_set_focus(table_id, 0);}static void confirmPurgeHandler(int dialog, int action) {    //int action = (int) data;        switch(action) {        case EMTK_DIALOG_OK:            purgeCompletedItems();        case EMTK_DIALOG_CANCEL:            //do nothing            break;    }        emtk_app_close_window(purge_dialog);}static void drawConfirmPurgeDialog(int window, WindowRect *clientRect) {    emtk_window_add_object(window, emtk_label_new(window, 20, 20, FONT1, FALSE, _("Delete all Completed items?")));}static void pulldownHandler(int mid, void *action_id) {    int action = (int) action_id;#if !defined(UI_LAYOUT_SCHEME) || (UI_LAYOUT_SCHEME == 320240)    WindowRect dimension = {0, 140, APP_WINDOW_W, 100};#elif (UI_LAYOUT_SCHEME == 240160)    WindowRect dimension = {0, APP_WINDOW_H-100, APP_WINDOW_W, 100};	#endif    	    switch(action) {        case ACTION_DELETE_ITEM:            if (selected)                deleteBtnHandler(0, NULL);            break;        case ACTION_PURGE_ITEM:				if (emtk_table_get_num_rows(table_id) > 0)	                purge_dialog = emtk_app_dialog_new(_("Purge"), 										lookupFont("en_US", MEDIUM_FONT), 										lookupFont("en_US", SMALL_FONT), 										drawConfirmPurgeDialog, 										EMTK_DIALOG_OK | EMTK_DIALOG_CANCEL, 										&dimension, confirmPurgeHandler, NULL);            break;    }}static void ime_message(int code) {    DESKTOP_CHANNEL channel;    MSG msg;    int msgLen;        msgLen = msg_command_input(code, &msg);    desktop_channel_connect(&channel);    desktop_channel_send(&channel, &msg, msgLen);    desktop_channel_disconnect(&channel);}static void toolbar_handler(int id, int action, void *data) {        switch(action) {    case SHORTCUT_BUTTON_ENGLISH:        if((ime_state & INPUT_LANG_MASK) == INPUT_ENGLISH) {            ime_state = 0;            last_ime = 0;        } else {            if (last_ime)                emtk_app_set_shortcut_button_toggle_state(last_ime, FALSE);            last_ime = id;                        ime_state = INPUT_ENGLISH | KEYBOARD | LAYOUT2;        }        break;    case SHORTCUT_BUTTON_CHINESE:        return;    case SHORTCUT_BUTTON_THAI:        if((ime_state & INPUT_LANG_MASK) == INPUT_THAI) {            ime_state = 0;            last_ime = 0;        } else {            if (last_ime)                emtk_app_set_shortcut_button_toggle_state(last_ime, FALSE);            last_ime = id;                        ime_state = INPUT_THAI | KEYBOARD | LAYOUT2;        }        break;    case SHORTCUT_BUTTON_KEYBOARD:        return;    case SHORTCUT_BUTTON_HANDWRITE:        return;    }        ime_message(ime_state);}static void init() {    int mid;    WindowRect rect = { APP_WINDOW_W - 90, 0, 70, 18 };        todo_window = emtk_app_window_new("Todo", lookupFont("en_US", MEDIUM_FONT), 							drawListWnd, closeHandler, pulldownHandler);        mid = emtk_app_window_menu_add(todo_window, _("Record"), 0);    emtk_app_window_menu_item_add(mid, _("Delete Item..."), ACTION_DELETE_ITEM);    emtk_app_window_menu_item_add(mid, _("Purge..."),       ACTION_PURGE_ITEM);        toolbar_id   = emtk_app_window_add_shortcut_bar(todo_window, &rect, toolbar_handler, SHORTCUT_BAR_HORIZONTAL);    ime_keyboard = emtk_app_append_shortcut_button(toolbar_id, SHORTCUT_BUTTON_TOGGLE, "key02.jpg",      "key01.jpg",   25, 18, 0, SHORTCUT_BUTTON_KEYBOARD, NULL);    ime_thai =     emtk_app_append_shortcut_button(toolbar_id, SHORTCUT_BUTTON_TOGGLE, "thaikbd_on.png", "thaikbd.png", 18, 18, 0, SHORTCUT_BUTTON_THAI,     NULL);    ime_english =  emtk_app_append_shortcut_button(toolbar_id, SHORTCUT_BUTTON_TOGGLE, "engkbd_on.png",  "engkbd.png",  18, 18, 0, SHORTCUT_BUTTON_ENGLISH,  NULL);}#ifdef LAUNCHER_SUPPORTstatic void todo_desktop_msg(MSG *msg, gpointer user_data) {		g_return_if_fail(msg != NULL);	    if (msg->type == MSG_TYPE_COMMAND && msg->subtype == MSG_COMMAND_CLOSE) {        emtk_app_close_window(todo_window);    }}#endif /* LAUNCHER_SUPPORT */int main(int argc, char **argv) {#ifdef LAUNCHER_SUPPORT    DESKTOP_CHANNEL channel;        if (!desktop_channel_listen_connect(&channel, todo_desktop_msg, NULL)) {        printf("Failed opening channel for listening\n");        return 1;    }#endif /* LAUNCHER_SUPPORT */    i18n_init();      	init_font_table (NULL);	    db = todo_record_db_open();      	    if (!db) {        fprintf(stderr, "Error opening memopad database, exiting\n");        exit(1);    }        emtk_app_init(&argc, &argv);    emtk_app_root(APP_WINDOW_X, APP_WINDOW_Y, APP_WINDOW_W, APP_WINDOW_H);        init();        emtk_app_run();        todo_record_db_close(db);    #ifdef LAUNCHER_SUPPORT    desktop_channel_listen_disconnect(&channel);#endif /* LAUNCHER_SUPPORT */        unload_font_table();    return 0;    }

⌨️ 快捷键说明

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