]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wx/lib/pydocview.py
wxCheckListBox doesn't require wxUSE_OWNER_DRAWN when using WXUNIVERSAL
[wxWidgets.git] / wxPython / wx / lib / pydocview.py
index 2a2a544878a11e25520290f172a0ffba6d36c5cd..90c49aefd01d47b95b2b61c416b4b486d8b68ec0 100644 (file)
@@ -366,7 +366,7 @@ class DocMDIParentFrameMixIn:
             return wx.GetApp().ProcessUpdateUIEvent(event)
 
 
-    def CreateEmbeddedWindows(self, windows = 0):
+    def CreateEmbeddedWindows(self, windows=0):
         """
         Create the specified embedded windows around the edges of the frame.
         """
@@ -488,7 +488,7 @@ class DocMDIParentFrameMixIn:
         return None
 
 
-    def _CreateEmbeddedWindow(self, parent, size, orientation, alignment, visible = True, sash = None):
+    def _CreateEmbeddedWindow(self, parent, size, orientation, alignment, visible=True, sash=None):
         """
         Creates the embedded window with the specified size, orientation, and alignment.  If the 
         window is not visible it will retain the size with which it was last viewed.
@@ -527,7 +527,7 @@ class DocMDIParentFrameMixIn:
         return window
 
 
-    def ShowEmbeddedWindow(self, window, show = True):
+    def ShowEmbeddedWindow(self, window, show=True):
         """
         Shows or hides the embedded window specified by the embedded window location constant.
         """
@@ -591,7 +591,7 @@ class DocTabbedChildFrame(wx.Panel):
     """
 
 
-    def __init__(self, doc, view, frame, id, title, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_FRAME_STYLE, name = "frame"):
+    def __init__(self, doc, view, frame, id, title, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE, name="frame"):
         """
         Constructor.  Note that the event table must be rebuilt for the
         frame since the EvtHandler is not virtual.
@@ -773,6 +773,7 @@ class DocTabbedParentFrame(wx.Frame, DocFrameMixIn, DocMDIParentFrameMixIn):
         # self._notebook.SetSizer(wx.NotebookSizer(self._notebook))
         wx.EVT_NOTEBOOK_PAGE_CHANGED(self, self._notebook.GetId(), self.OnNotebookPageChanged)
         wx.EVT_RIGHT_DOWN(self._notebook, self.OnNotebookRightClick)
+        wx.EVT_MOTION(self._notebook, self.OnNotebookMouseOver)
 
         templates = wx.GetApp().GetDocumentManager().GetTemplates()
         iconList = wx.ImageList(16, 16, initialCount = len(templates))
@@ -780,18 +781,20 @@ class DocTabbedParentFrame(wx.Frame, DocFrameMixIn, DocMDIParentFrameMixIn):
         for template in templates:
             icon = template.GetIcon()
             if icon:
-                if icon.GetHeight() != 16:
-                    icon.SetHeight(16)  # wxBug: img2py.py uses EmptyIcon which is 32x32
-                if icon.GetWidth() != 16:
-                    icon.SetWidth(16)   # wxBug: img2py.py uses EmptyIcon which is 32x32
+                if icon.GetHeight() != 16 or icon.GetWidth() != 16:
+                    icon.SetHeight(16)
+                    icon.SetWidth(16)
+                    if wx.GetApp().GetDebug():
+                        print "Warning: icon for '%s' isn't 16x16, not crossplatform" % template._docTypeName
                 iconIndex = iconList.AddIcon(icon)
                 self._iconIndexLookup.append((template, iconIndex))
                 
         icon = getBlankIcon()
-        if icon.GetHeight() != 16:
-            icon.SetHeight(16)  # wxBug: img2py.py uses EmptyIcon which is 32x32
-        if icon.GetWidth() != 16:
-            icon.SetWidth(16)   # wxBug: img2py.py uses EmptyIcon which is 32x32
+        if icon.GetHeight() != 16 or icon.GetWidth() != 16:
+            icon.SetHeight(16)
+            icon.SetWidth(16)
+            if wx.GetApp().GetDebug():
+                print "Warning: getBlankIcon isn't 16x16, not crossplatform"
         self._blankIconIndex = iconList.AddIcon(icon)
         self._notebook.AssignImageList(iconList)
 
@@ -823,6 +826,17 @@ class DocTabbedParentFrame(wx.Frame, DocFrameMixIn, DocMDIParentFrameMixIn):
             self._notebook.GetPage(index).GetView().Activate()
 
 
+    def OnNotebookMouseOver(self, event):
+        # wxBug: On Windows XP the tooltips don't automatically disappear when you move the mouse and it is on a notebook tab, has nothing to do with this code!!!
+        index, type = self._notebook.HitTest(event.GetPosition())
+        if index > -1:
+            doc = self._notebook.GetPage(index).GetView().GetDocument()
+            self._notebook.SetToolTip(wx.ToolTip(doc.GetFilename()))
+        else:
+            self._notebook.SetToolTip(wx.ToolTip(""))
+        event.Skip()
+            
+
     def OnNotebookRightClick(self, event):
         """
         Handles right clicks for the notebook, enabling users to either close
