public PlatformModel(PlatformPropertiesWindow ppw, Platform platform, Canvas canvas, DesignerItem item, Level level)
                : base(item, level)
            {
                Data = mPlatform = platform;
                mCanvas = canvas;

                if (!level.Obstacles.Contains(platform))
                {
                    level.Obstacles.Add(platform);
                }

                X = (int)platform.InitialPosition.X;
                Y = (int)platform.InitialPosition.Y;

                mChildren = new List<DesignerItem>();
            }
        public PointControl(PlatformPropertiesWindow parent, Canvas canvas, int index, List<Vector2> path)
            : base()
        {
            InitializeComponent();
            mPath = path;

            DesignerItem pointIndicator;

            Ellipse rindicator = new Ellipse();
            rindicator.Fill = Brushes.SpringGreen;
            rindicator.Stroke = Brushes.Black;

            TextBlock txt = new TextBlock();
            txt.Text = "" + index;
            txt.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
            txt.VerticalAlignment = System.Windows.VerticalAlignment.Center;

            Grid gr = new Grid();
            gr.Children.Add(rindicator);
            gr.Children.Add(txt);
            gr.IsHitTestVisible = false;

            pointIndicator = new DesignerItem();
            pointIndicator.CanResize = false;
            pointIndicator.Height = 15;
            pointIndicator.Width = 15;
            pointIndicator.Content = gr;
            pointIndicator.MinHeight = 2;
            pointIndicator.MinWidth = 2;

            Canvas.SetLeft(pointIndicator, path[index-1].X);
            Canvas.SetTop(pointIndicator, path[index-1].Y);
            Canvas.SetZIndex(pointIndicator, 1);

            canvas.Children.Add(pointIndicator);

            this.DataContext = pointIndicator.Model = mData = new PointControlModel(parent.mPoints, canvas, path, index, pointIndicator, txt);
            mData.Delete += RemoveItem;
            mData.Item.OnSelected += parent.HandleSelection;

            PointBlock.Text += index;
        }
 EventHandler<BoolEventArgs> NewPlatformHandler(DesignerItem item)
 {
     Platform en = new Platform();
     PlatformPropertiesWindow epw = new PlatformPropertiesWindow(en, this, item, Level);
     this.Children.Add(epw);
     return epw.SelectionHandler;
 }
        private void AddPlatform(Platform pltfrm)
        {
            DesignerItem item = CreateDesignerImage(mPlatformImage);

            PropertiesWindow pw = new PlatformPropertiesWindow(pltfrm, MyDesignerCanvas, item, Level);
            MyDesignerCanvas.Children.Add(pw);
            item.OnSelected += pw.SelectionHandler;
            item.IsSelected = true;
        }
            public void AddPoint(PlatformPropertiesWindow parent, int index)
            {
                if (index == -1)
                {
                    mPlatform.Path.Add(Vector2.Zero);
                    index = mPlatform.Path.Count;
                }

                PointControl pc = new PointControl(parent, mCanvas, index, mPlatform.Path);
                parent.mPoints.Children.Add(pc);

                pc.OrderChanged += (object sender, EventArgs e) =>
                {
                    int i = 0;
                    foreach (PointControl control in parent.mPoints.Children)
                        control.ChangeIndex(++i);
                };

                mChildren.Add((pc.DataContext as MovingModel).Item);

                int j = 0;
                foreach (PointControl control in parent.mPoints.Children)
                    control.ChangeIndex(++j);
            }