home *** CD-ROM | disk | FTP | other *** search
Wrap
# Source Generated with Decompyle++ # File: in.pyo (Python 2.2) from wxPython.wx import * from os import unlink, path from ConfigFile import Config from GridTable import GridTable from TimedUpdate import TimedUpdate from Images import GetBitmap import Renderer class Grid(wxScrolledWindow): Selection = { 'Set': [], 'Add': false } LabelResize = { 'Over': false, 'Active': false, 'Num': -1, 'Start': -1, 'PosX': -1 } DrawTools = { 'HighlightOutline': wxPen(wxColour(10, 36, 106)), 'HighlightColor': wxBrush(wxColour(194, 200, 218), wxSOLID), 'EmptyBackground': wxBrush(wxColour(255, 255, 255), wxSOLID), 'LabelFontColor': wxColour(0, 0, 0), 'LabelFont': wxFont(8, wxDEFAULT, wxNORMAL, wxNORMAL, False, '', wxFONTENCODING_SYSTEM), 'LabelOutlineC1': wxPen(wxColor(255, 255, 255)), 'LabelOutlineC2': wxPen(wxColor(128, 128, 128)), 'LabelOutlineC3': wxPen(wxColor(64, 64, 64)), 'LabelFill': wxBrush(wxColor(212, 208, 200), wxSOLID), 'LabelSizeCursor': wxStockCursor(wxCURSOR_SIZEWE) } def __init__(self, parent): wxScrolledWindow.__init__(self, parent, -1, wxPoint(0, 0), wxSize(786, 335), style = wxSIMPLE_BORDER | wxCLIP_CHILDREN | wxNO_FULL_REPAINT_ON_RESIZE) self.Table = GridTable(self) self.SetBackgroundColour(wxColour(255, 255, 255)) for col in range(self.Table.GetNumberCols()): size = Config.Get('GUI', 'GridCol%i' % col) self.Table.SetColSize(col, size) self.SetScrollRate(5, 5) self.Updater = TimedUpdate(10.0, self.Update) self.Updater.Start() self.Menu = wxMenu('') self.itemCancel = wxMenuItem(self.Menu, 1, 'Cancel') self.itemResume = wxMenuItem(self.Menu, 2, 'Resume') self.itemPause = wxMenuItem(self.Menu, 3, 'Pause') self.itemUp = wxMenuItem(self.Menu, 4, 'Move Up') self.itemDown = wxMenuItem(self.Menu, 5, 'Move Down') self.itemCancel.SetBitmap(GetBitmap('Menu_Cancel')) self.itemResume.SetBitmap(GetBitmap('Menu_Resume')) self.itemPause.SetBitmap(GetBitmap('Menu_Pause')) self.itemUp.SetBitmap(GetBitmap('Menu_MoveUp')) self.itemDown.SetBitmap(GetBitmap('Menu_MoveDown')) self.Menu.AppendItem(self.itemCancel) self.Menu.AppendSeparator() self.Menu.AppendItem(self.itemResume) self.Menu.AppendItem(self.itemPause) self.Menu.AppendSeparator() self.Menu.AppendItem(self.itemUp) self.Menu.AppendItem(self.itemDown) EVT_MENU(self, self.itemCancel.GetId(), self.Menu_Cancel) EVT_MENU(self, self.itemResume.GetId(), self.Menu_Resume) EVT_MENU(self, self.itemPause.GetId(), self.Menu_Pause) EVT_MENU(self, self.itemUp.GetId(), self.Menu_Up) EVT_MENU(self, self.itemDown.GetId(), self.Menu_Down) EVT_KEY_DOWN(self, self.OnKeyDown) EVT_KEY_UP(self, self.OnKeyUp) EVT_LEFT_DOWN(self, self.OnMouseLeftDown) EVT_LEFT_UP(self, self.OnMouseLeftUp) EVT_RIGHT_DOWN(self, self.OnMouseRightDown) EVT_MOTION(self, self.OnMouseMove) EVT_PAINT(self, self.OnPaint) EVT_SIZE(self, self.OnSize) self.DrawTools['ArrowBitmap'] = GetBitmap('Grid_Arrow') def Update(self): self.Table.Update() self.OnSize(None) def GetLoaders(self, sel): loaders = [] for i in sel: loaders.append(self.Table.Manager.Loaders[i]) return loaders def Menu_Cancel(self, evt): loaders = self.GetLoaders(self.Selection['Set']) for l in loaders: dlg = wxMessageDialog(self, "Do you really want to cancel the download of '" + l.Config['File'] + "'?\nThis will result in the torrent being deleted.", 'Cancel?', wxYES_NO | wxICON_QUESTION | wxSTAY_ON_TOP) if dlg.ShowModal() == wxID_NO: continue try: l.PauseDownload() if l.Obj != None and l.Obj.has_key('Storage'): l.Obj['Storage'].close() unlink(l.Config['TorFull']) except: wxMessageBox("Couldn't delete torrent file.") self.Update() def Menu_Pause(self, evt): loaders = self.GetLoaders(self.Selection['Set']) for l in loaders: l.PauseDownload(true) def Menu_Resume(self, evt): loaders = self.GetLoaders(self.Selection['Set']) for l in loaders: l.StartDownload() def Menu_Up(self, evt): self.Selection['Set'].sort() new = [] for i in self.Selection['Set']: self.Table.Manager.Move(i, i - 1) new.append(i - 1) self.Selection['Set'] = new self.Refresh() def Menu_Down(self, evt): self.Selection['Set'].sort() self.Selection['Set'].reverse() new = [] for i in self.Selection['Set']: self.Table.Manager.Move(i, i + 1) new.append(i + 1) self.Selection['Set'] = new self.Refresh() def OnMouseRightDown(self, evt): (x, y) = self.CalcUnscrolledPosition(evt.GetY(), evt.GetY()) row = self.GetCursorRow(y) if row == -1: return None if not (row in self.Selection['Set']): self.Selection['Set'] = [ row] self.Refresh() sel = self.Selection['Set'] if sel == []: return None loaders = self.GetLoaders(sel) pause = false resume = false mup = true mdown = true if 0 in sel: mup = false if self.Table.GetNumberRows() - 1 in sel: mdown = false if len(sel) > 1: pause = true resume = true elif loaders[0].IsRunning(): pause = true else: resume = true self.itemCancel.Enable(true) self.itemPause.Enable(pause) self.itemResume.Enable(resume) self.itemUp.Enable(mup) self.itemDown.Enable(mdown) self.PopupMenu(self.Menu, evt.GetPosition()) def OnMouseMove(self, evt): if self.LabelResize['Active'] == true: self.LabelResize['PosX'] = evt.GetX() self.Refresh() return None self.SetCursor(wxNullCursor) self.LabelResize['Over'] = false if evt.GetY() > self.Table.GetColLabelSize(): return None x = evt.GetX() - self.Table.GetRowLabelSize() for col in range(self.Table.GetNumberCols()): x = x - self.Table.GetColSize(col) if x <= 0: break if x == 0: self.LabelResize['Over'] = true self.LabelResize['Num'] = col self.SetCursor(self.DrawTools['LabelSizeCursor']) def OnMouseLeftDown(self, evt): if self.LabelResize['Over'] == true: self.LabelResize['Active'] = true self.LabelResize['Start'] = evt.GetX() x = evt.GetX() y = evt.GetY() (x, y) = self.CalcUnscrolledPosition(x, y) row = self.GetCursorRow(y) if row == -1: self.Selection['Set'] = [] if self.Selection['Add'] == false: self.Selection['Set'] = [] self.Selection['Set'].append(row) self.Refresh() def OnMouseLeftUp(self, evt): if self.LabelResize['Active'] == false: return None col = self.LabelResize['Num'] value = self.LabelResize['Start'] - evt.GetX() self.Table.SetColSize(col, self.Table.GetColSize(col) - value) self.LabelResize['Active'] = false self.LabelResize['Num'] = -1 self.LabelResize['Sart'] = -1 self.Refresh() self.OnSize(None) def OnKeyDown(self, evt): code = evt.GetKeyCode() if code == WXK_CONTROL: self.Selection['Add'] = true return None evt.Skip() def OnKeyUp(self, evt): code = evt.GetKeyCode() if code == WXK_CONTROL: self.Selection['Add'] = false return None evt.Skip() def GetCursorRow(self, y): if y < self.Table.GetColLabelSize(): return -1 InRow = -1 y = y - self.Table.GetColLabelSize() for row in range(self.Table.GetNumberRows()): y = y - self.Table.GetRowSize(row) InRow = InRow + 1 if y <= 0: break if y > 0: return -1 return InRow def OnPaint(self, evt): if self.IsShown() == false: return None try: dc = self.BufferDC (w, h) = dc.GetSizeTuple() dc.BeginDrawing() dc.SetBackground(self.DrawTools['EmptyBackground']) dc.Clear() self.DrawSelection(dc) self.DrawColRowCross(dc) self.DrawColLabels(dc) self.DrawRowLabels(dc) self.DrawGrid(dc) dc.EndDrawing() ondc = wxPaintDC(self) self.PrepareDC(ondc) ondc.BeginDrawing() ondc.SetBackground(self.DrawTools['EmptyBackground']) ondc.Clear() ondc.Blit(0, 0, w, h, dc, 0, 0) if self.LabelResize['Active'] == true: x = self.LabelResize['PosX'] ondc.SetPen(self.DrawTools['HighlightOutline']) ondc.DrawLine(x + 1, 0, x + 1, h) ondc.EndDrawing() except: pass def DrawSelection(self, dc): dc.SetPen(self.DrawTools['HighlightOutline']) dc.SetBrush(self.DrawTools['HighlightColor']) if self.Selection['Set'] != []: sel = self.Selection['Set'] width = self.Table.GetRowLabelSize() for col in range(self.Table.GetNumberCols()): width = width + self.Table.GetColSize(col) y = self.Table.GetColLabelSize() for row in range(self.Table.GetNumberRows()): if row in sel: dc.DrawRectangle(2, y + 2, width - 4, self.Table.GetRowSize(row) - 4) y = y + self.Table.GetRowSize(row) def DrawColRowCross(self, dc): rect = wxRect(0, 0, self.Table.GetRowLabelSize(), self.Table.GetColLabelSize()) self.Draw3DLabel(dc, rect) def DrawColLabels(self, dc): cols = range(self.Table.GetNumberCols()) dc.SetTextForeground(self.DrawTools['LabelFontColor']) dc.SetFont(self.DrawTools['LabelFont']) x = self.Table.GetRowLabelSize() y = self.Table.GetColLabelSize() for col in cols: rect = wxRect(x, 0, self.Table.GetColSize(col), y) x = x + rect.width self.Draw3DLabel(dc, rect) dc.DrawText(self.Table.GetColLabelValue(col), rect.x + 4, rect.y + 2) def DrawRowLabels(self, dc): rows = range(self.Table.GetNumberRows()) y = self.Table.GetColLabelSize() for row in rows: dc.DrawBitmap(self.DrawTools['ArrowBitmap'], 0, y, true) y = y + self.Table.GetRowSize(row) def DrawGrid(self, dc): rows = range(self.Table.GetNumberRows()) cols = range(self.Table.GetNumberCols()) x = self.Table.GetRowLabelSize() y = self.Table.GetColLabelSize() for row in rows: for col in cols: rect = wxRect(x, y, self.Table.GetColSize(col), self.Table.GetRowSize(row)) x = x + rect.width rend = self.Table.GetCellRenderer(row, col) rend.Draw(self, None, dc, rect, row, col, true) x = self.Table.GetRowLabelSize() y = y + rect.height def Draw3DLabel(self, dc, rect): dc.SetPen(self.DrawTools['LabelOutlineC1']) dc.DrawLine(rect.x, rect.y, rect.x, rect.y + rect.height - 1) dc.DrawLine(rect.x, rect.y, rect.x + rect.width - 1, rect.y) dc.SetPen(self.DrawTools['LabelOutlineC2']) dc.DrawLine(rect.x + 1, rect.y + rect.height - 2, rect.x + rect.width, rect.y + rect.height - 2) dc.DrawLine(rect.x + rect.width - 2, rect.y + 1, rect.x + rect.width - 2, rect.y + rect.height - 1) dc.SetPen(self.DrawTools['LabelOutlineC3']) dc.DrawLine(rect.x + rect.width - 1, rect.y, rect.x + rect.width - 1, rect.y + rect.height) dc.DrawLine(rect.x, rect.y + rect.height - 1, rect.x + rect.width, rect.y + rect.height - 1) dc.SetPen(wxTRANSPARENT_PEN) dc.SetBrush(self.DrawTools['LabelFill']) dc.DrawRectangle(rect.x + 1, rect.y + 1, rect.width - 3, rect.height - 3) def GetCellValue(self, row, col): return self.Table.GetValue(row, col) def OnSize(self, evt): cols = range(self.Table.GetNumberCols()) rows = range(self.Table.GetNumberRows()) width = self.Table.GetRowLabelSize() height = self.Table.GetColLabelSize() for col in cols: width = width + self.Table.GetColSize(col) for row in rows: height = height + self.Table.GetRowSize(row) self.SetVirtualSize(wxSize(width + 8, height)) self.BufferImg = wxEmptyBitmap(width, height) self.BufferDC = wxMemoryDC() self.BufferDC.SelectObject(self.BufferImg) def Destroy(self, evt = wxCloseEvent()): for col in range(self.Table.GetNumberCols()): Config.Set('GUI', 'GridCol%i' % col, self.Table.GetColSize(col)) Config.Save() self.Table.Destroy() self.Updater.Shutdown() wxScrolledWindow.Destroy(self)