Legend:
- Unmodified
- Added
- Removed
-
trunk/gtk/dialogs.c
r162 r212 40 40 struct prefdata { 41 41 GtkSpinButton *port; 42 GtkCheckButton *uselimit; 43 GtkSpinButton *limit; 42 GtkCheckButton *use_dlimit; 43 GtkSpinButton *dlimit; 44 GtkCheckButton *use_ulimit; 45 GtkSpinButton *ulimit; 44 46 GtkFileChooser *dir; 45 47 GtkWindow *parent; … … 78 80 GTK_STOCK_APPLY, GTK_RESPONSE_APPLY, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 79 81 GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); 80 GtkWidget *table = gtk_table_new(4, 2, FALSE); 82 const unsigned int rowcount = 6; 83 GtkWidget *table = gtk_table_new(rowcount, 2, FALSE); 81 84 GtkWidget *portnum = gtk_spin_button_new_with_range(1, 0xffff, 1); 82 GtkWidget *limitbox = gtk_check_button_new_with_mnemonic(83 _("_Limit upload speed"));84 GtkWidget *limitnum = gtk_spin_button_new_with_range(0, G_MAXLONG, 1);85 85 GtkWidget *dirstr = gtk_file_chooser_button_new( 86 86 _("Choose download directory"), … … 90 90 const char *pref; 91 91 struct prefdata *data = g_new0(struct prefdata, 1); 92 struct { GtkWidget *on; GtkWidget *num; GtkWidget *label; gboolean first; 93 const char *usepref; const char *numpref; long def; } lim[] = { 94 { gtk_check_button_new_with_mnemonic(_("_Limit download speed")), 95 gtk_spin_button_new_with_range(0, G_MAXLONG, 1), 96 gtk_label_new_with_mnemonic(_("Maximum _download speed:")), 97 FALSE, PREF_USEDOWNLIMIT, PREF_DOWNLIMIT, DEFAULT_DOWNLIMIT, }, 98 { gtk_check_button_new_with_mnemonic(_("Li_mit upload speed")), 99 gtk_spin_button_new_with_range(0, G_MAXLONG, 1), 100 gtk_label_new_with_mnemonic(_("Maximum _upload speed:")), 101 TRUE, PREF_USEUPLIMIT, PREF_UPLIMIT, DEFAULT_UPLIMIT, }, 102 }; 103 unsigned int ii; 92 104 93 105 *opened = TRUE; … … 102 114 103 115 data->port = GTK_SPIN_BUTTON(portnum); 104 data->uselimit = GTK_CHECK_BUTTON(limitbox); 105 data->limit = GTK_SPIN_BUTTON(limitnum); 116 data->use_dlimit = GTK_CHECK_BUTTON(lim[0].on); 117 data->dlimit = GTK_SPIN_BUTTON(lim[0].num); 118 data->use_ulimit = GTK_CHECK_BUTTON(lim[1].on); 119 data->ulimit = GTK_SPIN_BUTTON(lim[1].num); 106 120 data->dir = GTK_FILE_CHOOSER(dirstr); 107 121 data->parent = parent; 108 122 data->tr = tr; 109 123 110 /* limit checkbox */ 111 pref = cf_getpref(PREF_USELIMIT); 112 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(limitbox), 113 (NULL == pref ? TRUE : strbool(pref))); 114 array = g_new(GtkWidget*, 2); 115 g_signal_connect_data(limitbox, "clicked", G_CALLBACK(clicklimitbox), 116 array, (GClosureNotify)g_free, 0); 117 gtk_table_attach_defaults(GTK_TABLE(table), limitbox, 0, 2, 0, 1); 118 119 /* limit label and entry */ 120 label = gtk_label_new_with_mnemonic(_("Maximum _upload speed:")); 121 gtk_label_set_mnemonic_widget(GTK_LABEL(label), limitnum); 122 gtk_misc_set_alignment(GTK_MISC(label), 0, .5); 123 pref = cf_getpref(PREF_LIMIT); 124 gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(limitnum), TRUE); 125 gtk_spin_button_set_value(GTK_SPIN_BUTTON(limitnum), 126 (NULL == pref ? DEFAULT_UPLIMIT : strtol(pref,NULL,10))); 127 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); 128 gtk_table_attach_defaults(GTK_TABLE(table), limitnum, 1, 2, 1, 2); 129 array[0] = label; 130 array[1] = limitnum; 131 clicklimitbox(limitbox, array); 124 #define RN(n) (n), (n) + 1 125 126 for(ii = 0; ii < ALEN(lim); ii++) { 127 /* limit checkbox */ 128 pref = cf_getpref(lim[ii].usepref); 129 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lim[ii].on), 130 (NULL == pref ? lim[ii].first : strbool(pref))); 131 array = g_new(GtkWidget*, 2); 132 g_signal_connect_data(lim[ii].on, "clicked", G_CALLBACK(clicklimitbox), 133 array, (GClosureNotify)g_free, 0); 134 gtk_table_attach_defaults(GTK_TABLE(table), lim[ii].on, 0, 2, RN(ii*2)); 135 136 /* limit label and entry */ 137 gtk_label_set_mnemonic_widget(GTK_LABEL(lim[ii].label), lim[ii].num); 138 gtk_misc_set_alignment(GTK_MISC(lim[ii].label), 0, .5); 139 pref = cf_getpref(lim[ii].numpref); 140 gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(lim[ii].num), TRUE); 141 gtk_spin_button_set_value(GTK_SPIN_BUTTON(lim[ii].num), 142 (NULL == pref ? lim[ii].def : strtol(pref, NULL, 10))); 143 gtk_table_attach_defaults(GTK_TABLE(table), lim[ii].label, 0,1,RN(ii*2+1)); 144 gtk_table_attach_defaults(GTK_TABLE(table), lim[ii].num, 1,2,RN(ii*2+1)); 145 array[0] = lim[ii].label; 146 array[1] = lim[ii].num; 147 clicklimitbox(lim[ii].on, array); 148 } 149 ii *= 2; 132 150 133 151 /* directory label and chooser */ 134 label = gtk_label_new_with_mnemonic(_(" _Download directory:"));152 label = gtk_label_new_with_mnemonic(_("Download di_rectory:")); 135 153 gtk_label_set_mnemonic_widget(GTK_LABEL(label), dirstr); 136 154 gtk_misc_set_alignment(GTK_MISC(label), 0, .5); 137 155 if(NULL != (pref = cf_getpref(PREF_DIR))) 138 156 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dirstr), pref); 139 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 2, 3); 140 gtk_table_attach_defaults(GTK_TABLE(table), dirstr, 1, 2, 2, 3); 157 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, RN(ii)); 158 gtk_table_attach_defaults(GTK_TABLE(table), dirstr, 1, 2, RN(ii)); 159 ii++; 141 160 142 161 /* port label and entry */ … … 148 167 gtk_spin_button_set_value(GTK_SPIN_BUTTON(portnum), 149 168 (NULL == pref ? TR_DEFAULT_PORT : strtol(pref, NULL, 10))); 150 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 3, 4); 151 gtk_table_attach_defaults(GTK_TABLE(table), portnum, 1, 2, 3, 4); 169 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, RN(ii)); 170 gtk_table_attach_defaults(GTK_TABLE(table), portnum, 1, 2, RN(ii)); 171 ii++; 172 173 #undef RN 174 assert(rowcount == ii); 152 175 153 176 gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(wind)->vbox), table); … … 181 204 const char *strval; 182 205 char *strnum, *errstr; 183 gboolean b oolval;206 gboolean bval; 184 207 185 208 if(GTK_RESPONSE_APPLY == resp || GTK_RESPONSE_OK == resp) { … … 203 226 g_free(strnum); 204 227 205 /* save use limit pref */206 b oolval = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->uselimit));207 cf_setpref(PREF_USE LIMIT, (boolval ? "yes" : "no"));208 209 /* save limit pref */210 intval = gtk_spin_button_get_value_as_int(data-> limit);228 /* save usedownlimit pref */ 229 bval = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->use_dlimit)); 230 cf_setpref(PREF_USEDOWNLIMIT, (bval ? "yes" : "no")); 231 232 /* save downlimit pref */ 233 intval = gtk_spin_button_get_value_as_int(data->dlimit); 211 234 strnum = g_strdup_printf("%i", intval); 212 cf_setpref(PREF_LIMIT, strnum); 235 cf_setpref(PREF_DOWNLIMIT, strnum); 236 237 /* save useuplimit pref */ 238 bval = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->use_ulimit)); 239 cf_setpref(PREF_USEUPLIMIT, (bval ? "yes" : "no")); 240 241 /* save downlimit pref */ 242 intval = gtk_spin_button_get_value_as_int(data->ulimit); 243 strnum = g_strdup_printf("%i", intval); 244 cf_setpref(PREF_UPLIMIT, strnum); 213 245 214 246 /* save prefs */ … … 231 263 setlimit(tr_handle_t *tr) { 232 264 const char *pref; 233 234 if(NULL != (pref = cf_getpref(PREF_USELIMIT)) && !strbool(pref)) 235 tr_setUploadLimit(tr, -1); 236 else if(NULL != (pref = cf_getpref(PREF_LIMIT))) 237 tr_setUploadLimit(tr, strtol(pref, NULL, 10)); 238 else 239 tr_setUploadLimit(tr, DEFAULT_UPLIMIT); 265 struct { void (*func)(tr_handle_t*, int); 266 const char *use; const char *num; long def; } lim[] = { 267 {tr_setDownloadLimit, PREF_USEDOWNLIMIT, PREF_DOWNLIMIT,DEFAULT_DOWNLIMIT}, 268 {tr_setUploadLimit, PREF_USEUPLIMIT, PREF_UPLIMIT, DEFAULT_UPLIMIT}, 269 }; 270 unsigned int ii; 271 272 for(ii = 0; ii < ALEN(lim); ii++) { 273 if(NULL != (pref = cf_getpref(lim[ii].use)) && !strbool(pref)) 274 lim[ii].func(tr, -1); 275 else if(NULL != (pref = cf_getpref(lim[ii].num))) 276 lim[ii].func(tr, strtol(pref, NULL, 10)); 277 else 278 lim[ii].func(tr, lim[ii].def); 279 } 240 280 } 241 281 -
trunk/gtk/dialogs.h
r162 r212 32 32 /* macros for names of prefs we use */ 33 33 #define PREF_PORT "listening-port" 34 #define PREF_USELIMIT "use-upload-limit" 35 #define PREF_LIMIT "upload-limit" 34 #define PREF_USEDOWNLIMIT "use-download-limit" 35 #define PREF_DOWNLIMIT "download-limit" 36 #define PREF_USEUPLIMIT "use-upload-limit" 37 #define PREF_UPLIMIT "upload-limit" 36 38 #define PREF_DIR "download-directory" 37 39 40 #define DEFAULT_DOWNLIMIT 100 38 41 #define DEFAULT_UPLIMIT 20 39 42
Note: See TracChangeset
for help on using the changeset viewer.