示例#1
0
    /// <summary>
    /// Called when the tool is activated.
    /// </summary>
    protected override void OnActivateTool() {
      try {
        // Used to get a collection of entities from the 
        // NetronClipboard.
        Type entitiesType = typeof(CollectionBase<IDiagramEntity>);

        // First calculate the insertion point based on the
        // current location of the cursor.
        InsertionPoint = Point.Round(
        Controller.View.ViewToWorld(
        Controller.View.DeviceToView(
        Controller.ParentControl.PointToClient(Cursor.Position))));

        IDataObject data = Clipboard.GetDataObject();
        string format = typeof(CopyTool).FullName;
        if (data.GetDataPresent(format)) {
          MemoryStream stream = data.GetData(format) as MemoryStream;
          CollectionBase<IDiagramEntity> collection = null;
          GenericFormatter<BinaryFormatter> f =
              new GenericFormatter<BinaryFormatter>();
          //Anchors collection is a helper collection to re-connect connectors to their parent
          Anchors.Clear();
          //but is it actually a stream coming this application?
          collection = f.Deserialize<CollectionBase<IDiagramEntity>>(stream);
          UnwrapBundle(collection);

        } else if (NetronClipboard.ContainsData(entitiesType)) {
          CollectionBase<IDiagramEntity> collection =
              (CollectionBase<IDiagramEntity>)NetronClipboard.Get(
              entitiesType);

          UnwrapBundle(collection.DeepCopy());
        } else if (data.GetDataPresent(DataFormats.Bitmap)) {
          Bitmap bmp = data.GetData(DataFormats.Bitmap) as Bitmap;
          if (bmp != null) {
            #region Unwrap into an image shape
            //TODO: Insert the image shape here
            ImageShape shape = new ImageShape();
            shape.Image = bmp;
            shape.Location = InsertionPoint;
            Controller.Model.AddShape(shape);
            #endregion
          }
        } else if (data.GetDataPresent(DataFormats.Text)) {
          string text = (string)data.GetData(typeof(string));
          TextOnly textShape = new TextOnly(Controller.Model);
          textShape.Text = text;
          textShape.Location = InsertionPoint;
          Controller.Model.AddShape(textShape);
        }
      }
      catch (Exception exc) {
        throw new InconsistencyException("The Paste operation failed.", exc);
      }
      finally {
        DeactivateTool();
      }

    }
示例#2
0
        /// <summary>
        /// This method will be called when the user has finished drawing a ghost rectangle or bundle
        /// and initiates the actual creation of a bundle and the addition to the model via the appropriate command.
        /// </summary>
        protected override void GhostDrawingComplete()
        {
            try
            {
                TextOnly shape = new TextOnly(this.Controller.Model);
                shape.Width = (int) Rectangle.Width;
                shape.Height = (int) Rectangle.Height;
                shape.Text = "New label";

                AddShapeCommand cmd = new AddShapeCommand(this.Controller, shape, new Point((int) Rectangle.X, (int)Rectangle.Y));
                this.Controller.UndoManager.AddUndoCommand(cmd);
                cmd.Redo();
                TextEditor.GetEditor(shape);
                TextEditor.Show();
            }
            catch
            {
                base.Controller.DeactivateTool(this);
                Controller.View.Invalidate();
                throw;
            }

            base.Controller.DeactivateTool(this);
        }
