]> git.tdb.fi Git - ext/subsurface.git/blobdiff - info.c
Fix the Windows preferences support
[ext/subsurface.git] / info.c
diff --git a/info.c b/info.c
index df07c8e660b418660098c2ab76fbdf0cc1db2529..7e94a22046b477bbaaf761016703ec205d5e567e 100644 (file)
--- 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)