Changeset 212 for trunk/gtk


Ignore:
Timestamp:
Apr 7, 2006, 2:14:40 PM (16 years ago)
Author:
joshe
Message:

Add download rate limit to GTK interface.

Location:
trunk/gtk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/gtk/dialogs.c

    r162 r212  
    4040struct prefdata {
    4141  GtkSpinButton *port;
    42   GtkCheckButton *uselimit;
    43   GtkSpinButton *limit;
     42  GtkCheckButton *use_dlimit;
     43  GtkSpinButton *dlimit;
     44  GtkCheckButton *use_ulimit;
     45  GtkSpinButton *ulimit;
    4446  GtkFileChooser *dir;
    4547  GtkWindow *parent;
     
    7880   GTK_STOCK_APPLY, GTK_RESPONSE_APPLY, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
    7981   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);
    8184  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);
    8585  GtkWidget *dirstr = gtk_file_chooser_button_new(
    8686    _("Choose download directory"),
     
    9090  const char *pref;
    9191  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;
    92104
    93105  *opened = TRUE;
     
    102114
    103115  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);
    106120  data->dir = GTK_FILE_CHOOSER(dirstr);
    107121  data->parent = parent;
    108122  data->tr = tr;
    109123
    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;
    132150
    133151  /* directory label and chooser */
    134   label = gtk_label_new_with_mnemonic(_("_Download directory:"));
     152  label = gtk_label_new_with_mnemonic(_("Download di_rectory:"));
    135153  gtk_label_set_mnemonic_widget(GTK_LABEL(label), dirstr);
    136154  gtk_misc_set_alignment(GTK_MISC(label), 0, .5);
    137155  if(NULL != (pref = cf_getpref(PREF_DIR)))
    138156    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++;
    141160
    142161  /* port label and entry */
     
    148167  gtk_spin_button_set_value(GTK_SPIN_BUTTON(portnum),
    149168    (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);
    152175
    153176  gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(wind)->vbox), table);
     
    181204  const char *strval;
    182205  char *strnum, *errstr;
    183   gboolean boolval;
     206  gboolean bval;
    184207
    185208  if(GTK_RESPONSE_APPLY == resp || GTK_RESPONSE_OK == resp) {
     
    203226    g_free(strnum);
    204227
    205     /* save uselimit pref */
    206     boolval = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->uselimit));
    207     cf_setpref(PREF_USELIMIT, (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);
    211234    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);
    213245
    214246    /* save prefs */
     
    231263setlimit(tr_handle_t *tr) {
    232264  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  }
    240280}
    241281
  • trunk/gtk/dialogs.h

    r162 r212  
    3232/* macros for names of prefs we use */
    3333#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"
    3638#define PREF_DIR                "download-directory"
    3739
     40#define DEFAULT_DOWNLIMIT       100
    3841#define DEFAULT_UPLIMIT         20
    3942
Note: See TracChangeset for help on using the changeset viewer.