void add_to_ignored_list(int group) { int found = FALSE; Ignored *ignored = find_ignored(group); if (!ignored) { /* If this group has not yet been ignored create a new ignored item for the list */ ignored = (Ignored *)malloc(sizeof(Ignored)); ignored->group = group; ignored->count = 0; if (!ignored) { fprintf(stderr,"malloc failed\n"); exit(0); } } else { found = TRUE; } ignored->count++; if (!found) { add_item_to_list(&ignore_list, (Entity *)ignored); } }
//Launch method, instead of having all this main basically... void create_list() { printf("Assembling list nodes...\n"); //We're assembling all this, correctly malloc()ing, //instead of creating inside this function with struct //vars, which would only be scoped to this function. // //First, setup the root. If anything else in this app needs this, //we'll pass it as a param, instead of using a global var. struct LinkNode *root_node = malloc(sizeof(struct LinkNode)); root_node->node_val = 9; root_node->next_node = NULL; add_item_to_list(12, root_node); //Add an item and store a pointer to it for future deletion test struct LinkNode *node_to_delete = add_item_to_list(10, root_node); add_item_to_list(22, root_node); add_item_to_list(37, root_node); printf("\nIterate through nodes and print values...\n\n"); print_list_values(root_node); printf("\nAdding value 55 to end of list...\n"); add_item_to_list(55, root_node); printf("\nNow reading all values again...\n\n"); print_list_values(root_node); printf("\nRemoving item with value 10 from the list\n"); //Do removal... remove_item_from_list(node_to_delete, root_node); printf("\nNow reading all values again...\n\n"); print_list_values(root_node); printf("\nAdding 2 new values: 66 and 77...\n"); add_item_to_list(66, root_node); add_item_to_list(77, root_node); printf("\nGet count of nodes...\n"); int node_count = count_list_nodes(root_node); printf("\nNode count: %d\n",node_count); printf("\nNow reading all values again...\n\n"); print_list_values(root_node); printf("\nFree()ing list memory...\n\n"); free_list_memory(&root_node); printf("\nNow reading all values again...\n\n"); print_list_values(root_node); }
void read_tasks_entries (GUI *appGUI) { xmlDocPtr doc; xmlChar *key; xmlNodePtr node, cnode, category_node, main_node; GtkTreeIter iter; gboolean done; gchar priority[BUFFER_SIZE], category[BUFFER_SIZE]; gchar summary[MAX_SUMMARY_SIZE]; guint32 due_date_julian, start_date_julian, priority_n; if (g_file_test (prefs_get_config_filename(TASKS_ENTRIES_FILENAME), G_FILE_TEST_IS_REGULAR) == FALSE) return; if((doc = xmlParseFile(prefs_get_config_filename(TASKS_ENTRIES_FILENAME)))) { if(!(node = xmlDocGetRootElement(doc))) { xmlFreeDoc(doc); return; } if (xmlStrcmp(node->name, (const xmlChar *) TASKS_NAME)) { xmlFreeDoc(doc); return; } main_node = node->xmlChildrenNode; while (main_node != NULL) { if(!xmlStrcmp(main_node->name, (xmlChar *) TASKS_CATEGORY_ENTRIES_NAME)) { /* read note */ category_node = main_node->xmlChildrenNode; while (category_node != NULL) { if ((!xmlStrcmp(category_node->name, (const xmlChar *) "name"))) { key = xmlNodeListGetString(doc, category_node->xmlChildrenNode, 1); if (key != NULL) { gtk_list_store_append(appGUI->opt->tasks_category_store, &iter); gtk_list_store_set(appGUI->opt->tasks_category_store, &iter, 0, (gchar *) key, -1); } xmlFree(key); } category_node = category_node->next; } } /*---------------------------------------------------------------------------------------*/ if(!xmlStrcmp(main_node->name, (xmlChar *) TASKS_ENTRIES_NAME)) { /* read note */ node = main_node->xmlChildrenNode; while (node != NULL) { if(!xmlStrcmp(node->name, (xmlChar *) "entry")) { cnode = node->xmlChildrenNode; done = FALSE; due_date_julian = start_date_julian = 0; while (cnode != NULL) { if ((!xmlStrcmp(cnode->name, (const xmlChar *) "status"))) { key = xmlNodeListGetString(doc, cnode->xmlChildrenNode, 1); if (key != NULL) { sscanf((gchar *) key, "%d", &done); xmlFree(key); } } if ((!xmlStrcmp(cnode->name, (const xmlChar *) "due_date"))) { key = xmlNodeListGetString(doc, cnode->xmlChildrenNode, 1); if (key != NULL) { sscanf((gchar *) key, "%d", &due_date_julian); xmlFree(key); } } if ((!xmlStrcmp(cnode->name, (const xmlChar *) "start_date"))) { key = xmlNodeListGetString(doc, cnode->xmlChildrenNode, 1); if (key != NULL) { sscanf((gchar *) key, "%d", &start_date_julian); xmlFree(key); } } if ((!xmlStrcmp(cnode->name, (const xmlChar *) "priority"))) { key = xmlNodeListGetString(doc, cnode->xmlChildrenNode, 1); if (key != NULL) { strncpy (priority, (gchar *) key, BUFFER_SIZE-1); if (get_priority_index(gettext(priority)) == -1) { sscanf((gchar *) key, "%d", &priority_n); strncpy (priority, get_priority_text(priority_n), BUFFER_SIZE-1); } xmlFree(key); } } if ((!xmlStrcmp(cnode->name, (const xmlChar *) "category"))) { key = xmlNodeListGetString(doc, cnode->xmlChildrenNode, 1); if (key != NULL) { strncpy (category, (gchar *) key, BUFFER_SIZE-1); xmlFree(key); } } if ((!xmlStrcmp(cnode->name, (const xmlChar *) "summary"))) { key = xmlNodeListGetString(doc, cnode->xmlChildrenNode, 1); if (key != NULL) { strncpy (summary, (gchar *) key, MAX_SUMMARY_SIZE-1); xmlFree(key); } } if ((!xmlStrcmp(cnode->name, (const xmlChar *) "description"))) { key = xmlNodeListGetString(doc, cnode->xmlChildrenNode, 1); add_item_to_list(done, due_date_julian, start_date_julian, priority, category, summary, (gchar *) key, appGUI); if (key != NULL) { xmlFree(key); } } cnode = cnode->next; } } node = node->next; } } /*---------------------------------------------------------------------------------------*/ main_node = main_node->next; } xmlFree(node); xmlFreeDoc(doc); } }
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); } 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); } 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"); }
gint main (gint argc, gchar **argv) { GtkWidget *window, *toolbar, *grid, *treeview, *scrolled_window; GtkWidget *hbox, *hbox1, *hbox2, *checkbox, *option_menu, *menu; gint i; static const gchar *toolbar_styles[] = { "icons", "text", "both (vertical)", "both (horizontal)" }; GtkToolItem *item; GtkListStore *store; GtkWidget *image; GtkWidget *menuitem; GtkWidget *button; GtkWidget *label; GIcon *gicon; GSList *group; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (window, "destroy", G_CALLBACK(gtk_main_quit), NULL); grid = gtk_grid_new (); gtk_container_add (GTK_CONTAINER (window), grid); toolbar = gtk_toolbar_new (); gtk_widget_set_vexpand (toolbar, TRUE); gtk_grid_attach (GTK_GRID (grid), toolbar, 0, 0, 2, 1); hbox1 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3); gtk_container_set_border_width (GTK_CONTAINER (hbox1), 5); gtk_widget_set_vexpand (hbox1, TRUE); gtk_grid_attach (GTK_GRID (grid), hbox1, 1, 1, 1, 1); hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_container_set_border_width (GTK_CONTAINER (hbox2), 5); gtk_widget_set_vexpand (hbox2, TRUE); gtk_grid_attach (GTK_GRID (grid), hbox2, 1, 2, 1, 1); checkbox = gtk_check_button_new_with_mnemonic("_Vertical"); gtk_box_pack_start (GTK_BOX (hbox1), checkbox, FALSE, FALSE, 0); g_signal_connect (checkbox, "toggled", G_CALLBACK (change_orientation), toolbar); checkbox = gtk_check_button_new_with_mnemonic("_Show Arrow"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), TRUE); gtk_box_pack_start (GTK_BOX (hbox1), checkbox, FALSE, FALSE, 0); g_signal_connect (checkbox, "toggled", G_CALLBACK (change_show_arrow), toolbar); checkbox = gtk_check_button_new_with_mnemonic("_Set Toolbar Style:"); g_signal_connect (checkbox, "toggled", G_CALLBACK (set_toolbar_style_toggled), toolbar); gtk_box_pack_start (GTK_BOX (hbox1), checkbox, FALSE, FALSE, 0); option_menu = gtk_combo_box_text_new (); gtk_widget_set_sensitive (option_menu, FALSE); g_object_set_data (G_OBJECT (checkbox), "option-menu", option_menu); for (i = 0; i < G_N_ELEMENTS (toolbar_styles); i++) gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (option_menu), toolbar_styles[i]); gtk_combo_box_set_active (GTK_COMBO_BOX (option_menu), gtk_toolbar_get_style (GTK_TOOLBAR (toolbar))); gtk_box_pack_start (GTK_BOX (hbox2), option_menu, FALSE, FALSE, 0); g_signal_connect (option_menu, "changed", G_CALLBACK (change_toolbar_style), toolbar); checkbox = gtk_check_button_new_with_mnemonic("_Set Icon Size:"); g_signal_connect (checkbox, "toggled", G_CALLBACK (set_icon_size_toggled), toolbar); gtk_box_pack_start (GTK_BOX (hbox2), checkbox, FALSE, FALSE, 0); option_menu = gtk_combo_box_text_new (); g_object_set_data (G_OBJECT (checkbox), "option-menu", option_menu); gtk_widget_set_sensitive (option_menu, FALSE); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (option_menu), "small toolbar"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (option_menu), "large toolbar"); gtk_box_pack_start (GTK_BOX (hbox2), option_menu, FALSE, FALSE, 0); g_signal_connect (option_menu, "changed", G_CALLBACK (icon_size_history_changed), toolbar); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_set_hexpand (scrolled_window, TRUE); gtk_widget_set_vexpand (scrolled_window, TRUE); gtk_grid_attach (GTK_GRID (grid), scrolled_window, 1, 3, 1, 1); store = create_items_list (&treeview); gtk_container_add (GTK_CONTAINER (scrolled_window), treeview); item = gtk_tool_button_new (NULL, NULL); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "document-new"); gtk_tool_button_set_label (GTK_TOOL_BUTTON (item), "Custom label"); add_item_to_list (store, item, "New"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); gdk_threads_add_timeout (3000, (GSourceFunc) timeout_cb, item); gtk_tool_item_set_expand (item, TRUE); menu = gtk_menu_new (); for (i = 0; i < 20; i++) { char *text; text = g_strdup_printf ("Menuitem %d", i); menuitem = gtk_menu_item_new_with_label (text); g_free (text); gtk_widget_show (menuitem); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); } item = gtk_menu_tool_button_new (NULL, NULL); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "document-open"); gtk_tool_button_set_label (GTK_TOOL_BUTTON (item), "Open"); gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (item), menu); add_item_to_list (store, item, "Open"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); gdk_threads_add_timeout (3000, (GSourceFunc) timeout_cb1, item); menu = gtk_menu_new (); for (i = 0; i < 20; i++) { char *text; text = g_strdup_printf ("A%d", i); menuitem = gtk_menu_item_new_with_label (text); g_free (text); gtk_widget_show (menuitem); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); } item = gtk_menu_tool_button_new (NULL, NULL); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "go-previous"); gtk_tool_button_set_label (GTK_TOOL_BUTTON (item), "Back"); gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (item), menu); add_item_to_list (store, item, "BackWithHistory"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_separator_tool_item_new (); add_item_to_list (store, item, "-----"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); image = gtk_image_new_from_icon_name ("dialog-warning", GTK_ICON_SIZE_DIALOG); item = gtk_tool_item_new (); gtk_widget_show (image); gtk_container_add (GTK_CONTAINER (item), image); add_item_to_list (store, item, "(Custom Item)"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_tool_button_new (NULL, NULL); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "go-previous"); gtk_tool_button_set_label (GTK_TOOL_BUTTON (item), "Back"); add_item_to_list (store, item, "Back"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_separator_tool_item_new (); add_item_to_list (store, item, "-----"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_tool_button_new (NULL, NULL); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "go-next"); gtk_tool_button_set_label (GTK_TOOL_BUTTON (item), "Forward"); add_item_to_list (store, item, "Forward"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_toggle_tool_button_new (); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "format-text-bold"); g_signal_connect (item, "toggled", G_CALLBACK (bold_toggled), NULL); add_item_to_list (store, item, "Bold"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE); item = gtk_separator_tool_item_new (); add_item_to_list (store, item, "-----"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); gtk_tool_item_set_expand (item, TRUE); gtk_separator_tool_item_set_draw (GTK_SEPARATOR_TOOL_ITEM (item), FALSE); g_assert (gtk_toolbar_get_nth_item (GTK_TOOLBAR (toolbar), 0) != 0); item = gtk_radio_tool_button_new (NULL); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "format-justify-left"); group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (item)); add_item_to_list (store, item, "Left"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_radio_tool_button_new (group); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "format-justify-center"); make_prop_editor (G_OBJECT (item)); group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (item)); add_item_to_list (store, item, "Center"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_radio_tool_button_new (group); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "format-justify-right"); add_item_to_list (store, item, "Right"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_tool_button_new (gtk_image_new_from_file ("apple-red.png"), "_Apple"); add_item_to_list (store, item, "Apple"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (item), TRUE); gicon = g_content_type_get_icon ("video/ogg"); image = gtk_image_new_from_gicon (gicon, GTK_ICON_SIZE_LARGE_TOOLBAR); g_object_unref (gicon); item = gtk_tool_button_new (image, "Video"); add_item_to_list (store, item, "Video"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); image = gtk_image_new_from_icon_name ("utilities-terminal", GTK_ICON_SIZE_LARGE_TOOLBAR); item = gtk_tool_button_new (image, "Terminal"); add_item_to_list (store, item, "Terminal"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); image = gtk_spinner_new (); gtk_spinner_start (GTK_SPINNER (image)); item = gtk_tool_button_new (image, "Spinner"); add_item_to_list (store, item, "Spinner"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5); gtk_container_set_border_width (GTK_CONTAINER (hbox), 5); gtk_widget_set_hexpand (hbox, TRUE); gtk_grid_attach (GTK_GRID (grid), hbox, 1, 4, 1, 1); button = gtk_button_new_with_label ("Drag me to the toolbar"); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); label = gtk_label_new ("Drop index:"); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); label = gtk_label_new (""); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); checkbox = gtk_check_button_new_with_mnemonic("_Right to left"); if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), FALSE); g_signal_connect (checkbox, "toggled", G_CALLBACK (rtl_toggled), NULL); gtk_box_pack_end (GTK_BOX (hbox), checkbox, FALSE, FALSE, 0); gtk_drag_source_set (button, GDK_BUTTON1_MASK, target_table, G_N_ELEMENTS (target_table), GDK_ACTION_MOVE); gtk_drag_dest_set (toolbar, GTK_DEST_DEFAULT_DROP, target_table, G_N_ELEMENTS (target_table), GDK_ACTION_MOVE); g_signal_connect (toolbar, "drag_motion", G_CALLBACK (toolbar_drag_motion), NULL); g_signal_connect (toolbar, "drag_leave", G_CALLBACK (toolbar_drag_leave), NULL); g_signal_connect (toolbar, "drag_drop", G_CALLBACK (toolbar_drag_drop), label); gtk_widget_show_all (window); make_prop_editor (G_OBJECT (toolbar)); g_signal_connect (window, "delete_event", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect (toolbar, "popup_context_menu", G_CALLBACK (popup_context_menu), NULL); gtk_main (); return 0; }