示例#3
0
    /// <summary>
    /// On dragdrop.
    /// </summary>
    /// <param name="e">The <see cref="T:KeyEventArgs"/> instance containing the event data.</param>
    public bool OnDragDrop(DragEventArgs e) {
      Control control = (Control)this.Controller.ParentControl;
      Point p = control.PointToClient(new Point(e.X, e.Y));
      IShape shape = null;
      IDataObject iDataObject = e.Data;
      string text;

      if (iDataObject.GetDataPresent("IShape")) {
        shape = (IShape)iDataObject.GetData("IShape");
        shape.Model = Controller.Model;
      } else if (iDataObject.GetDataPresent(typeof(string))) {
        text = iDataObject.GetData(
                typeof(string)).ToString();

        //foreach (string shapeType in Enum.GetNames(typeof(ShapeTypes)))
        //{
        //    if (shapeType.ToString().ToLower() == text.ToLower())
        //    {
        //        shape = ShapeFactory.GetShape(shapeType);
        //        break;
        //    }
        //}

        // If our shape is still null, then the text being dragged
        // onto the canvas is not the name of a shape, so add a
        // TextOnly shape with the text.
        //if (shape == null)
        //{
        //    shape = new TextOnly(Controller.Model);
        //    (shape as TextOnly).Text = text;
        //}

        shape = new TextOnly(Controller.Model);
        (shape as TextOnly).Text = text;
      } else if (iDataObject.GetDataPresent(DataFormats.FileDrop)) {
        try {
          string[] files = (string[])iDataObject.GetData(
              DataFormats.FileDrop);

          foreach (string fileName in files) {
            FileInfo info = new FileInfo(fileName);

            if (info.Exists) {
              FileShape fileShape = new FileShape(fileName);
              AddShapeCommand cmd = new AddShapeCommand(
                  this.Controller,
                  fileShape,
                  p);
              this.Controller.UndoManager.AddUndoCommand(cmd);
              cmd.Redo();
              p.Offset(20, 20);
            }
          }

          feedbackCursor = null;
        }
        catch {
        }
      } else if (iDataObject.GetDataPresent(typeof(Bitmap))) {
        // Doesn't support dropping images yet - having problems
        // getting images off the clipboard.
        shape = new ImageShape(Controller.Model);
        (shape as ImageShape).Image =
            (Image)iDataObject.GetData(typeof(Bitmap));
        return true;
      }

      if (shape != null) {
        shape.MoveBy(new Point(p.X, p.Y));


        //ComplexRectangle shape = new ComplexRectangle();
        //shape.Rectangle = new Rectangle(p.X, p.Y, 150, 70);
        //shape.Text = "Just an example, work in progress.";

        //TextLabel shape = new TextLabel();
        //shape.Rectangle = new Rectangle(p.X, p.Y, 150, 70);
        //shape.Text = "Just an example, work in progress.";

        AddShapeCommand cmd = new AddShapeCommand(
            this.Controller,
            shape,
            p);
        this.Controller.UndoManager.AddUndoCommand(cmd);
        cmd.Redo();
        feedbackCursor = null;
        return true;
      }

      // The drop event wasn't handled here.
      return false;
    }
示例#4
0
        /// <summary>
        /// On dragdrop.
        /// </summary>
        /// <param name="e">The <see cref="T:KeyEventArgs"/> instance containing the event data.</param>
        public bool OnDragDrop(DragEventArgs e)
        {
            Control     control     = (Control)this.Controller.ParentControl;
            Point       p           = control.PointToClient(new Point(e.X, e.Y));
            IShape      shape       = null;
            IDataObject iDataObject = e.Data;
            string      text;

            if (iDataObject.GetDataPresent("IShape"))
            {
                shape       = (IShape)iDataObject.GetData("IShape");
                shape.Model = Controller.Model;
            }
            else if (iDataObject.GetDataPresent(typeof(string)))
            {
                text = iDataObject.GetData(
                    typeof(string)).ToString();

                //foreach (string shapeType in Enum.GetNames(typeof(ShapeTypes)))
                //{
                //    if (shapeType.ToString().ToLower() == text.ToLower())
                //    {
                //        shape = ShapeFactory.GetShape(shapeType);
                //        break;
                //    }
                //}

                // If our shape is still null, then the text being dragged
                // onto the canvas is not the name of a shape, so add a
                // TextOnly shape with the text.
                //if (shape == null)
                //{
                //    shape = new TextOnly(Controller.Model);
                //    (shape as TextOnly).Text = text;
                //}

                shape = new TextOnly(Controller.Model);
                (shape as TextOnly).Text = text;
            }
            else if (iDataObject.GetDataPresent(DataFormats.FileDrop))
            {
                try {
                    string[] files = (string[])iDataObject.GetData(
                        DataFormats.FileDrop);

                    foreach (string fileName in files)
                    {
                        FileInfo info = new FileInfo(fileName);

                        if (info.Exists)
                        {
                            FileShape       fileShape = new FileShape(fileName);
                            AddShapeCommand cmd       = new AddShapeCommand(
                                this.Controller,
                                fileShape,
                                p);
                            this.Controller.UndoManager.AddUndoCommand(cmd);
                            cmd.Redo();
                            p.Offset(20, 20);
                        }
                    }

                    feedbackCursor = null;
                }
                catch {
                }
            }
            else if (iDataObject.GetDataPresent(typeof(Bitmap)))
            {
                // Doesn't support dropping images yet - having problems
                // getting images off the clipboard.
                shape = new ImageShape(Controller.Model);
                (shape as ImageShape).Image =
                    (Image)iDataObject.GetData(typeof(Bitmap));
                return(true);
            }

            if (shape != null)
            {
                shape.MoveBy(new Point(p.X, p.Y));


                //ComplexRectangle shape = new ComplexRectangle();
                //shape.Rectangle = new Rectangle(p.X, p.Y, 150, 70);
                //shape.Text = "Just an example, work in progress.";

                //TextLabel shape = new TextLabel();
                //shape.Rectangle = new Rectangle(p.X, p.Y, 150, 70);
                //shape.Text = "Just an example, work in progress.";

                AddShapeCommand cmd = new AddShapeCommand(
                    this.Controller,
                    shape,
                    p);
                this.Controller.UndoManager.AddUndoCommand(cmd);
                cmd.Redo();
                feedbackCursor = null;
                return(true);
            }

            // The drop event wasn't handled here.
            return(false);
        }
