public bool MouseUp(MouseButtons button, PointF location, PointF revertPoint, PointF revertDownPoint) { if (_studio.IsGrid) { revertPoint = Tool.GetGridPointF(revertPoint); revertDownPoint = Tool.GetGridPointF(revertDownPoint); } if (_state != CreateState.NotCreate) { if (!_isNodeCreate) { if (_state == CreateState.HasCreate) { revertPoint = GetOrthoSquarePoint(revertDownPoint, revertPoint); _studio.DrawFrame(PointF.Empty, PointF.Empty, FrameStyle.Thick, true); IDrawObj obj = _studio.StudioCreateDrawObj(_type, Tool.GetRectF(revertDownPoint, revertPoint)); if (obj != null) { obj.Invalidate(); } End(); _studio.Container.Framework.Manager.ResetToolboxPointerFunction(); } } return(true); } return(false); }
public IDrawObj StudioCreateDrawObj(Type type, RectangleF rf) { const int limit = 5; const int v = 100; if (rf.Width < limit || rf.Height < limit) { rf.Width = v; rf.Height = v; } Undo.StartTransaction("Create"); IDrawObj obj = CreateDrawObj(type); CreateDrawObjOper(obj); obj.Parant = Container; _nameManager.CreateName(obj); obj.Rect = rf; obj.Layer = DefaultLayer; obj.LoadInitializationEvent(); Undo.EndTransaction(); return(obj); }
private void IncrSpace(LayoutType type) { IDrawObj last = _controlPoint.SelectObjs.LastSelectedObj; int count = _selectedObjs.Count; List <IDrawObj> sorts = new List <IDrawObj>(_selectedObjs); SortList(sorts, type); int lastIndex = sorts.IndexOf(last); for (int i = 0; i < count; i++) { IDrawObj obj = sorts[i]; int index = i - lastIndex; RectangleF rf = obj.Rect; if (type == LayoutType.Left) { rf.X += index * MoveSize; } else if (type == LayoutType.Top) { rf.Y += index * MoveSize; } obj.Rect = rf; } _controlPoint.CalculateAndInvalidate(); }
public void Serialize(BinaryFormatter bf, Stream s) { const int version = 1; bf.Serialize(s, version); int objCount = _objs.Count; bf.Serialize(s, objCount); for (int i = 0; i < objCount; i++) { IDrawObj obj = _objs[i]; int type = (int)obj.Type; bf.Serialize(s, type); obj.Serialize(bf, s); } bf.Serialize(s, _rect); bf.Serialize(s, (int)_style); bf.Serialize(s, (int)BorderStyle); bf.Serialize(s, _defaultLayer); bf.Serialize(s, _visibleLayers); bf.Serialize(s, _lockedLayers); bf.Serialize(s, _caption); _backBrush.Data.Serialize(bf, s); }
public void DecrVSpace(object sender, EventArgs e) { IDrawObj last = _controlPoint.SelectObjs.LastSelectedObj; int count = _selectedObjs.Count; float standard = last.Bound.Y; List <IDrawObj> sorts = new List <IDrawObj>(_selectedObjs); SortList(sorts, LayoutType.Top); int lastIndex = sorts.IndexOf(last); for (int i = 0; i < count; i++) { IDrawObj obj = sorts[i]; int index = i - lastIndex; RectangleF rf = obj.Rect; if (Math.Abs(standard - rf.Y) > Math.Abs(index * MoveSize)) { rf.Y -= index * MoveSize; } else { rf.Y = standard; } obj.Rect = rf; } _controlPoint.CalculateAndInvalidate(); }
public void Deserialize(BinaryFormatter bf, Stream s) { int version = (int)bf.Deserialize(s); int objCount = (int)bf.Deserialize(s); _objs.Clear(); _objs.Capacity = objCount; for (int i = 0; i < objCount; i++) { DrawType type = (DrawType)bf.Deserialize(s); IDrawObj obj = CreateDrawObj(type); //DrawGroup控件需要提前获取Form,用来创建子控件 if (obj.Type == DrawType.Group) { obj.Parant = Container; } obj.Deserialize(bf, s); _objs.Add(obj); } _rect = (Rectangle)bf.Deserialize(s); _style = (FormStyle)bf.Deserialize(s); BorderStyle = (FormBorderStyle)bf.Deserialize(s); _defaultLayer = (int)bf.Deserialize(s); _visibleLayers = (BitArray)bf.Deserialize(s); _lockedLayers = (BitArray)bf.Deserialize(s); _caption = (string)bf.Deserialize(s); _backBrush.Data.Deserialize(bf, s); }
public void Top(object sender, EventArgs e) { IDrawObj obj = _selectedObjs[0]; Objs.Remove(obj); Objs.Add(obj); obj.Invalidate(); }
public void Last(object sender, EventArgs e) { IDrawObj obj = _selectedObjs[0]; Objs.Remove(obj); Objs.Insert(0, obj); obj.Invalidate(); }
protected override bool IsInvalidateObject(IDrawObj obj, Rectangle InvalidateRect) { const int width = 3; RectangleF rect = GetScrollAndScaleRect(obj.Bound); rect.Inflate(width, width); return(rect.IntersectsWith(InvalidateRect)); }
public override void InvalidateObject(IDrawObj sender) { const int width = 3; RectangleF rf = sender.Bound; rf.Inflate(width, width); RectInvalidate = RectangleF.Union(RectInvalidate, rf); }
public override void LoadMouseEvent(MouseButtons button, PointF location, MouseType type) { base.LoadMouseEvent(button, location, type); IDrawObj draw = ObjList.LastOrDefault(obj => obj.CanSelect(location)); if (draw != null) { ((DrawObj)draw).LoadMouseEvent(button, location, type); } }
private IDrawObj CloneDrawObj(IDrawObj origObj) { IDrawObj newObj = (IDrawObj)origObj.Clone(); newObj.Parant = Container; _nameManager.CreateName(newObj); newObj.LoadInitializationEvent(); Objs.Add(newObj); newObj.Invalidate(); return(newObj); }
public void RemoveName(IDrawObj obj) { _nameDict.Remove(obj.Name); if (obj.Type == DrawType.Group) { DrawGroup group = (DrawGroup)obj; foreach (IDrawObj o in group.ObjList) { RemoveName(o); } } }
public void Front(object sender, EventArgs e) { IDrawObj obj = _selectedObjs[0]; int index = Objs.IndexOf(obj); if (index != Objs.Count - 1) { Objs.Remove(obj); Objs.Insert(index + 1, obj); obj.Invalidate(); } }
public void Back(object sender, EventArgs e) { IDrawObj obj = _selectedObjs[0]; int index = Objs.IndexOf(obj); if (index > 0) { Objs.Remove(obj); Objs.Insert(index - 1, obj); obj.Invalidate(); } }
/// <summary> /// 改变名称,用于控件粘贴 /// </summary> /// <param name="obj"></param> public void ChangeName(IDrawObj obj) { CreateName(obj); //drawgoup if (obj.Type == DrawType.Group) { DrawGroup group = (DrawGroup)obj; foreach (IDrawObj o in group.ObjList) { ChangeName(o); } } }
public override void ObjectCanSelectChanged(IDrawObj obj) { base.ObjectCanSelectChanged(obj); //如果是不可操作图层,从选择列表中删除 if (!obj.CanSelect()) { if (_selectedObjs.Contains(obj)) { _selectedObjs.Remove(obj); _controlPoint.ChangeSelectObj(_selectedObjs); } } }
public override void InvalidateObject(IDrawObj sender) { const int width = 3; Rectangle rect = Rectangle.Round(GetScrollAndScaleRect(sender.Bound)); rect.Inflate(width, width); Container.Invalidate(rect); if (_controlPoint.NeedInvalidate && _controlPoint.Contains(sender)) { _controlPoint.Invalidate(); } }
public void CreateName(IDrawObj obj) { if (string.IsNullOrWhiteSpace(obj.Name) || _nameDict.ContainsKey(obj.Name)) { int type = (int)obj.Type; int index = _indexs[type] + 1; while (_nameDict.ContainsKey(_names[type] + index)) { index++; } _indexs[type] = index; obj.Name = _names[type] + index; } }
private void AddName(IDrawObj obj) { if (!string.IsNullOrWhiteSpace(obj.Name)) { _nameDict.Add(obj.Name, null); } if (obj.Type == DrawType.Group) { DrawGroup group = (DrawGroup)obj; foreach (IDrawObj o in group.ObjList) { AddName(o); } } }
private static float GetSortValue(IDrawObj obj, LayoutType type) { switch (type) { case LayoutType.Left: return(obj.Bound.Left); case LayoutType.Top: return(obj.Bound.Top); default: break; } return(0); }
public void SameSize(object sender, EventArgs e) { IDrawObj last = _controlPoint.SelectObjs.LastSelectedObj; foreach (IDrawObj obj in _selectedObjs) { if (obj == last) { continue; } RectangleF rf = obj.Rect; rf.Size = last.Bound.Size; obj.Rect = rf; } _controlPoint.CalculateAndInvalidate(); }
public void AlignLeft(object sender, EventArgs e) { IDrawObj last = _controlPoint.SelectObjs.LastSelectedObj; foreach (IDrawObj obj in _selectedObjs) { if (obj == last) { continue; } RectangleF rf = obj.Rect; rf.Offset(last.Bound.X - obj.Bound.X, 0); obj.Rect = rf; } _controlPoint.CalculateAndInvalidate(); }
private static void SortList(List <IDrawObj> sorts, LayoutType type) { int count = sorts.Count; for (int i = 0; i < count; i++) { for (int j = i + 1; j < count; j++) { if (GetSortValue(sorts[j], type) < GetSortValue(sorts[i], type)) { IDrawObj replace = sorts[j]; sorts[j] = sorts[i]; sorts[i] = replace; } } } }
public override void Serialize(BinaryFormatter bf, Stream s) { base.Serialize(bf, s); const int version = 1; bf.Serialize(s, version); int objCount = _objList.Count; bf.Serialize(s, objCount); for (int i = 0; i < objCount; i++) { IDrawObj obj = _objList[i]; bf.Serialize(s, obj.Type); obj.Serialize(bf, s); } }
public void AlignMiddle(object sender, EventArgs e) { IDrawObj last = _controlPoint.SelectObjs.LastSelectedObj; float f = last.Bound.Top + last.Bound.Height / 2; foreach (IDrawObj obj in _selectedObjs) { if (obj == last) { continue; } RectangleF rf = obj.Rect; float offset = f - (obj.Bound.Top + obj.Bound.Height / 2); rf.Offset(0, offset); obj.Rect = rf; } _controlPoint.CalculateAndInvalidate(); }
public void HSpace(object sender, EventArgs e) { int count = _selectedObjs.Count; float left = _selectedObjs[0].Bound.Left; float right = _selectedObjs[0].Bound.Right; float width = _selectedObjs[0].Bound.Width; for (int i = 1; i < count; i++) { RectangleF rf = _selectedObjs[i].Bound; if (left > rf.Left) { left = rf.Left; } if (right < rf.Right) { right = rf.Right; } width += rf.Width; } float finalWdith = width > (right - left) ? width : right - left; float interval = (finalWdith - width) / (count - 1); List <IDrawObj> sorts = new List <IDrawObj>(_selectedObjs); SortList(sorts, LayoutType.Left); float current = left; for (int i = 0; i < count; i++) { IDrawObj obj = sorts[i]; RectangleF rf = obj.Rect; rf.X += current - obj.Bound.X; obj.Rect = rf; current += obj.Bound.Width + interval; } _controlPoint.CalculateAndInvalidate(); }
public void VSpace(object sender, EventArgs e) { int count = _selectedObjs.Count; float top = _selectedObjs[0].Bound.Top; float bottom = _selectedObjs[0].Bound.Bottom; float height = _selectedObjs[0].Bound.Height; for (int i = 1; i < count; i++) { RectangleF rf = _selectedObjs[i].Bound; if (top > rf.Top) { top = rf.Top; } if (bottom < rf.Bottom) { bottom = rf.Bottom; } height += rf.Height; } float finalHeight = height > (bottom - top) ? height : bottom - top; float interval = (finalHeight - height) / (count - 1); List <IDrawObj> sorts = new List <IDrawObj>(_selectedObjs); SortList(sorts, LayoutType.Top); float current = top; for (int i = 0; i < count; i++) { IDrawObj obj = sorts[i]; RectangleF rf = obj.Rect; rf.Y += current - obj.Bound.Y; obj.Rect = rf; current += obj.Bound.Height + interval; } _controlPoint.CalculateAndInvalidate(); }
private void LoadMouseEvent(MouseButtons button, PointF location, MouseType type) { IDrawObj draw = Objs.LastOrDefault(obj => obj.CanSelect(location)); if (_mouseMovingObj != draw) { if (_mouseMovingObj != null) { _mouseMovingObj.LoadMouseLeaveEvent(); } _mouseMovingObj = draw; if (_mouseMovingObj != null) { _mouseMovingObj.LoadMouseEnterEvent(); } } if (_mouseMovingObj != null) { _mouseMovingObj.LoadMouseEvent(button, location, type); } }
public void UnGroup(object sender, EventArgs e) { DrawGroup group = null; foreach (IDrawObj obj in _selectedObjs) { if (obj.Type != DrawType.Group) { continue; } group = (DrawGroup)obj; group.Ungroup(); int index = Objs.IndexOf(group); Objs.Remove(group); Objs.InsertRange(index, group.ObjList); } if (group != null) { //去除锁定的控件 int count = group.ObjList.Count; for (int i = count - 1; i >= 0; i--) { IDrawObj obj = group.ObjList[i]; if (!group.ObjList[i].CanSelect()) { group.ObjList.Remove(obj); } } _selectedObjs.Clear(); _selectedObjs.AddRange(group.ObjList); _controlPoint.ChangeSelectObj(_selectedObjs); Container.Invalidate(); } }