anchor.diff:          ()
       }
   
  -    let pluginManager = new PluginManager()
  -    let tabControl = new PluginTabControl(pluginManager, Dock=DockStyle.Fill)
  -    let treeView = new WatchTreeView(Some(pluginManager), Dock=DockStyle.Fill)
  -    let splitContainer = new SplitContainer(Dock=DockStyle.Fill, Orientation=Orientation.Vertical)
  +    let pluginManager = new PluginManager() //todo: only the Eye should own this resource
  +    let splitContainer = new WatchPluginSplitContainer(pluginManager, Dock=DockStyle.Fill)
   
  -    let hidePanel2 () =
  -        splitContainer.Panel2Collapsed <- true
  -        splitContainer.Panel2.Hide()
  -
  -    let showPanel2 () =
  -        splitContainer.Panel2Collapsed <- false
  -        splitContainer.Panel2.Show()
  -
  -    do tabControl.TabAdded.Add(fun _ ->
  -        if tabControl.TabCount > 0 && splitContainer.Panel2Collapsed then
  -            showPanel2()
  -    )
  -
  -    do tabControl.TabRemoved.Add(fun _ ->
  -        if tabControl.TabCount = 0 && not splitContainer.Panel2Collapsed then
  -            hidePanel2()
  -    )
  -
  -    //Auto-update splitter distance to a percentage on resize
  -    let mutable splitterDistancePercentage = 0.5
  -    do     
  -        let updateSplitterDistancePercentage() = splitterDistancePercentage <- (float splitContainer.SplitterDistance) / (float splitContainer.Width)
  -        let updateSplitterDistance() = splitContainer.SplitterDistance <- int ((float splitContainer.Width) * splitterDistancePercentage)
  -        updateSplitterDistance() //since SplitterMoved fires first, need to establish default splitter distance
  -        splitContainer.SplitterMoved.Add(fun _ -> updateSplitterDistancePercentage())
  -        this.SizeChanged.Add(fun _ -> updateSplitterDistance())
  -
  -        hidePanel2()
  -
  -    //build up the component tree
       do
  -        splitContainer.Panel1.Controls.Add(treeView)
  -        splitContainer.Panel2.Controls.Add(tabControl)
  -
           //must add splitContainer (with dockstyle fill) first in order for it to be flush with button panel
           //see: http://www.pcreview.co.uk/forums/setting-control-dock-fill-you-have-menustrip-t3240577.html
           this.Controls.Add(splitContainer)
  
positive.code: open System.Reflection
  open Swensen.FsEye
  
  type WatchPanel() as this =
      inherit Panel()    
      let continueButton = new Button(Text="Async Continue", AutoSize=true, Enabled=false)
  
negative.code: 
          ///Add or update a watch with the given name, value, and type.
          member this.Watch(name, value, ty) =
              splitContainer.TreeView.Watch(name, value, ty)
  
          ///Add or update a watch with the given name and value.
          member this.Watch(name, value) =
              splitContainer.TreeView.Watch(name,value)
  
          ///Take archival snap shot of all current watches using the given label.
          member this.Archive(label: string) =
              splitContainer.TreeView.Archive(label)
  
          ///Take archival snap shot of all current watches using a default label based on an archive count.
          member this.Archive() = 
              splitContainer.TreeView.Archive()
  
          ///Clear all archives and reset the archive count.        
          member this.ClearArchives() = 
              splitContainer.TreeView.ClearArchives()
  
          ///Clear all watches (doesn't include archive nodes).
          member this.ClearWatches() = 
              splitContainer.TreeView.ClearWatches()
  
          ///Clear all archives (reseting archive count) and watches.
          member this.ClearAll() = 
              splitContainer.TreeView.ClearAll()
  
          //note: would like to use [<DebuggerBrowsable(DebuggerBrowsableState.Never)>]
          //on the following two Async methods but the attribute is not valid on methods
  