class Crust(wx.SplitterWindow): """Crust based on SplitterWindow.""" name = 'Crust' revision = __revision__ sashoffset = 300 def __init__(self, parent, id=-1, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.SP_3D | wx.SP_LIVE_UPDATE, name='Crust Window', rootObject=None, rootLabel=None, rootIsNamespace=True, intro='', locals=None, InterpClass=None, startupScript=None, execStartupScript=True, *args, **kwds): """Create Crust instance.""" wx.SplitterWindow.__init__(self, parent, id, pos, size, style, name) self.shell = Shell(parent=self, introText=intro, locals=locals, InterpClass=InterpClass, startupScript=startupScript, execStartupScript=execStartupScript, *args, **kwds) self.editor = self.shell if rootObject is None: rootObject = self.shell.interp.locals self.notebook = wx.Notebook(parent=self, id=-1) self.shell.interp.locals['notebook'] = self.notebook self.filling = Filling(parent=self.notebook, rootObject=rootObject, rootLabel=rootLabel, rootIsNamespace=rootIsNamespace) # Add 'filling' to the interpreter's locals. self.shell.interp.locals['filling'] = self.filling self.notebook.AddPage(page=self.filling, text='Namespace', select=True) self.display = Display(parent=self.notebook) self.notebook.AddPage(page=self.display, text='Display') # Add 'pp' (pretty print) to the interpreter's locals. self.shell.interp.locals['pp'] = self.display.setItem self.display.nbTab = self.notebook.GetPageCount() - 1 self.calltip = Calltip(parent=self.notebook) self.notebook.AddPage(page=self.calltip, text='Calltip') self.sessionlisting = SessionListing(parent=self.notebook) self.notebook.AddPage(page=self.sessionlisting, text='History') self.dispatcherlisting = DispatcherListing(parent=self.notebook) self.notebook.AddPage(page=self.dispatcherlisting, text='Dispatcher') self.SplitHorizontally(self.shell, self.notebook, -self.sashoffset) self.SetMinimumPaneSize(100) self.Bind(wx.EVT_SIZE, self.SplitterOnSize) self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGED, self.OnChanged) def OnChanged(self, event): """update sash offset from the bottom of the window""" self.sashoffset = self.GetSize().height - event.GetSashPosition() event.Skip() # Make the splitter expand the top window when resized def SplitterOnSize(self, event): splitter = event.GetEventObject() sz = splitter.GetSize() splitter.SetSashPosition(sz.height - self.sashoffset, True) event.Skip() def LoadSettings(self, config): self.shell.LoadSettings(config) self.filling.LoadSettings(config) pos = config.ReadInt('Sash/CrustPos', 400) wx.CallAfter(self.SetSashPosition, pos) def _updateSashPosValue(): sz = self.GetSize() self.sashoffset = sz.height - self.GetSashPosition() wx.CallAfter(_updateSashPosValue) zoom = config.ReadInt('View/Zoom/Display', -99) if zoom != -99: self.display.SetZoom(zoom) def SaveSettings(self, config): self.shell.SaveSettings(config) self.filling.SaveSettings(config) config.WriteInt('Sash/CrustPos', self.GetSashPosition()) config.WriteInt('View/Zoom/Display', self.display.GetZoom())
class Crust(wx.SplitterWindow): """Crust based on SplitterWindow.""" name = 'Crust' revision = __revision__ sashoffset = 300 def __init__(self, parent, id=-1, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.SP_3D | wx.SP_LIVE_UPDATE, name='Crust Window', rootObject=None, rootLabel=None, rootIsNamespace=True, intro='', locals=None, InterpClass=None, startupScript=None, execStartupScript=True, *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, execStartupScript=execStartupScript, *args, **kwds) self.editor = self.shell if rootObject is None: rootObject = self.shell.interp.locals self.notebook = wx.Notebook(parent=self, id=-1) self.shell.interp.locals['notebook'] = self.notebook self.filling = Filling(parent=self.notebook, rootObject=rootObject, rootLabel=rootLabel, rootIsNamespace=rootIsNamespace) # Add 'filling' to the interpreter's locals. self.shell.interp.locals['filling'] = self.filling self.notebook.AddPage(page=self.filling, text='Namespace', select=True) self.display = Display(parent=self.notebook) self.notebook.AddPage(page=self.display, text='Display') # Add 'pp' (pretty print) to the interpreter's locals. self.shell.interp.locals['pp'] = self.display.setItem self.display.nbTab = self.notebook.GetPageCount() - 1 self.calltip = Calltip(parent=self.notebook) self.notebook.AddPage(page=self.calltip, text='Calltip') self.sessionlisting = SessionListing(parent=self.notebook) self.notebook.AddPage(page=self.sessionlisting, text='History') self.dispatcherlisting = DispatcherListing(parent=self.notebook) self.notebook.AddPage(page=self.dispatcherlisting, text='Dispatcher') # 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): splitter = event.GetEventObject() sz = splitter.GetSize() splitter.SetSashPosition(sz.height - self.sashoffset, True) event.Skip() def LoadSettings(self, config): self.shell.LoadSettings(config) self.filling.LoadSettings(config) pos = config.ReadInt('Sash/CrustPos', 400) wx.CallAfter(self.SetSashPosition, pos) def _updateSashPosValue(): sz = self.GetSize() self.sashoffset = sz.height - self.GetSashPosition() wx.CallAfter(_updateSashPosValue) 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) if self.lastsashpos != -1: config.WriteInt('Sash/CrustPos', self.lastsashpos) config.WriteInt('Sash/IsSplit', self.issplit) config.WriteInt('View/Zoom/Display', self.display.GetZoom())