@@ -840,6 +854,15 @@ class DocTabbedParentFrame(wx.Frame, DocFrameMixIn, DocMDIParentFrameMixIn):
                 doc.DeleteAllViews()
             wx.EVT_MENU(self, id, OnRightMenuSelect)
             if self._notebook.GetPageCount() > 1:
+                id = wx.NewId()
+                menu.Append(id, _("Close All but \"%s\"" % doc.GetPrintableName()))
+                def OnRightMenuSelect(event):
+                    for i in range(self._notebook.GetPageCount()-1, -1, -1): # Go from len-1 to 0
+                        if i != index:
+                            doc = self._notebook.GetPage(i).GetView().GetDocument()
+                            if not self.GetDocumentManager().CloseDocument(doc, False):
+                                return
+                wx.EVT_MENU(self, id, OnRightMenuSelect)
                 menu.AppendSeparator()
                 tabsMenu = wx.Menu()
                 menu.AppendMenu(wx.NewId(), _("Select Tab"), tabsMenu)
@@ -897,6 +920,7 @@ class DocTabbedParentFrame(wx.Frame, DocFrameMixIn, DocMDIParentFrameMixIn):
         """
         index = self.GetNotebookPageIndex(panel)
         if index > -1:
+            self._notebook.SetFocus()
             self._notebook.SetSelection(index)
         
 
@@ -1013,7 +1037,7 @@ class DocMDIChildFrame(wx.MDIChildFrame):
     """
 
 
-    def __init__(self, doc, view, frame, id, title, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_FRAME_STYLE, name = "frame"):
+    def __init__(self, doc, view, frame, id, title, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE, name="frame"):
         """
         Constructor.  Note that the event table must be rebuilt for the
         frame since the EvtHandler is not virtual.
@@ -1174,7 +1198,7 @@ class DocService(wx.EvtHandler):
         self._docManager = docManager
 
 
-    def InstallControls(self, frame, menuBar = None, toolBar = None, statusBar = None, document = None):
+    def InstallControls(self, frame, menuBar=None, toolBar=None, statusBar=None, document=None):
         """Called to install controls into the menubar and toolbar of a SDI or MDI window.  Override this method for a particular service."""
         pass
 
@@ -1261,7 +1285,7 @@ class DocOptionsService(DocService):
     """
 
 
-    def __init__(self, showGeneralOptions=True, allowModeChanges=True):
+    def __init__(self, showGeneralOptions=True, supportedModes=wx.lib.docview.DOC_SDI & wx.lib.docview.DOC_MDI):
         """
         Initializes the options service with the option of suppressing the default
         general options pane that is included with the options service by setting
@@ -1271,13 +1295,13 @@ class DocOptionsService(DocService):
         """
         DocService.__init__(self)
         self.ClearOptionsPanels()
-        self._allowModeChanges = allowModeChanges
+        self._supportedModes = supportedModes
         self._toolOptionsID = wx.NewId()
         if showGeneralOptions:
             self.AddOptionsPanel(GeneralOptionsPanel)
 
 
