mirror of
https://github.com/transmission/transmission
synced 2025-03-03 10:15:45 +00:00
(gtk) #964: tweak the scheduler's prefs dialog a bit
This commit is contained in:
parent
ddd89ba21f
commit
f53b33526b
3 changed files with 68 additions and 39 deletions
14
gtk/main.c
14
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;
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue