void tasks_item_entered_cb (GtkWidget *widget, gpointer data) { GtkTextBuffer *text_buffer; GtkTextIter iter_a, iter_b; GtkTreePath *sort_path, *filter_path, *path; GtkTreeIter iter; guint32 fstartdate; GUI *appGUI = (GUI *)data; if (appGUI->tsk->tasks_edit_state == TRUE) { gtk_tree_view_get_cursor (GTK_TREE_VIEW (appGUI->tsk->tasks_list), &sort_path, NULL); if (sort_path != NULL) { filter_path = gtk_tree_model_sort_convert_path_to_child_path (GTK_TREE_MODEL_SORT(appGUI->tsk->tasks_sort), sort_path); if (filter_path != NULL) { path = gtk_tree_model_filter_convert_path_to_child_path (GTK_TREE_MODEL_FILTER(appGUI->tsk->tasks_filter), filter_path); if (path != NULL) { gtk_tree_model_get_iter(GTK_TREE_MODEL(appGUI->tsk->tasks_list_store), &iter, path); gtk_tree_model_get (GTK_TREE_MODEL(appGUI->tsk->tasks_list_store), &iter, COLUMN_START_DATE_JULIAN, &fstartdate, -1); gtk_list_store_remove(appGUI->tsk->tasks_list_store, &iter); gtk_tree_path_free(path); } gtk_tree_path_free(filter_path); } gtk_tree_path_free(sort_path); } } text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(appGUI->tsk->desc_textview)); gtk_text_buffer_get_iter_at_offset(GTK_TEXT_BUFFER(text_buffer), &iter_a, 0); gtk_text_buffer_get_iter_at_offset(GTK_TEXT_BUFFER(text_buffer), &iter_b, -1); if(appGUI->tsk->tasks_edit_state == TRUE) { add_item_to_list(FALSE, appGUI->tsk->tasks_due_julian_day, fstartdate, gtk_combo_box_get_active_text(GTK_COMBO_BOX(appGUI->tsk->priority_combobox)), gtk_combo_box_get_active_text(GTK_COMBO_BOX(appGUI->tsk->category_combobox)), (gchar *) gtk_entry_get_text(GTK_ENTRY(appGUI->tsk->summary_entry)), gtk_text_buffer_get_text(GTK_TEXT_BUFFER(text_buffer), &iter_a, &iter_b, TRUE), appGUI); gui_systray_tooltip_update(appGUI); } else { add_item_to_list(FALSE, appGUI->tsk->tasks_due_julian_day, get_julian_for_today(), gtk_combo_box_get_active_text(GTK_COMBO_BOX(appGUI->tsk->priority_combobox)), gtk_combo_box_get_active_text(GTK_COMBO_BOX(appGUI->tsk->category_combobox)), (gchar *) gtk_entry_get_text(GTK_ENTRY(appGUI->tsk->summary_entry)), gtk_text_buffer_get_text(GTK_TEXT_BUFFER(text_buffer), &iter_a, &iter_b, TRUE), appGUI); gui_systray_tooltip_update(appGUI); } gtk_widget_destroy(appGUI->tsk->tasks_add_window); update_n_items(appGUI); tasks_select_first_position_in_list(appGUI); g_signal_emit_by_name(G_OBJECT(appGUI->cal->calendar), "day-selected"); }
static void transfer_model_data(int iflag_if_add, GtkTreeView *tree_view_to_del, GtkTreeView *tree_view_to_add) { GtkTreeModel *model_to_del; GtkTreeModel *child_model_to_del; GtkTreeModel *model_to_add; GtkTreeModel *child_model_to_add; GtkTreeSelection *selection; GList *list; GList *reference_list; GList *cur; gchar *field_name; gchar *field_math; int index_field; int iflag_viz, iflag_monitor, num_comp, iflag_quad; /* 選択されている行のパスを取得する */ /* パスはツリーモデルソートのもの */ model_to_del = gtk_tree_view_get_model(tree_view_to_del); child_model_to_del = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(model_to_del)); model_to_add = gtk_tree_view_get_model(tree_view_to_add); child_model_to_add = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(model_to_add)); selection = gtk_tree_view_get_selection(tree_view_to_del); list = gtk_tree_selection_get_selected_rows(selection, NULL); /* 最初にパスからリファレンスを作成する */ /* データの削除を行なうと取得済みのパスが(大抵の場合)無効になる */ reference_list = NULL; for (cur = g_list_first(list); cur != NULL; cur = g_list_next(cur)) { GtkTreePath *child_path; GtkTreeRowReference *child_reference; /* ツリーモデルソートのパスをツリーモデルのパスに変換する */ child_path = gtk_tree_model_sort_convert_path_to_child_path(GTK_TREE_MODEL_SORT(model_to_del), (GtkTreePath *)cur->data); child_reference = gtk_tree_row_reference_new(child_model_to_del, child_path); reference_list = g_list_append(reference_list, child_reference); gtk_tree_path_free(child_path); gtk_tree_path_free((GtkTreePath *)cur->data); } g_list_free(list); /* GtkTreeSelectionのchangedシグナルを一時的にブロックする */ block_changed_signal(G_OBJECT(child_model_to_del)); block_changed_signal(G_OBJECT(child_model_to_add)); /* リファレンスをパスに戻して削除 */ for (cur = g_list_first(reference_list); cur != NULL; cur = g_list_next(cur)) { GtkTreePath *tree_path; GtkTreeIter iter; tree_path = gtk_tree_row_reference_get_path((GtkTreeRowReference *)cur->data); gtk_tree_model_get_iter(child_model_to_del, &iter, tree_path); gtk_tree_model_get(child_model_to_del, &iter, COLUMN_FIELD_INDEX, &index_field, -1); gtk_tree_model_get(child_model_to_del, &iter, COLUMN_FIELD_NAME, &field_name, -1); gtk_tree_model_get(child_model_to_del, &iter, COLUMN_FIELD_MATH, &field_math, -1); gtk_tree_model_get(child_model_to_del, &iter, COLUMN_VIZ_FLAG, &iflag_viz, -1); gtk_tree_model_get(child_model_to_del, &iter, COLUMN_MONITOR_FLAG, &iflag_monitor, -1); gtk_tree_model_get(child_model_to_del, &iter, COLUMN_NUM_COMP, &num_comp, -1); gtk_tree_model_get(child_model_to_del, &iter, COLUMN_QUADRATURE, &iflag_quad, -1); printf("To be moved: %d, %s: %s\n", index_field, field_name, all_fld_list[index_field]->field_name); /* Delete */ gtk_list_store_remove(GTK_LIST_STORE(child_model_to_del), &iter); /* Add */ append_model_data(index_field, child_model_to_add); gtk_tree_path_free(tree_path); gtk_tree_row_reference_free((GtkTreeRowReference *)cur->data); /* Update control data */ if(iflag_if_add == 1){ printf("Add field list \n"); add_field_to_ctl(all_fld_list[index_field], &mhd_ctl->model_ctl->fld_ctl->field_list); } else { printf("Delete field list \n"); delete_field_in_ctl(all_fld_list[index_field], &mhd_ctl->model_ctl->fld_ctl->field_list); }; } g_list_free(reference_list); /* changedシグナルのブロックを解除する */ unblock_changed_signal(G_OBJECT(child_model_to_del)); unblock_changed_signal(G_OBJECT(child_model_to_add)); /* check_field_ctl_list(&mhd_ctl->model_ctl->fld_ctl->field_list); */ }
void fill_fields (GtkWidget *due_date_entry, GtkWidget *summary_entry, GtkWidget *desc_entry, GUI *appGUI) { GtkTreeIter iter; GtkTextIter titer; GtkTreePath *sort_path, *filter_path, *path; gchar *fduedate, *fpriority, *fcategory, *fsummary, *fdesc; GtkTextBuffer *text_buffer; gtk_tree_view_get_cursor (GTK_TREE_VIEW (appGUI->tsk->tasks_list), &sort_path, NULL); text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(desc_entry)); gui_clear_text_buffer (text_buffer, &titer); if (sort_path != NULL) { filter_path = gtk_tree_model_sort_convert_path_to_child_path (GTK_TREE_MODEL_SORT(appGUI->tsk->tasks_sort), sort_path); if (filter_path != NULL) { path = gtk_tree_model_filter_convert_path_to_child_path (GTK_TREE_MODEL_FILTER(appGUI->tsk->tasks_filter), filter_path); if (path != NULL) { gtk_tree_model_get_iter(GTK_TREE_MODEL(appGUI->tsk->tasks_list_store), &iter, path); gtk_tree_model_get (GTK_TREE_MODEL(appGUI->tsk->tasks_list_store), &iter, COLUMN_DUE_DATE, &fduedate, COLUMN_DUE_DATE_JULIAN, &appGUI->tsk->tasks_due_julian_day, COLUMN_PRIORITY, &fpriority, COLUMN_CATEGORY, &fcategory, COLUMN_SUMMARY, &fsummary, COLUMN_DESCRIPTION, &fdesc, -1); gtk_entry_set_text(GTK_ENTRY(due_date_entry), fduedate); g_free(fduedate); gtk_entry_set_text(GTK_ENTRY(summary_entry), fsummary); g_free(fsummary); gtk_combo_box_set_active(GTK_COMBO_BOX(appGUI->tsk->category_combobox), gui_list_store_get_text_index (appGUI->opt->tasks_category_store, fcategory)); g_free(fcategory); gtk_combo_box_set_active(GTK_COMBO_BOX(appGUI->tsk->priority_combobox), get_priority_index (fpriority)); g_free(fpriority); gtk_text_buffer_get_iter_at_offset(GTK_TEXT_BUFFER(text_buffer), &titer, 0); if (fdesc != NULL) { gtk_text_buffer_insert(text_buffer, &titer, fdesc, -1); gtk_text_view_set_buffer(GTK_TEXT_VIEW(desc_entry), text_buffer); g_free(fdesc); } gtk_tree_path_free(path); } gtk_tree_path_free(filter_path); } gtk_tree_path_free(sort_path); } }