From 099e20cde3ae001638e366215885f110cc69ea16 Mon Sep 17 00:00:00 2001 From: Lluis Sanchez Date: Thu, 18 Mar 2010 16:39:00 +0000 Subject: * Makefile.am: * MonoDevelop.Ide.csproj: Updated. * MonoDevelop.Ide/Ide.cs: * MonoDevelop.Ide.Gui/StatusProgressMonitor.cs: Use the new status bar model. * MonoDevelop.Ide/ImageService.cs: * MonoDevelop.Ide.Gui.Pads/ErrorListPad.cs: Show error and warning icons in grayscale when there are no errors/warnings. * MonoDevelop.Ide.Commands/ViewCommands.cs: Don't sort layouts by name. Use the order in the extension point. * MonoDevelop.Components.Docking/DockGroup.cs: * MonoDevelop.Components.Docking/DockObject.cs: * MonoDevelop.Components.Docking/DockGroupItem.cs: Impoved the logic that selects a dock bar where to show an autohide item by default. * MonoDevelop.Components.Docking/DockItem.cs: * MonoDevelop.Components.Docking/DockFrame.cs: * MonoDevelop.Components.Docking/DockContainer.cs: Allow setting the dock location of an item. * MonoDevelop.Ide.addin.xml: * MonoDevelop.Ide.Extensions/LayoutExtensionNode.cs: Added extension point for registering stock layous. Assigned default layouts for existing pads. * gtk-gui/objects.xml: * gtk-gui/MonoDevelop.Ide.Gui.OptionPanels.KeyBindingsPanel.cs: Flush. * MonoDevelop.Ide.Gui/InternalLog.cs: * MonoDevelop.Ide.Gui/AddinUpdateHandler.cs: * MonoDevelop.Ide.Gui/MonoDevelopStatusBar.cs: * MonoDevelop.Ide.Gui/BackgroundProgressMonitor.cs: New status bar model. The status bar widget is hidden behind an interface. Added support for status bar contexts. Status information displayed through a context is cleaned up when the context is disposed. * MonoDevelop.Ide.Gui/Pad.cs: * MonoDevelop.Ide.Gui/Workbench.cs: * MonoDevelop.Ide.Gui/IPadContainer.cs: * MonoDevelop.Ide.Gui/WorkbenchMemento.cs: * MonoDevelop.Ide.Gui/DefaultWorkbench.cs: * MonoDevelop.Ide.Gui/SdiWorkspaceWindow.cs: * MonoDevelop.Ide.Gui/SdiWorkspaceLayout.cs: Merged SdiWorkspaceLayout into DefaultWorkbench. Removed support for workbench contexts. * MonoDevelop.Ide.Codons/PadCodon.cs: Allow setting the default layout of a pad. * MonoDevelop.Ide.Codons/WorkbenchContextCondition.cs: Not required anymore. * MonoDevelop.Ide.Tasks/TaskStore.cs: Show a better status message when the end of the task list is reached. svn path=/trunk/monodevelop/; revision=153851 --- .../DockContainer.cs | 3 +- .../MonoDevelop.Components.Docking/DockFrame.cs | 20 +++++++++++-- .../MonoDevelop.Components.Docking/DockGroup.cs | 12 ++++---- .../DockGroupItem.cs | 33 ++++++++++++++++++++++ .../MonoDevelop.Components.Docking/DockItem.cs | 5 ++++ .../MonoDevelop.Components.Docking/DockObject.cs | 6 ++-- 6 files changed, 66 insertions(+), 13 deletions(-) (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking') diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockContainer.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockContainer.cs index cba733da8e..6a7281fe2a 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockContainer.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockContainer.cs @@ -434,7 +434,8 @@ namespace MonoDevelop.Components.Docking public IEnumerable GetShadedAreas () { List rects = new List (); - layout.DrawSeparators (Allocation, currentHandleGrp, currentHandleIndex, true, rects); + if (layout != null) + layout.DrawSeparators (Allocation, currentHandleGrp, currentHandleIndex, true, rects); return rects; } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockFrame.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockFrame.cs index f372dd4245..7b17598626 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockFrame.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockFrame.cs @@ -444,6 +444,15 @@ namespace MonoDevelop.Components.Docking container.RelayoutWidgets (); } + internal void SetDockLocation (DockItem item, string placement) + { + bool vis = item.Visible; + DockItemStatus stat = item.Status; + item.ResetMode (); + container.Layout.RemoveItemRec (item); + AddItemAtLocation (container.Layout, item, placement, vis, stat); + } + DockLayout GetDefaultLayout () { DockLayout group = new DockLayout (this); @@ -486,7 +495,12 @@ namespace MonoDevelop.Components.Docking DockGroupItem AddDefaultItem (DockGroup grp, DockItem it) { - string[] positions = it.DefaultLocation.Split (';'); + return AddItemAtLocation (grp, it, it.DefaultLocation, it.DefaultVisible, it.DefaultStatus); + } + + DockGroupItem AddItemAtLocation (DockGroup grp, DockItem it, string location, bool visible, DockItemStatus status) + { + string[] positions = location.Split (';'); foreach (string pos in positions) { int i = pos.IndexOf ('/'); if (i == -1) continue; @@ -501,8 +515,8 @@ namespace MonoDevelop.Components.Docking continue; } DockGroupItem dgt = g.AddObject (it, dpos, id); - dgt.SetVisible (it.DefaultVisible); - dgt.Status = it.DefaultStatus; + dgt.SetVisible (visible); + dgt.Status = status; return dgt; } } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockGroup.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockGroup.cs index 6fc5396660..abc72d3b47 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockGroup.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockGroup.cs @@ -637,7 +637,7 @@ namespace MonoDevelop.Components.Docking } else boundTabStrip.CurrentTab = 0; } - if (Frame.CompactGuiLevel == 3 && IsNextToMargin (PositionType.Bottom)) + if (Frame.CompactGuiLevel == 3 && IsNextToMargin (PositionType.Bottom, true)) boundTabStrip.BottomPadding = 3; else boundTabStrip.BottomPadding = 0; @@ -1097,26 +1097,26 @@ namespace MonoDevelop.Components.Docking reader.ReadEndElement (); } - public bool IsChildNextToMargin (Gtk.PositionType margin, DockObject obj) + public bool IsChildNextToMargin (Gtk.PositionType margin, DockObject obj, bool visibleOnly) { if (type == DockGroupType.Tabbed) return true; else if (type == DockGroupType.Horizontal) { if (margin == PositionType.Top || margin == PositionType.Bottom) return true; - int i = VisibleObjects.IndexOf (obj); + int i = visibleOnly ? VisibleObjects.IndexOf (obj) : Objects.IndexOf (obj); if (margin == PositionType.Left && i == 0) return true; - if (margin == PositionType.Right && i == VisibleObjects.Count - 1) + if (margin == PositionType.Right && i == (visibleOnly ? VisibleObjects.Count - 1 : Objects.Count - 1)) return true; } else if (type == DockGroupType.Vertical) { if (margin == PositionType.Left || margin == PositionType.Right) return true; - int i = VisibleObjects.IndexOf (obj); + int i = visibleOnly ? VisibleObjects.IndexOf (obj) : Objects.IndexOf (obj); if (margin == PositionType.Top && i == 0) return true; - if (margin == PositionType.Bottom && i == VisibleObjects.Count - 1) + if (margin == PositionType.Bottom && i == (visibleOnly ? VisibleObjects.Count - 1 : Objects.Count - 1)) return true; } return false; diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockGroupItem.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockGroupItem.cs index 89e01c2b90..2134d9b9eb 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockGroupItem.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockGroupItem.cs @@ -259,6 +259,39 @@ namespace MonoDevelop.Components.Docking // Determine the best position for docking the item if (Allocation.IsEmpty) { + int uniqueTrue = -1; + int uniqueFalse = -1; + for (int n=0; n<4; n++) { + bool inMargin = IsNextToMargin ((PositionType) n, false); + if (inMargin) { + if (uniqueTrue == -1) + uniqueTrue = n; + else + uniqueTrue = -2; + } else { + if (uniqueFalse == -1) + uniqueFalse = n; + else + uniqueFalse = -2; + } + } + + if (uniqueTrue >= 0) { + barDocPosition = (PositionType) uniqueTrue; + autoHideSize = 200; + return; + } else if (uniqueFalse >= 0) { + barDocPosition = (PositionType) uniqueFalse; + switch (barDocPosition) { + case PositionType.Left: barDocPosition = PositionType.Right; break; + case PositionType.Right: barDocPosition = PositionType.Left; break; + case PositionType.Top: barDocPosition = PositionType.Bottom; break; + case PositionType.Bottom: barDocPosition = PositionType.Top; break; + } + autoHideSize = 200; + return; + } + // If the item is in a group, use the dock location of other items DockObject current = this; do { diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockItem.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockItem.cs index dd47a99572..12eb78e67c 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockItem.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockItem.cs @@ -294,6 +294,11 @@ namespace MonoDevelop.Components.Docking return widget.Parent != null && widget.Visible; } } + + public void SetDockLocation (string location) + { + frame.SetDockLocation (this, location); + } internal void SetFocus () { diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockObject.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockObject.cs index f909bf3542..e6954f9351 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockObject.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockObject.cs @@ -272,13 +272,13 @@ namespace MonoDevelop.Components.Docking prefSize = obj.prefSize; } - public virtual bool IsNextToMargin (Gtk.PositionType margin) + public virtual bool IsNextToMargin (Gtk.PositionType margin, bool visibleOnly) { if (ParentGroup == null) return true; - if (!ParentGroup.IsNextToMargin (margin)) + if (!ParentGroup.IsNextToMargin (margin, visibleOnly)) return false; - return ParentGroup.IsChildNextToMargin (margin, this); + return ParentGroup.IsChildNextToMargin (margin, this, visibleOnly); } } } -- cgit v1.2.3