コード例 #1
0
ファイル: MapObjects.cs プロジェクト: cyberslacking/Fork
        /// <summary>
        /// Remove object by index.
        /// Used for Undo.
        /// </summary>
        public void RemoveAt(int index)
        {
            DrawObject o = graphicsList[index];

            o.Clear();
            if (ehObjectChanged != null)
            {
                ehObjectChanged(o, OBJ_OPERATE.remove);
            }
            graphicsList.RemoveAt(index);
        }
コード例 #2
0
ファイル: MapObjects.cs プロジェクト: cyberslacking/Fork
 /// <summary>
 /// Insert object to specified place.
 /// Used for Undo.
 /// </summary>
 public void Insert(int index, DrawObject o)
 {
     if (index >= 0 && o != null)
     {
         o.Show();
         graphicsList.Insert(index, o);
         if (ehObjectChanged != null)
         {
             ehObjectChanged(o, OBJ_OPERATE.insert);
         }
     }
 }
コード例 #3
0
        // Replace objects in graphicsList with objects from list
        private void ReplaceObjects(MapObjects graphicsList, List <DrawObject> list)
        {
            for (int i = 0; i < graphicsList.Count; i++)
            {
                DrawObject replacement = null;

                foreach (DrawObject o in list)
                {
                    if (o.GetProperty().ID == graphicsList[i].GetProperty().ID)
                    {
                        replacement = o;
                        break;
                    }
                }

                if (replacement != null)
                {
                    graphicsList.Replace(i, replacement);
                }
            }
        }
コード例 #4
0
 // Create this command with DrawObject instance added to the list
 public CommandAdd(DrawObject drawObject) : base()
 {
     // Keep copy of added object
     this.drawObject = drawObject.Clone();
 }
コード例 #5
0
ファイル: ToolObject.cs プロジェクト: cyberslacking/Fork
 /// <summary>
 /// Add new object to draw DrawArea.Control.
 /// Function is called when user left-clicks draw area,
 /// and one of ToolObject-derived tools is active.
 /// </summary>
 /// <param name="control"></param>
 /// <param name="o"></param>
 protected void AddNewObject(MapControl control, DrawObject o)
 {
     control.Objects.UnselectAll();
     control.Add(o);
     control.SetDirty();
 }
コード例 #6
0
ファイル: MapObjects.cs プロジェクト: cyberslacking/Fork
 public void Add(DrawObject obj)
 {
     // insert to the top of z-order
     Insert(0, obj);
 }
コード例 #7
0
ファイル: ToolPointer.cs プロジェクト: cyberslacking/Fork
        /// <summary>
        /// Left mouse button is pressed
        /// </summary>
        /// <param name="control"></param>
        /// <param name="e"></param>
        public override void OnMouseDown(MapControl control, MouseEventArgs e, int zoom)
        {
            commandChangeState = null;
            wasMove            = false;

            selectMode = SelectionMode.None;
            Point point = new Point(e.X, e.Y);

            // Test for resizing (only if control is selected, cursor is on the handle)
            foreach (DrawObject o in control.Objects.Selection)
            {
                int handleNumber = o.HitTest(point);
                if (handleNumber > 0)
                {
                    selectMode = SelectionMode.Size;

                    // keep resized object in class member
                    resizedObject       = o;
                    resizedObjectHandle = handleNumber;

                    // Since we want to resize only one object, unselect all other objects
                    control.Objects.UnselectAll();
                    o.Selected = true;

                    commandChangeState = new CommandChangeState(control.Objects);

                    break;
                }
            }

            // Test for move (cursor is on the object)
            if (selectMode == SelectionMode.None)
            {
                int        n1 = control.Objects.Count;
                DrawObject o  = null;

                for (int i = 0; i < n1; i++)
                {
                    if (control.Objects[i].HitTest(point) == 0)
                    {
                        o = control.Objects[i];
                        break;
                    }
                }

                if (o != null)
                {
                    selectMode = SelectionMode.Move;

                    // Unselect all if Ctrl is not pressed and clicked object is not selected yet
                    if ((Control.ModifierKeys & Keys.Control) == 0 && !o.Selected)
                    {
                        control.Objects.UnselectAll();
                    }

                    // Select clicked object
                    o.Selected         = true;
                    commandChangeState = new CommandChangeState(control.Objects);
                    control.Cursor     = Cursors.Hand;
                }
            }

            // Net selection
            if (selectMode == SelectionMode.None)
            {
                // click on background
                if ((Control.ModifierKeys & Keys.Control) == 0)
                {
                    control.Objects.UnselectAll();
                }
                selectMode       = SelectionMode.NetSelection;
                control.Selected = true;
            }

            lastPoint.X  = e.X;
            lastPoint.Y  = e.Y;
            startPoint.X = e.X;
            startPoint.Y = e.Y;

            control.Refresh();

            if (selectMode == SelectionMode.NetSelection)
            {
                // Draw selection rectangle in initial position
                ControlPaint.DrawReversibleFrame(
                    control.RectangleToScreen(DrawRectangle.GetNormalizedRectangle(startPoint, lastPoint)),
                    Color.Black,
                    FrameStyle.Dashed);
            }
        }