X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e773f79b191e77649b07f527a08405863a1cb117..69ce77e25a8c6b3b1682b2f9ae7aeac1cecb4e6a:/wxPython/wx/py/crust.py diff --git a/wxPython/wx/py/crust.py b/wxPython/wx/py/crust.py index 4dea629362..df4d830f04 100644 --- a/wxPython/wx/py/crust.py +++ b/wxPython/wx/py/crust.py @@ -35,6 +35,14 @@ class Crust(wx.SplitterWindow): *args, **kwds): """Create Crust instance.""" wx.SplitterWindow.__init__(self, parent, id, pos, size, style, name) + + # Turn off the tab-traversal style that is automatically + # turned on by wx.SplitterWindow. We do this because on + # Windows the event for Ctrl-Enter is stolen and used as a + # navigation key, but the Shell window uses it to insert lines. + style = self.GetWindowStyle() + self.SetWindowStyle(style & ~wx.TAB_TRAVERSAL) + self.shell = Shell(parent=self, introText=intro, locals=locals, InterpClass=InterpClass, startupScript=startupScript, @@ -67,19 +75,50 @@ class Crust(wx.SplitterWindow): self.dispatcherlisting = DispatcherListing(parent=self.notebook) self.notebook.AddPage(page=self.dispatcherlisting, text='Dispatcher') + - self.SplitHorizontally(self.shell, self.notebook, -self.sashoffset) + # Initialize in an unsplit mode, and check later after loading + # settings if we should split or not. + self.shell.Hide() + self.notebook.Hide() + self.Initialize(self.shell) + self._shouldsplit = True + wx.CallAfter(self._CheckShouldSplit) self.SetMinimumPaneSize(100) self.Bind(wx.EVT_SIZE, self.SplitterOnSize) self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGED, self.OnChanged) + self.Bind(wx.EVT_SPLITTER_DCLICK, self.OnSashDClick) + + def _CheckShouldSplit(self): + if self._shouldsplit: + self.SplitHorizontally(self.shell, self.notebook, -self.sashoffset) + self.lastsashpos = self.GetSashPosition() + else: + self.lastsashpos = -1 + self.issplit = self.IsSplit() + + def ToggleTools(self): + """Toggle the display of the filling and other tools""" + if self.issplit: + self.Unsplit() + else: + self.SplitHorizontally(self.shell, self.notebook, -self.sashoffset) + self.lastsashpos = self.GetSashPosition() + self.issplit = self.IsSplit() + + def ToolsShown(self): + return self.issplit - def OnChanged(self, event): """update sash offset from the bottom of the window""" self.sashoffset = self.GetSize().height - event.GetSashPosition() + self.lastsashpos = event.GetSashPosition() event.Skip() - + + def OnSashDClick(self, event): + self.Unsplit() + self.issplit = False # Make the splitter expand the top window when resized def SplitterOnSize(self, event): @@ -102,13 +141,17 @@ class Crust(wx.SplitterWindow): zoom = config.ReadInt('View/Zoom/Display', -99) if zoom != -99: self.display.SetZoom(zoom) - + self.issplit = config.ReadInt('Sash/IsSplit', True) + if not self.issplit: + self._shouldsplit = False def SaveSettings(self, config): self.shell.SaveSettings(config) self.filling.SaveSettings(config) - config.WriteInt('Sash/CrustPos', self.GetSashPosition()) + if self.lastsashpos != -1: + config.WriteInt('Sash/CrustPos', self.lastsashpos) + config.WriteInt('Sash/IsSplit', self.issplit) config.WriteInt('View/Zoom/Display', self.display.GetZoom()) @@ -299,6 +342,13 @@ class CrustFrame(frame.Frame, frame.ShellFrameMixin): dialog.Destroy() + def ToggleTools(self): + """Toggle the display of the filling and other tools""" + return self.crust.ToggleTools() + + def ToolsShown(self): + return self.crust.ToolsShown() + def OnHelp(self, event): """Show a help dialog.""" frame.ShellFrameMixin.OnHelp(self, event)