summaryrefslogtreecommitdiff
path: root/src/hig.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/hig.c')
-rw-r--r--src/hig.c213
1 files changed, 213 insertions, 0 deletions
diff --git a/src/hig.c b/src/hig.c
new file mode 100644
index 0000000..32432fe
--- /dev/null
+++ b/src/hig.c
@@ -0,0 +1,213 @@
+/*
+ * This file Copyright (C) 2007-2010 Mnemosyne LLC
+ *
+ * This file is licensed by the GPL version 2. Works owned by the
+ * Transmission project are granted a special exemption to clause 2(b)
+ * so that the bulk of its code can remain under the MIT license.
+ * This exemption does not extend to derived works not owned by
+ * the Transmission project.
+ *
+ * $Id: hig.c 9868 2010-01-04 21:00:47Z charles $
+ */
+
+#include <gtk/gtk.h>
+#include "hig.h"
+#include "util.h"
+
+GtkWidget *hig_workarea_create(void)
+{
+ GtkWidget *t = gtk_table_new(1, 2, FALSE);
+
+ gtk_container_set_border_width(GTK_CONTAINER(t), GUI_PAD_BIG);
+ gtk_table_set_col_spacing(GTK_TABLE(t), 0, GUI_PAD_BIG);
+ gtk_table_set_row_spacings(GTK_TABLE(t), GUI_PAD);
+ return t;
+}
+
+void hig_workarea_add_section_divider(GtkWidget * t, guint * row)
+{
+ GtkWidget *w = gtk_alignment_new(0.0f, 0.0f, 0.0f, 0.0f);
+
+ gtk_widget_set_size_request(w, 0u, 6u);
+ gtk_table_attach(GTK_TABLE(t), w, 0, 2, *row, *row + 1, 0, 0, 0, 0);
+ ++*row;
+}
+
+void
+hig_workarea_add_section_title_widget(GtkWidget * t, guint * row,
+ GtkWidget * w)
+{
+ gtk_table_attach(GTK_TABLE(t), w, 0, 2, *row, *row + 1, ~0, 0, 0, 0);
+ ++*row;
+}
+
+void
+hig_workarea_add_section_title(GtkWidget * t,
+ guint * row, const char *section_title)
+{
+ char buf[512];
+ GtkWidget *l;
+
+ g_snprintf(buf, sizeof(buf), "<b>%s</b>", section_title);
+ l = gtk_label_new(buf);
+ gtk_misc_set_alignment(GTK_MISC(l), 0.0f, 0.5f);
+ gtk_label_set_use_markup(GTK_LABEL(l), TRUE);
+ hig_workarea_add_section_title_widget(t, row, l);
+}
+
+static GtkWidget *rowNew(GtkWidget * w)
+{
+ GtkWidget *a;
+ GtkWidget *h = trg_hbox_new(FALSE, 0);
+
+ /* spacer */
+ a = gtk_alignment_new(0.0f, 0.0f, 0.0f, 0.0f);
+ gtk_widget_set_size_request(a, 18u, 0u);
+ gtk_box_pack_start(GTK_BOX(h), a, FALSE, FALSE, 0);
+
+ /* lhs widget */
+ if (GTK_IS_MISC(w))
+ gtk_misc_set_alignment(GTK_MISC(w), 0.0f, 0.5f);
+ if (GTK_IS_LABEL(w))
+ gtk_label_set_use_markup(GTK_LABEL(w), TRUE);
+ gtk_box_pack_start(GTK_BOX(h), w, TRUE, TRUE, 0);
+
+ return h;
+}
+
+void hig_workarea_add_wide_control(GtkWidget * t, guint * row,
+ GtkWidget * w)
+{
+ GtkWidget *r = rowNew(w);
+
+ gtk_table_attach(GTK_TABLE(t), r, 0, 2, *row, *row + 1, GTK_FILL,
+ 0, 0, 0);
+ ++*row;
+}
+
+void
+hig_workarea_add_wide_tall_control(GtkWidget * t, guint * row,
+ GtkWidget * w)
+{
+ GtkWidget *r = rowNew(w);
+
+ gtk_table_attach(GTK_TABLE(t), r, 0, 2, *row, *row + 1,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ ++*row;
+}
+
+GtkWidget *hig_workarea_add_wide_checkbutton(GtkWidget * t,
+ guint * row,
+ const char *mnemonic_string,
+ gboolean is_active)
+{
+ GtkWidget *w = gtk_check_button_new_with_mnemonic(mnemonic_string);
+
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), is_active);
+ hig_workarea_add_wide_control(t, row, w);
+ return w;
+}
+
+void hig_workarea_add_label_w(GtkWidget * t, guint row, GtkWidget * l)
+{
+ GtkWidget *w = rowNew(l);
+
+ gtk_table_attach(GTK_TABLE(t), w, 0, 1, row, row + 1, GTK_FILL,
+ GTK_FILL, 0, 0);
+}
+
+GtkWidget *hig_workarea_add_label(GtkWidget * t, guint row,
+ const char *mnemonic_string)
+{
+ GtkWidget *l = gtk_label_new_with_mnemonic(mnemonic_string);
+
+ hig_workarea_add_label_w(t, row, l);
+ return l;
+}
+
+static void
+hig_workarea_add_tall_control(GtkWidget * t, guint row,
+ GtkWidget * control)
+{
+ if (GTK_IS_MISC(control))
+ gtk_misc_set_alignment(GTK_MISC(control), 0.0f, 0.5f);
+
+ gtk_table_attach(GTK_TABLE(t), control,
+ 1, 2, row, row + 1,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+}
+
+void hig_workarea_add_control(GtkWidget * t, guint row,
+ GtkWidget * control)
+{
+ if (GTK_IS_MISC(control))
+ gtk_misc_set_alignment(GTK_MISC(control), 0.0f, 0.5f);
+
+ gtk_table_attach(GTK_TABLE(t), control,
+ 1, 2, row, row + 1,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0, 0);
+}
+
+void
+hig_workarea_add_row_w(GtkWidget * t,
+ guint * row,
+ GtkWidget * label,
+ GtkWidget * control, GtkWidget * mnemonic)
+{
+ hig_workarea_add_label_w(t, *row, label);
+ hig_workarea_add_control(t, *row, control);
+ if (GTK_IS_LABEL(label))
+ gtk_label_set_mnemonic_widget(GTK_LABEL(label),
+ mnemonic ? mnemonic : control);
+ ++*row;
+}
+
+GtkWidget *hig_workarea_add_row(GtkWidget * t,
+ guint * row,
+ const char *mnemonic_string,
+ GtkWidget * control, GtkWidget * mnemonic)
+{
+ GtkWidget *l = gtk_label_new_with_mnemonic(mnemonic_string);
+
+ hig_workarea_add_row_w(t, row, l, control, mnemonic);
+ return l;
+}
+
+GtkWidget *hig_workarea_add_tall_row(GtkWidget * table,
+ guint * row,
+ const char *mnemonic_string,
+ GtkWidget * control,
+ GtkWidget * mnemonic)
+{
+ GtkWidget *l = gtk_label_new_with_mnemonic(mnemonic_string);
+ GtkWidget *h = trg_hbox_new(FALSE, 0);
+ GtkWidget *v = trg_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(h), l, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(v), h, FALSE, FALSE, GUI_PAD_SMALL);
+
+ hig_workarea_add_label_w(table, *row, v);
+ hig_workarea_add_tall_control(table, *row, control);
+
+ if (GTK_IS_LABEL(l))
+ gtk_label_set_mnemonic_widget(GTK_LABEL(l),
+ mnemonic ? mnemonic : control);
+
+ ++*row;
+ return l;
+}
+
+void hig_workarea_finish(GtkWidget * t, guint * row)
+{
+ gtk_table_resize(GTK_TABLE(t), *row, 2);
+}
+
+void
+hig_message_dialog_set_text(GtkMessageDialog * dialog,
+ const char *primary, const char *secondary)
+{
+ gtk_message_dialog_set_markup(dialog, primary);
+ gtk_message_dialog_format_secondary_text(dialog, "%s", secondary);
+}