Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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();
        }
Пример #4
0
        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);
        }
Пример #5
0
        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();
        }
Пример #6
0
        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);
        }
Пример #7
0
        public void Top(object sender, EventArgs e)
        {
            IDrawObj obj = _selectedObjs[0];

            Objs.Remove(obj);
            Objs.Add(obj);
            obj.Invalidate();
        }
Пример #8
0
        public void Last(object sender, EventArgs e)
        {
            IDrawObj obj = _selectedObjs[0];

            Objs.Remove(obj);
            Objs.Insert(0, obj);
            obj.Invalidate();
        }
Пример #9
0
        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));
        }
Пример #10
0
        public override void InvalidateObject(IDrawObj sender)
        {
            const int  width = 3;
            RectangleF rf    = sender.Bound;

            rf.Inflate(width, width);

            RectInvalidate = RectangleF.Union(RectInvalidate, rf);
        }
Пример #11
0
        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);
            }
        }
Пример #12
0
        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);
        }
Пример #13
0
 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);
         }
     }
 }
Пример #14
0
        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();
            }
        }
Пример #15
0
        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();
            }
        }
Пример #16
0
 /// <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);
         }
     }
 }
Пример #17
0
        public override void ObjectCanSelectChanged(IDrawObj obj)
        {
            base.ObjectCanSelectChanged(obj);

            //如果是不可操作图层,从选择列表中删除
            if (!obj.CanSelect())
            {
                if (_selectedObjs.Contains(obj))
                {
                    _selectedObjs.Remove(obj);
                    _controlPoint.ChangeSelectObj(_selectedObjs);
                }
            }
        }
Пример #18
0
        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();
            }
        }
Пример #19
0
 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;
     }
 }
Пример #20
0
 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);
         }
     }
 }
Пример #21
0
        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);
        }
Пример #22
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();
        }
Пример #23
0
        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();
        }
Пример #24
0
        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;
                    }
                }
            }
        }
Пример #25
0
        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);
            }
        }
Пример #26
0
        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();
        }
Пример #27
0
        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();
        }
Пример #28
0
        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();
        }
Пример #29
0
        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);
            }
        }
Пример #30
0
        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();
            }
        }