1 | /* |
---|
2 | * This file Copyright (C) 2007-2008 Charles Kerr <charles@rebelbase.com> |
---|
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 5024 2008-02-13 15:23:16Z charles $ |
---|
11 | */ |
---|
12 | |
---|
13 | #include <gtk/gtk.h> |
---|
14 | #include "hig.h" |
---|
15 | |
---|
16 | GtkWidget* |
---|
17 | hig_workarea_create (void) |
---|
18 | { |
---|
19 | GtkWidget * t = gtk_table_new( 1, 2, FALSE ); |
---|
20 | gtk_container_set_border_width( GTK_CONTAINER( t ), 12 ); |
---|
21 | gtk_table_set_col_spacing( GTK_TABLE( t ), 0, 12 ); |
---|
22 | gtk_table_set_row_spacings( GTK_TABLE( t ), 6 ); |
---|
23 | return t; |
---|
24 | } |
---|
25 | |
---|
26 | void |
---|
27 | hig_workarea_add_section_divider( GtkWidget * t, |
---|
28 | int * row ) |
---|
29 | { |
---|
30 | GtkWidget * w = gtk_alignment_new( 0.0f, 0.0f, 0.0f, 0.0f ); |
---|
31 | gtk_widget_set_size_request( w, 0u, 6u ); |
---|
32 | gtk_table_attach( GTK_TABLE( t ), w, 0, 2, *row, *row+1, 0, 0, 0, 0 ); |
---|
33 | ++*row; |
---|
34 | } |
---|
35 | |
---|
36 | void |
---|
37 | hig_workarea_add_section_title( GtkWidget * t, |
---|
38 | int * row, |
---|
39 | const char * section_title ) |
---|
40 | { |
---|
41 | char buf[512]; |
---|
42 | GtkWidget * l; |
---|
43 | |
---|
44 | g_snprintf( buf, sizeof(buf), "<b>%s</b>", section_title ); |
---|
45 | l = gtk_label_new( buf ); |
---|
46 | gtk_misc_set_alignment( GTK_MISC( l ), 0.0f, 0.5f ); |
---|
47 | gtk_label_set_use_markup( GTK_LABEL( l ), TRUE ); |
---|
48 | gtk_table_attach( GTK_TABLE( t ), l, 0, 2, *row, *row+1, GTK_FILL, 0, 0, 0 ); |
---|
49 | ++*row; |
---|
50 | } |
---|
51 | |
---|
52 | static GtkWidget* |
---|
53 | control_row_new( GtkWidget * w ) |
---|
54 | { |
---|
55 | GtkWidget * a; |
---|
56 | GtkWidget * h = gtk_hbox_new( FALSE, 0 ); |
---|
57 | |
---|
58 | /* spacer */ |
---|
59 | a = gtk_alignment_new( 0.0f, 0.0f, 0.0f, 0.0f ); |
---|
60 | gtk_widget_set_size_request( a, 18u, 0u ); |
---|
61 | gtk_box_pack_start( GTK_BOX( h ), a, FALSE, FALSE, 0 ); |
---|
62 | |
---|
63 | /* lhs widget */ |
---|
64 | if( GTK_IS_MISC( w ) ) |
---|
65 | gtk_misc_set_alignment( GTK_MISC( w ), 0.0f, 0.5f ); |
---|
66 | if( GTK_IS_LABEL( w ) ) |
---|
67 | gtk_label_set_use_markup( GTK_LABEL( w ), TRUE ); |
---|
68 | gtk_box_pack_start( GTK_BOX( h ), w, TRUE, TRUE, 0 ); |
---|
69 | |
---|
70 | return h; |
---|
71 | } |
---|
72 | |
---|
73 | void |
---|
74 | hig_workarea_add_wide_control( GtkWidget * t, |
---|
75 | int * row, |
---|
76 | GtkWidget * w ) |
---|
77 | { |
---|
78 | GtkWidget * r = control_row_new( w ); |
---|
79 | gtk_table_attach( GTK_TABLE( t ), r, 0, 2, *row, *row+1, GTK_FILL, 0, 0, 0 ); |
---|
80 | ++*row; |
---|
81 | } |
---|
82 | |
---|
83 | GtkWidget * |
---|
84 | hig_workarea_add_wide_checkbutton( GtkWidget * t, |
---|
85 | int * row, |
---|
86 | const char * mnemonic_string, |
---|
87 | gboolean is_active) |
---|
88 | { |
---|
89 | GtkWidget * w = gtk_check_button_new_with_mnemonic( mnemonic_string ); |
---|
90 | gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( w ), is_active ); |
---|
91 | hig_workarea_add_wide_control( t, row, w); |
---|
92 | return w; |
---|
93 | } |
---|
94 | |
---|
95 | void |
---|
96 | hig_workarea_add_label_w( GtkWidget * t, |
---|
97 | int row, |
---|
98 | GtkWidget * l ) |
---|
99 | { |
---|
100 | GtkWidget * w = control_row_new( l ); |
---|
101 | gtk_table_attach( GTK_TABLE( t ), w, 0, 1, row, row+1, GTK_FILL, GTK_FILL, 0, 0 ); |
---|
102 | } |
---|
103 | |
---|
104 | GtkWidget* |
---|
105 | hig_workarea_add_label( GtkWidget * t, |
---|
106 | int row, |
---|
107 | const char * mnemonic_string ) |
---|
108 | { |
---|
109 | GtkWidget * l = gtk_label_new_with_mnemonic( mnemonic_string ); |
---|
110 | hig_workarea_add_label_w( t, row, l ); |
---|
111 | return l; |
---|
112 | } |
---|
113 | |
---|
114 | void |
---|
115 | hig_workarea_add_control( GtkWidget * t, |
---|
116 | int row, |
---|
117 | GtkWidget * control ) |
---|
118 | { |
---|
119 | if ( GTK_IS_MISC( control ) ) |
---|
120 | gtk_misc_set_alignment( GTK_MISC(control), 0.0f, 0.5f ); |
---|
121 | |
---|
122 | gtk_table_attach( GTK_TABLE( t ), control, |
---|
123 | 1, 2, row, row+1, |
---|
124 | GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0 ); |
---|
125 | } |
---|
126 | |
---|
127 | void |
---|
128 | hig_workarea_add_row_w( GtkWidget * t, |
---|
129 | int * row, |
---|
130 | GtkWidget * label, |
---|
131 | GtkWidget * control, |
---|
132 | GtkWidget * mnemonic ) |
---|
133 | { |
---|
134 | hig_workarea_add_label_w( t, *row, label ); |
---|
135 | hig_workarea_add_control( t, *row, control ); |
---|
136 | if ( GTK_IS_LABEL( label ) ) |
---|
137 | gtk_label_set_mnemonic_widget( GTK_LABEL( label ), |
---|
138 | mnemonic ? mnemonic : control ); |
---|
139 | ++*row; |
---|
140 | } |
---|
141 | |
---|
142 | GtkWidget* |
---|
143 | hig_workarea_add_row( GtkWidget * t, |
---|
144 | int * row, |
---|
145 | const char * mnemonic_string, |
---|
146 | GtkWidget * control, |
---|
147 | GtkWidget * mnemonic ) |
---|
148 | { |
---|
149 | GtkWidget * l = gtk_label_new_with_mnemonic( mnemonic_string ); |
---|
150 | hig_workarea_add_row_w( t, row, l, control, mnemonic ); |
---|
151 | return l; |
---|
152 | } |
---|
153 | |
---|
154 | void |
---|
155 | hig_workarea_finish( GtkWidget * t, |
---|
156 | int * row) |
---|
157 | { |
---|
158 | gtk_table_resize( GTK_TABLE( t ), *row, 2 ); |
---|
159 | } |
---|
160 | |
---|
161 | void |
---|
162 | hig_message_dialog_set_text (GtkMessageDialog * dialog, |
---|
163 | const char * primary, |
---|
164 | const char * secondary) |
---|
165 | { |
---|
166 | gtk_message_dialog_set_markup (dialog, primary); |
---|
167 | gtk_message_dialog_format_secondary_text (dialog, "%s", secondary); |
---|
168 | } |
---|