-    def InstallControls(self, frame, menuBar = None, toolBar = None, statusBar = None, document = None):
+    def InstallControls(self, frame, menuBar=None, toolBar=None, statusBar=None, document=None):
         """
         Installs a "Tools" menu with an "Options" menu item.
         """
@@ -1308,20 +1332,20 @@ class DocOptionsService(DocService):
             return False
 
 
-    def GetAllowModeChanges(self):
+    def GetSupportedModes(self):
         """
-        Return true if the default general options pane should allow users to
-        change the document interface mode between SDI and MDI modes.
+        Return the modes supported by the application.  Use docview.DOC_SDI and
+        docview.DOC_MDI flags to check if SDI and/or MDI modes are supported.
         """
-        return self._allowModeChanges        
+        return self._supportedModes        
 
 
-    def SetAllowModeChanges(self, allowModeChanges):
+    def SetSupportedModes(self, _supportedModessupportedModes):
         """
-        Set to true if the default general options pane should allow users to
-        change the document interface mode between SDI and MDI modes.
+        Sets the modes supported by the application.  Use docview.DOC_SDI and
+        docview.DOC_MDI flags to set if SDI and/or MDI modes are supported.
         """
-        self._allowModeChanges = allowModeChanges
+        self._supportedModes = supportedModes
 
 
     def ClearOptionsPanels(self):
@@ -1373,7 +1397,7 @@ class OptionsDialog(wx.Dialog):
 
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-        optionsNotebook = wx.Notebook(self, -1, size = (560, 325))
+        optionsNotebook = wx.Notebook(self, -1, size=(560, 325))
         sizer.Add(optionsNotebook, 0, wx.ALL | wx.EXPAND, SPACE)
         for optionsPanelClass in optionsPanelClasses:
             optionsPanel = optionsPanelClass(optionsNotebook, -1)
@@ -1428,20 +1452,27 @@ class GeneralOptionsPanel(wx.Panel):
         config = wx.ConfigBase_Get()
         self._showTipsCheckBox = wx.CheckBox(self, -1, _("Show tips at start up"))
         self._showTipsCheckBox.SetValue(config.ReadInt("ShowTipAtStartup", True))
-        if wx.GetApp().GetService(DocOptionsService).GetAllowModeChanges():
-            choices = [_("Show each document in its own window"), _("Show all documents in a single window with tabs")]
+        if self._AllowModeChanges():
+            supportedModes = wx.GetApp().GetService(DocOptionsService).GetSupportedModes()
+            choices = []
+            self._sdiChoice = _("Show each document in its own window")
+            self._mdiChoice = _("Show all documents in a single window with tabs")
+            self._winMdiChoice = _("Show all documents in a single window with child windows")
+            if supportedModes & wx.lib.docview.DOC_SDI:
+                choices.append(self._sdiChoice)
+            choices.append(self._mdiChoice)
             if wx.Platform == "__WXMSW__":
-                choices.append(_("Show all documents in a single window with child windows"))
+                choices.append(self._winMdiChoice)
             self._documentRadioBox = wx.RadioBox(self, -1, _("Document Interface"),
                                           choices = choices,
                                           majorDimension=1,
                                           )
             if config.ReadInt("UseWinMDI", False):
-                self._documentRadioBox.SetSelection(2)
+                self._documentRadioBox.SetStringSelection(self._winMdiChoice)
             elif config.ReadInt("UseMDI", True):
-                self._documentRadioBox.SetSelection(1)
+                self._documentRadioBox.SetStringSelection(self._mdiChoice)
             else:
-                self._documentRadioBox.SetSelection(0)
+                self._documentRadioBox.SetStringSelection(self._sdiChoice)
             def OnDocumentInterfaceSelect(event):
                 if not self._documentInterfaceMessageShown:
                     msgTitle = wx.GetApp().GetAppName()
@@ -1455,7 +1486,7 @@ class GeneralOptionsPanel(wx.Panel):
             wx.EVT_RADIOBOX(self, self._documentRadioBox.GetId(), OnDocumentInterfaceSelect)
         optionsBorderSizer = wx.BoxSizer(wx.VERTICAL)
         optionsSizer = wx.BoxSizer(wx.VERTICAL)
