-        from wxd import wx_
-        self.wxdocs = Filling(parent=self.notebook, 
-                              rootObject=wx_,
-                              rootLabel='wx', 
-                              rootIsNamespace=False,
-                              static=True)
-        self.notebook.AddPage(page=self.wxdocs, text='wxPython Docs')
-        from wxd import stc_
-        self.stcdocs = Filling(parent=self.notebook, 
-                               rootObject=stc_.StyledTextCtrl,
-                               rootLabel='StyledTextCtrl', 
-                               rootIsNamespace=False,
-                               static=True)
-        self.notebook.AddPage(page=self.stcdocs, text='StyledTextCtrl Docs')
-        self.SplitHorizontally(self.shell, self.notebook, 300)
-        self.SetMinimumPaneSize(1)
+
+        
+        # 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())
+        
+
+