class SaveAs(wx.Dialog): def __init__(self, parent, tdef, defaultdir, defaultname, configfile, selectedFiles = None): wx.Dialog.__init__(self, parent, -1, 'Please specify a target directory', size=(600,450)) self.filehistory = wx.FileHistory(10) self.config = wx.FileConfig(appName = "Tribler", localFilename = configfile) self.filehistory.Load(self.config) self.defaultdir = defaultdir self.guiutility = GUIUtility.getInstance() self.listCtrl = None if self.filehistory.GetCount() > 0: lastUsed = self.filehistory.GetHistoryFile(0) else: lastUsed = defaultdir vSizer = wx.BoxSizer(wx.VERTICAL) if tdef: line = 'Please select a directory where to save:' else: line = 'Please select a directory where to save this torrent' firstLine = wx.StaticText(self, -1, line) _set_font(firstLine, fontweight=wx.FONTWEIGHT_BOLD) vSizer.Add(firstLine, 0, wx.EXPAND|wx.BOTTOM, 3) if tdef: torrentName = wx.StaticText(self, -1, tdef.get_name_as_unicode()) torrentName.SetMinSize((1, -1)) vSizer.Add(torrentName, 0, wx.EXPAND|wx.BOTTOM|wx.RIGHT, 3) hSizer = wx.BoxSizer(wx.HORIZONTAL) hSizer.Add(wx.StaticText(self, -1, 'Save as:'), 0, wx.ALIGN_CENTER_VERTICAL|wx.RIGHT|wx.BOTTOM, 3) choices = [self.filehistory.GetHistoryFile(i) for i in range(self.filehistory.GetCount())] if defaultdir not in choices: choices.append(defaultdir) if defaultname: choices.insert(0, os.path.join(lastUsed, defaultname)) self.dirTextCtrl = wx.ComboBox(self, -1, os.path.join(lastUsed, defaultname), choices = choices, style = wx.CB_DROPDOWN) else: self.dirTextCtrl = wx.ComboBox(self, -1, lastUsed, choices = choices, style = wx.CB_DROPDOWN) self.dirTextCtrl.Select(0) hSizer.Add(self.dirTextCtrl, 1, wx.EXPAND|wx.RIGHT|wx.BOTTOM, 3) browseButton = wx.Button(self, -1, 'Browse') browseButton.Bind(wx.EVT_BUTTON, self.OnBrowseDir) hSizer.Add(browseButton) vSizer.Add(hSizer, 0, wx.EXPAND|wx.BOTTOM, 3) if tdef: vSizer.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.BOTTOM, 10) firstLine = wx.StaticText(self, -1, "Content:") _set_font(firstLine, fontweight=wx.FONTWEIGHT_BOLD) vSizer.Add(firstLine, 0, wx.BOTTOM, 3) vSizer.Add(wx.StaticText(self, -1, 'Use the checkboxes to choose which files to download.\nUse ctrl+a to select all/deselect all.'), 0, wx.BOTTOM, 3) self.listCtrl = CheckSelectableListCtrl(self) self.listCtrl.InsertColumn(0, 'Name') self.listCtrl.InsertColumn(1, 'Size', wx.LIST_FORMAT_RIGHT) #Add files def sort_by_size(a, b): return cmp(a[1],b[1]) files = tdef.get_files_as_unicode_with_length() files.sort(sort_by_size, reverse = True) for filename, size in files: try: pos = self.listCtrl.InsertStringItem(sys.maxint, filename) except: try: pos = self.listCtrl.InsertStringItem(sys.maxint, filename.decode('utf-8','ignore')) except: print >> sys.stderr, "Could not format filename", self.torrent.name self.listCtrl.SetItemData(pos, pos) self.listCtrl.SetStringItem(pos, 1, self.guiutility.utility.size_format(size)) if selectedFiles: self.listCtrl.CheckItem(pos, filename in selectedFiles) if selectedFiles == None: self.listCtrl.doSelectAll() self.listCtrl.setResizeColumn(0) self.listCtrl.SetColumnWidth(1, wx.LIST_AUTOSIZE) #autosize only works after adding rows vSizer.Add(self.listCtrl, 1, wx.EXPAND|wx.BOTTOM, 3) cancel = wx.Button(self, wx.ID_CANCEL) cancel.Bind(wx.EVT_BUTTON, self.OnCancel) ok = wx.Button(self, wx.ID_OK) ok.Bind(wx.EVT_BUTTON, self.OnOk) bSizer = wx.StdDialogButtonSizer() bSizer.AddButton(cancel) bSizer.AddButton(ok) bSizer.Realize() vSizer.Add(bSizer, 0, wx.EXPAND|wx.BOTTOM, 3) sizer = wx.BoxSizer() sizer.Add(vSizer, 1, wx.EXPAND|wx.ALL, 10) self.SetSizer(sizer) def GetPath(self): return self.dirTextCtrl.GetValue().strip() def GetSelectedFiles(self): if self.listCtrl: selected = self.listCtrl.GetSelectedItems() nrSelected = len(selected) if nrSelected > 0 and nrSelected < self.listCtrl.GetItemCount(): files = [] for index in selected: files.append(self.listCtrl.GetItem(index, 0).GetText()) return files return None def OnOk(self, event = None): if self.listCtrl: nrSelected = len(self.listCtrl.GetSelectedItems()) if nrSelected == 0: dlg = wx.MessageDialog(self, "Please select at least one file to be downloaded using the checkboxes.", "Please select a file to be downloaded", wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return path = self.GetPath() if not os.path.exists(path): path, _ = os.path.split(path) self.filehistory.AddFileToHistory(path) self.filehistory.Save(self.config) self.config.Flush() self.EndModal(wx.ID_OK) def OnCancel(self, event = None): self.EndModal(wx.ID_CANCEL) def OnBrowseDir(self, event): dlg = wx.DirDialog(self, "Please select a directory to save this torrent", style = wx.wx.DD_NEW_DIR_BUTTON) dlg.SetPath(self.defaultdir) if dlg.ShowModal() == wx.ID_OK and os.path.isdir(dlg.GetPath()): self.dirTextCtrl.SetValue(dlg.GetPath()) dlg.Destroy()
class MoveTorrents(wx.Dialog): def __init__(self, parent, labels, downloads): wx.Dialog.__init__(self, parent, -1, 'Please select the torrents you want to move', size=(750, 450)) self.downloads = downloads vSizer = wx.BoxSizer(wx.VERTICAL) message = 'Please select all torrents which should be moved' message += "\nUse ctrl+a to select all/deselect all." firstLine = wx.StaticText(self, -1, message) _set_font(firstLine, fontweight=wx.FONTWEIGHT_BOLD) vSizer.Add(firstLine, 0, wx.EXPAND | wx.BOTTOM, 3) self.listCtrl = CheckSelectableListCtrl(self) self.listCtrl.InsertColumn(0, 'Torrent') self.listCtrl.InsertColumn(1, 'Current Location') self.listCtrl.setResizeColumn(0) for i, label in enumerate(labels): row = self.listCtrl.InsertStringItem(sys.maxint, label) download = downloads[i] self.listCtrl.SetStringItem(row, 1, download.get_dest_dir()) self.listCtrl.SetColumnWidth(1, wx.LIST_AUTOSIZE) vSizer.Add(self.listCtrl, 1, wx.EXPAND | wx.BOTTOM | wx.TOP, 3) self.destTextCtrl = wx.TextCtrl(self) self.browseButton = wx.Button(self, -1, 'Browse') self.browseButton.Bind(wx.EVT_BUTTON, self.OnBrowse) moveTo = wx.StaticText(self, -1, 'Move to:') _set_font(moveTo, fontweight=wx.FONTWEIGHT_BOLD) vSizer.Add(moveTo) vSizer.Add( wx.StaticText( self, -1, 'Please note that all multi-file torrents create a directory themselves.\nYour new destination should specify the base dir for all torrents.' )) hSizer = wx.BoxSizer(wx.HORIZONTAL) hSizer.Add(self.destTextCtrl, 1, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 3) hSizer.Add(self.browseButton, 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 3) vSizer.Add(hSizer, 0, wx.EXPAND | wx.BOTTOM, 3) self.moveFiles = wx.CheckBox( self, -1, 'Move files from current destination to new destination') self.ignoreFiles = wx.CheckBox( self, -1, 'Do not overwrite files already existing at new destination') vSizer.Add(self.moveFiles) vSizer.Add(self.ignoreFiles) cancel = wx.Button(self, wx.ID_CANCEL) cancel.Bind(wx.EVT_BUTTON, self.OnCancel) ok = wx.Button(self, wx.ID_OK) ok.Bind(wx.EVT_BUTTON, self.OnOk) bSizer = wx.StdDialogButtonSizer() bSizer.AddButton(cancel) bSizer.AddButton(ok) bSizer.Realize() vSizer.Add(bSizer, 0, wx.EXPAND | wx.BOTTOM, 3) sizer = wx.BoxSizer() sizer.Add(vSizer, 1, wx.EXPAND | wx.ALL, 10) self.SetSizer(sizer) def OnBrowse(self, event=None): dlg = wx.DirDialog(self, "Choose a new destination directory", style=wx.DEFAULT_DIALOG_STYLE) if dlg.ShowModal() == wx.ID_OK: self.destTextCtrl.SetValue(dlg.GetPath()) dlg.Destroy() def GetSettings(self): selectedDownloads = [] for i in range(self.listCtrl.GetItemCount()): if self.listCtrl.IsSelected(i): selectedDownloads.append(self.downloads[i]) new_dir = self.destTextCtrl.GetValue() moveFiles = self.moveFiles.GetValue() ignoreIfExists = self.ignoreFiles.GetValue() return selectedDownloads, new_dir, moveFiles, ignoreIfExists def OnOk(self, event=None): if self.destTextCtrl.GetValue() != '': self.EndModal(wx.ID_OK) def OnCancel(self, event=None): self.EndModal(wx.ID_CANCEL)