-        if wx.GetApp().GetService(DocOptionsService).GetAllowModeChanges():
+        if self._AllowModeChanges():
             optionsSizer.Add(self._documentRadioBox, 0, wx.ALL, HALF_SPACE)
         optionsSizer.Add(self._showTipsCheckBox, 0, wx.ALL, HALF_SPACE)
         optionsBorderSizer.Add(optionsSizer, 0, wx.ALL, SPACE)
@@ -1465,15 +1496,20 @@ class GeneralOptionsPanel(wx.Panel):
         parent.AddPage(self, _("Options"))
 
 
+    def _AllowModeChanges(self):
+        supportedModes = wx.GetApp().GetService(DocOptionsService).GetSupportedModes()
+        return supportedModes & wx.lib.docview.DOC_SDI and supportedModes & wx.lib.docview.DOC_MDI or wx.Platform == "__WXMSW__" and supportedModes & wx.lib.docview.DOC_MDI  # More than one mode is supported, allow selection
+
+
     def OnOK(self, optionsDialog):
         """
         Updates the config based on the selections in the options panel.
         """
         config = wx.ConfigBase_Get()
         config.WriteInt("ShowTipAtStartup", self._showTipsCheckBox.GetValue())
-        if wx.GetApp().GetService(DocOptionsService).GetAllowModeChanges():
-            config.WriteInt("UseMDI", (self._documentRadioBox.GetSelection() == 1))
-            config.WriteInt("UseWinMDI", (self._documentRadioBox.GetSelection() == 2))
+        if self._AllowModeChanges():
+            config.WriteInt("UseMDI", (self._documentRadioBox.GetStringSelection() == self._mdiChoice))
+            config.WriteInt("UseWinMDI", (self._documentRadioBox.GetStringSelection() == self._winMdiChoice))
 
 
 class DocApp(wx.PySimpleApp):
@@ -1791,7 +1827,7 @@ class DocApp(wx.PySimpleApp):
         return frame
 
 
-    def CreateSDIDocumentFrame(self, doc, view, id = -1, title = "", pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_FRAME_STYLE):
+    def CreateSDIDocumentFrame(self, doc, view, id=-1, title="", pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):
         """
         Creates and returns an SDI Document Frame.
         """
@@ -1799,7 +1835,7 @@ class DocApp(wx.PySimpleApp):
         return frame
 
 
-    def CreateTabbedDocumentFrame(self, doc, view, id = -1, title = "", pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_FRAME_STYLE):
+    def CreateTabbedDocumentFrame(self, doc, view, id=-1, title="", pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):
         """
         Creates and returns an MDI Document Frame for a Tabbed MDI view
         """
@@ -1807,7 +1843,7 @@ class DocApp(wx.PySimpleApp):
         return frame
 
 
-    def CreateMDIDocumentFrame(self, doc, view, id = -1, title = "", pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_FRAME_STYLE):
+    def CreateMDIDocumentFrame(self, doc, view, id=-1, title="", pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):
         """
         Creates and returns an MDI Document Frame.
         """
@@ -1922,7 +1958,7 @@ class DocApp(wx.PySimpleApp):
 
 
 
-    def CreateChildDocument(self, parentDocument, documentType, objectToEdit, path = ''):
+    def CreateChildDocument(self, parentDocument, documentType, objectToEdit, path=''):
         """
         Creates a child window of a document that edits an object.  The child window
         is managed by the parent document frame, so it will be prompted to close if its
@@ -2041,7 +2077,7 @@ class DocMDIParentFrame(wx.lib.docview.DocMDIParentFrame, DocFrameMixIn, DocMDIP
     """
     
 
-    def __init__(self, docManager, parent, id, title, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_FRAME_STYLE, name = "DocMDIFrame", embeddedWindows = 0):
+    def __init__(self, docManager, parent, id, title, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE, name="DocMDIFrame", embeddedWindows=0):
         """
         Initializes the DocMDIParentFrame with the default menubar, toolbar, and status bar.  Use the
         optional embeddedWindows parameter with the embedded window constants to create embedded
@@ -2146,7 +2182,7 @@ class DocSDIFrame(wx.lib.docview.DocChildFrame, DocFrameMixIn):
     """
     
 
