[PATCH] Simplify dive tag checkbox code

subsurface at henrik.synth.no subsurface at henrik.synth.no
Wed Apr 10 01:24:01 PDT 2013


From: Henrik Brautaset Aronsen <subsurface at henrik.synth.no>

Getting rid of duplicated code when generating gtk check buttons.

Signed-off-by: Henrik Brautaset Aronsen <subsurface at henrik.synth.no>
---
 info.c | 89 ++++++++++++++++++------------------------------------------------
 1 file changed, 24 insertions(+), 65 deletions(-)

diff --git a/info.c b/info.c
index 4400d53..b1843d6 100644
--- a/info.c
+++ b/info.c
@@ -806,6 +806,14 @@ void divetag_toggle_cb(GtkWidget *widget, gpointer data)
                 edit_dive.dive_tags &= ~DT;
 }
 
+void checkbox_tag(GtkWidget *button, GtkWidget *sbox, struct dive *dive, int dtag, char *label)
+{
+	button = gtk_check_button_new_with_label(label);
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), dive->dive_tags & dtag);
+	gtk_box_pack_start(GTK_BOX(sbox), button, FALSE, FALSE, 6);
+	g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(divetag_toggle_cb), GINT_TO_POINTER (dtag));
+}
+
 static void dive_info_widget(GtkWidget *obox, struct dive *dive, struct dive_info *info, gboolean multi)
 {
 	GtkWidget *hbox, *frame, *equipment, *ibox, *box, *button, *sbox, *framebox;
@@ -889,79 +897,30 @@ static void dive_info_widget(GtkWidget *obox, struct dive *dive, struct dive_inf
 	framebox = gtk_vbox_new(FALSE, 3);
 	gtk_container_add(GTK_CONTAINER(frame), framebox);
 
+	/* 1st line */
 	sbox = gtk_hbox_new(FALSE, 6);
 	gtk_box_pack_start(GTK_BOX(framebox), sbox, TRUE, FALSE, 3);
-/* 1st line */
-	button = gtk_check_button_new_with_label(_("Boat"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), dive->dive_tags & DTAG_BOAT);
-	gtk_box_pack_start(GTK_BOX(sbox), button, FALSE, FALSE, 6);
-	g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(divetag_toggle_cb), GINT_TO_POINTER (DTAG_BOAT));
-
-	button = gtk_check_button_new_with_label(_("Shore"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), dive->dive_tags & DTAG_SHORE);
-	gtk_box_pack_start(GTK_BOX(sbox), button, FALSE, FALSE, 6);
-	g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(divetag_toggle_cb), GINT_TO_POINTER (DTAG_SHORE));
-
-	button = gtk_check_button_new_with_label(_("Pool"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), dive->dive_tags & DTAG_POOL);
-	gtk_box_pack_start(GTK_BOX(sbox), button, FALSE, FALSE, 6);
-	g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(divetag_toggle_cb), GINT_TO_POINTER (DTAG_POOL));
-
-        button = gtk_check_button_new_with_label(_("Lake"));
-        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), dive->dive_tags & DTAG_LAKE);
-        gtk_box_pack_start(GTK_BOX(sbox), button, FALSE, FALSE, 6);
-        g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(divetag_toggle_cb), GINT_TO_POINTER (DTAG_LAKE));
-
-        button = gtk_check_button_new_with_label(_("River"));
-        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), dive->dive_tags & DTAG_RIVER);
-        gtk_box_pack_start(GTK_BOX(sbox), button, FALSE, FALSE, 6);
-        g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(divetag_toggle_cb), GINT_TO_POINTER (DTAG_RIVER));
+	checkbox_tag(button, sbox, dive, DTAG_BOAT, _("Boat"));
+	checkbox_tag(button, sbox, dive, DTAG_SHORE, _("Shore"));
+	checkbox_tag(button, sbox, dive, DTAG_POOL, _("Pool"));
+	checkbox_tag(button, sbox, dive, DTAG_LAKE, _("Lake"));
+	checkbox_tag(button, sbox, dive, DTAG_RIVER, _("River"));
 
