X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=info.c;h=6842d3d5b36b3427466629b572dbf9286fa13181;hb=673cf274f8841686019827ff0f7c81d0f04f813b;hp=842a150014505b1c31e00164efacac964908874f;hpb=621761233b2e1b139c07987b562ef2aa299ff35e;p=ext%2Fsubsurface.git diff --git a/info.c b/info.c index 842a150..6842d3d 100644 --- a/info.c +++ b/info.c @@ -19,9 +19,9 @@ #include "display-gtk.h" #include "divelist.h" -static GtkEntry *location, *buddy, *divemaster, *rating; +static GtkEntry *location, *buddy, *divemaster, *rating, *suit; static GtkTextView *notes; -static GtkListStore *location_list, *people_list, *star_list; +static GtkListStore *location_list, *people_list, *star_list, *suit_list; static char *get_text(GtkTextView *view) { @@ -96,6 +96,7 @@ void show_dive_info(struct dive *dive) SET_TEXT_VALUE(divemaster); SET_TEXT_VALUE(buddy); SET_TEXT_VALUE(location); + SET_TEXT_VALUE(suit); gtk_entry_set_text(rating, star_strings[dive->rating]); gtk_text_buffer_set_text(gtk_text_view_get_buffer(notes), dive && dive->notes ? dive->notes : "", -1); @@ -242,6 +243,8 @@ static gboolean match_string_entry(GtkTreeModel *model, GtkTreePath *path, GtkTr gtk_tree_model_get(model, iter, 0, &entry, -1); cmp = strcmp(entry, string); + if (entry) + free(entry); /* Stop. The entry is bigger than the new one */ if (cmp > 0) @@ -296,6 +299,11 @@ void add_location(const char *string) add_string_list_entry(string, location_list); } +void add_suit(const char *string) +{ + add_string_list_entry(string, suit_list); +} + static int get_rating(const char *string) { int rating_val = 0; @@ -308,7 +316,7 @@ static int get_rating(const char *string) } struct dive_info { - GtkComboBoxEntry *location, *divemaster, *buddy, *rating; + GtkComboBoxEntry *location, *divemaster, *buddy, *rating, *suit; GtkTextView *notes; }; @@ -336,6 +344,12 @@ static void save_dive_info_changes(struct dive *dive, struct dive_info *info) changed = 1; } + new_text = get_combo_box_entry_text(info->suit, &dive->suit); + if (new_text) { + add_suit(new_text); + changed = 1; + } + rating_string = strdup(star_strings[dive->rating]); new_text = get_combo_box_entry_text(info->rating, &rating_string); if (new_text) { @@ -380,6 +394,7 @@ static void dive_info_widget(GtkWidget *box, struct dive *dive, struct dive_info gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, TRUE, 0); info->rating = text_entry(hbox, "Rating", star_list, star_strings[dive->rating]); + info->suit = text_entry(hbox, "Suit", suit_list, dive->suit); /* only show notes if editing a single dive */ if (multi) { @@ -455,13 +470,18 @@ int edit_multi_dive_info(int nr, int *indices) success = gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT; if (success) for (i = 0; i < nr; i++) { + int idx = indices[i]; + struct dive *n = get_dive(idx); + + if (!n) + continue; /* copy all "info" fields */ - save_dive_info_changes(get_dive(indices[i]), &info); + save_dive_info_changes(n, &info); /* copy the cylinders / weightsystems */ - update_equipment_data(get_dive(indices[i]), dive); + update_equipment_data(n, dive); /* this is extremely inefficient... it loops through all dives to find the right one - but we KNOW the index already */ - flush_divelist(get_dive(indices[i])); + flush_divelist(n); } gtk_widget_destroy(dialog); @@ -619,6 +639,7 @@ GtkWidget *extended_dive_info_widget(void) add_string_list_entry(THREE_STARS, star_list); add_string_list_entry(FOUR_STARS, star_list); add_string_list_entry(FIVE_STARS, star_list); + suit_list = gtk_list_store_new(1, G_TYPE_STRING); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); location = text_value(vbox, "Location"); @@ -633,6 +654,7 @@ GtkWidget *extended_dive_info_widget(void) gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); rating = text_value(hbox, "Rating"); + suit = text_value(hbox, "Suit"); notes = text_view(vbox, "Notes", READ_ONLY); return vbox;