-    def __init__(self, doc, view, parent, id, title, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_FRAME_STYLE, name = "DocSDIFrame"):
+    def __init__(self, doc, view, parent, id, title, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE, name="DocSDIFrame"):
         """
         Initializes the DocSDIFrame with the default menubar, toolbar, and status bar.
         """
@@ -2372,7 +2408,7 @@ class FilePropertiesService(DocService):
         self._customEventHandlers = []
 
 
-    def InstallControls(self, frame, menuBar = None, toolBar = None, statusBar = None, document = None):
+    def InstallControls(self, frame, menuBar=None, toolBar=None, statusBar=None, document=None):
         """
         Installs a File/Properties menu item.
         """
@@ -2416,7 +2452,7 @@ class FilePropertiesService(DocService):
             return False
 
 
-    def ShowPropertiesDialog(self, filename = None):
+    def ShowPropertiesDialog(self, filename=None):
         """
         Shows the PropertiesDialog for the specified file.
         """
@@ -2451,7 +2487,7 @@ class FilePropertiesService(DocService):
         self._customEventHandlers.remove(handler)
 
 
-    def chopPath(self, text, length = 36):
+    def chopPath(self, text, length=36):
         """
         Simple version of textwrap.  textwrap.fill() unfortunately chops lines at spaces
         and creates odd word boundaries.  Instead, we will chop the path without regard to
@@ -2492,7 +2528,7 @@ class FilePropertiesDialog(wx.Dialog):
         """
         Initializes the properties dialog.
         """
-        wx.Dialog.__init__(self, parent, -1, _("File Properties"), size = (310, 330))
+        wx.Dialog.__init__(self, parent, -1, _("File Properties"), size=(310, 330))
 
         HALF_SPACE = 5
         SPACE = 10
@@ -2633,14 +2669,14 @@ class ChildDocTemplate(wx.lib.docview.DocTemplate):
     """    
 
 
-    def __init__(self, manager, description, filter, dir, ext, docTypeName, viewTypeName, docType, viewType, flags = wx.lib.docview.TEMPLATE_INVISIBLE, icon = None):
+    def __init__(self, manager, description, filter, dir, ext, docTypeName, viewTypeName, docType, viewType, flags=wx.lib.docview.TEMPLATE_INVISIBLE, icon=None):
         """
         Initializes the ChildDocTemplate.
         """
-        wx.lib.docview.DocTemplate.__init__(self, manager, description, filter, dir, ext, docTypeName, viewTypeName, docType, viewType, flags = flags, icon = icon)
+        wx.lib.docview.DocTemplate.__init__(self, manager, description, filter, dir, ext, docTypeName, viewTypeName, docType, viewType, flags=flags, icon=icon)
 
 
-    def CreateDocument(self, path, flags, data = None, parentDocument = None):
+    def CreateDocument(self, path, flags, data=None, parentDocument=None):
         """
         Called when a ChildDocument is to be created and does the minimum such that the
         ChildDocument looks like a real Document to the framework.
@@ -2685,7 +2721,7 @@ class WindowMenuService(DocService):
         self.SELECT_MORE_WINDOWS_ID = wx.NewId()
 
 
-    def InstallControls(self, frame, menuBar = None, toolBar = None, statusBar = None, document = None):
+    def InstallControls(self, frame, menuBar=None, toolBar=None, statusBar=None, document=None):
         """
         Installs the Window menu.
         """
@@ -2794,7 +2830,7 @@ class WindowMenuService(DocService):
         return [self.SELECT_WINDOW_1_ID, self.SELECT_WINDOW_2_ID, self.SELECT_WINDOW_3_ID, self.SELECT_WINDOW_4_ID, self.SELECT_WINDOW_5_ID, self.SELECT_WINDOW_6_ID, self.SELECT_WINDOW_7_ID, self.SELECT_WINDOW_8_ID, self.SELECT_WINDOW_9_ID]
 
 
-    def _GetWindowMenuFrameList(self, currentFrame = None):
+    def _GetWindowMenuFrameList(self, currentFrame=None):
         """
         Returns the Frame associated with each menu item in the Window menu.
         """