示例#5
0
        /// <summary>
        /// Called when the tool is activated.
        /// </summary>
        protected override void OnActivateTool()
        {
            try {
                // Used to get a collection of entities from the
                // NetronClipboard.
                Type entitiesType = typeof(CollectionBase <IDiagramEntity>);

                // First calculate the insertion point based on the
                // current location of the cursor.
                InsertionPoint = Point.Round(
                    Controller.View.ViewToWorld(
                        Controller.View.DeviceToView(
                            Controller.ParentControl.PointToClient(Cursor.Position))));

                IDataObject data   = Clipboard.GetDataObject();
                string      format = typeof(CopyTool).FullName;
                if (data.GetDataPresent(format))
                {
                    MemoryStream stream = data.GetData(format) as MemoryStream;
                    CollectionBase <IDiagramEntity>    collection = null;
                    GenericFormatter <BinaryFormatter> f          =
                        new GenericFormatter <BinaryFormatter>();
                    //Anchors collection is a helper collection to re-connect connectors to their parent
                    Anchors.Clear();
                    //but is it actually a stream coming this application?
                    collection = f.Deserialize <CollectionBase <IDiagramEntity> >(stream);
                    UnwrapBundle(collection);
                }
                else if (NetronClipboard.ContainsData(entitiesType))
                {
                    CollectionBase <IDiagramEntity> collection =
                        (CollectionBase <IDiagramEntity>)NetronClipboard.Get(
                            entitiesType);

                    UnwrapBundle(collection.DeepCopy());
                }
                else if (data.GetDataPresent(DataFormats.Bitmap))
                {
                    Bitmap bmp = data.GetData(DataFormats.Bitmap) as Bitmap;
                    if (bmp != null)
                    {
                        #region Unwrap into an image shape
                        //TODO: Insert the image shape here
                        ImageShape shape = new ImageShape();
                        shape.Image    = bmp;
                        shape.Location = InsertionPoint;
                        Controller.Model.AddShape(shape);
                        #endregion
                    }
                }
                else if (data.GetDataPresent(DataFormats.Text))
                {
                    string   text      = (string)data.GetData(typeof(string));
                    TextOnly textShape = new TextOnly(Controller.Model);
                    textShape.Text     = text;
                    textShape.Location = InsertionPoint;
                    Controller.Model.AddShape(textShape);
                }
            }
            catch (Exception exc) {
                throw new InconsistencyException("The Paste operation failed.", exc);
            }
            finally {
                DeactivateTool();
            }
        }