X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=info.c;h=7e94a22046b477bbaaf761016703ec205d5e567e;hb=d2654d4951a01efd36f4189aeb02a791f20fa94d;hp=df07c8e660b418660098c2ab76fbdf0cc1db2529;hpb=1efcf4538b8a034e8b288d5b9c375ba99b1d845f;p=ext%2Fsubsurface.git diff --git a/info.c b/info.c index df07c8e..7e94a22 100644 --- a/info.c +++ b/info.c @@ -62,26 +62,30 @@ static char *get_combo_box_entry_text(GtkComboBoxEntry *combo_box, char **textp) #define SET_TEXT_VALUE(x) \ gtk_entry_set_text(x, dive && dive->x ? dive->x : "") +static int divename(char *buf, size_t size, struct dive *dive) +{ + 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); +} + 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) @@ -95,6 +99,19 @@ void show_dive_info(struct dive *dive) 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; @@ -105,6 +122,7 @@ static GtkEntry *text_value(GtkWidget *box, const char *label) 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); } @@ -160,6 +178,7 @@ static GtkTextView *text_view(GtkWidget *box, const char *label, enum writable w 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); @@ -279,7 +298,12 @@ static void save_dive_info_changes(struct dive *dive, struct dive_info *info) static void dive_info_widget(GtkWidget *box, struct dive *dive, struct dive_info *info) { - GtkWidget *hbox; + 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); @@ -292,6 +316,11 @@ static void dive_info_widget(GtkWidget *box, struct dive *dive, struct dive_info 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)