(gtk) #964: tweak the scheduler's prefs dialog a bit

This commit is contained in:
Charles Kerr 2008-09-02 18:22:23 +00:00
parent ddd89ba21f
commit f53b33526b
3 changed files with 68 additions and 39 deletions

View File

@ -491,23 +491,17 @@ updateScheduledLimits(gpointer data)
}
else
{
const int begin_time = pref_int_get( PREF_KEY_SCHED_BEGIN );
const int end_time = pref_int_get( PREF_KEY_SCHED_BEGIN );
time_t t;
struct tm *tm;
int begin_hour, begin_minute, end_hour, end_minute;
int begin_time, end_time, cur_time;
begin_hour = pref_int_get( PREF_KEY_SCHED_BEGIN_HOUR );
begin_minute = pref_int_get( PREF_KEY_SCHED_BEGIN_MINUTE );
end_hour = pref_int_get( PREF_KEY_SCHED_END_HOUR );
end_minute = pref_int_get( PREF_KEY_SCHED_END_MINUTE );
int cur_time;
time( &t );
tm = localtime (&t);
cur_time = (tm->tm_hour * 60) + tm->tm_min;
begin_time = (begin_hour * 60) + begin_minute;
end_time = (end_hour * 60) + end_minute;
if( (end_time - begin_time) >= 0 )
if( end_time >= begin_time )
{
if( (cur_time >= begin_time) && (cur_time <= end_time) )
in_sched_state = TRUE;

View File

@ -72,12 +72,10 @@ tr_prefs_init_global( void )
pref_flag_set_default ( PREF_KEY_UL_LIMIT_ENABLED, FALSE );
pref_int_set_default ( PREF_KEY_UL_LIMIT, 50 );
pref_flag_set_default ( PREF_KEY_SCHED_LIMIT_ENABLED, FALSE );
pref_int_set_default ( PREF_KEY_SCHED_BEGIN_HOUR, 0 );
pref_int_set_default ( PREF_KEY_SCHED_BEGIN_MINUTE, 0 );
pref_int_set_default ( PREF_KEY_SCHED_END_HOUR, 0 );
pref_int_set_default ( PREF_KEY_SCHED_END_MINUTE, 0 );
pref_int_set_default ( PREF_KEY_SCHED_DL_LIMIT, 100 );
pref_int_set_default ( PREF_KEY_SCHED_UL_LIMIT, 50 );
pref_int_set_default ( PREF_KEY_SCHED_BEGIN, 60*23 ); /* 11pm */
pref_int_set_default ( PREF_KEY_SCHED_END, 60*7 ); /* 7am */
pref_int_set_default ( PREF_KEY_SCHED_DL_LIMIT, 200 ); /* 2x the other limit */
pref_int_set_default ( PREF_KEY_SCHED_UL_LIMIT, 100 ); /* 2x the other limit */
pref_flag_set_default ( PREF_KEY_OPTIONS_PROMPT, TRUE );
@ -1090,6 +1088,57 @@ onNetworkToggled( GtkToggleButton * tb UNUSED, gpointer user_data )
refreshNetworkSensitivity( user_data );
}
static void
onTimeComboChanged( GtkComboBox * w, gpointer core )
{
GtkTreeIter iter;
if( gtk_combo_box_get_active_iter( w, &iter ) )
{
const char * key = g_object_get_data( G_OBJECT( w ), PREF_KEY );
int val = 0;
gtk_tree_model_get( gtk_combo_box_get_model( w ), &iter, 0, &val, -1 );
tr_core_set_pref_int( TR_CORE( core ), key, val );
}
}
static GtkWidget*
new_time_combo( GObject * core, const char * key )
{
int val;
int i;
GtkWidget * w;
GtkCellRenderer * r;
GtkListStore * store;
/* build a store at 15 minute intervals */
store = gtk_list_store_new( 2, G_TYPE_INT, G_TYPE_STRING );
for( i=0; i<60*24; i+=15 ) {
char buf[128];
GtkTreeIter iter;
struct tm tm;
tm.tm_hour = i/60;
tm.tm_min = i%60;
strftime( buf, sizeof( buf ), "%I:%M %p", &tm );
gtk_list_store_append( store, &iter );
gtk_list_store_set( store, &iter, 0, i, 1, buf, -1 );
}
/* build the widget */
w = gtk_combo_box_new_with_model( GTK_TREE_MODEL( store ) );
gtk_combo_box_set_wrap_width( GTK_COMBO_BOX( w ), 4 );
r = gtk_cell_renderer_text_new( );
gtk_cell_layout_pack_start( GTK_CELL_LAYOUT( w ), r, TRUE );
gtk_cell_layout_set_attributes( GTK_CELL_LAYOUT( w ), r, "text", 1, NULL );
g_object_set_data_full( G_OBJECT( w ), PREF_KEY, tr_strdup( key ), g_free );
val = pref_int_get( key );
gtk_combo_box_set_active( GTK_COMBO_BOX( w ), val/(15) );
g_signal_connect( w, "changed", G_CALLBACK( onTimeComboChanged ), core );
/* cleanup */
g_object_unref( G_OBJECT( store ) );
return w;
}
static void
networkPageFree( gpointer gpage )
{
@ -1117,7 +1166,7 @@ networkPage( GObject * core )
hig_workarea_add_wide_control( t, &row, w );
hig_workarea_add_section_divider( t, &row );
hig_workarea_add_section_title (t, &row, _("Bandwidth"));
hig_workarea_add_section_title (t, &row, _("Bandwidth Limits"));
s = _("Limit _download speed (KB/s):");
w = new_check_button( s, PREF_KEY_DL_LIMIT_ENABLED, core );
@ -1134,42 +1183,30 @@ networkPage( GObject * core )
hig_workarea_add_row_w( t, &row, w, w2, NULL );
hig_workarea_add_section_divider( t, &row );
hig_workarea_add_section_title (t, &row, _("Scheduled Bandwidth Limit"));
hig_workarea_add_section_title( t, &row, _( "Scheduled Bandwidth Limits" ) );
h = gtk_hbox_new( FALSE, 0 );
w2 = new_spin_button( PREF_KEY_SCHED_BEGIN_HOUR, core, 0, 23, 1 );
page->sched_widgets = g_slist_append( page->sched_widgets, w2 );
gtk_box_pack_start( GTK_BOX(h), w2, FALSE, FALSE, 0 );
w2 = gtk_label_new (":");
page->sched_widgets = g_slist_append( page->sched_widgets, w2 );
gtk_box_pack_start( GTK_BOX(h), w2, FALSE, FALSE, 0 );
w2 = new_spin_button( PREF_KEY_SCHED_BEGIN_MINUTE, core, 0, 59, 1 );
w2 = new_time_combo( core, PREF_KEY_SCHED_BEGIN );
page->sched_widgets = g_slist_append( page->sched_widgets, w2 );
gtk_box_pack_start( GTK_BOX(h), w2, FALSE, FALSE, 0 );
w2 = gtk_label_new (_(" and "));
page->sched_widgets = g_slist_append( page->sched_widgets, w2 );
gtk_box_pack_start( GTK_BOX(h), w2, FALSE, FALSE, 0 );
w2 = new_spin_button( PREF_KEY_SCHED_END_HOUR, core, 0, 23, 1 );
page->sched_widgets = g_slist_append( page->sched_widgets, w2 );
gtk_box_pack_start( GTK_BOX(h), w2, FALSE, FALSE, 0 );
w2 = gtk_label_new (":");
page->sched_widgets = g_slist_append( page->sched_widgets, w2 );
gtk_box_pack_start( GTK_BOX(h), w2, FALSE, FALSE, 0 );
w2 = new_spin_button( PREF_KEY_SCHED_END_MINUTE, core, 0, 59, 1 );
w2 = new_time_combo( core, PREF_KEY_SCHED_END );
page->sched_widgets = g_slist_append( page->sched_widgets, w2 );
gtk_box_pack_start( GTK_BOX(h), w2, FALSE, FALSE, 0 );
s = _( "Limit bandwidth between" );
s = _( "_Limit bandwidth between" );
w = new_check_button( s, PREF_KEY_SCHED_LIMIT_ENABLED, core );
g_signal_connect( w, "toggled", G_CALLBACK(onNetworkToggled), page );
hig_workarea_add_row_w( t, &row, w, h, NULL );
w = new_spin_button( PREF_KEY_SCHED_DL_LIMIT, core, 0, INT_MAX, 5 );
page->sched_widgets = g_slist_append( page->sched_widgets, w );
hig_workarea_add_row( t, &row, _( "Scheduled download speed (KB/s):" ), w, NULL );
hig_workarea_add_row( t, &row, _( "Limit d_ownload speed (KB/s):" ), w, NULL );
w = new_spin_button( PREF_KEY_SCHED_UL_LIMIT, core, 0, INT_MAX, 5 );
page->sched_widgets = g_slist_append( page->sched_widgets, w );
hig_workarea_add_row( t, &row, _( "Scheduled upload speed (KB/s):" ), w, NULL );
hig_workarea_add_row( t, &row, _( "Limit u_pload speed (KB/s):" ), w, NULL );
hig_workarea_finish( t, &row );
g_object_set_data_full( G_OBJECT( t ), "page", page, networkPageFree );

View File

@ -25,10 +25,8 @@ GtkWidget * tr_prefs_dialog_new( GObject * core, GtkWindow * parent );
#define PREF_KEY_UL_LIMIT_ENABLED "upload-limit-enabled"
#define PREF_KEY_UL_LIMIT "upload-limit"
#define PREF_KEY_SCHED_LIMIT_ENABLED "sched-limit-enabled"
#define PREF_KEY_SCHED_BEGIN_HOUR "sched-begin-hour"
#define PREF_KEY_SCHED_BEGIN_MINUTE "sched-begin-minute"
#define PREF_KEY_SCHED_END_HOUR "sched-end-hour"
#define PREF_KEY_SCHED_END_MINUTE "sched-end-minute"
#define PREF_KEY_SCHED_BEGIN "sched-begin"
#define PREF_KEY_SCHED_END "sched-end"
#define PREF_KEY_SCHED_DL_LIMIT "sched-download-limit"
#define PREF_KEY_SCHED_UL_LIMIT "sched-upload-limit"
#define PREF_KEY_OPTIONS_PROMPT "show-options-window"