transmission/gtk/hig.c

169 lines
5.0 KiB
C

/*
* This file Copyright (C) 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$
*/
#include <gtk/gtk.h>
#include "hig.h"
GtkWidget*
hig_workarea_create( void )
{
GtkWidget * grid = gtk_grid_new( );
gtk_container_set_border_width( GTK_CONTAINER( grid ), GUI_PAD_BIG );
gtk_grid_set_row_spacing( GTK_GRID( grid ), GUI_PAD );
gtk_grid_set_column_spacing( GTK_GRID( grid ), GUI_PAD_BIG );
return grid;
}
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_grid_attach( GTK_GRID( t ), w, 0, *row, 2, 1 );
++ * row;
}
void
hig_workarea_add_section_title_widget( GtkWidget * t, guint * row, GtkWidget * w )
{
gtk_widget_set_hexpand( w, TRUE );
gtk_grid_attach( GTK_GRID( t ), w, 0, *row, 2, 1 );
++ * 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 );
}
void
hig_workarea_add_wide_control( GtkWidget * t, guint * row, GtkWidget * w )
{
gtk_widget_set_hexpand( w, TRUE );
gtk_widget_set_margin_left( w, 18 );
gtk_grid_attach( GTK_GRID( t ), w, 0, *row, 2, 1 );
++ * row;
}
void
hig_workarea_add_wide_tall_control( GtkWidget * t, guint * row, GtkWidget * w )
{
gtk_widget_set_hexpand( w, TRUE );
hig_workarea_add_wide_control( t, row, w );
}
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 * w )
{
gtk_widget_set_margin_left( w, 18 );
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_grid_attach( GTK_GRID( t ), w, 0, row, 1, 1 );
}
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 );
g_object_set( control, "expand", TRUE, NULL );
gtk_grid_attach( GTK_GRID( t ), control, 1, row, 1, 1 );
}
static 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_widget_set_hexpand( control, TRUE );
gtk_grid_attach( GTK_GRID( t ), control, 1, row, 1, 1 );
}
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 = gtk_box_new( GTK_ORIENTATION_HORIZONTAL, 0 );
GtkWidget * v = gtk_box_new( GTK_ORIENTATION_VERTICAL, 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;
}