void AddPad(IPadContent content, string placement)
        {
            DockItem item = new DockItem (content.Id,
                                 content.Title,
                                 content.Icon,
                                 DockItemBehavior.Normal);

            Gtk.Label label = item.TabLabel as Gtk.Label;
            label.UseMarkup = true;

            if (content is Widget)
                item.Add (content.Control);
            else {
                CommandRouterContainer crc = new CommandRouterContainer (content.Control, content, true);
                crc.Show ();
                item.Add (crc);
            }

            item.Show ();
            item.HideItem ();

            content.TitleChanged += new EventHandler (UpdatePad);
            content.IconChanged += new EventHandler (UpdatePad);

            DockPad (item, placement);

            if (!activePadCollection.Contains (content))
                activePadCollection.Add (content);
        }
        void DockPad(DockItem item, string placement)
        {
            DockPlacement dockPlacement = DockPlacement.None;
            DockItem ot = null;

            if (placement != null)
                GetPlacement (placement, out dockPlacement, out ot);

            if (dockPlacement != DockPlacement.None && dockPlacement != DockPlacement.Floating) {
                if (ot != null) {
                    item.DockTo (ot, dockPlacement);
                }
                else {
                    ot = dock.GetItemByName ("Documents");
                    item.DockTo (ot, dockPlacement);
                }
            }
            else
                dock.AddItem (item, dockPlacement);
            item.Show ();
        }
        public void Attach(IWorkbench wb)
        {
            DefaultWorkbench workbench = (DefaultWorkbench) wb;

            this.workbench = workbench;
            wbWindow = (Window) workbench;

            Gtk.VBox vbox = new VBox (false, 0);
            rootWidget = vbox;

            vbox.PackStart (workbench.TopMenu, false, false, 0);

            toolbarFrame = new CommandFrame (Runtime.Gui.CommandService.CommandManager);
            vbox.PackStart (toolbarFrame, true, true, 0);

            if (workbench.ToolBars != null) {
                for (int i = 0; i < workbench.ToolBars.Length; i++) {
                    toolbarFrame.AddBar ((DockToolbar)workbench.ToolBars[i]);
                }
            }

            // Create the docking widget and add it to the window.
            dock = new Dock ();
            DockBar dockBar = new DockBar (dock);
            Gtk.HBox dockBox = new HBox (false, 5);
            dockBox.PackStart (dockBar, false, true, 0);
            dockBox.PackStart (dock, true, true, 0);
            toolbarFrame.AddContent (dockBox);

            // Create the notebook for the various documents.
            tabControl = new DragNotebook ();
            tabControl.Scrollable = true;
            tabControl.SwitchPage += new SwitchPageHandler (ActiveMdiChanged);
            tabControl.TabsReordered += new TabsReorderedHandler (OnTabsReordered);
            DockItem item = new DockItem ("Documents", "Documents",
                              DockItemBehavior.Locked | DockItemBehavior.NoGrip);
            item.PreferredWidth = -2;
            item.PreferredHeight = -2;
            item.Add (tabControl);
            item.Show ();
            dock.AddItem (item, DockPlacement.Center);

            workbench.Add (vbox);

            vbox.PackEnd (Runtime.Gui.StatusBar.Control, false, true, 0);
            workbench.ShowAll ();

            foreach (IViewContent content in workbench.ViewContentCollection)
                ShowView (content);

            // by default, the active pad collection is the full set
            // will be overriden in CreateDefaultLayout() below
            activePadCollection = workbench.PadContentCollection;

            // create DockItems for all the pads
            foreach (IPadContent content in workbench.PadContentCollection)
            {
                AddPad (content, content.DefaultPlacement);
            }

            CreateDefaultLayout();
            //RedrawAllComponents();
            wbWindow.Show ();

            workbench.ContextChanged += contextChangedHandler;
        }