home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 April / com_0405_1.iso / opensource / BTpp-0.5.4-bin.exe / $INSTDIR / BT++.exe / TabTrans / Grid.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2003-04-19  |  16.7 KB  |  430 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.2)
  3.  
  4. from wxPython.wx import *
  5. from os import unlink, path
  6. from ConfigFile import Config
  7. from GridTable import GridTable
  8. from TimedUpdate import TimedUpdate
  9. from Images import GetBitmap
  10. import Renderer
  11.  
  12. class Grid(wxScrolledWindow):
  13.     Selection = {
  14.         'Set': [],
  15.         'Add': false }
  16.     LabelResize = {
  17.         'Over': false,
  18.         'Active': false,
  19.         'Num': -1,
  20.         'Start': -1,
  21.         'PosX': -1 }
  22.     DrawTools = {
  23.         'HighlightOutline': wxPen(wxColour(10, 36, 106)),
  24.         'HighlightColor': wxBrush(wxColour(194, 200, 218), wxSOLID),
  25.         'EmptyBackground': wxBrush(wxColour(255, 255, 255), wxSOLID),
  26.         'LabelFontColor': wxColour(0, 0, 0),
  27.         'LabelFont': wxFont(8, wxDEFAULT, wxNORMAL, wxNORMAL, False, '', wxFONTENCODING_SYSTEM),
  28.         'LabelOutlineC1': wxPen(wxColor(255, 255, 255)),
  29.         'LabelOutlineC2': wxPen(wxColor(128, 128, 128)),
  30.         'LabelOutlineC3': wxPen(wxColor(64, 64, 64)),
  31.         'LabelFill': wxBrush(wxColor(212, 208, 200), wxSOLID),
  32.         'LabelSizeCursor': wxStockCursor(wxCURSOR_SIZEWE) }
  33.     
  34.     def __init__(self, parent):
  35.         wxScrolledWindow.__init__(self, parent, -1, wxPoint(0, 0), wxSize(786, 335), style = wxSIMPLE_BORDER | wxCLIP_CHILDREN | wxNO_FULL_REPAINT_ON_RESIZE)
  36.         self.Table = GridTable(self)
  37.         self.SetBackgroundColour(wxColour(255, 255, 255))
  38.         for col in range(self.Table.GetNumberCols()):
  39.             size = Config.Get('GUI', 'GridCol%i' % col)
  40.             self.Table.SetColSize(col, size)
  41.         
  42.         self.SetScrollRate(5, 5)
  43.         self.Updater = TimedUpdate(10.0, self.Update)
  44.         self.Updater.Start()
  45.         self.Menu = wxMenu('')
  46.         self.itemCancel = wxMenuItem(self.Menu, 1, 'Cancel')
  47.         self.itemResume = wxMenuItem(self.Menu, 2, 'Resume')
  48.         self.itemPause = wxMenuItem(self.Menu, 3, 'Pause')
  49.         self.itemUp = wxMenuItem(self.Menu, 4, 'Move Up')
  50.         self.itemDown = wxMenuItem(self.Menu, 5, 'Move Down')
  51.         self.itemCancel.SetBitmap(GetBitmap('Menu_Cancel'))
  52.         self.itemResume.SetBitmap(GetBitmap('Menu_Resume'))
  53.         self.itemPause.SetBitmap(GetBitmap('Menu_Pause'))
  54.         self.itemUp.SetBitmap(GetBitmap('Menu_MoveUp'))
  55.         self.itemDown.SetBitmap(GetBitmap('Menu_MoveDown'))
  56.         self.Menu.AppendItem(self.itemCancel)
  57.         self.Menu.AppendSeparator()
  58.         self.Menu.AppendItem(self.itemResume)
  59.         self.Menu.AppendItem(self.itemPause)
  60.         self.Menu.AppendSeparator()
  61.         self.Menu.AppendItem(self.itemUp)
  62.         self.Menu.AppendItem(self.itemDown)
  63.         EVT_MENU(self, self.itemCancel.GetId(), self.Menu_Cancel)
  64.         EVT_MENU(self, self.itemResume.GetId(), self.Menu_Resume)
  65.         EVT_MENU(self, self.itemPause.GetId(), self.Menu_Pause)
  66.         EVT_MENU(self, self.itemUp.GetId(), self.Menu_Up)
  67.         EVT_MENU(self, self.itemDown.GetId(), self.Menu_Down)
  68.         EVT_KEY_DOWN(self, self.OnKeyDown)
  69.         EVT_KEY_UP(self, self.OnKeyUp)
  70.         EVT_LEFT_DOWN(self, self.OnMouseLeftDown)
  71.         EVT_LEFT_UP(self, self.OnMouseLeftUp)
  72.         EVT_RIGHT_DOWN(self, self.OnMouseRightDown)
  73.         EVT_MOTION(self, self.OnMouseMove)
  74.         EVT_PAINT(self, self.OnPaint)
  75.         EVT_SIZE(self, self.OnSize)
  76.         self.DrawTools['ArrowBitmap'] = GetBitmap('Grid_Arrow')
  77.  
  78.     
  79.     def Update(self):
  80.         self.Table.Update()
  81.         self.OnSize(None)
  82.  
  83.     
  84.     def GetLoaders(self, sel):
  85.         loaders = []
  86.         for i in sel:
  87.             loaders.append(self.Table.Manager.Loaders[i])
  88.         
  89.         return loaders
  90.  
  91.     
  92.     def Menu_Cancel(self, evt):
  93.         loaders = self.GetLoaders(self.Selection['Set'])
  94.         for l in loaders:
  95.             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)
  96.             if dlg.ShowModal() == wxID_NO:
  97.                 continue
  98.             
  99.             
  100.             try:
  101.                 l.PauseDownload()
  102.                 if l.Obj != None and l.Obj.has_key('Storage'):
  103.                     l.Obj['Storage'].close()
  104.                 
  105.                 unlink(l.Config['TorFull'])
  106.             except:
  107.                 wxMessageBox("Couldn't delete torrent file.")
  108.  
  109.         
  110.         self.Update()
  111.  
  112.     
  113.     def Menu_Pause(self, evt):
  114.         loaders = self.GetLoaders(self.Selection['Set'])
  115.         for l in loaders:
  116.             l.PauseDownload(true)
  117.         
  118.  
  119.     
  120.     def Menu_Resume(self, evt):
  121.         loaders = self.GetLoaders(self.Selection['Set'])
  122.         for l in loaders:
  123.             l.StartDownload()
  124.         
  125.  
  126.     
  127.     def Menu_Up(self, evt):
  128.         self.Selection['Set'].sort()
  129.         new = []
  130.         for i in self.Selection['Set']:
  131.             self.Table.Manager.Move(i, i - 1)
  132.             new.append(i - 1)
  133.         
  134.         self.Selection['Set'] = new
  135.         self.Refresh()
  136.  
  137.     
  138.     def Menu_Down(self, evt):
  139.         self.Selection['Set'].sort()
  140.         self.Selection['Set'].reverse()
  141.         new = []
  142.         for i in self.Selection['Set']:
  143.             self.Table.Manager.Move(i, i + 1)
  144.             new.append(i + 1)
  145.         
  146.         self.Selection['Set'] = new
  147.         self.Refresh()
  148.  
  149.     
  150.     def OnMouseRightDown(self, evt):
  151.         (x, y) = self.CalcUnscrolledPosition(evt.GetY(), evt.GetY())
  152.         row = self.GetCursorRow(y)
  153.         if row == -1:
  154.             return None
  155.         
  156.         if not (row in self.Selection['Set']):
  157.             self.Selection['Set'] = [
  158.                 row]
  159.             self.Refresh()
  160.         
  161.         sel = self.Selection['Set']
  162.         if sel == []:
  163.             return None
  164.         
  165.         loaders = self.GetLoaders(sel)
  166.         pause = false
  167.         resume = false
  168.         mup = true
  169.         mdown = true
  170.         if 0 in sel:
  171.             mup = false
  172.         
  173.         if self.Table.GetNumberRows() - 1 in sel:
  174.             mdown = false
  175.         
  176.         if len(sel) > 1:
  177.             pause = true
  178.             resume = true
  179.         elif loaders[0].IsRunning():
  180.             pause = true
  181.         else:
  182.             resume = true
  183.         self.itemCancel.Enable(true)
  184.         self.itemPause.Enable(pause)
  185.         self.itemResume.Enable(resume)
  186.         self.itemUp.Enable(mup)
  187.         self.itemDown.Enable(mdown)
  188.         self.PopupMenu(self.Menu, evt.GetPosition())
  189.  
  190.     
  191.     def OnMouseMove(self, evt):
  192.         if self.LabelResize['Active'] == true:
  193.             self.LabelResize['PosX'] = evt.GetX()
  194.             self.Refresh()
  195.             return None
  196.         
  197.         self.SetCursor(wxNullCursor)
  198.         self.LabelResize['Over'] = false
  199.         if evt.GetY() > self.Table.GetColLabelSize():
  200.             return None
  201.         
  202.         x = evt.GetX() - self.Table.GetRowLabelSize()
  203.         for col in range(self.Table.GetNumberCols()):
  204.             x = x - self.Table.GetColSize(col)
  205.             if x <= 0:
  206.                 break
  207.             
  208.         
  209.         if x == 0:
  210.             self.LabelResize['Over'] = true
  211.             self.LabelResize['Num'] = col
  212.             self.SetCursor(self.DrawTools['LabelSizeCursor'])
  213.         
  214.  
  215.     
  216.     def OnMouseLeftDown(self, evt):
  217.         if self.LabelResize['Over'] == true:
  218.             self.LabelResize['Active'] = true
  219.             self.LabelResize['Start'] = evt.GetX()
  220.         
  221.         x = evt.GetX()
  222.         y = evt.GetY()
  223.         (x, y) = self.CalcUnscrolledPosition(x, y)
  224.         row = self.GetCursorRow(y)
  225.         if row == -1:
  226.             self.Selection['Set'] = []
  227.         
  228.         if self.Selection['Add'] == false:
  229.             self.Selection['Set'] = []
  230.         
  231.         self.Selection['Set'].append(row)
  232.         self.Refresh()
  233.  
  234.     
  235.     def OnMouseLeftUp(self, evt):
  236.         if self.LabelResize['Active'] == false:
  237.             return None
  238.         
  239.         col = self.LabelResize['Num']
  240.         value = self.LabelResize['Start'] - evt.GetX()
  241.         self.Table.SetColSize(col, self.Table.GetColSize(col) - value)
  242.         self.LabelResize['Active'] = false
  243.         self.LabelResize['Num'] = -1
  244.         self.LabelResize['Sart'] = -1
  245.         self.Refresh()
  246.         self.OnSize(None)
  247.  
  248.     
  249.     def OnKeyDown(self, evt):
  250.         code = evt.GetKeyCode()
  251.         if code == WXK_CONTROL:
  252.             self.Selection['Add'] = true
  253.             return None
  254.         
  255.         evt.Skip()
  256.  
  257.     
  258.     def OnKeyUp(self, evt):
  259.         code = evt.GetKeyCode()
  260.         if code == WXK_CONTROL:
  261.             self.Selection['Add'] = false
  262.             return None
  263.         
  264.         evt.Skip()
  265.  
  266.     
  267.     def GetCursorRow(self, y):
  268.         if y < self.Table.GetColLabelSize():
  269.             return -1
  270.         
  271.         InRow = -1
  272.         y = y - self.Table.GetColLabelSize()
  273.         for row in range(self.Table.GetNumberRows()):
  274.             y = y - self.Table.GetRowSize(row)
  275.             InRow = InRow + 1
  276.             if y <= 0:
  277.                 break
  278.             
  279.         
  280.         if y > 0:
  281.             return -1
  282.         
  283.         return InRow
  284.  
  285.     
  286.     def OnPaint(self, evt):
  287.         if self.IsShown() == false:
  288.             return None
  289.         
  290.         
  291.         try:
  292.             dc = self.BufferDC
  293.             (w, h) = dc.GetSizeTuple()
  294.             dc.BeginDrawing()
  295.             dc.SetBackground(self.DrawTools['EmptyBackground'])
  296.             dc.Clear()
  297.             self.DrawSelection(dc)
  298.             self.DrawColRowCross(dc)
  299.             self.DrawColLabels(dc)
  300.             self.DrawRowLabels(dc)
  301.             self.DrawGrid(dc)
  302.             dc.EndDrawing()
  303.             ondc = wxPaintDC(self)
  304.             self.PrepareDC(ondc)
  305.             ondc.BeginDrawing()
  306.             ondc.SetBackground(self.DrawTools['EmptyBackground'])
  307.             ondc.Clear()
  308.             ondc.Blit(0, 0, w, h, dc, 0, 0)
  309.             if self.LabelResize['Active'] == true:
  310.                 x = self.LabelResize['PosX']
  311.                 ondc.SetPen(self.DrawTools['HighlightOutline'])
  312.                 ondc.DrawLine(x + 1, 0, x + 1, h)
  313.             
  314.             ondc.EndDrawing()
  315.         except:
  316.             pass
  317.  
  318.  
  319.     
  320.     def DrawSelection(self, dc):
  321.         dc.SetPen(self.DrawTools['HighlightOutline'])
  322.         dc.SetBrush(self.DrawTools['HighlightColor'])
  323.         if self.Selection['Set'] != []:
  324.             sel = self.Selection['Set']
  325.             width = self.Table.GetRowLabelSize()
  326.             for col in range(self.Table.GetNumberCols()):
  327.                 width = width + self.Table.GetColSize(col)
  328.             
  329.             y = self.Table.GetColLabelSize()
  330.             for row in range(self.Table.GetNumberRows()):
  331.                 if row in sel:
  332.                     dc.DrawRectangle(2, y + 2, width - 4, self.Table.GetRowSize(row) - 4)
  333.                 
  334.                 y = y + self.Table.GetRowSize(row)
  335.             
  336.         
  337.  
  338.     
  339.     def DrawColRowCross(self, dc):
  340.         rect = wxRect(0, 0, self.Table.GetRowLabelSize(), self.Table.GetColLabelSize())
  341.         self.Draw3DLabel(dc, rect)
  342.  
  343.     
  344.     def DrawColLabels(self, dc):
  345.         cols = range(self.Table.GetNumberCols())
  346.         dc.SetTextForeground(self.DrawTools['LabelFontColor'])
  347.         dc.SetFont(self.DrawTools['LabelFont'])
  348.         x = self.Table.GetRowLabelSize()
  349.         y = self.Table.GetColLabelSize()
  350.         for col in cols:
  351.             rect = wxRect(x, 0, self.Table.GetColSize(col), y)
  352.             x = x + rect.width
  353.             self.Draw3DLabel(dc, rect)
  354.             dc.DrawText(self.Table.GetColLabelValue(col), rect.x + 4, rect.y + 2)
  355.         
  356.  
  357.     
  358.     def DrawRowLabels(self, dc):
  359.         rows = range(self.Table.GetNumberRows())
  360.         y = self.Table.GetColLabelSize()
  361.         for row in rows:
  362.             dc.DrawBitmap(self.DrawTools['ArrowBitmap'], 0, y, true)
  363.             y = y + self.Table.GetRowSize(row)
  364.         
  365.  
  366.     
  367.     def DrawGrid(self, dc):
  368.         rows = range(self.Table.GetNumberRows())
  369.         cols = range(self.Table.GetNumberCols())
  370.         x = self.Table.GetRowLabelSize()
  371.         y = self.Table.GetColLabelSize()
  372.         for row in rows:
  373.             for col in cols:
  374.                 rect = wxRect(x, y, self.Table.GetColSize(col), self.Table.GetRowSize(row))
  375.                 x = x + rect.width
  376.                 rend = self.Table.GetCellRenderer(row, col)
  377.                 rend.Draw(self, None, dc, rect, row, col, true)
  378.             
  379.             x = self.Table.GetRowLabelSize()
  380.             y = y + rect.height
  381.         
  382.  
  383.     
  384.     def Draw3DLabel(self, dc, rect):
  385.         dc.SetPen(self.DrawTools['LabelOutlineC1'])
  386.         dc.DrawLine(rect.x, rect.y, rect.x, rect.y + rect.height - 1)
  387.         dc.DrawLine(rect.x, rect.y, rect.x + rect.width - 1, rect.y)
  388.         dc.SetPen(self.DrawTools['LabelOutlineC2'])
  389.         dc.DrawLine(rect.x + 1, rect.y + rect.height - 2, rect.x + rect.width, rect.y + rect.height - 2)
  390.         dc.DrawLine(rect.x + rect.width - 2, rect.y + 1, rect.x + rect.width - 2, rect.y + rect.height - 1)
  391.         dc.SetPen(self.DrawTools['LabelOutlineC3'])
  392.         dc.DrawLine(rect.x + rect.width - 1, rect.y, rect.x + rect.width - 1, rect.y + rect.height)
  393.         dc.DrawLine(rect.x, rect.y + rect.height - 1, rect.x + rect.width, rect.y + rect.height - 1)
  394.         dc.SetPen(wxTRANSPARENT_PEN)
  395.         dc.SetBrush(self.DrawTools['LabelFill'])
  396.         dc.DrawRectangle(rect.x + 1, rect.y + 1, rect.width - 3, rect.height - 3)
  397.  
  398.     
  399.     def GetCellValue(self, row, col):
  400.         return self.Table.GetValue(row, col)
  401.  
  402.     
  403.     def OnSize(self, evt):
  404.         cols = range(self.Table.GetNumberCols())
  405.         rows = range(self.Table.GetNumberRows())
  406.         width = self.Table.GetRowLabelSize()
  407.         height = self.Table.GetColLabelSize()
  408.         for col in cols:
  409.             width = width + self.Table.GetColSize(col)
  410.         
  411.         for row in rows:
  412.             height = height + self.Table.GetRowSize(row)
  413.         
  414.         self.SetVirtualSize(wxSize(width + 8, height))
  415.         self.BufferImg = wxEmptyBitmap(width, height)
  416.         self.BufferDC = wxMemoryDC()
  417.         self.BufferDC.SelectObject(self.BufferImg)
  418.  
  419.     
  420.     def Destroy(self, evt = wxCloseEvent()):
  421.         for col in range(self.Table.GetNumberCols()):
  422.             Config.Set('GUI', 'GridCol%i' % col, self.Table.GetColSize(col))
  423.         
  424.         Config.Save()
  425.         self.Table.Destroy()
  426.         self.Updater.Shutdown()
  427.         wxScrolledWindow.Destroy(self)
  428.  
  429.  
  430.