228
223
if (self.configMenuBox is not None):
230
225
self.configMenuBox.Close()
231
except wxPyDeadObjectError, e:
226
except wx.PyDeadObjectError, e:
232
227
self.configMenuBox = None
234
self.configMenuBox = wxFrame(None, -1, 'BitTornado Preferences', size = (1,1),
235
style = wxDEFAULT_FRAME_STYLE|wxFULL_REPAINT_ON_RESIZE)
229
self.configMenuBox = wx.Frame(None, -1, 'BitTornado Preferences', size = (1,1),
230
style = wx.DEFAULT_FRAME_STYLE|wx.FULL_REPAINT_ON_RESIZE)
236
231
if (sys.platform == 'win32'):
237
232
self.icon = self.parent.icon
238
233
self.configMenuBox.SetIcon(self.icon)
240
panel = wxPanel(self.configMenuBox, -1)
235
panel = wx.Panel(self.configMenuBox, -1)
241
236
self.panel = panel
243
238
def StaticText(text, font = self.FONT, underline = False, color = None, panel = panel):
244
x = wxStaticText(panel, -1, text, style = wxALIGN_LEFT)
245
x.SetFont(wxFont(font, wxDEFAULT, wxNORMAL, wxNORMAL, underline))
239
x = wx.StaticText(panel, -1, text, style = wx.ALIGN_LEFT)
240
x.SetFont(wx.Font(font, wx.DEFAULT, wx.NORMAL, wx.NORMAL, underline))
246
241
if color is not None:
247
242
x.SetForegroundColour(color)
250
colsizer = wxFlexGridSizer(cols = 1, vgap = 8)
245
colsizer = wx.FlexGridSizer(cols = 1, vgap = 8)
252
self.gui_stretchwindow_checkbox = wxCheckBox(panel, -1, "Stretch window to fit torrent name *")
247
self.gui_stretchwindow_checkbox = wx.CheckBox(panel, -1, "Stretch window to fit torrent name *")
253
248
self.gui_stretchwindow_checkbox.SetFont(self.default_font)
254
249
self.gui_stretchwindow_checkbox.SetValue(self.config['gui_stretchwindow'])
256
self.gui_displaystats_checkbox = wxCheckBox(panel, -1, "Display peer and seed statistics")
251
self.gui_displaystats_checkbox = wx.CheckBox(panel, -1, "Display peer and seed statistics")
257
252
self.gui_displaystats_checkbox.SetFont(self.default_font)
258
253
self.gui_displaystats_checkbox.SetValue(self.config['gui_displaystats'])
260
self.gui_displaymiscstats_checkbox = wxCheckBox(panel, -1, "Display miscellaneous other statistics")
255
self.gui_displaymiscstats_checkbox = wx.CheckBox(panel, -1, "Display miscellaneous other statistics")
261
256
self.gui_displaymiscstats_checkbox.SetFont(self.default_font)
262
257
self.gui_displaymiscstats_checkbox.SetValue(self.config['gui_displaymiscstats'])
264
self.buffering_checkbox = wxCheckBox(panel, -1, "Enable read/write buffering *")
259
self.buffering_checkbox = wx.CheckBox(panel, -1, "Enable read/write buffering *")
265
260
self.buffering_checkbox.SetFont(self.default_font)
266
261
self.buffering_checkbox.SetValue(self.config['buffer_reads'])
268
self.breakup_checkbox = wxCheckBox(panel, -1, "Break-up seed bitfield to foil ISP manipulation")
263
self.breakup_checkbox = wx.CheckBox(panel, -1, "Break-up seed bitfield to foil ISP manipulation")
269
264
self.breakup_checkbox.SetFont(self.default_font)
270
265
self.breakup_checkbox.SetValue(self.config['breakup_seed_bitfield'])
272
self.autoflush_checkbox = wxCheckBox(panel, -1, "Flush data to disk every 5 minutes")
267
self.autoflush_checkbox = wx.CheckBox(panel, -1, "Flush data to disk every 5 minutes")
273
268
self.autoflush_checkbox.SetFont(self.default_font)
274
269
self.autoflush_checkbox.SetValue(self.config['auto_flush'])
276
271
if sys.version_info >= (2,3) and socket.has_ipv6:
277
self.ipv6enabled_checkbox = wxCheckBox(panel, -1, "Initiate and receive connections via IPv6 *")
272
self.ipv6enabled_checkbox = wx.CheckBox(panel, -1, "Initiate and receive connections via IPv6 *")
278
273
self.ipv6enabled_checkbox.SetFont(self.default_font)
279
274
self.ipv6enabled_checkbox.SetValue(self.config['ipv6_enabled'])
281
self.gui_forcegreenonfirewall_checkbox = wxCheckBox(panel, -1,
276
self.gui_forcegreenonfirewall_checkbox = wx.CheckBox(panel, -1,
282
277
"Force icon to display green when firewalled")
283
278
self.gui_forcegreenonfirewall_checkbox.SetFont(self.default_font)
284
279
self.gui_forcegreenonfirewall_checkbox.SetValue(self.config['gui_forcegreenonfirewall'])
286
cryptoButton = wxButton(panel, -1, 'Encryption/Security Settings...')
281
cryptoButton = wx.Button(panel, -1, 'Encryption/Security Settings...')
288
self.minport_data = wxSpinCtrl(panel, -1, '', (-1,-1), (self.FONT*8, -1))
283
self.minport_data = wx.SpinCtrl(panel, -1, '', (-1,-1), (self.FONT*8, -1))
289
284
self.minport_data.SetFont(self.default_font)
290
285
self.minport_data.SetRange(1,65535)
291
286
self.minport_data.SetValue(self.config['minport'])
293
self.maxport_data = wxSpinCtrl(panel, -1, '', (-1,-1), (self.FONT*8, -1))
288
self.maxport_data = wx.SpinCtrl(panel, -1, '', (-1,-1), (self.FONT*8, -1))
294
289
self.maxport_data.SetFont(self.default_font)
295
290
self.maxport_data.SetRange(1,65535)
296
291
self.maxport_data.SetValue(self.config['maxport'])
298
self.randomport_checkbox = wxCheckBox(panel, -1, "randomize")
293
self.randomport_checkbox = wx.CheckBox(panel, -1, "randomize")
299
294
self.randomport_checkbox.SetFont(self.default_font)
300
295
self.randomport_checkbox.SetValue(self.config['random_port'])
302
self.gui_font_data = wxSpinCtrl(panel, -1, '', (-1,-1), (self.FONT*5, -1))
297
self.gui_font_data = wx.SpinCtrl(panel, -1, '', (-1,-1), (self.FONT*5, -1))
303
298
self.gui_font_data.SetFont(self.default_font)
304
299
self.gui_font_data.SetRange(8,16)
305
300
self.gui_font_data.SetValue(self.config['gui_font'])
307
self.gui_ratesettingsdefault_data=wxChoice(panel, -1, choices = ratesettingslist)
302
self.gui_ratesettingsdefault_data=wx.Choice(panel, -1, choices = ratesettingslist)
308
303
self.gui_ratesettingsdefault_data.SetFont(self.default_font)
309
304
self.gui_ratesettingsdefault_data.SetStringSelection(self.config['gui_ratesettingsdefault'])
311
self.maxdownload_data = wxSpinCtrl(panel, -1, '', (-1,-1), (self.FONT*7, -1))
306
self.maxdownload_data = wx.SpinCtrl(panel, -1, '', (-1,-1), (self.FONT*7, -1))
312
307
self.maxdownload_data.SetFont(self.default_font)
313
308
self.maxdownload_data.SetRange(0,5000)
314
309
self.maxdownload_data.SetValue(self.config['max_download_rate'])
316
self.gui_ratesettingsmode_data=wxRadioBox(panel, -1, 'Rate Settings Mode',
311
self.gui_ratesettingsmode_data=wx.RadioBox(panel, -1, 'Rate Settings Mode',
317
312
choices = [ 'none', 'basic', 'full' ] )
318
313
self.gui_ratesettingsmode_data.SetFont(self.default_font)
319
314
self.gui_ratesettingsmode_data.SetStringSelection(self.config['gui_ratesettingsmode'])
321
316
if (sys.platform == 'win32'):
322
self.win32_taskbar_icon_checkbox = wxCheckBox(panel, -1, "Minimize to system tray")
317
self.win32_taskbar_icon_checkbox = wx.CheckBox(panel, -1, "Minimize to system tray")
323
318
self.win32_taskbar_icon_checkbox.SetFont(self.default_font)
324
319
self.win32_taskbar_icon_checkbox.SetValue(self.config['win32_taskbar_icon'])
326
self.upnp_data=wxChoice(panel, -1,
321
self.upnp_data=wx.Choice(panel, -1,
327
322
choices = ['disabled', 'type 1 (fast)', 'type 2 (slow)'])
328
323
self.upnp_data.SetFont(self.default_font)
329
324
self.upnp_data.SetSelection(self.config['upnp_nat_access'])
331
self.gui_default_savedir_ctrl = wxTextCtrl(parent = panel, id = -1,
326
self.gui_default_savedir_ctrl = wx.TextCtrl(parent = panel, id = -1,
332
327
value = self.config['gui_default_savedir'],
333
size = (26*self.FONT, -1), style = wxTE_PROCESS_TAB)
328
size = (26*self.FONT, -1), style = wx.TE_PROCESS_TAB)
334
329
self.gui_default_savedir_ctrl.SetFont(self.default_font)
336
self.gui_savemode_data=wxRadioBox(panel, -1, 'Ask where to save: *',
331
self.gui_savemode_data=wx.RadioBox(panel, -1, 'Ask where to save: *',
337
332
choices = [ 'always', 'never', 'auto-resume' ] )
338
333
self.gui_savemode_data.SetFont(self.default_font)
339
334
self.gui_savemode_data.SetSelection(1-self.config['gui_saveas_ask'])
341
self.checkingcolor_icon = wxEmptyBitmap(16,16)
342
self.checkingcolor_iconptr = wxStaticBitmap(panel, -1, self.checkingcolor_icon)
336
self.checkingcolor_icon = wx.EmptyBitmap(16,16)
337
self.checkingcolor_iconptr = wx.StaticBitmap(panel, -1, self.checkingcolor_icon)
343
338
self.setColorIcon(self.checkingcolor_icon, self.checkingcolor_iconptr, self.checkingcolor)
345
self.downloadcolor_icon = wxEmptyBitmap(16,16)
346
self.downloadcolor_iconptr = wxStaticBitmap(panel, -1, self.downloadcolor_icon)
340
self.downloadcolor_icon = wx.EmptyBitmap(16,16)
341
self.downloadcolor_iconptr = wx.StaticBitmap(panel, -1, self.downloadcolor_icon)
347
342
self.setColorIcon(self.downloadcolor_icon, self.downloadcolor_iconptr, self.downloadcolor)
349
self.seedingcolor_icon = wxEmptyBitmap(16,16)
350
self.seedingcolor_iconptr = wxStaticBitmap(panel, -1, self.seedingcolor_icon)
344
self.seedingcolor_icon = wx.EmptyBitmap(16,16)
345
self.seedingcolor_iconptr = wx.StaticBitmap(panel, -1, self.seedingcolor_icon)
351
346
self.setColorIcon(self.seedingcolor_icon, self.downloadcolor_iconptr, self.seedingcolor)
353
rowsizer = wxFlexGridSizer(cols = 2, hgap = 20)
355
block12sizer = wxFlexGridSizer(cols = 1, vgap = 12)
357
block1sizer = wxFlexGridSizer(cols = 1, vgap = 2)
348
rowsizer = wx.FlexGridSizer(cols = 2, hgap = 20)
350
block12sizer = wx.FlexGridSizer(cols = 1, vgap = 12)
352
block1sizer = wx.FlexGridSizer(cols = 1, vgap = 2)
358
353
if (sys.platform == 'win32'):
359
354
block1sizer.Add(self.win32_taskbar_icon_checkbox)
360
355
block1sizer.Add(self.gui_stretchwindow_checkbox)
367
362
block1sizer.Add(self.ipv6enabled_checkbox)
368
363
block1sizer.Add(self.gui_forcegreenonfirewall_checkbox)
369
364
block12sizer.Add(block1sizer)
370
block12sizer.Add(cryptoButton, 0, wxALIGN_CENTER)
365
block12sizer.Add(cryptoButton, 0, wx.ALIGN_CENTER)
372
colorsizer = wxStaticBoxSizer(wxStaticBox(panel, -1, "Gauge Colors:"), wxVERTICAL)
373
colorsizer1 = wxFlexGridSizer(cols = 7)
374
colorsizer1.Add(StaticText(' Checking: '), 1, wxALIGN_BOTTOM)
375
colorsizer1.Add(self.checkingcolor_iconptr, 1, wxALIGN_BOTTOM)
376
colorsizer1.Add(StaticText(' Downloading: '), 1, wxALIGN_BOTTOM)
377
colorsizer1.Add(self.downloadcolor_iconptr, 1, wxALIGN_BOTTOM)
378
colorsizer1.Add(StaticText(' Seeding: '), 1, wxALIGN_BOTTOM)
379
colorsizer1.Add(self.seedingcolor_iconptr, 1, wxALIGN_BOTTOM)
367
colorsizer = wx.StaticBoxSizer(wx.StaticBox(panel, -1, "Gauge Colors:"), wx.VERTICAL)
368
colorsizer1 = wx.FlexGridSizer(cols = 7)
369
colorsizer1.Add(StaticText(' Checking: '), 1, wx.ALIGN_BOTTOM)
370
colorsizer1.Add(self.checkingcolor_iconptr, 1, wx.ALIGN_BOTTOM)
371
colorsizer1.Add(StaticText(' Downloading: '), 1, wx.ALIGN_BOTTOM)
372
colorsizer1.Add(self.downloadcolor_iconptr, 1, wx.ALIGN_BOTTOM)
373
colorsizer1.Add(StaticText(' Seeding: '), 1, wx.ALIGN_BOTTOM)
374
colorsizer1.Add(self.seedingcolor_iconptr, 1, wx.ALIGN_BOTTOM)
380
375
colorsizer1.Add(StaticText(' '))
381
376
minsize = self.checkingcolor_iconptr.GetBestSize()
382
377
minsize.SetHeight(minsize.GetHeight()+5)
383
378
colorsizer1.SetMinSize(minsize)
384
379
colorsizer.Add(colorsizer1)
386
block12sizer.Add(colorsizer, 1, wxALIGN_LEFT)
381
block12sizer.Add(colorsizer, 1, wx.ALIGN_LEFT)
388
383
rowsizer.Add(block12sizer)
390
block3sizer = wxFlexGridSizer(cols = 1)
385
block3sizer = wx.FlexGridSizer(cols = 1)
392
portsettingsSizer = wxStaticBoxSizer(wxStaticBox(panel, -1, "Port Range:*"), wxVERTICAL)
393
portsettingsSizer1 = wxGridSizer(cols = 2, vgap = 1)
394
portsettingsSizer1.Add(StaticText('From: '), 1, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT)
395
portsettingsSizer1.Add(self.minport_data, 1, wxALIGN_BOTTOM)
396
portsettingsSizer1.Add(StaticText('To: '), 1, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT)
397
portsettingsSizer1.Add(self.maxport_data, 1, wxALIGN_BOTTOM)
387
portsettingsSizer = wx.StaticBoxSizer(wx.StaticBox(panel, -1, "Port Range:*"), wx.VERTICAL)
388
portsettingsSizer1 = wx.GridSizer(cols = 2, vgap = 1)
389
portsettingsSizer1.Add(StaticText('From: '), 1, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT)
390
portsettingsSizer1.Add(self.minport_data, 1, wx.ALIGN_BOTTOM)
391
portsettingsSizer1.Add(StaticText('To: '), 1, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT)
392
portsettingsSizer1.Add(self.maxport_data, 1, wx.ALIGN_BOTTOM)
398
393
portsettingsSizer.Add(portsettingsSizer1)
399
portsettingsSizer.Add(self.randomport_checkbox, 1, wxALIGN_CENTER)
400
block3sizer.Add(portsettingsSizer, 1, wxALIGN_CENTER)
401
block3sizer.Add(StaticText(' '))
402
block3sizer.Add(self.gui_ratesettingsmode_data, 1, wxALIGN_CENTER)
403
block3sizer.Add(StaticText(' '))
404
ratesettingsSizer = wxFlexGridSizer(cols = 1, vgap = 2)
405
ratesettingsSizer.Add(StaticText('Default Rate Setting: *'), 1, wxALIGN_CENTER)
406
ratesettingsSizer.Add(self.gui_ratesettingsdefault_data, 1, wxALIGN_CENTER)
407
block3sizer.Add(ratesettingsSizer, 1, wxALIGN_CENTER)
394
portsettingsSizer.Add(self.randomport_checkbox, 1, wx.ALIGN_CENTER)
395
block3sizer.Add(portsettingsSizer, 1, wx.ALIGN_CENTER)
396
block3sizer.Add(StaticText(' '))
397
block3sizer.Add(self.gui_ratesettingsmode_data, 1, wx.ALIGN_CENTER)
398
block3sizer.Add(StaticText(' '))
399
ratesettingsSizer = wx.FlexGridSizer(cols = 1, vgap = 2)
400
ratesettingsSizer.Add(StaticText('Default Rate Setting: *'), 1, wx.ALIGN_CENTER)
401
ratesettingsSizer.Add(self.gui_ratesettingsdefault_data, 1, wx.ALIGN_CENTER)
402
block3sizer.Add(ratesettingsSizer, 1, wx.ALIGN_CENTER)
408
403
if (sys.platform == 'win32'):
409
404
block3sizer.Add(StaticText(' '))
410
upnpSizer = wxFlexGridSizer(cols = 1, vgap = 2)
411
upnpSizer.Add(StaticText('UPnP Port Forwarding: *'), 1, wxALIGN_CENTER)
412
upnpSizer.Add(self.upnp_data, 1, wxALIGN_CENTER)
413
block3sizer.Add(upnpSizer, 1, wxALIGN_CENTER)
405
upnpSizer = wx.FlexGridSizer(cols = 1, vgap = 2)
406
upnpSizer.Add(StaticText('UPnP Port Forwarding: *'), 1, wx.ALIGN_CENTER)
407
upnpSizer.Add(self.upnp_data, 1, wx.ALIGN_CENTER)
408
block3sizer.Add(upnpSizer, 1, wx.ALIGN_CENTER)
415
410
rowsizer.Add(block3sizer)
416
411
colsizer.Add(rowsizer)
418
block4sizer = wxFlexGridSizer(cols = 3, hgap = 15)
419
savepathsizer = wxFlexGridSizer(cols = 2, vgap = 1)
413
block4sizer = wx.FlexGridSizer(cols = 3, hgap = 15)
414
savepathsizer = wx.FlexGridSizer(cols = 2, vgap = 1)
420
415
savepathsizer.Add(StaticText('Default Save Path: *'))
421
416
savepathsizer.Add(StaticText(' '))
422
savepathsizer.Add(self.gui_default_savedir_ctrl, 1, wxEXPAND)
423
savepathButton = wxButton(panel, -1, '...', size = (18,18))
417
savepathsizer.Add(self.gui_default_savedir_ctrl, 1, wx.EXPAND)
418
savepathButton = wx.Button(panel, -1, '...', size = (18,18))
424
419
# savepathButton.SetFont(self.default_font)
425
savepathsizer.Add(savepathButton, 0, wxALIGN_CENTER)
426
savepathsizer.Add(self.gui_savemode_data, 0, wxALIGN_CENTER)
427
block4sizer.Add(savepathsizer, -1, wxALIGN_BOTTOM)
420
savepathsizer.Add(savepathButton, 0, wx.ALIGN_CENTER)
421
savepathsizer.Add(self.gui_savemode_data, 0, wx.ALIGN_CENTER)
422
block4sizer.Add(savepathsizer, -1, wx.ALIGN_BOTTOM)
429
fontsizer = wxFlexGridSizer(cols = 1, vgap = 2)
424
fontsizer = wx.FlexGridSizer(cols = 1, vgap = 2)
430
425
fontsizer.Add(StaticText(''))
431
fontsizer.Add(StaticText('Font: *'), 1, wxALIGN_CENTER)
432
fontsizer.Add(self.gui_font_data, 1, wxALIGN_CENTER)
433
block4sizer.Add(fontsizer, 1, wxALIGN_CENTER_VERTICAL)
426
fontsizer.Add(StaticText('Font: *'), 1, wx.ALIGN_CENTER)
427
fontsizer.Add(self.gui_font_data, 1, wx.ALIGN_CENTER)
428
block4sizer.Add(fontsizer, 1, wx.ALIGN_CENTER_VERTICAL)
435
dratesettingsSizer = wxFlexGridSizer(cols = 1, vgap = 2)
436
dratesettingsSizer.Add(StaticText('Default Max'), 1, wxALIGN_CENTER)
437
dratesettingsSizer.Add(StaticText('Download Rate'), 1, wxALIGN_CENTER)
438
dratesettingsSizer.Add(StaticText('(kB/s): *'), 1, wxALIGN_CENTER)
439
dratesettingsSizer.Add(self.maxdownload_data, 1, wxALIGN_CENTER)
440
dratesettingsSizer.Add(StaticText('(0 = disabled)'), 1, wxALIGN_CENTER)
430
dratesettingsSizer = wx.FlexGridSizer(cols = 1, vgap = 2)
431
dratesettingsSizer.Add(StaticText('Default Max'), 1, wx.ALIGN_CENTER)
432
dratesettingsSizer.Add(StaticText('Download Rate'), 1, wx.ALIGN_CENTER)
433
dratesettingsSizer.Add(StaticText('(kB/s): *'), 1, wx.ALIGN_CENTER)
434
dratesettingsSizer.Add(self.maxdownload_data, 1, wx.ALIGN_CENTER)
435
dratesettingsSizer.Add(StaticText('(0 = disabled)'), 1, wx.ALIGN_CENTER)
442
block4sizer.Add(dratesettingsSizer, 1, wxALIGN_CENTER_VERTICAL)
444
colsizer.Add(block4sizer, 0, wxALIGN_CENTER)
446
savesizer = wxGridSizer(cols = 4, hgap = 10)
447
saveButton = wxButton(panel, -1, 'Save')
437
block4sizer.Add(dratesettingsSizer, 1, wx.ALIGN_CENTER_VERTICAL)
439
colsizer.Add(block4sizer, 0, wx.ALIGN_CENTER)
441
savesizer = wx.GridSizer(cols = 4, hgap = 10)
442
saveButton = wx.Button(panel, -1, 'Save')
448
443
# saveButton.SetFont(self.default_font)
449
savesizer.Add(saveButton, 0, wxALIGN_CENTER)
444
savesizer.Add(saveButton, 0, wx.ALIGN_CENTER)
451
cancelButton = wxButton(panel, -1, 'Cancel')
446
cancelButton = wx.Button(panel, -1, 'Cancel')
452
447
# cancelButton.SetFont(self.default_font)
453
savesizer.Add(cancelButton, 0, wxALIGN_CENTER)
448
savesizer.Add(cancelButton, 0, wx.ALIGN_CENTER)
455
defaultsButton = wxButton(panel, -1, 'Revert to Defaults')
450
defaultsButton = wx.Button(panel, -1, 'Revert to Defaults')
456
451
# defaultsButton.SetFont(self.default_font)
457
savesizer.Add(defaultsButton, 0, wxALIGN_CENTER)
452
savesizer.Add(defaultsButton, 0, wx.ALIGN_CENTER)
459
advancedButton = wxButton(panel, -1, 'Advanced...')
454
advancedButton = wx.Button(panel, -1, 'Advanced...')
460
455
# advancedButton.SetFont(self.default_font)
461
savesizer.Add(advancedButton, 0, wxALIGN_CENTER)
462
colsizer.Add(savesizer, 1, wxALIGN_CENTER)
456
savesizer.Add(advancedButton, 0, wx.ALIGN_CENTER)
457
colsizer.Add(savesizer, 1, wx.ALIGN_CENTER)
464
459
resizewarningtext=StaticText('* These settings will not take effect until the next time you start BitTorrent', self.FONT-2)
465
colsizer.Add(resizewarningtext, 1, wxALIGN_CENTER)
460
colsizer.Add(resizewarningtext, 1, wx.ALIGN_CENTER)
467
border = wxBoxSizer(wxHORIZONTAL)
468
border.Add(colsizer, 1, wxEXPAND | wxALL, 4)
462
border = wx.BoxSizer(wx.HORIZONTAL)
463
border.Add(colsizer, 1, wx.EXPAND | wx.ALL, 4)
470
465
panel.SetSizer(border)
471
466
panel.SetAutoLayout(True)
647
642
if (self.advancedMenuBox is not None):
649
644
self.advancedMenuBox.Close ()
650
except wxPyDeadObjectError, e:
645
except wx.PyDeadObjectError, e:
651
646
self.advancedMenuBox = None
653
self.advancedMenuBox = wxFrame(None, -1, 'BitTornado Advanced Preferences', size = (1,1),
654
style = wxDEFAULT_FRAME_STYLE|wxFULL_REPAINT_ON_RESIZE)
648
self.advancedMenuBox = wx.Frame(None, -1, 'BitTornado Advanced Preferences', size = (1,1),
649
style = wx.DEFAULT_FRAME_STYLE|wx.FULL_REPAINT_ON_RESIZE)
655
650
if (sys.platform == 'win32'):
656
651
self.advancedMenuBox.SetIcon(self.icon)
658
panel = wxPanel(self.advancedMenuBox, -1)
653
panel = wx.Panel(self.advancedMenuBox, -1)
660
655
def StaticText(text, font = self.FONT, underline = False, color = None, panel = panel):
661
x = wxStaticText(panel, -1, text, style = wxALIGN_LEFT)
662
x.SetFont(wxFont(font, wxDEFAULT, wxNORMAL, wxNORMAL, underline))
656
x = wx.StaticText(panel, -1, text, style = wx.ALIGN_LEFT)
657
x.SetFont(wx.Font(font, wx.DEFAULT, wx.NORMAL, wx.NORMAL, underline))
663
658
if color is not None:
664
659
x.SetForegroundColour(color)
667
colsizer = wxFlexGridSizer(cols = 1, hgap = 13, vgap = 13)
662
colsizer = wx.FlexGridSizer(cols = 1, hgap = 13, vgap = 13)
668
663
warningtext = StaticText('CHANGE THESE SETTINGS AT YOUR OWN RISK', self.FONT+4, True, 'Red')
669
colsizer.Add(warningtext, 1, wxALIGN_CENTER)
664
colsizer.Add(warningtext, 1, wx.ALIGN_CENTER)
671
self.ip_data = wxTextCtrl(parent = panel, id = -1,
666
self.ip_data = wx.TextCtrl(parent = panel, id = -1,
672
667
value = self.advancedConfig['ip'],
673
size = (self.FONT*13, int(self.FONT*2.2)), style = wxTE_PROCESS_TAB)
668
size = (self.FONT*13, int(self.FONT*2.2)), style = wx.TE_PROCESS_TAB)
674
669
self.ip_data.SetFont(self.default_font)
676
self.bind_data = wxTextCtrl(parent = panel, id = -1,
671
self.bind_data = wx.TextCtrl(parent = panel, id = -1,
677
672
value = self.advancedConfig['bind'],
678
size = (self.FONT*13, int(self.FONT*2.2)), style = wxTE_PROCESS_TAB)
673
size = (self.FONT*13, int(self.FONT*2.2)), style = wx.TE_PROCESS_TAB)
679
674
self.bind_data.SetFont(self.default_font)
681
676
if sys.version_info >= (2,3) and socket.has_ipv6:
682
self.ipv6bindsv4_data=wxChoice(panel, -1,
677
self.ipv6bindsv4_data=wx.Choice(panel, -1,
683
678
choices = ['separate sockets', 'single socket'])
684
679
self.ipv6bindsv4_data.SetFont(self.default_font)
685
680
self.ipv6bindsv4_data.SetSelection(self.advancedConfig['ipv6_binds_v4'])
687
self.minpeers_data = wxSpinCtrl(panel, -1, '', (-1,-1), (self.FONT*7, -1))
682
self.minpeers_data = wx.SpinCtrl(panel, -1, '', (-1,-1), (self.FONT*7, -1))
688
683
self.minpeers_data.SetFont(self.default_font)
689
684
self.minpeers_data.SetRange(10,100)
690
685
self.minpeers_data.SetValue(self.advancedConfig['min_peers'])
691
686
# max_initiate = 2*minpeers
693
self.displayinterval_data = wxSpinCtrl(panel, -1, '', (-1,-1), (self.FONT*7, -1))
688
self.displayinterval_data = wx.SpinCtrl(panel, -1, '', (-1,-1), (self.FONT*7, -1))
694
689
self.displayinterval_data.SetFont(self.default_font)
695
690
self.displayinterval_data.SetRange(100,2000)
696
691
self.displayinterval_data.SetValue(int(self.advancedConfig['display_interval']*1000))
698
self.alloctype_data=wxChoice(panel, -1,
693
self.alloctype_data=wx.Choice(panel, -1,
699
694
choices = ['normal', 'background', 'pre-allocate', 'sparse'])
700
695
self.alloctype_data.SetFont(self.default_font)
701
696
self.alloctype_data.SetStringSelection(self.advancedConfig['alloc_type'])
703
self.allocrate_data = wxSpinCtrl(panel, -1, '', (-1,-1), (self.FONT*7,-1))
698
self.allocrate_data = wx.SpinCtrl(panel, -1, '', (-1,-1), (self.FONT*7,-1))
704
699
self.allocrate_data.SetFont(self.default_font)
705
700
self.allocrate_data.SetRange(1,100)
706
701
self.allocrate_data.SetValue(int(self.advancedConfig['alloc_rate']))
708
self.locking_data=wxChoice(panel, -1,
703
self.locking_data=wx.Choice(panel, -1,
709
704
choices = ['no locking', 'lock while writing', 'lock always'])
710
705
self.locking_data.SetFont(self.default_font)
711
706
if self.advancedConfig['lock_files']:
769
764
self.expirecache_data.SetStringSelection(setval)
772
twocolsizer = wxFlexGridSizer(cols = 2, hgap = 20)
773
datasizer = wxFlexGridSizer(cols = 2, vgap = 2)
774
datasizer.Add(StaticText('Local IP: '), 1, wxALIGN_CENTER_VERTICAL)
767
twocolsizer = wx.FlexGridSizer(cols = 2, hgap = 20)
768
datasizer = wx.FlexGridSizer(cols = 2, vgap = 2)
769
datasizer.Add(StaticText('Local IP: '), 1, wx.ALIGN_CENTER_VERTICAL)
775
770
datasizer.Add(self.ip_data)
776
datasizer.Add(StaticText('IP to bind to: '), 1, wxALIGN_CENTER_VERTICAL)
771
datasizer.Add(StaticText('IP to bind to: '), 1, wx.ALIGN_CENTER_VERTICAL)
777
772
datasizer.Add(self.bind_data)
778
773
if sys.version_info >= (2,3) and socket.has_ipv6:
779
datasizer.Add(StaticText('IPv6 socket handling: '), 1, wxALIGN_CENTER_VERTICAL)
774
datasizer.Add(StaticText('IPv6 socket handling: '), 1, wx.ALIGN_CENTER_VERTICAL)
780
775
datasizer.Add(self.ipv6bindsv4_data)
781
datasizer.Add(StaticText('Minimum number of peers: '), 1, wxALIGN_CENTER_VERTICAL)
776
datasizer.Add(StaticText('Minimum number of peers: '), 1, wx.ALIGN_CENTER_VERTICAL)
782
777
datasizer.Add(self.minpeers_data)
783
datasizer.Add(StaticText('Display interval (ms): '), 1, wxALIGN_CENTER_VERTICAL)
778
datasizer.Add(StaticText('Display interval (ms): '), 1, wx.ALIGN_CENTER_VERTICAL)
784
779
datasizer.Add(self.displayinterval_data)
785
datasizer.Add(StaticText('Disk allocation type:'), 1, wxALIGN_CENTER_VERTICAL)
780
datasizer.Add(StaticText('Disk allocation type:'), 1, wx.ALIGN_CENTER_VERTICAL)
786
781
datasizer.Add(self.alloctype_data)
787
datasizer.Add(StaticText('Allocation rate (MiB/s):'), 1, wxALIGN_CENTER_VERTICAL)
782
datasizer.Add(StaticText('Allocation rate (MiB/s):'), 1, wx.ALIGN_CENTER_VERTICAL)
788
783
datasizer.Add(self.allocrate_data)
789
datasizer.Add(StaticText('File locking:'), 1, wxALIGN_CENTER_VERTICAL)
784
datasizer.Add(StaticText('File locking:'), 1, wx.ALIGN_CENTER_VERTICAL)
790
785
datasizer.Add(self.locking_data)
791
datasizer.Add(StaticText('Extra data checking:'), 1, wxALIGN_CENTER_VERTICAL)
786
datasizer.Add(StaticText('Extra data checking:'), 1, wx.ALIGN_CENTER_VERTICAL)
792
787
datasizer.Add(self.doublecheck_data)
793
datasizer.Add(StaticText('Max files open:'), 1, wxALIGN_CENTER_VERTICAL)
788
datasizer.Add(StaticText('Max files open:'), 1, wx.ALIGN_CENTER_VERTICAL)
794
789
datasizer.Add(self.maxfilesopen_data)
795
datasizer.Add(StaticText('Max peer connections:'), 1, wxALIGN_CENTER_VERTICAL)
790
datasizer.Add(StaticText('Max peer connections:'), 1, wx.ALIGN_CENTER_VERTICAL)
796
791
datasizer.Add(self.maxconnections_data)
797
datasizer.Add(StaticText('Default seeding mode:'), 1, wxALIGN_CENTER_VERTICAL)
792
datasizer.Add(StaticText('Default seeding mode:'), 1, wx.ALIGN_CENTER_VERTICAL)
798
793
datasizer.Add(self.superseeder_data)
799
datasizer.Add(StaticText('Expire resume data(days):'), 1, wxALIGN_CENTER_VERTICAL)
794
datasizer.Add(StaticText('Expire resume data(days):'), 1, wx.ALIGN_CENTER_VERTICAL)
800
795
datasizer.Add(self.expirecache_data)
802
797
twocolsizer.Add(datasizer)
804
infosizer = wxFlexGridSizer(cols = 1)
799
infosizer = wx.FlexGridSizer(cols = 1)
805
800
self.hinttext = StaticText('', self.FONT, False, 'Blue')
806
infosizer.Add(self.hinttext, 1, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL)
801
infosizer.Add(self.hinttext, 1, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL)
807
802
infosizer.SetMinSize((180,100))
808
twocolsizer.Add(infosizer, 1, wxEXPAND)
803
twocolsizer.Add(infosizer, 1, wx.EXPAND)
810
805
colsizer.Add(twocolsizer)
812
savesizer = wxGridSizer(cols = 3, hgap = 20)
813
okButton = wxButton(panel, -1, 'OK')
807
savesizer = wx.GridSizer(cols = 3, hgap = 20)
808
okButton = wx.Button(panel, -1, 'OK')
814
809
# okButton.SetFont(self.default_font)
815
savesizer.Add(okButton, 0, wxALIGN_CENTER)
810
savesizer.Add(okButton, 0, wx.ALIGN_CENTER)
817
cancelButton = wxButton(panel, -1, 'Cancel')
812
cancelButton = wx.Button(panel, -1, 'Cancel')
818
813
# cancelButton.SetFont(self.default_font)
819
savesizer.Add(cancelButton, 0, wxALIGN_CENTER)
814
savesizer.Add(cancelButton, 0, wx.ALIGN_CENTER)
821
defaultsButton = wxButton(panel, -1, 'Revert to Defaults')
816
defaultsButton = wx.Button(panel, -1, 'Revert to Defaults')
822
817
# defaultsButton.SetFont(self.default_font)
823
savesizer.Add(defaultsButton, 0, wxALIGN_CENTER)
824
colsizer.Add(savesizer, 1, wxALIGN_CENTER)
818
savesizer.Add(defaultsButton, 0, wx.ALIGN_CENTER)
819
colsizer.Add(savesizer, 1, wx.ALIGN_CENTER)
826
821
resizewarningtext=StaticText('None of these settings will take effect until the next time you start BitTorrent', self.FONT-2)
827
colsizer.Add(resizewarningtext, 1, wxALIGN_CENTER)
822
colsizer.Add(resizewarningtext, 1, wx.ALIGN_CENTER)
829
border = wxBoxSizer(wxHORIZONTAL)
830
border.Add(colsizer, 1, wxEXPAND | wxALL, 4)
824
border = wx.BoxSizer(wx.HORIZONTAL)
825
border.Add(colsizer, 1, wx.EXPAND | wx.ALL, 4)
832
827
panel.SetSizer(border)
833
828
panel.SetAutoLayout(True)
1024
1019
"client will keep this data before\n" +
1025
1020
"deleting it to free disk space.")
1027
EVT_BUTTON(self.advancedMenuBox, okButton.GetId(), saveConfigs)
1028
EVT_BUTTON(self.advancedMenuBox, cancelButton.GetId(), cancelConfigs)
1029
EVT_BUTTON(self.advancedMenuBox, defaultsButton.GetId(), setDefaults)
1030
EVT_ENTER_WINDOW(self.ip_data, ip_hint)
1031
EVT_ENTER_WINDOW(self.bind_data, bind_hint)
1022
wx.EVT_BUTTON(self.advancedMenuBox, okButton.GetId(), saveConfigs)
1023
wx.EVT_BUTTON(self.advancedMenuBox, cancelButton.GetId(), cancelConfigs)
1024
wx.EVT_BUTTON(self.advancedMenuBox, defaultsButton.GetId(), setDefaults)
1025
wx.EVT_ENTER_WINDOW(self.ip_data, ip_hint)
1026
wx.EVT_ENTER_WINDOW(self.bind_data, bind_hint)
1032
1027
if sys.version_info >= (2,3) and socket.has_ipv6:
1033
EVT_ENTER_WINDOW(self.ipv6bindsv4_data, ipv6bindsv4_hint)
1034
EVT_ENTER_WINDOW(self.minpeers_data, minpeers_hint)
1035
EVT_ENTER_WINDOW(self.displayinterval_data, displayinterval_hint)
1036
EVT_ENTER_WINDOW(self.alloctype_data, alloctype_hint)
1037
EVT_ENTER_WINDOW(self.allocrate_data, allocrate_hint)
1038
EVT_ENTER_WINDOW(self.locking_data, locking_hint)
1039
EVT_ENTER_WINDOW(self.doublecheck_data, doublecheck_hint)
1040
EVT_ENTER_WINDOW(self.maxfilesopen_data, maxfilesopen_hint)
1041
EVT_ENTER_WINDOW(self.maxconnections_data, maxconnections_hint)
1042
EVT_ENTER_WINDOW(self.superseeder_data, superseeder_hint)
1043
EVT_ENTER_WINDOW(self.expirecache_data, expirecache_hint)
1028
wx.EVT_ENTER_WINDOW(self.ipv6bindsv4_data, ipv6bindsv4_hint)
1029
wx.EVT_ENTER_WINDOW(self.minpeers_data, minpeers_hint)
1030
wx.EVT_ENTER_WINDOW(self.displayinterval_data, displayinterval_hint)
1031
wx.EVT_ENTER_WINDOW(self.alloctype_data, alloctype_hint)
1032
wx.EVT_ENTER_WINDOW(self.allocrate_data, allocrate_hint)
1033
wx.EVT_ENTER_WINDOW(self.locking_data, locking_hint)
1034
wx.EVT_ENTER_WINDOW(self.doublecheck_data, doublecheck_hint)
1035
wx.EVT_ENTER_WINDOW(self.maxfilesopen_data, maxfilesopen_hint)
1036
wx.EVT_ENTER_WINDOW(self.maxconnections_data, maxconnections_hint)
1037
wx.EVT_ENTER_WINDOW(self.superseeder_data, superseeder_hint)
1038
wx.EVT_ENTER_WINDOW(self.expirecache_data, expirecache_hint)
1045
1040
self.advancedMenuBox.Show ()
1046
1041
border.Fit(panel)
1067
1062
if (self.cryptoMenuBox is not None):
1069
1064
self.cryptoMenuBox.Close ()
1070
except wxPyDeadObjectError, e:
1065
except wx.PyDeadObjectError, e:
1071
1066
self.cryptoMenuBox = None
1073
self.cryptoMenuBox = wxFrame(None, -1, 'BitTornado Encryption/Security Preferences', size = (1,1),
1074
style = wxDEFAULT_FRAME_STYLE|wxFULL_REPAINT_ON_RESIZE)
1068
self.cryptoMenuBox = wx.Frame(None, -1, 'BitTornado Encryption/Security Preferences', size = (1,1),
1069
style = wx.DEFAULT_FRAME_STYLE|wx.FULL_REPAINT_ON_RESIZE)
1075
1070
if (sys.platform == 'win32'):
1076
1071
self.cryptoMenuBox.SetIcon(self.icon)
1078
panel = wxPanel(self.cryptoMenuBox, -1)
1073
panel = wx.Panel(self.cryptoMenuBox, -1)
1079
1074
# self.panel = panel
1081
1076
def StaticText(text, font = self.FONT, underline = False, color = None, panel = panel):
1082
x = wxStaticText(panel, -1, text, style = wxALIGN_LEFT)
1083
x.SetFont(wxFont(font, wxDEFAULT, wxNORMAL, wxNORMAL, underline))
1077
x = wx.StaticText(panel, -1, text, style = wx.ALIGN_LEFT)
1078
x.SetFont(wx.Font(font, wx.DEFAULT, wx.NORMAL, wx.NORMAL, underline))
1084
1079
if color is not None:
1085
1080
x.SetForegroundColour(color)
1088
colsizer = wxFlexGridSizer(cols = 1, hgap = 13, vgap = 13)
1083
colsizer = wx.FlexGridSizer(cols = 1, hgap = 13, vgap = 13)
1090
self.cryptomode_data=wxRadioBox(panel, -1, 'Encryption',
1091
style = wxRA_SPECIFY_COLS, majorDimension = 1,
1085
self.cryptomode_data=wx.RadioBox(panel, -1, 'Encryption',
1086
style = wx.RA_SPECIFY_COLS, majorDimension = 1,
1093
1088
'no encryption permitted',
1094
1089
'encryption enabled (default)',
1108
1103
if not CRYPTO_OK: # no crypto library in place
1109
1104
self.cryptomode_data.Enable(False)
1111
self.security_checkbox = wxCheckBox(panel, -1, "Don't allow multiple connections from the same IP")
1106
self.security_checkbox = wx.CheckBox(panel, -1, "Don't allow multiple connections from the same IP")
1112
1107
self.security_checkbox.SetFont(self.default_font)
1113
1108
self.security_checkbox.SetValue(self.cryptoConfig['security'])
1115
self.autokick_checkbox = wxCheckBox(panel, -1, "Kick/ban clients that send you bad data")
1110
self.autokick_checkbox = wx.CheckBox(panel, -1, "Kick/ban clients that send you bad data")
1116
1111
self.autokick_checkbox.SetFont(self.default_font)
1117
1112
self.autokick_checkbox.SetValue(self.cryptoConfig['auto_kick'])
1119
1114
colsizer.Add(self.cryptomode_data)
1121
block2sizer = wxFlexGridSizer(cols = 1, vgap = 2)
1116
block2sizer = wx.FlexGridSizer(cols = 1, vgap = 2)
1122
1117
block2sizer.Add(self.security_checkbox)
1123
1118
block2sizer.Add(self.autokick_checkbox)
1124
1119
colsizer.Add(block2sizer)
1126
savesizer = wxGridSizer(cols = 3, hgap = 20)
1127
okButton = wxButton(panel, -1, 'OK')
1128
savesizer.Add(okButton, 0, wxALIGN_CENTER)
1130
cancelButton = wxButton(panel, -1, 'Cancel')
1131
savesizer.Add(cancelButton, 0, wxALIGN_CENTER)
1133
defaultsButton = wxButton(panel, -1, 'Revert to Defaults')
1134
savesizer.Add(defaultsButton, 0, wxALIGN_CENTER)
1135
colsizer.Add(savesizer, 1, wxALIGN_CENTER)
1121
savesizer = wx.GridSizer(cols = 3, hgap = 20)
1122
okButton = wx.Button(panel, -1, 'OK')
1123
savesizer.Add(okButton, 0, wx.ALIGN_CENTER)
1125
cancelButton = wx.Button(panel, -1, 'Cancel')
1126
savesizer.Add(cancelButton, 0, wx.ALIGN_CENTER)
1128
defaultsButton = wx.Button(panel, -1, 'Revert to Defaults')
1129
savesizer.Add(defaultsButton, 0, wx.ALIGN_CENTER)
1130
colsizer.Add(savesizer, 1, wx.ALIGN_CENTER)
1137
1132
resizewarningtext=StaticText('None of these settings will take effect until the next time you start BitTorrent', self.FONT-2)
1138
colsizer.Add(resizewarningtext, 1, wxALIGN_CENTER)
1133
colsizer.Add(resizewarningtext, 1, wx.ALIGN_CENTER)
1140
border = wxBoxSizer(wxHORIZONTAL)
1141
border.Add(colsizer, 1, wxEXPAND | wxALL, 4)
1135
border = wx.BoxSizer(wx.HORIZONTAL)
1136
border.Add(colsizer, 1, wx.EXPAND | wx.ALL, 4)
1143
1138
panel.SetSizer(border)
1144
1139
panel.SetAutoLayout(True)