public override void onMouseOver(Vector2 mouseworldpos) { //System.Diagnostics.Debug.WriteLine(System.DateTime.Now.ToString() + "RectangleItem.onMouseOver()"); int edgewidth = 10; if (Math.Abs(mouseworldpos.X - Rectangle.Left) <= edgewidth) { MainForm.Instance.pictureBox1.Cursor = Cursors.SizeWE; edgeundermouse = EdgeEnum.left; } else if (Math.Abs(mouseworldpos.X - Rectangle.Right) <= edgewidth) { MainForm.Instance.pictureBox1.Cursor = Cursors.SizeWE; edgeundermouse = EdgeEnum.right; } else if (Math.Abs(mouseworldpos.Y - Rectangle.Top) <= edgewidth) { MainForm.Instance.pictureBox1.Cursor = Cursors.SizeNS; edgeundermouse = EdgeEnum.top; } else if (Math.Abs(mouseworldpos.Y - Rectangle.Bottom) <= edgewidth) { MainForm.Instance.pictureBox1.Cursor = Cursors.SizeNS; edgeundermouse = EdgeEnum.bottom; } else { MainForm.Instance.pictureBox1.Cursor = Cursors.Default; edgeundermouse = EdgeEnum.none; } base.onMouseOver(mouseworldpos); }
/// <summary> /// Builds a unique key for a grid cell style. For each of those keys, a separate C1PrintDocument /// style is built that is used as Parent for the corresponding RenderTable cell's style. /// </summary> /// <param name="cs">The grid cell style.</param> /// <param name="dataType">The grid cell data type (used to disambiguate "general" text alignment).</param> /// <param name="value">The grid cell text (used to disambiguate "general" text alignment).</param> /// <param name="edges">Outer edges of the table on which the cell borders.</param> /// <param name="borderLeft">The left border of the cell (which is the right border of the cell on the left).</param> /// <param name="borderTop">The top border of the cell (which is the bottom border of the cell on the top).</param> /// <returns>A unique key identifying the cell style.</returns> private string BuildCellStyleKey(CellStyle cs, Type dataType, string value, EdgeEnum edges, LineDef borderLeft, LineDef borderTop) { // note: using CellStyle.BuildString is VERY slow if background images are included, hence this. string str = string.Format(CultureInfo.InvariantCulture, "{0:X}{1:X}{2:X}{3:X}{4:X}{5:X}{6:X}{7:X}{8:X}{9:X}{10:X}", cs.Display.GetHashCode(), cs.Font.GetHashCode(), cs.BackColor.GetHashCode(), cs.ForeColor.GetHashCode(), cs.TextAlign.GetHashCode(), cs.TextDirection.GetHashCode(), cs.ImageAlign.GetHashCode(), cs.WordWrap.GetHashCode(), cs.Border.GetHashCode(), // ?? cs.BackgroundImage != null && cs.BackgroundImageLayout != ImageAlignEnum.Hide ? cs.BackgroundImage.GetHashCode() : 0, cs.BackgroundImageLayout.GetHashCode()); // Style attributes NOT included: // StyleElementFlags.Format // StyleElementFlags.EditMask // StyleElementFlags.ComboList // StyleElementFlags.DataType // StyleElementFlags.Margins // StyleElementFlags.TextEffect // StyleElementFlags.ImageSpacing // StyleElementFlags.Trimming return(str); }
private void BlobPanel_MouseDown(object sender, MouseEventArgs e) { // We care only for right-click. if (e.Button != MouseButtons.Left) { return; } // Check on what edge we are clicked. EdgeEnum edge = IsOnEdge(e.Location); // If we are not on any edge it means we should select this blob. if (edge == EdgeEnum.None) { // Flip the selection flag on the Panel and raise event. Selected = !Selected; OnSelectedChanged(EventArgs.Empty); Invalidate(); return; } // We are on some edge, activate the resizing. m_resize = true; }
/// <summary> /// Calculates which outer table edges the specified cell range borders on. /// </summary> /// <param name="cr">The cell range to test.</param> /// <param name="gridRowFirst">The index of the first printed grid row.</param> /// <param name="gridColFirst">The index of the first printed grid column.</param> /// <param name="gridRowLast">The index of the last printed grid row.</param> /// <param name="gridColLast">The index of the last printed grid column.</param> /// <returns>A combination of EdgeEnum flags indicating which edges the range borders on.</returns> private EdgeEnum CalcEdges(CellRange cr, int gridRowFirst, int gridColFirst, int gridRowLast, int gridColLast) { EdgeEnum ret = EdgeEnum.None; // avoid extra work if we're not printing borders anyway: if (!PrintInfo.PrintBorders) { return(ret); } if (cr.r1 == gridRowFirst) { ret |= EdgeEnum.Top; } if (cr.r2 == gridRowLast) { ret |= EdgeEnum.Bottom; } if (cr.c1 == gridColFirst) { ret |= EdgeEnum.Left; } if (cr.c2 == gridColLast) { ret |= EdgeEnum.Right; } return(ret); }
private void mControl_MouseLeave(object sender, System.EventArgs e) { Control c = (Control)sender; mEdge = EdgeEnum.None; c.Refresh(); }
public void mControl_MouseLeave(object sender, System.EventArgs e) { Control c = ((Control)sender); mEdge = EdgeEnum.None; c.Refresh(); c.Cursor = Cursors.Default; }
/// <summary> /// Gets the C1PrintDocument style corresponding to the specified C1FlexGrid cell style. /// If the required style has not been created yet, it is created and added to the _styles /// hashtable for reuse. /// </summary> /// <param name="cellStyle">The grid cell style.</param> /// <param name="styles">The C1PrintDocument styles collection to which a new style may be added.</param> /// <param name="dataType">The grid cell data type (used to disambiguate general text alignment).</param> /// <param name="value">The grid cell text (used to disambiguate general text alignment).</param> /// <param name="edges">Outer edges of the table on which the cell borders.</param> /// <param name="borderLeft">The left border of the cell (which is the right border of the cell on the left).</param> /// <param name="borderTop">The top border of the cell (which is the bottom border of the cell on the top).</param> /// <returns>The style to apply to the RenderTable cell.</returns> private Style StyleFromGridStyle(CellStyle cellStyle, StyleCollection styles, Type dataType, string value, EdgeEnum edges, LineDef borderLeft, LineDef borderTop) { string key = BuildCellStyleKey(cellStyle, dataType, value, edges, borderLeft, borderTop); // if a matching style already exists just use it: if (_styles.ContainsKey(key)) { return(_styles[key]); } Style s = styles.Add(); // we do not want to inherit any non-ambient properties from the "styles" owner - // all that is needed will be explicitly set by CopyCellStyle: s.Parent = null; // build the style based on cell style and other data: CopyCellStyle(s, cellStyle, dataType, value, edges, borderLeft, borderTop); // add the style to the hashtable for reuse, and return: _styles[key] = s; return(s); }
public override bool onMouseOver(Vector2 mouseworldpos, out string msg) { //System.Diagnostics.Debug.WriteLine(System.DateTime.Now.ToString() + "RectangleItem.onMouseOver()"); msg = String.Empty; var edgewidth = 10; if (Math.Abs(mouseworldpos.X - boundingrectangle.Left) <= edgewidth) { //MainForm.Instance.picturebox.Cursor = Cursors.SizeWE; edgeundermouse = EdgeEnum.left; return(true); } else if (Math.Abs(mouseworldpos.X - boundingrectangle.Right) <= edgewidth) { //MainForm.Instance.picturebox.Cursor = Cursors.SizeWE; edgeundermouse = EdgeEnum.right; return(true); } else if (Math.Abs(mouseworldpos.Y - boundingrectangle.Top) <= edgewidth) { //MainForm.Instance.picturebox.Cursor = Cursors.SizeNS; edgeundermouse = EdgeEnum.top; return(true); } else if (Math.Abs(mouseworldpos.Y - boundingrectangle.Bottom) <= edgewidth) { //MainForm.Instance.picturebox.Cursor = Cursors.SizeNS; edgeundermouse = EdgeEnum.bottom; return(true); } else { //MainForm.Instance.picturebox.Cursor = Cursors.Default; edgeundermouse = EdgeEnum.none; return(false); } //return false; //base.onMouseOver(mouseworldpos); }
public bool CanConnectToOtherTile(Tile other, EdgeEnum onEdge) { var thisEdges = GetEdges(); var otherEdges = other.GetEdges(); if (onEdge == EdgeEnum.Left && thisEdges[EdgeEnum.Left].SequenceEqual(otherEdges[EdgeEnum.Right])) { return(true); } if (onEdge == EdgeEnum.Right && thisEdges[EdgeEnum.Right].SequenceEqual(otherEdges[EdgeEnum.Left])) { return(true); } if (onEdge == EdgeEnum.Top && thisEdges[EdgeEnum.Top].SequenceEqual(otherEdges[EdgeEnum.Bottom])) { return(true); } if (onEdge == EdgeEnum.Bottom && thisEdges[EdgeEnum.Bottom].SequenceEqual(otherEdges[EdgeEnum.Top])) { return(true); } return(false); }
/// <summary> /// Adjusts the passed style to mach the appearance of the specified C1FlexGrid cell style. /// Also takes into account cell data (affects "general" text alignment), and whether the /// cell is at the edge of the containing table (affects borders). /// </summary> /// <param name="target">The target style to modify.</param> /// <param name="source">The source cell style.</param> /// <param name="dataType">The grid cell data type (used to disambiguate general text alignment).</param> /// <param name="value">The grid cell text (used to disambiguate general text alignment).</param> /// <param name="edges">Outer edges of the table on which the cell borders.</param> /// <param name="borderLeft">The left border of the cell (which is the right border of the cell on the left).</param> /// <param name="borderTop">The top border of the cell (which is the bottom border of the cell on the top).</param> private void CopyCellStyle(Style target, CellStyle source, Type dataType, string value, EdgeEnum edges, LineDef borderLeft, LineDef borderTop) { target.Font = source.Font; target.BackColor = source.BackColor; target.TextColor = source.ForeColor; if (source.TextDirection == TextDirectionEnum.Up) { target.TextAngle = 90; } else if (source.TextDirection == TextDirectionEnum.Down) { target.TextAngle = 270; } // source.Trimming target.WordWrap = source.WordWrap; TextAlignInfo ta = s_TextAlignToTA[GetTextAlign(source, dataType, value)]; target.TextAlignHorz = ta.Horz; target.TextAlignVert = ta.Vert; ImageAlignInfo ia = s_ImageAlignToIA[source.ImageAlign]; target.ImageAlign.AlignHorz = ia.Horz; target.ImageAlign.AlignVert = ia.Vert; if (source.ImageAlign == ImageAlignEnum.Scale) { target.ImageAlign.BestFit = true; target.ImageAlign.StretchVert = true; target.ImageAlign.StretchHorz = true; target.ImageAlign.KeepAspectRatio = true; } else if (source.ImageAlign == ImageAlignEnum.Stretch) { target.ImageAlign.StretchVert = true; target.ImageAlign.StretchHorz = true; target.ImageAlign.KeepAspectRatio = false; } else { target.ImageAlign.StretchVert = false; target.ImageAlign.StretchHorz = false; target.ImageAlign.KeepAspectRatio = true; } // todo: handle Tile/TileStretch // borders: if (PrintInfo.PrintBorders) { // note: outer borders are defined by EmptyArea style. // left: if ((edges & EdgeEnum.Left) != 0) { target.Borders.Left = BorderToLineDef(_grid.Styles.EmptyArea, false); } else { target.Borders.Left = borderLeft; } // top: if ((edges & EdgeEnum.Top) != 0) { target.Borders.Top = BorderToLineDef(_grid.Styles.EmptyArea, true); } else { target.Borders.Top = borderTop; } // right: if ((edges & EdgeEnum.Right) != 0) { target.Borders.Right = BorderToLineDef(_grid.Styles.EmptyArea, false); } else { target.Borders.Right = BorderToLineDef(source, false); } // bottom: if ((edges & EdgeEnum.Bottom) != 0) { target.Borders.Bottom = BorderToLineDef(_grid.Styles.EmptyArea, true); } else { target.Borders.Bottom = BorderToLineDef(source, true); } } CopyBackgroundImage(target, source); // style attributes that are ignored (todo): // source.TextEffect // style attributes that are accounted for elsewhere and/or irrelevant for print: // source.Padding // source.Display // source.Format // source.DataType // source.ImageAlign // source.ImageSpacing // source.EditMask // source.ComboList }
private void mControl_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { Control c = (Control)sender; Graphics g = c.CreateGraphics(); switch (mEdge) { case EdgeEnum.TopLeft: g.FillRectangle(Brushes.Fuchsia, 0, 0, mWidth * 4, mWidth * 4); mOutlineDrawn = true; break; case EdgeEnum.Left: g.FillRectangle(Brushes.Fuchsia, 0, 0, mWidth, c.Height); mOutlineDrawn = true; break; case EdgeEnum.Right: g.FillRectangle(Brushes.Fuchsia, c.Width - mWidth, 0, c.Width, c.Height); mOutlineDrawn = true; break; case EdgeEnum.Top: g.FillRectangle(Brushes.Fuchsia, 0, 0, c.Width, mWidth); mOutlineDrawn = true; break; case EdgeEnum.Bottom: g.FillRectangle(Brushes.Fuchsia, 0, c.Height - mWidth, c.Width, mWidth); mOutlineDrawn = true; break; case EdgeEnum.None: if (mOutlineDrawn) { c.Refresh(); mOutlineDrawn = false; } break; } if (mMouseDown & mEdge != EdgeEnum.None) { c.SuspendLayout(); switch (mEdge) { case EdgeEnum.TopLeft: c.SetBounds(c.Left + e.X, c.Top + e.Y, c.Width, c.Height); break; case EdgeEnum.Left: c.SetBounds(c.Left + e.X, c.Top, c.Width - e.X, c.Height); break; case EdgeEnum.Right: c.SetBounds(c.Left, c.Top, c.Width - (c.Width - e.X), c.Height); break; case EdgeEnum.Top: c.SetBounds(c.Left, c.Top + e.Y, c.Width, c.Height - e.Y); break; case EdgeEnum.Bottom: c.SetBounds(c.Left, c.Top, c.Width, c.Height - (c.Height - e.Y)); break; } c.ResumeLayout(); } else { if (e.X <= (mWidth * 4) & e.Y <= (mWidth * 4)) { //top left corner c.Cursor = Cursors.SizeAll; mEdge = EdgeEnum.TopLeft; } else if (e.X <= mWidth) { //left edge c.Cursor = Cursors.VSplit; mEdge = EdgeEnum.Left; } else if (e.X > c.Width - (mWidth + 1)) { //right edge c.Cursor = Cursors.VSplit; mEdge = EdgeEnum.Right; } else if (e.Y <= mWidth) { //top edge c.Cursor = Cursors.HSplit; mEdge = EdgeEnum.Top; } else if (e.Y > c.Height - (mWidth + 1)) { //bottom edge c.Cursor = Cursors.HSplit; mEdge = EdgeEnum.Bottom; } else { //no edge c.Cursor = Cursors.Default; mEdge = EdgeEnum.None; } } }
private void BlobPanel_MouseMove(object sender, MouseEventArgs e) { // Get what edge we are on. EdgeEnum edge = IsOnEdge(e.Location); switch (edge) { case EdgeEnum.Left: // Set the resize cursor Cursor = Cursors.SizeWE; // If resizing update location and width. if (m_resize) { // Since we are resizing the left border we need to move the entire panel, so first we move it. Location = new Point(Location.X + e.X, Location.Y); // Since we moved the panel we need now to extend (or shrink) it accordingly. Width += -1 * e.X; Invalidate(); } break; case EdgeEnum.Right: // Set the resize cursor Cursor = Cursors.SizeWE; // If resizing update location and width. if (m_resize) { // We move the right panel, so all we do is update the width accordingly (no need to move the panel). Width = e.X; Invalidate(); } break; case EdgeEnum.Top: // Set the resize cursor Cursor = Cursors.SizeNS; // If resizing update location and width. if (m_resize) { // Since we are resizing the top border we need to move the entire panel, so first we move it. Location = new Point(Location.X, Location.Y + e.Y); // Since we moved the panel we need now to extend (or shrink) it accordingly. Height += -1 * e.Y; Invalidate(); } break; case EdgeEnum.Bottom: // Set the resize cursor Cursor = Cursors.SizeNS; // If resizing update location and width. if (m_resize) { // We move the bottom panel, so all we do is update the height accordingly (no need to move the panel). Height = e.Y; Invalidate(); } break; default: // Set the select cursor Cursor = Cursors.Hand; break; } }
public void mControl_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { Control c = ((Control)sender); Graphics g = c.CreateGraphics(); switch (mEdge) { case EdgeEnum.Moving: mOutlineDrawn = true; break; case EdgeEnum.BottomRight: DrawOrangeSquares(c, g); g.FillRectangle(Brushes.Black, c.Width - mWidth, c.Height - mWidth, mWidth, mWidth); mOutlineDrawn = true; break; case EdgeEnum.BottomLeft: DrawOrangeSquares(c, g); g.FillRectangle(Brushes.Fuchsia, 0, c.Height - mWidth, mWidth, mWidth); mOutlineDrawn = true; break; case EdgeEnum.TopRight: DrawOrangeSquares(c, g); g.FillRectangle(Brushes.Fuchsia, c.Width - mWidth, 0, mWidth, mWidth); //top right mOutlineDrawn = true; break; case EdgeEnum.TopLeft: DrawOrangeSquares(c, g); g.FillRectangle(Brushes.Fuchsia, 0, 0, mWidth, mWidth); //top left mOutlineDrawn = true; break; case EdgeEnum.Left: DrawOrangeSquares(c, g); g.FillRectangle(Brushes.Fuchsia, 0, c.Height / 2 - 4, mWidth, mWidth); //left mOutlineDrawn = true; break; case EdgeEnum.Right: DrawOrangeSquares(c, g); g.FillRectangle(Brushes.Fuchsia, c.Width - mWidth, c.Height / 2 - 4, mWidth, mWidth); //right mOutlineDrawn = true; break; case EdgeEnum.Top: DrawOrangeSquares(c, g); g.FillRectangle(Brushes.Fuchsia, c.Width / 2 - 4, 0, mWidth, mWidth); //top mOutlineDrawn = true; break; case EdgeEnum.Bottom: DrawOrangeSquares(c, g); g.FillRectangle(Brushes.Fuchsia, c.Width / 2 - 4, c.Height - mWidth, mWidth, mWidth); //bottom mOutlineDrawn = true; break; case EdgeEnum.None: if (mOutlineDrawn) { c.Refresh(); mOutlineDrawn = false; } break; } if (mMouseDown & mEdge != EdgeEnum.None) { //MessageBox.Show(Convert.ToString(c)); c.SuspendLayout(); switch (mEdge) { case EdgeEnum.TopRight: c.SetBounds(c.Left, c.Top, c.Width - (c.Width - e.X), c.Height); c.SetBounds(c.Left, c.Top + e.Y, c.Width, c.Height - e.Y); break; case EdgeEnum.TopLeft: c.SetBounds(c.Left + e.X, c.Top, c.Width - e.X, c.Height); c.SetBounds(c.Left, c.Top + e.Y, c.Width, c.Height - e.Y); break; case EdgeEnum.BottomRight: c.SetBounds(c.Left, c.Top, c.Width - (c.Width - e.X), c.Height); c.SetBounds(c.Left, c.Top, c.Width, c.Height - (c.Height - e.Y)); break; case EdgeEnum.BottomLeft: c.SetBounds(c.Left + e.X, c.Top, c.Width - e.X, c.Height); c.SetBounds(c.Left, c.Top, c.Width, c.Height - (c.Height - e.Y)); break; case EdgeEnum.Left: c.SetBounds(c.Left + e.X, c.Top, c.Width - e.X, c.Height); break; case EdgeEnum.Right: c.SetBounds(c.Left, c.Top, c.Width - (c.Width - e.X), c.Height); break; case EdgeEnum.Top: c.SetBounds(c.Left, c.Top + e.Y, c.Width, c.Height - e.Y); break; case EdgeEnum.Bottom: c.SetBounds(c.Left, c.Top, c.Width, c.Height - (c.Height - e.Y)); break; case EdgeEnum.Moving: c.SetBounds(c.Left + e.X - mouseX, c.Top + e.Y - mouseY, c.Width, c.Height); break; } c.ResumeLayout(); } else { if (e.X > c.Width - (mWidth) & e.Y > c.Height - (mWidth)) //Bottom right corner { c.Cursor = Cursors.SizeNWSE; mEdge = EdgeEnum.BottomRight; } else if (e.X <= mWidth & e.Y > c.Height - (mWidth)) //Bottom Left corner { c.Cursor = Cursors.SizeNESW; mEdge = EdgeEnum.BottomLeft; } else if (e.X > c.Width - (mWidth) & e.Y <= mWidth) //Top Right corner { c.Cursor = Cursors.SizeNESW; mEdge = EdgeEnum.TopRight; } else if (e.X <= mWidth & e.Y <= mWidth) //Top Left corner { c.Cursor = Cursors.SizeNWSE; mEdge = EdgeEnum.TopLeft; } else if (e.X <= mWidth & e.Y >= c.Height / 2 - 4 & e.Y <= c.Height / 2 + 4) //left edge { c.Cursor = Cursors.SizeWE; mEdge = EdgeEnum.Left; } else if (e.X >= c.Width - mWidth & e.Y >= c.Height / 2 - 4 & e.Y <= c.Height / 2 + 4) //right edge { c.Cursor = Cursors.SizeWE; mEdge = EdgeEnum.Right; } else if (e.X >= c.Width / 2 - 4 & e.X <= c.Width / 2 + 4 & e.Y <= mWidth) //top edge { c.Cursor = Cursors.SizeNS; mEdge = EdgeEnum.Top; } else if (e.X >= c.Width / 2 - 4 & e.X <= c.Width / 2 + 4 & e.Y >= c.Height - mWidth) //bottom edge { c.Cursor = Cursors.SizeNS; mEdge = EdgeEnum.Bottom; } else if (e.X <= c.Width & e.Y <= c.Height) //move { c.Cursor = Cursors.SizeAll; mEdge = EdgeEnum.Moving; DrawOrangeSquares(c, g); } else //no edge { c.Cursor = Cursors.Default; mEdge = EdgeEnum.None; } } }