1/* 2 * This file Copyright (C) Mnemosyne LLC 3 * 4 * This file is licensed by the GPL version 2. Works owned by the 5 * Transmission project are granted a special exemption to clause 2(b) 6 * so that the bulk of its code can remain under the MIT license. 7 * This exemption does not extend to derived works not owned by 8 * the Transmission project. 9 * 10 * $Id: hig.c 13388 2012-07-14 19:26:55Z jordan $ 11 */ 12 13#include <gtk/gtk.h> 14#include "hig.h" 15 16GtkWidget* 17hig_workarea_create( void ) 18{ 19 GtkWidget * grid = gtk_grid_new( ); 20 21 gtk_container_set_border_width( GTK_CONTAINER( grid ), GUI_PAD_BIG ); 22 gtk_grid_set_row_spacing( GTK_GRID( grid ), GUI_PAD ); 23 gtk_grid_set_column_spacing( GTK_GRID( grid ), GUI_PAD_BIG ); 24 25 return grid; 26} 27 28void 29hig_workarea_add_section_divider( GtkWidget * t, guint * row ) 30{ 31 GtkWidget * w = gtk_alignment_new( 0.0f, 0.0f, 0.0f, 0.0f ); 32 33 gtk_widget_set_size_request( w, 0u, 6u ); 34 gtk_grid_attach( GTK_GRID( t ), w, 0, *row, 2, 1 ); 35 ++ * row; 36} 37 38void 39hig_workarea_add_section_title_widget( GtkWidget * t, guint * row, GtkWidget * w ) 40{ 41 gtk_widget_set_hexpand( w, TRUE ); 42 gtk_grid_attach( GTK_GRID( t ), w, 0, *row, 2, 1 ); 43 ++ * row; 44} 45 46void 47hig_workarea_add_section_title( GtkWidget * t, guint * row, const char * section_title ) 48{ 49 char buf[512]; 50 GtkWidget * l; 51 52 g_snprintf( buf, sizeof( buf ), "<b>%s</b>", section_title ); 53 l = gtk_label_new( buf ); 54 gtk_misc_set_alignment( GTK_MISC( l ), 0.0f, 0.5f ); 55 gtk_label_set_use_markup( GTK_LABEL( l ), TRUE ); 56 hig_workarea_add_section_title_widget( t, row, l ); 57} 58 59void 60hig_workarea_add_wide_control( GtkWidget * t, guint * row, GtkWidget * w ) 61{ 62 gtk_widget_set_hexpand( w, TRUE ); 63 gtk_widget_set_margin_left( w, 18 ); 64 gtk_grid_attach( GTK_GRID( t ), w, 0, *row, 2, 1 ); 65 ++ * row; 66} 67void 68hig_workarea_add_wide_tall_control( GtkWidget * t, guint * row, GtkWidget * w ) 69{ 70 gtk_widget_set_hexpand( w, TRUE ); 71 hig_workarea_add_wide_control( t, row, w ); 72} 73 74GtkWidget * 75hig_workarea_add_wide_checkbutton( GtkWidget * t, 76 guint * row, 77 const char * mnemonic_string, 78 gboolean is_active ) 79{ 80 GtkWidget * w = gtk_check_button_new_with_mnemonic( mnemonic_string ); 81 82 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( w ), is_active ); 83 hig_workarea_add_wide_control( t, row, w ); 84 return w; 85} 86 87void 88hig_workarea_add_label_w( GtkWidget * t, guint row, GtkWidget * w ) 89{ 90 gtk_widget_set_margin_left( w, 18 ); 91 if( GTK_IS_MISC( w ) ) 92 gtk_misc_set_alignment( GTK_MISC( w ), 0.0f, 0.5f ); 93 if( GTK_IS_LABEL( w ) ) 94 gtk_label_set_use_markup( GTK_LABEL( w ), TRUE ); 95 gtk_grid_attach( GTK_GRID( t ), w, 0, row, 1, 1 ); 96} 97 98static void 99hig_workarea_add_tall_control( GtkWidget * t, guint row, GtkWidget * control ) 100{ 101 if( GTK_IS_MISC( control ) ) 102 gtk_misc_set_alignment( GTK_MISC( control ), 0.0f, 0.5f ); 103 104 g_object_set( control, "expand", TRUE, NULL ); 105 gtk_grid_attach( GTK_GRID( t ), control, 1, row, 1, 1 ); 106} 107 108static void 109hig_workarea_add_control( GtkWidget * t, guint row, GtkWidget * control ) 110{ 111 if( GTK_IS_MISC( control ) ) 112 gtk_misc_set_alignment( GTK_MISC( control ), 0.0f, 0.5f ); 113 114 gtk_widget_set_hexpand( control, TRUE ); 115 gtk_grid_attach( GTK_GRID( t ), control, 1, row, 1, 1 ); 116} 117 118void 119hig_workarea_add_row_w( GtkWidget * t, 120 guint * row, 121 GtkWidget * label, 122 GtkWidget * control, 123 GtkWidget * mnemonic ) 124{ 125 hig_workarea_add_label_w( t, *row, label ); 126 hig_workarea_add_control( t, *row, control ); 127 if( GTK_IS_LABEL( label ) ) 128 gtk_label_set_mnemonic_widget( GTK_LABEL( label ), 129 mnemonic ? mnemonic : control ); 130 ++ * row; 131} 132 133GtkWidget* 134hig_workarea_add_row( GtkWidget * t, 135 guint * row, 136 const char * mnemonic_string, 137 GtkWidget * control, 138 GtkWidget * mnemonic ) 139{ 140 GtkWidget * l = gtk_label_new_with_mnemonic( mnemonic_string ); 141 142 hig_workarea_add_row_w( t, row, l, control, mnemonic ); 143 return l; 144} 145 146GtkWidget* 147hig_workarea_add_tall_row( GtkWidget * table, 148 guint * row, 149 const char * mnemonic_string, 150 GtkWidget * control, 151 GtkWidget * mnemonic ) 152{ 153 GtkWidget * l = gtk_label_new_with_mnemonic( mnemonic_string ); 154 GtkWidget * h = gtk_box_new( GTK_ORIENTATION_HORIZONTAL, 0 ); 155 GtkWidget * v = gtk_box_new( GTK_ORIENTATION_VERTICAL, 0 ); 156 gtk_box_pack_start( GTK_BOX( h ), l, FALSE, FALSE, 0 ); 157 gtk_box_pack_start( GTK_BOX( v ), h, FALSE, FALSE, GUI_PAD_SMALL ); 158 159 hig_workarea_add_label_w( table, *row, v ); 160 hig_workarea_add_tall_control( table, *row, control ); 161 162 if( GTK_IS_LABEL( l ) ) 163 gtk_label_set_mnemonic_widget( GTK_LABEL( l ), 164 mnemonic ? mnemonic : control ); 165 166 ++ * row; 167 return l; 168} 169