From f53b33526b3f7928b86579d513d7961146663faa Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 2 Sep 2008 18:22:23 +0000 Subject: [PATCH] (gtk) #964: tweak the scheduler's prefs dialog a bit --- gtk/main.c | 14 +++----- gtk/tr-prefs.c | 87 +++++++++++++++++++++++++++++++++++--------------- gtk/tr-prefs.h | 6 ++-- 3 files changed, 68 insertions(+), 39 deletions(-) diff --git a/gtk/main.c b/gtk/main.c index a2e5b3e5e..cf004153c 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -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; diff --git a/gtk/tr-prefs.c b/gtk/tr-prefs.c index 4c1690ec9..ed003f5f7 100644 --- a/gtk/tr-prefs.c +++ b/gtk/tr-prefs.c @@ -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 ); diff --git a/gtk/tr-prefs.h b/gtk/tr-prefs.h index 427aba3fe..605734bba 100644 --- a/gtk/tr-prefs.h +++ b/gtk/tr-prefs.h @@ -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"