//process user input passed from view model
        private void ProcessString(string enteredStringValue)
        {
            //Split string by words
            MatchCollection matches = Regex.Matches(enteredStringValue, @"\w+[^\s]*\w+|\w");
            var             words   = new List <string>();

            //Store the words in a List of strings for analysis
            foreach (Match match in matches)
            {
                words.Add(match.Value.ToLower());
            }

            //set invalid int's used later in validation for shape creation.
            int width  = -1;
            int height = -1;


            //we know text input syntax will follow an example of:
            //Draw a/(n) <shape> with a/(n) <measurement> of <amount>
            // and a/(n) <Measurement> of <amount>
            //The height and width may be swapped in their placement or order of appearance
            //both W x H or H x W are valid inputs.
            if (words.Contains("width"))
            {
                var loc = words.IndexOf("width");
                int.TryParse(words[loc + 2], out width);
            }

            if (words.Contains("height"))
            {
                var loc = words.IndexOf("height");
                int.TryParse(words[loc + 2], out height);
            }

            //Now find the type of shape required and create it using the width and height
            //minor validation if width and height are not positive numbers no shape is built.
            if (words.Contains("rectangle") || words.Contains("square"))
            {
                var myRect = new ShapesModel {
                    Name = "rectangle", Width = width > -1 ? width : 0, Height = height > -1 ? height : 0
                };
                shapesDrawerVm.BeginDrawShape = ShapesModel.ConvertToRectangle(myRect);
            }
            else if (words.Contains("circle") || words.Contains("oval"))
            {
                var myCircle = new ShapesModel {
                    Name = "circle", Width = width > -1 ? width : 0, Height = height > -1 ? height : 0
                };
                shapesDrawerVm.BeginDrawShape = ShapesModel.ConvertToEllipse(myCircle);
            }
            else if (words.Contains("triangle"))
            {
                var myTriangle = new ShapesModel {
                    Name = "triangle", Width = width > -1 ? width : 0, Height = height > -1 ? height : 0
                };
                shapesDrawerVm.BeginDrawShape = ShapesModel.ConvertToPolygon(myTriangle);
            }
        }
Example #2
0
        void IPlugin.Init(object context)
        {
            solidIDE   = context as ISolidIDE;
            mainWindow = solidIDE.GetMainWindow();

            // Notebook
            noteBook = new Gtk.Notebook();

            designerDockItem          = mainWindow.DockFrame.AddItem("Designer");
            designerDockItem.Behavior =
                DockItemBehavior.CantAutoHide |
                DockItemBehavior.CantClose |
                DockItemBehavior.NeverFloating;
            designerDockItem.Expand         = true;
            designerDockItem.DrawFrame      = true;
            designerDockItem.Label          = "Designer";
            designerDockItem.Content        = noteBook;
            designerDockItem.DefaultVisible = true;
            designerDockItem.Visible        = true;

            // Menu
            var fileMenuItem = solidIDE.GetMenuItem <Gtk.ImageMenuItem>("File");
            var saveMenuItem = solidIDE.GetMenuItem <Gtk.ImageMenuItem>("File", "Save");

            saveMenuItem.Activated += HandleSaveActivated;
            var viewMenuItem     = solidIDE.GetMenuItem <Gtk.ImageMenuItem>("View");
            var designerMenuItem = solidIDE.GetMenuItem <Gtk.ImageMenuItem>("View", "Designer");

            designerMenuItem.Activated += HandleShowDesignerActivated;

            // Test
            var                   model       = new Model();
            ShapesModel           scene       = new ShapesModel();
            SelectionModel        selection   = new SelectionModel();
            InteractionStateModel interaction = new InteractionStateModel();
            var                   view        = new View <Cairo.Context, Model>();

            controller = new CompositeController <Gdk.Event, Cairo.Context, Model>();

            model.RegisterSubModel <ShapesModel>(scene);
            model.RegisterSubModel <SelectionModel>(selection);
            model.RegisterSubModel <InteractionStateModel>(interaction);
            model.ModelChanged += HandleModelChanged;

            //TODO: Scan plugins for shapes and viewers
            view.Viewers.Add(typeof(Model), new ModelViewer <Cairo.Context>());
            view.Viewers.Add(typeof(ShapesModel), new ShapeModelViewer());
            view.Viewers.Add(typeof(RectangleShape), new RectangleShapeViewer());
            view.Viewers.Add(typeof(EllipseShape), new EllipseShapeViewer());
            view.Viewers.Add(typeof(ArrowShape), new ArrowShapeViewer());
            view.Viewers.Add(typeof(BezierCurvedArrowShape), new BezierCurvedArrowShapeViewer());
            view.Viewers.Add(typeof(TextBlockShape), new TextBlockShapeViewer());
            view.Viewers.Add(typeof(SelectionModel), new SelectionModelViewer());
            view.Viewers.Add(typeof(Glue), new GlueViewer());
            view.Viewers.Add(typeof(InteractionStateModel), new InteractionStateModelViewer());
            view.Viewers.Add(typeof(FocusRectangleShape), new FocusRectangleShapeViewer());

            //scene.Shapes.Add(new RectangleShape(new Rectangle(0,0,100,50)));

            controller.SubControllers.Add(new ShapeSelectionController(model, view));
            chainController = new ChainController <Gdk.Event, Cairo.Context, Model>();
            chainController.SubControllers.Add(new ConnectorDragController(model, view));
            chainController.SubControllers.Add(new ShapeDragController(model, view));
            controller.SubControllers.Add(chainController);

            IDesigner designer = this;

            designer.AddSheet("Sheet", new Sheet <Gdk.Event, Cairo.Context, Model>(model, view, controller));
        }