Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockObject.cs')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockObject.cs284
1 files changed, 284 insertions, 0 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockObject.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockObject.cs
new file mode 100644
index 0000000000..f909bf3542
--- /dev/null
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/DockObject.cs
@@ -0,0 +1,284 @@
+//
+// DockObject.cs
+//
+// Author:
+// Lluis Sanchez Gual
+//
+
+//
+// Copyright (C) 2007 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+
+using System;
+using System.Xml;
+using Gtk;
+using System.Globalization;
+
+namespace MonoDevelop.Components.Docking
+{
+ internal abstract class DockObject
+ {
+ DockGroup parentGroup;
+ DockFrame frame;
+ Gdk.Rectangle rect;
+
+ // The current size in pixels of this item
+ double size = -1;
+
+ // The current size in pixels of this item, but as an integer.
+ // In general it is the same value as size, but it may change a bit due to rounding.
+ int allocSize = -1;
+
+ double defaultHorSize = -1;
+ double defaultVerSize = -1;
+ double prefSize = 0;
+
+ // Those are the last known coordinates of the item. They are stored in StoreAllocation
+ // and restored to rect in RestoreAllocation. This is needed for example when a layout
+ // is cloned. It is convenient to have allocation information in the cloned layout, even
+ // if the layout has never been displayed (e.g., to decide the autohide dock location)
+ int ax=-1, ay=-1;
+
+ public DockObject (DockFrame frame)
+ {
+ this.frame = frame;
+ }
+
+ internal DockGroup ParentGroup {
+ get {
+ return parentGroup;
+ }
+ set {
+ parentGroup = value;
+ if (size < 0)
+ size = prefSize = DefaultSize;
+ }
+ }
+
+ public double Size {
+ get {
+ return size;
+ }
+ set {
+ size = value;
+ }
+ }
+
+ public bool HasAllocatedSize {
+ get { return allocSize != -1; }
+ }
+
+ public double DefaultSize {
+ get {
+ if (defaultHorSize < 0)
+ InitDefaultSizes ();
+ if (parentGroup != null) {
+ if (parentGroup.Type == DockGroupType.Horizontal)
+ return defaultHorSize;
+ else if (parentGroup.Type == DockGroupType.Vertical)
+ return defaultVerSize;
+ }
+ return 0;
+ }
+ set {
+ if (parentGroup != null) {
+ if (parentGroup.Type == DockGroupType.Horizontal)
+ defaultHorSize = value;
+ else if (parentGroup.Type == DockGroupType.Vertical)
+ defaultVerSize = value;
+ }
+ }
+ }
+
+ internal void ResetDefaultSize ()
+ {
+ defaultHorSize = -1;
+ defaultVerSize = -1;
+ }
+
+ public int MinSize {
+ get {
+ int w,h;
+ GetMinSize (out w, out h);
+ if (parentGroup != null) {
+ if (parentGroup.Type == DockGroupType.Horizontal)
+ return w;
+ else if (parentGroup.Type == DockGroupType.Vertical)
+ return h;
+ }
+ return w;
+ }
+ }
+
+ public abstract bool Expand { get; }
+
+ public virtual void SizeAllocate (Gdk.Rectangle rect)
+ {
+ this.rect = rect;
+ }
+
+ internal Gdk.Rectangle Allocation {
+ get {
+ return rect;
+ }
+ set {
+ rect = value;
+ }
+ }
+
+ public int AllocSize {
+ get {
+ return allocSize;
+ }
+ set {
+ allocSize = value;
+ }
+ }
+
+ public MonoDevelop.Components.Docking.DockFrame Frame {
+ get {
+ return frame;
+ }
+ }
+
+ public double PrefSize {
+ get {
+ return prefSize;
+ }
+ set {
+ prefSize = value;
+ }
+ }
+
+ void InitDefaultSizes ()
+ {
+ int width, height;
+ GetDefaultSize (out width, out height);
+ if (width == -1)
+ width = frame.DefaultItemWidth;
+ if (height == -1)
+ height = frame.DefaultItemHeight;
+ defaultHorSize = (double) width;
+ defaultVerSize = (double) height;
+ }
+
+ internal virtual void GetDefaultSize (out int width, out int height)
+ {
+ width = -1;
+ height = -1;
+ }
+
+ internal virtual void GetMinSize (out int width, out int height)
+ {
+ width = 0;
+ height = 0;
+ }
+
+ internal abstract void QueueResize ();
+
+ internal abstract bool GetDockTarget (DockItem item, int px, int py, out DockDelegate dockDelegate, out Gdk.Rectangle rect);
+
+ internal abstract Gtk.Requisition SizeRequest ();
+
+ internal abstract bool Visible { get; }
+
+ internal abstract void Dump (int ind);
+
+ internal virtual void RestoreAllocation ()
+ {
+ if (parentGroup != null) {
+ int x = ax != -1 ? ax : 0;
+ int y = ay != -1 ? ay : 0;
+ if (parentGroup.Type == DockGroupType.Horizontal)
+ rect = new Gdk.Rectangle (x, y, (int)size, parentGroup.Allocation.Height);
+ else if (parentGroup.Type == DockGroupType.Vertical)
+ rect = new Gdk.Rectangle (x, y, parentGroup.Allocation.Width, (int)size);
+ }
+ }
+
+ internal virtual void StoreAllocation ()
+ {
+ if (Visible) {
+ if (parentGroup == null || parentGroup.Type == DockGroupType.Horizontal)
+ size = prefSize = (int) rect.Width;
+ else if (parentGroup.Type == DockGroupType.Vertical)
+ size = prefSize = (int) rect.Height;
+ ax = Allocation.X;
+ ay = Allocation.Y;
+ }
+ }
+
+ internal virtual void Write (XmlWriter writer)
+ {
+ writer.WriteAttributeString ("size", size.ToString (CultureInfo.InvariantCulture));
+ writer.WriteAttributeString ("prefSize", prefSize.ToString (CultureInfo.InvariantCulture));
+ writer.WriteAttributeString ("defaultHorSize", defaultHorSize.ToString (CultureInfo.InvariantCulture));
+ writer.WriteAttributeString ("defaultVerSize", defaultVerSize.ToString (CultureInfo.InvariantCulture));
+ }
+
+ internal virtual void Read (XmlReader reader)
+ {
+ size = double.Parse (reader.GetAttribute ("size"), CultureInfo.InvariantCulture);
+ prefSize = double.Parse (reader.GetAttribute ("prefSize"), CultureInfo.InvariantCulture);
+ defaultHorSize = double.Parse (reader.GetAttribute ("defaultHorSize"), CultureInfo.InvariantCulture);
+ defaultVerSize = double.Parse (reader.GetAttribute ("defaultVerSize"), CultureInfo.InvariantCulture);
+ }
+
+ public virtual void CopyFrom (DockObject ob)
+ {
+ parentGroup = null;
+ frame = ob.frame;
+ rect = ob.rect;
+ size = ob.size;
+ allocSize = ob.allocSize;
+ defaultHorSize = ob.defaultHorSize;
+ defaultVerSize = ob.defaultVerSize;
+ prefSize = ob.prefSize;
+ }
+
+ public DockObject Clone ()
+ {
+ DockObject ob = (DockObject) this.MemberwiseClone ();
+ ob.CopyFrom (this);
+ return ob;
+ }
+
+ public virtual void CopySizeFrom (DockObject obj)
+ {
+ size = obj.size;
+ allocSize = obj.allocSize;
+ defaultHorSize = obj.defaultHorSize;
+ defaultVerSize = obj.defaultVerSize;
+ prefSize = obj.prefSize;
+ }
+
+ public virtual bool IsNextToMargin (Gtk.PositionType margin)
+ {
+ if (ParentGroup == null)
+ return true;
+ if (!ParentGroup.IsNextToMargin (margin))
+ return false;
+ return ParentGroup.IsChildNextToMargin (margin, this);
+ }
+ }
+}