public SpecialAbilityView(Monster monster, SpecialAbility ability)
        {
            _Monster = monster;
            _Ability = ability;


            BackgroundColor = UIColor.Clear;
            BorderColor     = 0xFFFFFFFF.UIColor();
            Border          = 2.0f;
            Gradient        = new GradientHelper(CMUIColors.PrimaryColorDark);


            _DeleteButton = new UIButton();
            _DeleteImage  = UIImage.FromFile("Images/External/redx.png");
            _DeleteButton.SetImage(_DeleteImage, UIControlState.Normal);
            _DeleteButton.TouchUpInside += delegate
            {
                _Monster.SpecialAbilitiesList.Remove(_Ability);
            };

            _SpecialTextButton = new GradientButton();
            _SpecialTextButton.SetTitleColor(0x00000000.UIColor(), UIControlState.Normal);
            _SpecialTextManager = new ButtonPropertyManager(_SpecialTextButton, MainUI.MainView, _Ability, "Text")
            {
                Multiline = true
            };
            _Manager.Add(_SpecialTextManager);

            _NameButton = new GradientButton();
            CMStyles.TextFieldStyle(_NameButton);
            _Manager.Add(new ButtonPropertyManager(_NameButton, MainUI.MainView, _Ability, "Name"));

            _TypeButton = new GradientButton();
            ButtonPropertyManager typeMan = new ButtonPropertyManager(_TypeButton, MainUI.MainView, _Ability, "Type");

            typeMan.ValueList = new List <KeyValuePair <object, string> > {
                new KeyValuePair <object, string>("Ex", "Ex"),
                new KeyValuePair <object, string>("Sp", "Sp"),
                new KeyValuePair <object, string>("Su", "Su"),
                new KeyValuePair <object, string>("", "-"),
            };
            _Manager.Add(typeMan);

            Add(_DeleteButton);
            Add(_NameButton);
            Add(_TypeButton);
            Add(_SpecialTextButton);

            LayoutSubviews();
        }
        public override void Draw(CGRect rect)
        {
            SetNeedsDisplay();

            base.Draw(rect);



            rect.X      += _border / 2.0f;
            rect.Width  -= _border;
            rect.Y      += _border / 2.0f;
            rect.Height -= _border;


            CGContext cr = UIGraphics.GetCurrentContext();

            //cr.SetAllowsAntialiasing(true);

            float [] cornerRadii = new float[4];
            if (_CornerRadii != null)
            {
                Array.Copy(_CornerRadii, cornerRadii, 4);
            }
            else if (_SkipCorners != null)
            {
                for (int i = 0; i < 4; i++)
                {
                    cornerRadii[i] = _SkipCorners[i]?0f:CornerRadius;
                }
            }
            else
            {
                for (int i = 0; i < 4; i++)
                {
                    cornerRadii[i] = CornerRadius;
                }
            }


            GradientHelper useGradient = _gradient;
            bool           reversed    = false;

            if (!Enabled && _DisabledGradient != null)
            {
                useGradient = _DisabledGradient;
            }
            else if (Highlighted && Tracking)
            {
                if (_HighlightedGradient == null)
                {
                    reversed = true;
                }
                else
                {
                    _gradient = _HighlightedGradient;
                }
            }



            cr.DrawRoundRect(useGradient.Gradient, rect, cornerRadii, reversed?(float)Math.PI / 2.0f:(float)-Math.PI / 2.0f);


            if (_border > 0)
            {
                if (_SkipCorners == null && _CornerRadii == null)
                {
                    GraphicUtils.RoundRectPath(cr, rect, _cornerRadius);
                }
                else if (_SkipCorners != null)
                {
                    GraphicUtils.RoundRectPath(cr, rect, _cornerRadius, _SkipCorners);
                }
                else if (_CornerRadii != null)
                {
                    GraphicUtils.RoundRectPath(cr, rect, _CornerRadii);
                }

                cr.SetStrokeColor(_borderColor.CGColor.Components);
                cr.SetLineWidth(_border);
                cr.StrokePath();
            }

            if (BonusImage != null)
            {
                cr.TranslateCTM(0, BonusImage.Size.Height + _BonusImageRect.Y * 2.0f);
                cr.ScaleCTM(1.0f, -1.0f);

                cr.DrawImage(_BonusImageRect, _BonusImage.CGImage);
            }
        }