home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2012 January / maximum-cd-2012-01.iso / DiscContents / digsby_setup.exe / lib / gui / imwin / imwin_native.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-10-05  |  17.1 KB  |  443 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. import sys
  5. import wx
  6. import wx.lib.flatnotebook as fnb
  7. import wx.lib.newevent as wx
  8. from wx.lib import pubsub
  9. import actionIDs
  10. import gui
  11. import gui.imwin.imtabs as gui
  12. import gui.imwin.imwin_gui as imwin_gui
  13. from gui import capabilitiesbar
  14. from gui import skin
  15. from gui.addcontactdialog import AddContactDialog
  16. from gui.filetransfer import FileTransferDialog
  17. from gui.uberwidgets.uberbook.OverlayImage import OverlayImage
  18. from gui.windowfx import fadein
  19. buttonIDs = {
  20.     'info': actionIDs.InfoMode,
  21.     'im': actionIDs.IMMode,
  22.     'email': actionIDs.EmailMode,
  23.     'video': actionIDs.CallMode }
  24. (FlatNotebookDragStarted, EVT_FNB_DRAG_STARTED) = wx.lib.newevent.NewCommandEvent()
  25.  
  26. class NativeDragTimer(wx.Timer):
  27.     
  28.     def __init__(self, source):
  29.         wx.Timer.__init__(self)
  30.         self.source = source
  31.  
  32.     
  33.     def Notify(self):
  34.         if not wx.LeftDown():
  35.             self.Stop()
  36.             self.source.OnDragFinish()
  37.         else:
  38.             self.source.OnDragging()
  39.  
  40.  
  41.  
  42. class FrameDragManager(wx.EvtHandler):
  43.     
  44.     def __init__(self, frame):
  45.         wx.EvtHandler.__init__(self)
  46.         self.frame = frame
  47.         self.dragtimer = NativeDragTimer(self)
  48.         self.draggedidx = -1
  49.         self.dragimage = None
  50.         self.dragwindow = None
  51.         self.callback = None
  52.         self.mousePosOffset = None
  53.  
  54.     
  55.     def StartDrag(self, callback = None, draggedidx = -1, dragwindow = None):
  56.         self.mousePos = wx.GetMousePosition()
  57.         self.draggedidx = draggedidx
  58.         self.dragtimer.Start(1)
  59.         screendc = wx.ScreenDC()
  60.         self.mousePosOffset = self.mousePos - self.frame.GetScreenRect().GetPosition()
  61.         if dragwindow:
  62.             self.dragwindow = dragwindow
  63.             self.dragwindow.Move(wx.GetMousePosition() - self.mousePosOffset)
  64.         else:
  65.             dragimage = screendc.GetAsBitmap().GetSubBitmap(self.frame.GetScreenRect())
  66.             self.dragimage = OverlayImage(self.frame, dragimage, size = (dragimage.GetWidth(), dragimage.GetHeight()))
  67.         if self.dragimage:
  68.             self.dragimage.SetTransparent(172)
  69.             self.dragimage.Move(wx.GetMousePosition() - self.mousePosOffset)
  70.             self.dragimage.Show()
  71.         
  72.         self.callback = callback
  73.  
  74.     
  75.     def OnDragging(self):
  76.         pos = wx.GetMousePosition() - self.mousePosOffset
  77.         if self.dragimage:
  78.             self.dragimage.Move(pos)
  79.         
  80.         if self.dragwindow:
  81.             self.dragwindow.Move(pos)
  82.         
  83.  
  84.     
  85.     def OnDragFinish(self):
  86.         if self.dragimage:
  87.             self.dragimage.Hide()
  88.             self.dragimage.Destroy()
  89.             self.dragimage = None
  90.         
  91.         self.callback(draggedidx = self.draggedidx)
  92.  
  93.  
  94.  
  95. class NativeIMFrameEventHandler(wx.EvtHandler):
  96.     
  97.     def __init__(self, frame):
  98.         wx.EvtHandler.__init__(self)
  99.         self.frame = frame
  100.         self.dragManager = FrameDragManager(self.frame)
  101.         self.frameID = self.frame.GetId()
  102.         self.potentialNewWin = None
  103.         self.BuildToolBar()
  104.         self.BindEventsToFrame()
  105.  
  106.     
  107.     def BindEventsToFrame(self):
  108.         self.frame.Bind(wx.EVT_ACTIVATE, self.OnActivate)
  109.         self.frame.Bind(wx.EVT_CLOSE, self.OnClose)
  110.         self.frame.notebook.Bind(EVT_FNB_DRAG_STARTED, self.OnFNBTabDragStart)
  111.         publisher = pubsub.Publisher()
  112.         publisher.subscribe(self.OnPageTitleUpdated, 'tab.title.updated')
  113.         publisher.subscribe(self.OnPageIconUpdated, 'tab.icon.updated')
  114.  
  115.     
  116.     def OnActivate(self, event):
  117.         event.Skip()
  118.         if event.Active:
  119.             self.ConnectToolBarEvents()
  120.         else:
  121.             self.DisconnectToolBarEvents()
  122.  
  123.     
  124.     def OnClose(self, event):
  125.         if self.frame.CloseAndSaveState(event):
  126.             publisher = pubsub.Publisher()
  127.             publisher.unsubscribe(self.OnPageTitleUpdated, 'tab.title.updated')
  128.             publisher.unsubscribe(self.OnPageIconUpdated, 'tab.icon.updated')
  129.             self.DisconnectToolBarEvents()
  130.             self.frame.Destroy()
  131.             del self
  132.         else:
  133.             event.Veto()
  134.  
  135.     
  136.     def OnFNBTabDragStart(self, event):
  137.         if self.frame.notebook.GetTabCount() > 1:
  138.             newpos = wx.GetMousePosition()
  139.             newpos[1] = newpos[1] - self.frame.Size.height
  140.             newwin = gui.imwin.imtabs.ImFrame(pos = newpos, size = self.frame.Size)
  141.             newwin.SetTransparent(123)
  142.             page = self.frame.notebook.GetPage(event.draggedidx)
  143.             newwin.AddTab(page, False)
  144.             newwin.ShowNoActivate(True)
  145.             self.potentialNewWin = newwin
  146.         else:
  147.             self.frame.SetTransparent(123)
  148.             newwin = self.potentialNewWin = self.frame
  149.         self.dragManager.StartDrag(self.OnDragFinish, event.draggedidx, dragwindow = newwin)
  150.  
  151.     
  152.     def OnDragFinish(self, draggedidx):
  153.         pos = wx.GetMousePosition()
  154.         for imframe in gui.imwin.imtabs.all_imframes():
  155.             notebook = imframe.notebook
  156.             localcoords = notebook._pages.ScreenToClient(pos)
  157.             notebook._pages._isdragging = True
  158.             where = notebook._pages.HitTest(localcoords)[0]
  159.             notebook._pages._isdragging = False
  160.             if not (imframe == self.potentialNewWin) and where == fnb.FNB_TAB:
  161.                 page = self.frame.notebook.GetPage(draggedidx)
  162.                 imframe.AddTab(page, True)
  163.                 self.potentialNewWin.Destroy()
  164.                 break
  165.                 continue
  166.         else:
  167.             self.potentialNewWin.Raise()
  168.         self.frame.notebook.RemovePage(draggedidx)
  169.  
  170.     
  171.     def BuildToolBar(self):
  172.         toolbar = self.frame.CreateToolBar()
  173.         
  174.         s = lambda name, d = None: skin.get('AppDefaults.FormattingBar.%s' % name, d)
  175.         icons = s('icons').get
  176.         actionIcons = skin.get('ActionsBar.Icons')
  177.         iconsize = (24, 24)
  178.         eicon = icons('emote').Resized(iconsize)
  179.         toolbar.AddLabelTool(actionIDs.BuddyOptions, 'Buddy', wx.EmptyBitmap(32, 32))
  180.         toolbar.AddLabelTool(actionIDs.Files, 'Files', getattr(actionIcons, 'files').Resized(iconsize))
  181.         toolbar.AddSeparator()
  182.         app = wx.GetApp()
  183.         for attr, title, tooltip in capabilitiesbar.buttons:
  184.             if attr in ('files', 'sms', 'video'):
  185.                 continue
  186.             
  187.             baricon = getattr(actionIcons, attr).Resized(iconsize)
  188.             buttonID = buttonIDs[attr]
  189.             toolbar.AddLabelTool(buttonID, title, baricon)
  190.             app.AddHandlerForID(buttonID, self.OnModeClicked)
  191.         
  192.         toolbar.AddSeparator()
  193.         toolbar.AddLabelTool(actionIDs.SetFont, 'Font', getattr(actionIcons, 'font').Resized(iconsize))
  194.         toolbar.AddLabelTool(actionIDs.SetBackgroundColor, 'Bg Color', getattr(actionIcons, 'background').Resized(iconsize))
  195.         toolbar.AddLabelTool(actionIDs.ChooseEmoticon, 'Emoticon', eicon)
  196.         toolbar.AddSeparator()
  197.         toolbar.AddLabelTool(actionIDs.AddContact, 'Add Contact', getattr(actionIcons, 'addcontact').Resized(iconsize))
  198.         toolbar.AddLabelTool(actionIDs.ViewPastChats, 'View Past Chats', getattr(actionIcons, 'viewpastchats').Resized(iconsize))
  199.         toolbar.AddLabelTool(actionIDs.AlertMeWhen, 'Alert Me When', getattr(actionIcons, 'alertmewhen').Resized(iconsize))
  200.         toolbar.Realize()
  201.  
  202.     
  203.     def ConnectToolBarEvents(self, event = None):
  204.         app = wx.GetApp()
  205.         app.AddHandlerForID(actionIDs.SetFont, self.OnFontClicked)
  206.         app.AddHandlerForID(actionIDs.SetBackgroundColor, self.OnBCToolClicked)
  207.         app.AddHandlerForID(actionIDs.ChooseEmoticon, self.OnEmoteToolClicked)
  208.         app.AddHandlerForID(actionIDs.AddContact, self.OnAddContact)
  209.         app.AddHandlerForID(actionIDs.ViewPastChats, self.OnViewPastChats)
  210.         app.AddHandlerForID(actionIDs.AlertMeWhen, self.OnAlert)
  211.         app.AddHandlerForID(actionIDs.Files, self.OnFilesClicked)
  212.         app.AddHandlerForIDs(buttonIDs.values(), self.OnModeClicked)
  213.         app.AddHandlerForID(actionIDs.FileTransferHistory, self.OnFileTransferHistory)
  214.         app.AddHandlerForID(actionIDs.SendFile, self.OnSendFile)
  215.  
  216.     
  217.     def DisconnectToolBarEvents(self, event = None):
  218.         app = wx.GetApp()
  219.         app.RemoveHandlerForID(actionIDs.SetFont)
  220.         app.RemoveHandlerForID(actionIDs.SetBackgroundColor)
  221.         app.RemoveHandlerForID(actionIDs.ChooseEmoticon)
  222.         app.RemoveHandlerForID(actionIDs.AddContact)
  223.         app.RemoveHandlerForID(actionIDs.ViewPastChats)
  224.         app.RemoveHandlerForID(actionIDs.AlertMeWhen)
  225.         app.RemoveHandlerForID(actionIDs.Files)
  226.         app.RemoveHandlerForIDs(buttonIDs.values())
  227.  
  228.     
  229.     def OnAddContact(self, event):
  230.         if self.frame.notebook.ActiveTab:
  231.             buddy = self.frame.notebook.ActiveTab.Buddy
  232.             AddContactDialog.MakeOrShow(service = buddy.service, name = buddy.name)
  233.         
  234.  
  235.     
  236.     def OnViewPastChats(self, event):
  237.         if self.frame.notebook.ActiveTab:
  238.             im_control = self.frame.notebook.ActiveTab.IMControl
  239.             im_control.Buddy.view_past_chats(im_control.Account)
  240.         
  241.  
  242.     
  243.     def OnPageIconUpdated(self, message):
  244.         page = message.data[0]
  245.         icon = message.data[1]
  246.         if self.frame:
  247.             for pagenum in xrange(self.frame.notebook.GetPageCount()):
  248.                 if self.frame.notebook.GetPage(pagenum) == page:
  249.                     self.frame.notebook.UpdatePageImage(pagenum, icon)
  250.                     self.frame.ToolBar.SetToolNormalBitmap(actionIDs.BuddyOptions, icon.Resized((32, 32)))
  251.                     continue
  252.             
  253.             if self.frame.notebook.ActiveTab == page:
  254.                 self.frame.SetFrameIcon(icon)
  255.             
  256.         
  257.  
  258.     
  259.     def OnPageTitleUpdated(self, message):
  260.         page = message.data[0]
  261.         title = message.data[1]
  262.         window_title = message.data[2]
  263.         if self.frame:
  264.             pageInNotebook = False
  265.             for pagenum in xrange(self.frame.notebook.GetPageCount()):
  266.                 if self.frame.notebook.GetPage(pagenum) == page:
  267.                     self.frame.notebook.SetPageText(pagenum, title)
  268.                     pageInNotebook = True
  269.                     continue
  270.             
  271.             if pageInNotebook:
  272.                 if window_title:
  273.                     self.frame.SetTitle(self.frame.WindowName + ' - ' + window_title)
  274.                 else:
  275.                     self.frame.SetTitle(self.frame.WindowName + ' - ' + title)
  276.             
  277.         
  278.  
  279.     
  280.     def OnAlert(self, event):
  281.         gui.pref.prefsdialog.show('notifications')
  282.  
  283.     
  284.     def OnFilesClicked(self, event):
  285.         popup = wx.Menu()
  286.         popup.Append(actionIDs.SendFile, _('Send File'))
  287.         popup.Append(actionIDs.FileTransferHistory, _('Transfer History'))
  288.         self.frame.PopupMenu(popup, self.frame.ScreenToClient(wx.GetMousePosition()))
  289.  
  290.     
  291.     def OnSendFile(self, event):
  292.         if self.frame.notebook.ActiveTab:
  293.             im_control = self.frame.notebook.ActiveTab.IMControl
  294.             im_control.Buddy.send_file()
  295.         
  296.  
  297.     
  298.     def OnFileTransferHistory(self, event):
  299.         FileTransferDialog.Display()
  300.  
  301.     
  302.     def OnModeClicked(self, event):
  303.         eventid = event.GetId()
  304.         for name in buttonIDs:
  305.             if buttonIDs[name] == eventid:
  306.                 self.frame.notebook.ActiveTab.set_mode(name, toggle_tofrom = True)
  307.                 break
  308.                 continue
  309.         
  310.  
  311.     
  312.     def OnFontClicked(self, event):
  313.         self.frame.notebook.ActiveTab.input_area.ShowModalFontDialog()
  314.  
  315.     
  316.     def OnBCToolClicked(self, event):
  317.         tc = self.frame.notebook.ActiveTab.input_area.tc
  318.         newcolor = wx.GetColourFromUser(self.frame, tc.BackgroundColour, _('Choose a background color'))
  319.         if newcolor.IsOk():
  320.             attrs = tc.GetDefaultStyle()
  321.             attrs.SetBackgroundColour(newcolor)
  322.             tc.SetDefaultStyle(attrs)
  323.         
  324.         tc.Refresh()
  325.         tc.SetFocus()
  326.  
  327.     
  328.     def OnEmoteToolClicked(self, event):
  329.         wx.MessageBox("Not working yet. (need to decide the best way to share code between this and the formattinb bar) Just type smileys by hand, it won't hurt. ;)")
  330.  
  331.  
  332.  
  333. class DigsbyFlatNotebook(fnb.FlatNotebook):
  334.     
  335.     def __init__(self, *args, **kwargs):
  336.         fnb.FlatNotebook.__init__(self, *args, **kwargs)
  337.         self.imageList = wx.ImageList(16, 16)
  338.         self.SetImageList(self.imageList)
  339.         self.isDragging = False
  340.         self._pages.Bind(wx.EVT_MOTION, self.OnNotebookMouseMove)
  341.  
  342.     
  343.     def OnNotebookMouseMove(self, event):
  344.         (where, tabidx) = self._pages.HitTest(event.GetPosition())
  345.         if event.Dragging() and where == fnb.FNB_TAB:
  346.             if not self.isDragging:
  347.                 event = FlatNotebookDragStarted(self.GetId(), draggedidx = tabidx)
  348.                 self.ProcessEvent(event)
  349.                 self.isDragging = True
  350.             
  351.         elif self.isDragging:
  352.             self.isDragging = False
  353.         
  354.         event.Skip()
  355.  
  356.     
  357.     def Pages(self):
  358.         pagelist = []
  359.         for page in xrange(self.GetPageCount()):
  360.             pagelist.append(self.GetPage(page))
  361.         
  362.         return pagelist
  363.  
  364.     
  365.     def Add(self, ctrl, focus = None):
  366.         ctrl.show_actions_bar = False
  367.         page = self.AddPage(ctrl, 'Chat Name', select = focus)
  368.         ctrl.update_title()
  369.         ctrl.update_icon()
  370.         return page
  371.  
  372.     
  373.     def Insert(self, ctrl):
  374.         self.Add(ctrl, False)
  375.  
  376.     
  377.     def IndexForPage(self, ctrl):
  378.         for index in xrange(self.GetPageCount()):
  379.             if ctrl == self.GetPage(index):
  380.                 return index
  381.         
  382.         return -1
  383.  
  384.     
  385.     def Remove(self, ctrl):
  386.         index = self.IndexForPage(ctrl)
  387.         self.RemovePage(index)
  388.  
  389.     
  390.     def GetTabCount(self):
  391.         return self.GetPageCount()
  392.  
  393.     
  394.     def ActiveTab(self):
  395.         sel = self.GetSelection()
  396.         if sel != -1:
  397.             return self.GetPage(sel)
  398.         if self.GetPageCount() > 0:
  399.             return self.GetPage(0)
  400.  
  401.     ActiveTab = property(ActiveTab)
  402.     
  403.     def UpdatePageImage(self, pagenum, icon):
  404.         imageList = self.GetImageList()
  405.         iconnum = pagenum
  406.         if pagenum >= imageList.GetImageCount():
  407.             imageList.Add(icon.Resized((16, 16)))
  408.             iconnum = imageList.GetImageCount() - 1
  409.         else:
  410.             imageList.Replace(pagenum, icon.Resized((16, 16)))
  411.         self.SetPageImage(pagenum, iconnum)
  412.  
  413.  
  414.  
  415. class NativeNotebookPanel(wx.Panel):
  416.     
  417.     def __init__(self, *args, **kwargs):
  418.         wx.Panel.__init__(self, *args, **kwargs)
  419.         style = fnb.FNB_X_ON_TAB | fnb.FNB_ALLOW_FOREIGN_DND | fnb.FNB_NODRAG | fnb.FNB_BOTTOM | fnb.FNB_FANCY_TABS | fnb.FNB_NO_X_BUTTON
  420.         self.notebook = DigsbyFlatNotebook(self, wx.ID_ANY, style = style)
  421.         self.Sizer = wx.BoxSizer(wx.VERTICAL)
  422.         self.Sizer.Add(self.notebook, 1, wx.EXPAND)
  423.         self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnNotebookPageChanged)
  424.         self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CLOSED, self.OnNotebookPageClosed)
  425.         self.Pages = self.notebook.Pages
  426.         self.ActiveTab = self.notebook.ActiveTab
  427.  
  428.     
  429.     def OnNotebookPageClosed(self, event):
  430.         if self.notebook.GetPageCount() == 0:
  431.             tlw = wx.GetTopLevelParent(self.notebook)
  432.             tlw.Close()
  433.             return None
  434.  
  435.     
  436.     def OnNotebookPageChanged(self, event):
  437.         page = self.notebook.GetPage(event.GetSelection())
  438.         icon = imwin_gui.icons.get(page.icontype, 'buddy')(page.Buddy)
  439.         pubsub.Publisher().sendMessage(('tab', 'icon', 'updated'), (page, icon))
  440.         pubsub.Publisher().sendMessage(('tab', 'title', 'updated'), (page, page.Buddy.alias, None))
  441.  
  442.  
  443.