//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); } }
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)); }