示例#1
0
        internal override PointF getAnchorPos(int anchorIdx)
        {
            if (row == -1)
            {
                RectangleF nodeRect = getNodeRect(false);
                if (getNode().AnchorPattern != null)
                {
                    AnchorPoint ap = getNode().AnchorPattern.Points[anchorIdx];
                    return(ap.getPos(nodeRect));
                }
                else
                {
                    return(getInitialPt());
                }
            }

            AnchorPattern rowap   = table.getRowAnchorPattern(row);
            RectangleF    rowRect = table.getRowRect(row);

            if (rowap != null)
            {
                AnchorPoint ap = rowap.Points[anchorIdx];
                return(ap.getPos(rowRect));
            }
            else
            {
                return(getInitialPt());
            }
        }
示例#2
0
 public MarkDrawArgs(Graphics g, PointF location,
                     Node node, AnchorPattern anchorPattern, int anchorIndex)
 {
     this.graphics      = g;
     this.location      = location;
     this.node          = node;
     this.anchorPattern = anchorPattern;
     this.anchorIndex   = anchorIndex;
 }
示例#3
0
        public object Clone()
        {
            AnchorPattern clone = new AnchorPattern();

            foreach (AnchorPoint ap in this.points)
            {
                clone.points.Add((AnchorPoint)ap.Clone());
            }

            return(clone);
        }
示例#4
0
 internal void saveAnchorPattern(AnchorPattern ap)
 {
     if (ap == null)
     {
         writer.Write(Constants.NoAnchorPattern);
     }
     else
     {
         int regIndex = ap.getRegIndex();
         writer.Write(regIndex);
         if (regIndex == -1)
         {
             ap.saveTo(writer, this);
         }
     }
 }
示例#5
0
        internal override bool getAnchorPos(int anchorIdx, ref PointF point)
        {
            if (row == -1)
            {
                return(base.getAnchorPos(anchorIdx, ref point));
            }

            AnchorPattern rowap = table.getRowAnchorPattern(row);

            if (rowap != null && anchorIdx >= 0 &&
                anchorIdx < rowap.Points.Count)
            {
                AnchorPoint ap = rowap.Points[anchorIdx];

                RectangleF targetRect = (ap.Column == -1) ?
                                        table.getRowRect(row) : table.getSpannedCellRect(row, ap.Column);
                point = ap.getPos(targetRect);

                return(true);
            }

            return(false);
        }
示例#6
0
        internal AnchorPattern loadAnchorPattern()
        {
            AnchorPattern anchorPattern = null;

            int regIndex = reader.ReadInt32();

            if (regIndex == Constants.NoAnchorPattern)
            {
                anchorPattern = null;
            }
            else
            {
                if (regIndex != -1)
                {
                    anchorPattern = AnchorPattern.getRegisteredPattern(regIndex);
                }
                else
                {
                    (anchorPattern = new AnchorPattern()).loadFrom(reader, this);
                }
            }

            return(anchorPattern);
        }
示例#7
0
        internal override PointF getEndPoint()
        {
            RectangleF rc  = table.getRowRect(row);
            PointF     ptp = relativePosition;

            if (row != -1)
            {
                rc = table.getRowRect(row);
            }
            else
            {
                rc = table.getBoundingRect();
            }

            // use anchor point position if available
            if (row != -1)
            {
                AnchorPattern rowap = table.getRowAnchorPattern(row);
                if (rowap != null)
                {
                    // check DestAnchor for incoming arrow
                    if (incoming && arrow.DestAnchor != -1)
                    {
                        AnchorPoint ap = rowap.Points[arrow.DestAnchor];
                        ptp = new PointF(ap.X, ap.Y);
                        if (ap.Column != -1)
                        {
                            rc = table.getSpannedCellRect(row, ap.Column);
                        }
                    }

                    // check OrgnAnchor for outgoing arrow
                    if (!incoming && arrow.OrgnAnchor != -1)
                    {
                        AnchorPoint ap = rowap.Points[arrow.OrgnAnchor];
                        ptp = new PointF(ap.X, ap.Y);
                        if (ap.Column != -1)
                        {
                            rc = table.getSpannedCellRect(row, ap.Column);
                        }
                    }
                }
            }

            // calculate point coordinates
            PointF pt = Utilities.rectPtFromPercent(ptp, rc);

            // stay within table boundaries
            RectangleF rcTable = table.getBoundingRect();

            if (pt.Y > rcTable.Bottom)
            {
                pt.Y = rcTable.Bottom;
            }
            if (pt.X > rcTable.Right)
            {
                pt.X = rcTable.Right;
            }

            return(pt);
        }
示例#8
0
		internal AnchorPattern loadAnchorPattern()
		{
			AnchorPattern anchorPattern = null;

			int regIndex = reader.ReadInt32();
			if (regIndex == Constants.NoAnchorPattern)
			{
				anchorPattern = null;
			}
			else
			{
				if (regIndex != -1)
					anchorPattern = AnchorPattern.getRegisteredPattern(regIndex);
				else
					(anchorPattern = new AnchorPattern()).loadFrom(reader, this);
			}

			return anchorPattern;
		}
