From: Linus Torvalds Date: Sat, 19 Nov 2011 20:25:35 +0000 (-0800) Subject: Merge branch 'sacplot' of git://git.hohndel.org/subsurface X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=25e18211ec99ff15c26315eff87fc31816ce8f33;hp=e7491d3bf50ad31bbee38abc9da823c9cbdb9cd1;p=ext%2Fsubsurface.git Merge branch 'sacplot' of git://git.hohndel.org/subsurface * 'sacplot' of git://git.hohndel.org/subsurface: Make pressure plot shading by sac rate consistent Improve tank pressure sac coloring Be more consistent in our handling of rgb value tables Remove redundant linear sample tank pressure data --- diff --git a/display-gtk.h b/display-gtk.h index 3f1ff0d..56fd5c4 100644 --- a/display-gtk.h +++ b/display-gtk.h @@ -34,6 +34,7 @@ extern GtkWidget *dive_info_frame(void); extern GtkWidget *extended_dive_info_widget(void); extern GtkWidget *equipment_widget(void); extern GtkWidget *stats_widget(void); +extern GtkWidget *cylinder_list_widget(void); extern GtkWidget *dive_list_create(void); diff --git a/dive.h b/dive.h index 0116a1c..ccb007d 100644 --- a/dive.h +++ b/dive.h @@ -259,10 +259,8 @@ extern xmlDoc *test_xslt_transforms(xmlDoc *doc); #endif extern void show_dive_info(struct dive *); -extern void flush_dive_info_changes(struct dive *); extern void show_dive_equipment(struct dive *); -extern void flush_dive_equipment_changes(struct dive *); extern void show_dive_stats(struct dive *); @@ -304,6 +302,7 @@ extern void add_location(const char *string); extern void remember_event(const char *eventname); extern void evn_foreach(void (*callback)(const char *, int *, void *), void *data); +extern int edit_dive_info(struct dive *dive); extern void dive_list_update_dives(void); extern void flush_divelist(struct dive *dive); diff --git a/divelist.c b/divelist.c index 60ad16a..48a9ea9 100644 --- a/divelist.c +++ b/divelist.c @@ -506,6 +506,20 @@ static void realize_cb(GtkWidget *tree_view, gpointer userdata) gtk_widget_grab_focus(tree_view); } +static void row_activated_cb(GtkTreeView *tree_view, + GtkTreePath *path, + GtkTreeViewColumn *column, + GtkTreeModel *model) +{ + int index; + GtkTreeIter iter; + + if (!gtk_tree_model_get_iter(model, &iter, path)) + return; + gtk_tree_model_get(model, &iter, DIVE_INDEX, &index, -1); + edit_dive_info(get_dive(index)); +} + GtkWidget *dive_list_create(void) { GtkTreeSelection *selection; @@ -551,6 +565,7 @@ GtkWidget *dive_list_create(void) NULL); g_signal_connect_after(dive_list.tree_view, "realize", G_CALLBACK(realize_cb), NULL); + g_signal_connect(dive_list.tree_view, "row-activated", G_CALLBACK(row_activated_cb), dive_list.model); g_signal_connect(selection, "changed", G_CALLBACK(selection_cb), dive_list.model); dive_list.container_widget = gtk_scrolled_window_new(NULL, NULL); diff --git a/equipment.c b/equipment.c index f86e63b..2b27893 100644 --- a/equipment.c +++ b/equipment.c @@ -3,7 +3,6 @@ * controlled through the following interfaces: * * void show_dive_equipment(struct dive *dive) - * void flush_dive_equipment_changes(struct dive *dive) * * called from gtk-ui: * GtkWidget *equipment_widget(void) @@ -35,9 +34,7 @@ enum { static struct { int max_index; GtkListStore *model; - GtkWidget *tree_view; GtkWidget *edit, *add, *del; - GtkTreeViewColumn *desc, *size, *workp, *startp, *endp, *o2, *he; } cylinder_list; struct cylinder_widget { @@ -429,11 +426,6 @@ static void record_cylinder_changes(cylinder_t *cyl, struct cylinder_widget *cyl fill_cylinder_info(cylinder, cyl, desc, volume, pressure, start, end, o2); } -void flush_dive_equipment_changes(struct dive *dive) -{ - /* We do nothing: we require the "Ok" button press */ -} - /* * We hardcode the most common standard cylinders, * we should pick up any other names from the dive @@ -667,7 +659,7 @@ static int get_model_index(GtkListStore *model, GtkTreeIter *iter) return index; } -static void edit_cb(GtkButton *button, gpointer data) +static void edit_cb(GtkButton *button, GtkTreeView *tree_view) { int index; GtkTreeIter iter; @@ -675,7 +667,7 @@ static void edit_cb(GtkButton *button, gpointer data) GtkTreeSelection *selection; cylinder_t cyl; - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(cylinder_list.tree_view)); + selection = gtk_tree_view_get_selection(tree_view); /* Nothing selected? This shouldn't happen, since the button should be inactive */ if (!gtk_tree_selection_get_selected(selection, NULL, &iter)) @@ -689,7 +681,7 @@ static void edit_cb(GtkButton *button, gpointer data) repaint_dive(); } -static void add_cb(GtkButton *button, gpointer data) +static void add_cb(GtkButton *button, GtkTreeView *tree_view) { int index = cylinder_list.max_index; GtkTreeIter iter; @@ -703,14 +695,14 @@ static void add_cb(GtkButton *button, gpointer data) gtk_list_store_append(model, &iter); set_one_cylinder(index, &cyl, model, &iter); - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(cylinder_list.tree_view)); + selection = gtk_tree_view_get_selection(tree_view); gtk_tree_selection_select_iter(selection, &iter); cylinder_list.max_index++; gtk_widget_set_sensitive(cylinder_list.add, cylinder_list.max_index < MAX_CYLINDERS); } -static void del_cb(GtkButton *button, gpointer data) +static void del_cb(GtkButton *button, GtkTreeView *tree_view) { int index, nr; GtkTreeIter iter; @@ -719,7 +711,7 @@ static void del_cb(GtkButton *button, gpointer data) struct dive *dive; cylinder_t *cyl; - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(cylinder_list.tree_view)); + selection = gtk_tree_view_get_selection(tree_view); /* Nothing selected? This shouldn't happen, since the button should be inactive */ if (!gtk_tree_selection_get_selected(selection, NULL, &iter)) @@ -833,26 +825,18 @@ static void row_activated_cb(GtkTreeView *tree_view, GtkTreeViewColumn *column, GtkTreeModel *model) { - edit_cb(NULL, NULL); + edit_cb(NULL, tree_view); } -static GtkWidget *cylinder_list_create(void) +GtkWidget *cylinder_list_widget(void) { + GtkListStore *model = cylinder_list.model; GtkWidget *tree_view; GtkTreeSelection *selection; - GtkListStore *model; - model = gtk_list_store_new(CYL_COLUMNS, - G_TYPE_STRING, /* CYL_DESC: utf8 */ - G_TYPE_INT, /* CYL_SIZE: mliter */ - G_TYPE_INT, /* CYL_WORKP: mbar */ - G_TYPE_INT, /* CYL_STARTP: mbar */ - G_TYPE_INT, /* CYL_ENDP: mbar */ - G_TYPE_INT, /* CYL_O2: permille */ - G_TYPE_INT /* CYL_HE: permille */ - ); - cylinder_list.model = model; tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model)); + gtk_widget_set_can_focus(tree_view, FALSE); + g_signal_connect(tree_view, "row-activated", G_CALLBACK(row_activated_cb), model); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view)); @@ -863,19 +847,36 @@ static GtkWidget *cylinder_list_create(void) "enable-grid-lines", GTK_TREE_VIEW_GRID_LINES_BOTH, NULL); - cylinder_list.desc = tree_view_column(tree_view, CYL_DESC, "Type", NULL, PANGO_ALIGN_LEFT, TRUE); - cylinder_list.size = tree_view_column(tree_view, CYL_SIZE, "Size", size_data_func, PANGO_ALIGN_RIGHT, TRUE); - cylinder_list.workp = tree_view_column(tree_view, CYL_WORKP, "MaxPress", pressure_data_func, PANGO_ALIGN_RIGHT, TRUE); - cylinder_list.startp = tree_view_column(tree_view, CYL_STARTP, "Start", pressure_data_func, PANGO_ALIGN_RIGHT, TRUE); - cylinder_list.endp = tree_view_column(tree_view, CYL_ENDP, "End", pressure_data_func, PANGO_ALIGN_RIGHT, TRUE); - cylinder_list.o2 = tree_view_column(tree_view, CYL_O2, "O" UTF8_SUBSCRIPT_2 "%", percentage_data_func, PANGO_ALIGN_RIGHT, TRUE); - cylinder_list.he = tree_view_column(tree_view, CYL_HE, "He%", percentage_data_func, PANGO_ALIGN_RIGHT, TRUE); + tree_view_column(tree_view, CYL_DESC, "Type", NULL, PANGO_ALIGN_LEFT, TRUE); + tree_view_column(tree_view, CYL_SIZE, "Size", size_data_func, PANGO_ALIGN_RIGHT, TRUE); + tree_view_column(tree_view, CYL_WORKP, "MaxPress", pressure_data_func, PANGO_ALIGN_RIGHT, TRUE); + tree_view_column(tree_view, CYL_STARTP, "Start", pressure_data_func, PANGO_ALIGN_RIGHT, TRUE); + tree_view_column(tree_view, CYL_ENDP, "End", pressure_data_func, PANGO_ALIGN_RIGHT, TRUE); + tree_view_column(tree_view, CYL_O2, "O" UTF8_SUBSCRIPT_2 "%", percentage_data_func, PANGO_ALIGN_RIGHT, TRUE); + tree_view_column(tree_view, CYL_HE, "He%", percentage_data_func, PANGO_ALIGN_RIGHT, TRUE); return tree_view; } +static GtkWidget *cylinder_list_create(void) +{ + GtkListStore *model; + + model = gtk_list_store_new(CYL_COLUMNS, + G_TYPE_STRING, /* CYL_DESC: utf8 */ + G_TYPE_INT, /* CYL_SIZE: mliter */ + G_TYPE_INT, /* CYL_WORKP: mbar */ + G_TYPE_INT, /* CYL_STARTP: mbar */ + G_TYPE_INT, /* CYL_ENDP: mbar */ + G_TYPE_INT, /* CYL_O2: permille */ + G_TYPE_INT /* CYL_HE: permille */ + ); + cylinder_list.model = model; + return cylinder_list_widget(); +} + GtkWidget *equipment_widget(void) { - GtkWidget *vbox, *hbox, *frame, *framebox; + GtkWidget *vbox, *hbox, *frame, *framebox, *tree_view; GtkWidget *add, *del, *edit; vbox = gtk_vbox_new(FALSE, 3); @@ -889,7 +890,7 @@ GtkWidget *equipment_widget(void) */ cylinder_model = create_tank_size_model(); - cylinder_list.tree_view = cylinder_list_create(); + tree_view = cylinder_list_create(); hbox = gtk_hbox_new(FALSE, 3); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 3); @@ -903,7 +904,7 @@ GtkWidget *equipment_widget(void) hbox = gtk_hbox_new(FALSE, 3); gtk_box_pack_start(GTK_BOX(framebox), hbox, TRUE, FALSE, 3); - gtk_box_pack_start(GTK_BOX(hbox), cylinder_list.tree_view, TRUE, FALSE, 3); + gtk_box_pack_start(GTK_BOX(hbox), tree_view, TRUE, FALSE, 3); hbox = gtk_hbox_new(TRUE, 3); gtk_box_pack_start(GTK_BOX(framebox), hbox, TRUE, FALSE, 3); @@ -919,9 +920,9 @@ GtkWidget *equipment_widget(void) cylinder_list.add = add; cylinder_list.del = del; - g_signal_connect(edit, "clicked", G_CALLBACK(edit_cb), NULL); - g_signal_connect(add, "clicked", G_CALLBACK(add_cb), NULL); - g_signal_connect(del, "clicked", G_CALLBACK(del_cb), NULL); + g_signal_connect(edit, "clicked", G_CALLBACK(edit_cb), tree_view); + g_signal_connect(add, "clicked", G_CALLBACK(add_cb), tree_view); + g_signal_connect(del, "clicked", G_CALLBACK(del_cb), tree_view); return vbox; } diff --git a/info.c b/info.c index 11107b1..7e94a22 100644 --- a/info.c +++ b/info.c @@ -2,7 +2,6 @@ /* creates the UI for the info frame - * controlled through the following interfaces: * - * void flush_dive_info_changes(struct dive *dive) * void show_dive_info(struct dive *dive) * * called from gtk-ui: @@ -19,14 +18,17 @@ #include "display-gtk.h" #include "divelist.h" -static GtkComboBoxEntry *location, *buddy, *divemaster; -static GtkTextBuffer *notes; +static GtkEntry *location, *buddy, *divemaster; +static GtkTextView *notes; +static GtkListStore *location_list, *people_list; -static char *get_text(GtkTextBuffer *buffer) +static char *get_text(GtkTextView *view) { + GtkTextBuffer *buffer; GtkTextIter start; GtkTextIter end; + buffer = gtk_text_view_get_buffer(view); gtk_text_buffer_get_start_iter(buffer, &start); gtk_text_buffer_get_end_iter(buffer, &end); return gtk_text_buffer_get_text(buffer, &start, &end, FALSE); @@ -57,89 +59,74 @@ static char *get_combo_box_entry_text(GtkComboBoxEntry *combo_box, char **textp) return *textp; } +#define SET_TEXT_VALUE(x) \ + gtk_entry_set_text(x, dive && dive->x ? dive->x : "") -void flush_dive_info_changes(struct dive *dive) +static int divename(char *buf, size_t size, struct dive *dive) { - char *old_text, *new_text; - int changed = 0; - - if (!dive) - return; - - new_text = get_combo_box_entry_text(location, &dive->location); - if (new_text) { - add_location(new_text); - changed = 1; - } - - new_text = get_combo_box_entry_text(divemaster, &dive->divemaster); - if (new_text) { - add_people(new_text); - changed = 1; - } - - new_text = get_combo_box_entry_text(buddy, &dive->buddy); - if (new_text) { - add_people(new_text); - changed = 1; - } - - old_text = dive->notes; - dive->notes = get_text(notes); - if (text_changed(old_text,dive->notes)) - changed = 1; - if (old_text) - g_free(old_text); - - if (changed) - mark_divelist_changed(TRUE); + struct tm *tm = gmtime(&dive->when); + return snprintf(buf, size, "Dive #%d - %s %02d/%02d/%04d at %d:%02d", + dive->number, + weekday(tm->tm_wday), + tm->tm_mon+1, tm->tm_mday, + tm->tm_year+1900, + tm->tm_hour, tm->tm_min); } -static void set_combo_box_entry_text(GtkComboBoxEntry *combo_box, const char *text) -{ - GtkEntry *entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(combo_box))); - gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box), -1); - if (!*text) - gtk_entry_set_text(entry, " "); - gtk_entry_set_text(entry, text); -} - -#define SET_TEXT_ENTRY(x) \ - set_combo_box_entry_text(x, dive && dive->x ? dive->x : "") - void show_dive_info(struct dive *dive) { - struct tm *tm; const char *text; char buffer[80]; /* dive number and location (or lacking that, the date) go in the window title */ - tm = gmtime(&dive->when); text = dive->location; if (!text) text = ""; if (*text) { snprintf(buffer, sizeof(buffer), "Dive #%d - %s", dive->number, text); } else { - snprintf(buffer, sizeof(buffer), "Dive #%d - %s %02d/%02d/%04d at %d:%02d", - dive->number, - weekday(tm->tm_wday), - tm->tm_mon+1, tm->tm_mday, - tm->tm_year+1900, - tm->tm_hour, tm->tm_min); + divename(buffer, sizeof(buffer), dive); } text = buffer; if (!dive->number) text += 10; /* Skip the "Dive #0 - " part */ gtk_window_set_title(GTK_WINDOW(main_window), text); - SET_TEXT_ENTRY(divemaster); - SET_TEXT_ENTRY(buddy); - SET_TEXT_ENTRY(location); - gtk_text_buffer_set_text(notes, dive && dive->notes ? dive->notes : "", -1); + SET_TEXT_VALUE(divemaster); + SET_TEXT_VALUE(buddy); + SET_TEXT_VALUE(location); + gtk_text_buffer_set_text(gtk_text_view_get_buffer(notes), + dive && dive->notes ? dive->notes : "", -1); +} + +static void info_menu_edit_cb(GtkMenuItem *menuitem, gpointer user_data) +{ + edit_dive_info(current_dive); +} + +static void populate_popup_cb(GtkTextView *entry, GtkMenu *menu, gpointer user_data) +{ + GtkWidget *item = gtk_menu_item_new_with_label("Edit"); + g_signal_connect(item, "activate", G_CALLBACK(info_menu_edit_cb), NULL); + gtk_widget_show(item); /* Yes, really */ + gtk_menu_prepend(menu, item); +} + +static GtkEntry *text_value(GtkWidget *box, const char *label) +{ + GtkWidget *widget; + GtkWidget *frame = gtk_frame_new(label); + + gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); + widget = gtk_entry_new(); + gtk_widget_set_can_focus(widget, FALSE); + gtk_editable_set_editable(GTK_EDITABLE(widget), FALSE); + gtk_container_add(GTK_CONTAINER(frame), widget); + g_signal_connect(widget, "populate-popup", G_CALLBACK(populate_popup_cb), NULL); + return GTK_ENTRY(widget); } -static GtkComboBoxEntry *text_entry(GtkWidget *box, const char *label, GtkListStore *completions) +static GtkComboBoxEntry *text_entry(GtkWidget *box, const char *label, GtkListStore *completions, const char *text) { GtkEntry *entry; GtkWidget *combo_box; @@ -151,7 +138,9 @@ static GtkComboBoxEntry *text_entry(GtkWidget *box, const char *label, GtkListSt combo_box = gtk_combo_box_entry_new_with_model(GTK_TREE_MODEL(completions), 0); gtk_container_add(GTK_CONTAINER(frame), combo_box); - entry = GTK_ENTRY(GTK_BIN(combo_box)->child); + entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(combo_box))); + if (text && *text) + gtk_entry_set_text(entry, text); completion = gtk_entry_completion_new(); gtk_entry_completion_set_text_column(completion, 0); @@ -164,10 +153,14 @@ static GtkComboBoxEntry *text_entry(GtkWidget *box, const char *label, GtkListSt return GTK_COMBO_BOX_ENTRY(combo_box); } -static GtkTextBuffer *text_view(GtkWidget *box, const char *label) +enum writable { + READ_ONLY, + READ_WRITE +}; + +static GtkTextView *text_view(GtkWidget *box, const char *label, enum writable writable) { GtkWidget *view, *vbox; - GtkTextBuffer *buffer; GtkWidget *frame = gtk_frame_new(label); gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0); @@ -181,13 +174,16 @@ static GtkTextBuffer *text_view(GtkWidget *box, const char *label) gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN); view = gtk_text_view_new(); + if (writable == READ_ONLY) { + gtk_widget_set_can_focus(view, FALSE); + gtk_text_view_set_editable(GTK_TEXT_VIEW(view), FALSE); + gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(view), FALSE); + g_signal_connect(view, "populate-popup", G_CALLBACK(populate_popup_cb), NULL); + } gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD); gtk_container_add(GTK_CONTAINER(scrolled_window), view); - - buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); - gtk_box_pack_start(GTK_BOX(vbox), scrolled_window, TRUE, TRUE, 0); - return buffer; + return GTK_TEXT_VIEW(view); } static enum { @@ -228,8 +224,6 @@ static int match_list(GtkListStore *list, const char *string) return found_string_entry; } -static GtkListStore *location_list, *people_list; - static void add_string_list_entry(const char *string, GtkListStore *list) { GtkTreeIter *iter, loc; @@ -261,6 +255,103 @@ void add_location(const char *string) add_string_list_entry(string, location_list); } +struct dive_info { + GtkComboBoxEntry *location, *divemaster, *buddy; + GtkTextView *notes; +}; + +static void save_dive_info_changes(struct dive *dive, struct dive_info *info) +{ + char *old_text, *new_text; + int changed = 0; + + new_text = get_combo_box_entry_text(info->location, &dive->location); + if (new_text) { + add_location(new_text); + changed = 1; + } + + new_text = get_combo_box_entry_text(info->divemaster, &dive->divemaster); + if (new_text) { + add_people(new_text); + changed = 1; + } + + new_text = get_combo_box_entry_text(info->buddy, &dive->buddy); + if (new_text) { + add_people(new_text); + changed = 1; + } + + old_text = dive->notes; + dive->notes = get_text(info->notes); + if (text_changed(old_text,dive->notes)) + changed = 1; + if (old_text) + g_free(old_text); + + if (changed) { + mark_divelist_changed(TRUE); + flush_divelist(dive); + } +} + +static void dive_info_widget(GtkWidget *box, struct dive *dive, struct dive_info *info) +{ + GtkWidget *hbox, *label, *cylinder, *frame; + char buffer[80]; + + divename(buffer, sizeof(buffer), dive); + label = gtk_label_new(buffer); + gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0); + + info->location = text_entry(box, "Location", location_list, dive->location); + + hbox = gtk_hbox_new(FALSE, 3); + gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, TRUE, 0); + + info->divemaster = text_entry(hbox, "Dive master", people_list, dive->divemaster); + info->buddy = text_entry(hbox, "Buddy", people_list, dive->buddy); + + info->notes = text_view(box, "Notes", READ_WRITE); + if (dive->notes && *dive->notes) + gtk_text_buffer_set_text(gtk_text_view_get_buffer(info->notes), dive->notes, -1); + + frame = gtk_frame_new("Cylinder"); + cylinder = cylinder_list_widget(); + gtk_container_add(GTK_CONTAINER(frame), cylinder); + gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); +} + +int edit_dive_info(struct dive *dive) +{ + int success; + GtkWidget *dialog, *vbox; + struct dive_info info; + + if (!dive) + return 0; + + dialog = gtk_dialog_new_with_buttons("Dive Info", + GTK_WINDOW(main_window), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, + GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, + NULL); + + vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); + dive_info_widget(vbox, dive, &info); + + gtk_widget_show_all(dialog); + success = gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT; + if (success) + save_dive_info_changes(dive, &info); + + gtk_widget_destroy(dialog); + + return success; +} + GtkWidget *extended_dive_info_widget(void) { GtkWidget *vbox, *hbox; @@ -270,14 +361,14 @@ GtkWidget *extended_dive_info_widget(void) location_list = gtk_list_store_new(1, G_TYPE_STRING); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); - location = text_entry(vbox, "Location", location_list); + location = text_value(vbox, "Location"); hbox = gtk_hbox_new(FALSE, 3); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); - divemaster = text_entry(hbox, "Divemaster", people_list); - buddy = text_entry(hbox, "Buddy", people_list); + divemaster = text_value(hbox, "Divemaster"); + buddy = text_value(hbox, "Buddy"); - notes = text_view(vbox, "Notes"); + notes = text_view(vbox, "Notes", READ_ONLY); return vbox; } diff --git a/main.c b/main.c index 9aaa5d1..d77fcd2 100644 --- a/main.c +++ b/main.c @@ -186,8 +186,6 @@ void update_dive(struct dive *new_dive) struct dive *old_dive = buffered_dive; if (old_dive) { - flush_dive_info_changes(old_dive); - flush_dive_equipment_changes(old_dive); flush_divelist(old_dive); } if (new_dive) {