source: trunk/gtk/hig.c @ 12679

Last change on this file since 12679 was 12679, checked in by jordan, 10 years ago

(trunk gtk) the row and col arguments passed to gtk_table_attach() should be guint. we were using "int" in several places.

  • Property svn:keywords set to Date Rev Author Id
File size: 6.0 KB
Line 
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 12679 2011-08-13 21:08:53Z jordan $
11 */
12
13#include <gtk/gtk.h>
14#include "hig.h"
15
16GtkWidget*
17hig_workarea_create( void )
18{
19    GtkWidget * t = gtk_table_new( 1, 2, FALSE );
20
21    gtk_container_set_border_width( GTK_CONTAINER( t ), GUI_PAD_BIG );
22    gtk_table_set_col_spacing( GTK_TABLE( t ), 0, GUI_PAD_BIG );
23    gtk_table_set_row_spacings( GTK_TABLE( t ), GUI_PAD );
24    return t;
25}
26
27void
28hig_workarea_add_section_divider( GtkWidget * t, guint * row )
29{
30    GtkWidget * w = gtk_alignment_new( 0.0f, 0.0f, 0.0f, 0.0f );
31
32    gtk_widget_set_size_request( w, 0u, 6u );
33    gtk_table_attach( GTK_TABLE( t ), w, 0, 2, *row, *row + 1, 0, 0, 0, 0 );
34    ++ * row;
35}
36
37void
38hig_workarea_add_section_title_widget( GtkWidget * t, guint * row, GtkWidget * w )
39{
40    gtk_table_attach( GTK_TABLE( t ), w, 0, 2, *row, *row + 1, ~0, 0, 0, 0 );
41    ++ * row;
42}
43
44void
45hig_workarea_add_section_title( GtkWidget *  t, guint * row, const char * section_title )
46{
47    char buf[512];
48    GtkWidget * l;
49
50    g_snprintf( buf, sizeof( buf ), "<b>%s</b>", section_title );
51    l = gtk_label_new( buf );
52    gtk_misc_set_alignment( GTK_MISC( l ), 0.0f, 0.5f );
53    gtk_label_set_use_markup( GTK_LABEL( l ), TRUE );
54    hig_workarea_add_section_title_widget( t, row, l );
55}
56
57static GtkWidget*
58rowNew( GtkWidget * w )
59{
60    GtkWidget * a;
61    GtkWidget * h = gtk_hbox_new( FALSE, 0 );
62
63    /* spacer */
64    a = gtk_alignment_new( 0.0f, 0.0f, 0.0f, 0.0f );
65    gtk_widget_set_size_request( a, 18u, 0u );
66    gtk_box_pack_start( GTK_BOX( h ), a, FALSE, FALSE, 0 );
67
68    /* lhs widget */
69    if( GTK_IS_MISC( w ) )
70        gtk_misc_set_alignment( GTK_MISC( w ), 0.0f, 0.5f );
71    if( GTK_IS_LABEL( w ) )
72        gtk_label_set_use_markup( GTK_LABEL( w ), TRUE );
73    gtk_box_pack_start( GTK_BOX( h ), w, TRUE, TRUE, 0 );
74
75    return h;
76}
77
78void
79hig_workarea_add_wide_control( GtkWidget * t, guint * row, GtkWidget * w )
80{
81    GtkWidget * r = rowNew( w );
82
83    gtk_table_attach( GTK_TABLE( t ), r, 0, 2, *row, *row + 1, GTK_FILL, 0, 0, 0 );
84    ++ * row;
85}
86
87void
88hig_workarea_add_wide_tall_control( GtkWidget * t, guint * row, GtkWidget * w )
89{
90    GtkWidget * r = rowNew( w );
91
92    gtk_table_attach( GTK_TABLE( t ), r, 0, 2, *row, *row + 1,
93                      GTK_EXPAND | GTK_SHRINK | GTK_FILL,
94                      GTK_EXPAND | GTK_SHRINK | GTK_FILL,
95                      0, 0 );
96
97    ++ * row;
98}
99
100GtkWidget *
101hig_workarea_add_wide_checkbutton( GtkWidget  * t,
102                                   guint      * row,
103                                   const char * mnemonic_string,
104                                   gboolean     is_active )
105{
106    GtkWidget * w = gtk_check_button_new_with_mnemonic( mnemonic_string );
107
108    gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( w ), is_active );
109    hig_workarea_add_wide_control( t, row, w );
110    return w;
111}
112
113void
114hig_workarea_add_label_w( GtkWidget * t, guint row, GtkWidget * l )
115{
116    GtkWidget * w = rowNew( l );
117
118    gtk_table_attach( GTK_TABLE( t ), w, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0 );
119}
120
121GtkWidget*
122hig_workarea_add_label( GtkWidget * t, guint row, const char * mnemonic_string )
123{
124    GtkWidget * l = gtk_label_new_with_mnemonic( mnemonic_string );
125
126    hig_workarea_add_label_w( t, row, l );
127    return l;
128}
129
130static void
131hig_workarea_add_tall_control( GtkWidget * t, guint row, GtkWidget * control )
132{
133    if( GTK_IS_MISC( control ) )
134        gtk_misc_set_alignment( GTK_MISC( control ), 0.0f, 0.5f );
135
136    gtk_table_attach( GTK_TABLE( t ), control,
137                      1, 2, row, row + 1,
138                      GTK_EXPAND | GTK_SHRINK | GTK_FILL,
139                      GTK_EXPAND | GTK_SHRINK | GTK_FILL,
140                      0, 0 );
141}
142
143static void
144hig_workarea_add_control( GtkWidget * t, guint row, GtkWidget * control )
145{
146    if( GTK_IS_MISC( control ) )
147        gtk_misc_set_alignment( GTK_MISC( control ), 0.0f, 0.5f );
148
149    gtk_table_attach( GTK_TABLE( t ), control,
150                      1, 2, row, row + 1,
151                      GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0, 0 );
152}
153
154void
155hig_workarea_add_row_w( GtkWidget * t,
156                        guint     * row,
157                        GtkWidget * label,
158                        GtkWidget * control,
159                        GtkWidget * mnemonic )
160{
161    hig_workarea_add_label_w( t, *row, label );
162    hig_workarea_add_control( t, *row, control );
163    if( GTK_IS_LABEL( label ) )
164        gtk_label_set_mnemonic_widget( GTK_LABEL( label ),
165                                       mnemonic ? mnemonic : control );
166    ++ * row;
167}
168
169GtkWidget*
170hig_workarea_add_row( GtkWidget  * t,
171                      guint      * row,
172                      const char * mnemonic_string,
173                      GtkWidget  * control,
174                      GtkWidget  * mnemonic )
175{
176    GtkWidget * l = gtk_label_new_with_mnemonic( mnemonic_string );
177
178    hig_workarea_add_row_w( t, row, l, control, mnemonic );
179    return l;
180}
181
182GtkWidget*
183hig_workarea_add_tall_row( GtkWidget  * table,
184                           guint      * row,
185                           const char * mnemonic_string,
186                           GtkWidget  * control,
187                           GtkWidget  * mnemonic )
188{
189    GtkWidget * l = gtk_label_new_with_mnemonic( mnemonic_string );
190    GtkWidget * h = gtk_hbox_new( FALSE, 0 );
191    GtkWidget * v = gtk_vbox_new( FALSE, 0 );
192    gtk_box_pack_start( GTK_BOX( h ), l, FALSE, FALSE, 0 );
193    gtk_box_pack_start( GTK_BOX( v ), h, FALSE, FALSE, GUI_PAD_SMALL );
194
195    hig_workarea_add_label_w( table, *row, v );
196    hig_workarea_add_tall_control( table, *row, control );
197
198    if( GTK_IS_LABEL( l ) )
199        gtk_label_set_mnemonic_widget( GTK_LABEL( l ),
200                                       mnemonic ? mnemonic : control );
201
202    ++ * row;
203    return l;
204}
205
206void
207hig_workarea_finish( GtkWidget * t, guint * row )
208{
209    gtk_table_resize( GTK_TABLE( t ), *row, 2 );
210}
Note: See TracBrowser for help on using the repository browser.