* NOTW: NULL and "" need to be treated as "unchanged" */
static int text_changed(const char *old, const char *new)
{
- return ((old && strcmp(old,new)) ||
- (!old && strcmp("",new)));
+ return (old && strcmp(old,new)) ||
+ (!old && strcmp("",new));
}
static char *get_combo_box_entry_text(GtkComboBoxEntry *combo_box, char **textp)
dive && dive->notes ? dive->notes : "", -1);
}
+static int delete_dive_info(struct dive *dive)
+{
+ int success;
+ GtkWidget *dialog;
+
+ if (!dive)
+ return 0;
+
+ dialog = gtk_dialog_new_with_buttons("Delete Dive",
+ GTK_WINDOW(main_window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+ NULL);
+
+ gtk_widget_show_all(dialog);
+ success = gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT;
+ if (success) {
+ delete_dive(dive);
+ mark_divelist_changed(TRUE);
+ dive_list_update_dives();
+ }
+
+ gtk_widget_destroy(dialog);
+
+ return success;
+}
+
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)
+static void info_menu_delete_cb(GtkMenuItem *menuitem, gpointer user_data)
+{
+ delete_dive_info(current_dive);
+}
+
+static void add_menu_item(GtkMenu *menu, const char *label, void (*cb)(GtkMenuItem *, gpointer))
{
- GtkWidget *item = gtk_menu_item_new_with_label("Edit");
- g_signal_connect(item, "activate", G_CALLBACK(info_menu_edit_cb), NULL);
+ GtkWidget *item = gtk_menu_item_new_with_label(label);
+ g_signal_connect(item, "activate", G_CALLBACK(cb), NULL);
gtk_widget_show(item); /* Yes, really */
gtk_menu_prepend(menu, item);
}
+static void populate_popup_cb(GtkTextView *entry, GtkMenu *menu, gpointer user_data)
+{
+ add_menu_item(menu, "Delete", info_menu_delete_cb);
+ add_menu_item(menu, "Edit", info_menu_edit_cb);
+}
+
static GtkEntry *text_value(GtkWidget *box, const char *label)
{
GtkWidget *widget;
static int get_rating(const char *string)
{
- int rating = 0;
+ int rating_val = 0;
int i;
for (i = 0; i <= 5; i++)
if (!strcmp(star_strings[i],string))
- rating = i;
- return rating;
+ rating_val = i;
+ return rating_val;
}
struct dive_info {
if (changed) {
mark_divelist_changed(TRUE);
- flush_divelist(dive);
+ update_dive(dive);
}
}
info->divemaster = text_entry(hbox, "Dive master", people_list, dive->divemaster);
info->buddy = text_entry(hbox, "Buddy", people_list, dive->buddy);
+
+ hbox = gtk_hbox_new(FALSE, 3);
+ gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, TRUE, 0);
+
info->rating = text_entry(hbox, "Rating", star_list, star_strings[dive->rating]);
info->notes = text_view(box, "Notes", READ_WRITE);
divemaster = text_value(hbox, "Divemaster");
buddy = text_value(hbox, "Buddy");
+
+ hbox = gtk_hbox_new(FALSE, 3);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
+
rating = text_value(hbox, "Rating");
notes = text_view(vbox, "Notes", READ_ONLY);