+	/* 2nd line */
 	sbox = gtk_hbox_new(FALSE, 6);
 	gtk_box_pack_start(GTK_BOX(framebox), sbox, TRUE, FALSE, 3);
-/* 2nd line */
-	button = gtk_check_button_new_with_label(_("Drift"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), dive->dive_tags & DTAG_DRIFT);
-	gtk_box_pack_start(GTK_BOX(sbox), button, FALSE, FALSE, 6);
-	g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(divetag_toggle_cb), GINT_TO_POINTER (DTAG_DRIFT));
-
-	button = gtk_check_button_new_with_label(_("Deep"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), dive->dive_tags & DTAG_DEEP);
-	gtk_box_pack_start(GTK_BOX(sbox), button, FALSE, FALSE, 6);
-	g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(divetag_toggle_cb), GINT_TO_POINTER (DTAG_DEEP));
-
-	button = gtk_check_button_new_with_label(_("Cavern"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), dive->dive_tags & DTAG_CAVERN);
-	gtk_box_pack_start(GTK_BOX(sbox), button, FALSE, FALSE, 6);
-	g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(divetag_toggle_cb), GINT_TO_POINTER (DTAG_CAVERN));
-
-	button = gtk_check_button_new_with_label(_("Ice"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), dive->dive_tags & DTAG_ICE);
-	gtk_box_pack_start(GTK_BOX(sbox), button, FALSE, FALSE, 6);
-	g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(divetag_toggle_cb), GINT_TO_POINTER (DTAG_ICE));
-
-	button = gtk_check_button_new_with_label(_("Wreck"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), dive->dive_tags & DTAG_WRECK);
-	gtk_box_pack_start(GTK_BOX(sbox), button, FALSE, FALSE, 6);
-	g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(divetag_toggle_cb), GINT_TO_POINTER (DTAG_WRECK));
+	checkbox_tag(button, sbox, dive, DTAG_DRIFT, _("Drift"));
+	checkbox_tag(button, sbox, dive, DTAG_CAVE, _("Cave"));
+	checkbox_tag(button, sbox, dive, DTAG_CAVERN, _("Cavern"));
+	checkbox_tag(button, sbox, dive, DTAG_ICE, _("Ice"));
+	checkbox_tag(button, sbox, dive, DTAG_WRECK, _("Wreck"));
 
+	/* 3rd line */
 	sbox = gtk_hbox_new(FALSE, 6);
 	gtk_box_pack_start(GTK_BOX(framebox), sbox, TRUE, FALSE, 3);
-/* 3rd line */
-	button = gtk_check_button_new_with_label(_("Cave"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), dive->dive_tags & DTAG_CAVE);
-	gtk_box_pack_start(GTK_BOX(sbox), button, FALSE, FALSE, 6);
-	g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(divetag_toggle_cb), GINT_TO_POINTER (DTAG_CAVE));
-
-	button = gtk_check_button_new_with_label(_("Night"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), dive->dive_tags & DTAG_NIGHT);
-	gtk_box_pack_start(GTK_BOX(sbox), button, FALSE, FALSE, 6);
-	g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(divetag_toggle_cb), GINT_TO_POINTER (DTAG_NIGHT));
-
-	button = gtk_check_button_new_with_label(_("Freshwater"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), dive->dive_tags & DTAG_FRESH);
-	gtk_box_pack_start(GTK_BOX(sbox), button, FALSE, FALSE, 6);
-	g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(divetag_toggle_cb), GINT_TO_POINTER (DTAG_FRESH));
+	checkbox_tag(button, sbox, dive, DTAG_DEEP, _("Deep"));
+	checkbox_tag(button, sbox, dive, DTAG_NIGHT, _("Night"));
+	checkbox_tag(button, sbox, dive, DTAG_FRESH, _("Freshwater"));
 
 	/* only show notes if editing a single dive */
 	if (multi) {
-- 
1.8.2



More information about the subsurface mailing list