示例#9
0
		private AnchorPattern ReadAnchorPatternElement(
			System.Xml.XmlReader reader)
		{
			int regIndex = XmlConvert.ToInt32(reader.GetAttribute("RegIndex"));
			AnchorPattern pattern = null;

			if (regIndex == Constants.NoAnchorPattern)
				pattern = null;

			if (regIndex != -1)
				pattern = AnchorPattern.getRegisteredPattern(regIndex);

			// Load the pattern
			if (regIndex == -1)
			{
				AnchorPointCollection points = new AnchorPointCollection();

				reader.Read();
				int count = XmlConvert.ToInt32(reader.GetAttribute("Count"));

				for (int i = 0; i < count; i++)
				{
					AnchorPoint point = new AnchorPoint(0, 0);

					reader.Read();
					ReadProperties(reader, point, reader.Depth + 1);

					points.Add(point);
				}

				// Points closing tag
				if (count > 0)
					reader.Read();

				// Anchor pattern closing tag
				reader.Read();

				pattern = new AnchorPattern(points);
			}

			return pattern;
		}
示例#10
0
			public virtual void loadFrom(BinaryReader reader, PersistContext ctx)
			{
				height = (float)reader.ReadDouble();
				ctx.loadReference(this);
				ctx.loadReference(this);
				ctx.loadReference(this);
				ctx.loadReference(this);
				ctx.loadReference(this);

				if (ctx.FileVersion > 5)
				{
					// new in save format 6
					anchorPattern = ctx.loadAnchorPattern();

					if (ctx.FileVersion > 21)
					{
						// new in save format 22
						header = reader.ReadBoolean();
						expanded = reader.ReadBoolean();
					}
				}
			}
示例#11
0
		public static void Register(AnchorPattern pattern)
		{
			registeredPatterns.Add(pattern);
			pattern.regIndex = registeredPatterns.Count - 1;
		}
示例#12
0
		internal override void restoreProperties(ItemProperties props)
		{
			NodeProperties nprops = (NodeProperties)props;
			anchorPattern = nprops.anchorPattern;
			expanded = nprops.expanded;
			expandable = nprops.expandable;
			obstacle = nprops.obstacle;
			Constraints = nprops.contraints == null ?
				null : (NodeConstraints)nprops.contraints.Clone();
			enabledHandles = nprops.enabledHandles;
			boolValues = nprops.boolValues;

			base.restoreProperties(props);
		}
示例#13
0
		public object Clone()
		{
			AnchorPattern clone = new AnchorPattern();

			foreach (AnchorPoint ap in this.points)
				clone.points.Add((AnchorPoint)ap.Clone());

			return clone;
		}
示例#14
0
		private void WriteAnchorPatternElement(string name,
			System.Xml.XmlWriter writer, AnchorPattern pattern)
		{
			writer.WriteStartElement(name);

			if (pattern == null)
			{
				// Write NoPattern constant
				writer.WriteAttributeString("RegIndex",
					XmlConvert.FromInt32(Constants.NoAnchorPattern));
			}
			else
			{
				// Write the pattern reg index
				writer.WriteAttributeString("RegIndex",
					XmlConvert.FromInt32(pattern.getRegIndex()));

				if (pattern.getRegIndex() == -1)
				{
					// Save the pattern points
					writer.WriteStartElement("Points");
					writer.WriteAttributeString("Count",
						XmlConvert.FromInt32(pattern.Points.Count));

					AnchorPoint point;
					for(int i = 0; i < pattern.Points.Count; i++)
					{
						point = pattern.Points[i];

						writer.WriteStartElement("AnchorPoint");

						// Write points properties
						WriteProperties(writer, point, new string[]
							{ "AllowIncoming", "AllowOutgoing",
								"Color", "Column", "MarkStyle", "ToolTip", "X", "Y" }, null);
						// Write tag
						WriteTagElement(writer, point);

						writer.WriteEndElement();
					}

					writer.WriteEndElement();
				}
			}

			writer.WriteEndElement();
		}
示例#15
0
 public static void Register(AnchorPattern pattern)
 {
     registeredPatterns.Add(pattern);
     pattern.regIndex = registeredPatterns.Count - 1;
 }
示例#16
0
		internal void saveAnchorPattern(AnchorPattern ap)
		{
			if (ap == null)
			{
				writer.Write(Constants.NoAnchorPattern);
			}
			else
			{
				int regIndex = ap.getRegIndex();
				writer.Write(regIndex);
				if (regIndex == -1)
					ap.saveTo(writer, this);
			}
		}
示例#17
0
		public MarkDrawArgs(Graphics g, PointF location,
			Node node, AnchorPattern anchorPattern, int anchorIndex)
		{
			this.graphics = g;
			this.location = location;
			this.node = node;
			this.anchorPattern = anchorPattern;
			this.anchorIndex = anchorIndex;
		}