public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            #region InputValueController

            lbl_inputController.StringValue =
                @"Min, Max and Number are binded to InputValueController fields. InputValueController can change " +
                @"increment field in NSSteper. Min, Max and Increment can be changed dinamicly, you can input " +
                @"what you want but those NSTextFields accept only integer";

            InputController = new InputValueController(tf,
                                                       (number) => _viewModel.MyProperty = number, () => _viewModel.MyProperty,
                                                       0, 200, stp);

            InputController.Number = _viewModel.MyProperty;

            #endregion

            #region Formatter

            lbl_formatter.StringValue =
                @"Min, Max and Increment NSTextFields accepts only integer. " +
                @"NSNumberFormatter created programaticly";

            var numberFormatter = new NSNumberFormatter();
            numberFormatter.NumberStyle = NSNumberFormatterStyle.None;

            tf_min.Formatter       = numberFormatter;
            tf_max.Formatter       = numberFormatter;
            tf_increment.Formatter = numberFormatter;

            #endregion

            #region Delegate

            lbl_delegate.StringValue =
                @"For this NSTextFiled was created my own delegate, " +
                @"change text or press Esc, Enter key and you will se how it work";

            var dlg = new TextFieldDelegate();
            dlg.PressedEscKey += (sender, e) =>
                                 _alertWindow.ShowAlert("Alert", "In NSTextField you pressed Esc key", "OK");

            dlg.PressedEnterKey += (sender, e) =>
                                   _alertWindow.ShowAlert("Alert", "In NSTextField you pressed Enter key", "OK");

            dlg.TextChanged += (sender, e) => {
                var textField = (NSTextField)sender;
                TfText = textField.StringValue;
            };


            tf_delegate.Delegate = dlg;

            #endregion
        }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            #region CancelButton

            btn_cancel.Activated += (sender, e) =>
                                    _alertWindow.ShowAlert("AlertWindow", "You clicled on CancelButton", "OK");

            lbl_cancel.StringValue = "You can activate this button if you will press Esc key";

            #endregion

            #region DefaultButton

            btn_default.Activated += (sender, e) =>
                                     _alertWindow.ShowAlert("AlertWindow", "You clicled on DefaultButton", "OK");

            lbl_default.StringValue = "You can activate this button if you will press Enter key";
            #endregion

            #region LinkButton

            btn_link.SetLinkString("Go to google");
            btn_link.Activated += (sender, e) =>
                                  NSWorkspace.SharedWorkspace.OpenUrl(new NSUrl("https://www.google.com"));

            lbl_link.StringValue = "LinkButton look like a link, it also open link after click";

            #endregion

            #region StateButton

            lbl_state.StringValue = "StateButton change image, title and tooltip after every click";

            btn_state.SetStateTitles("Folder", "Smart folder");
            btn_state.SetStateImages("NSFolder", "NSFolderSmart");
            btn_state.SetStateTooltips("NSFolder image", "NSFolderSmart image");

            btn_state.Activated += (sender, e) =>
                                   btn_state.BtnState = !btn_state.BtnState;

            //pragramaticly activate button
            btn_state.PerformClick(this);

            #endregion
        }
        private List <ITableRow> CreateDataForCellTable(string[] columnIdentifier, int countRows)
        {
            var list = new List <ITableRow>();

            var typeCellEnum = Enum.GetValues(typeof(TypeCell)).Cast <int>().ToList();
            var rand         = new Random();

            for (int i = 0; i < countRows; i++)
            {
                var tr = new TableRow();
                tr.RowHeight = 25;

                var wasCellTypes = new List <int>();
                foreach (var identifier in columnIdentifier)
                {
                    int cellType = -1;

                    while (true)
                    {
                        cellType = rand.Next(0, typeCellEnum.Count);

                        if (!wasCellTypes.Contains(cellType))
                        {
                            wasCellTypes.Add(cellType);
                            break;
                        }
                    }

                    ICell cell = null;
                    switch (cellType)
                    {
                    case 0:     //TextField
                        var tf = new TextFieldCell();
                        tf.Text = nameof(TextFieldCell);

                        cell = tf;
                        break;

                    case 1:     //TextView
                        var txtv = new TextViewCell();
                        txtv.Text = nameof(TextViewCell) + " change column size";

                        cell = txtv;
                        break;

                    case 2:     //Button
                        var btn = new ButtonCell();
                        btn.Text    = nameof(ButtonCell);
                        btn.Enabled = true;

                        btn.Activated = () => {
                            _alertWindow.ShowAlert(
                                nameof(ButtonCell),
                                "You activeted button",
                                "OK");
                        };

                        cell = btn;
                        break;

                    case 3:     //CheckBox
                        var ckb = new CheckboxCell();
                        ckb.Text            = nameof(CheckboxCell);
                        ckb.AllowMixedState = true;
                        ckb.Enabled         = true;

                        //also can use
                        //ckb.StateChanged += (state) => {};

                        ckb.Activated = () => {
                            var state = string.Empty;

                            if (ckb.State == null)
                            {
                                state = "mixed";
                            }
                            else
                            {
                                state = ckb.State.ToString();
                            }

                            _alertWindow.ShowAlert(
                                nameof(CheckboxCell),
                                "You activeted checkbox. State: " + state,
                                "OK");
                        };

                        cell = ckb;
                        break;

                    case 4:     //PopUp
                        var btnP = new PopUpButtonCell();
                        //popup.Text = nameof(PopUpButtonCell);
                        btnP.Enabled = true;

                        btnP.MenuTitles = new string[] {
                            "Title1", "Title2", "Title3"
                        };

                        //also can use
                        //btnP.SelectItem += (index) => {};

                        btnP.Activated = () => {
                            _alertWindow.ShowAlert(
                                nameof(CheckboxCell),
                                "You activeted checkbox. Selected title: " +
                                btnP.MenuTitles[btnP.IndexOfSelectedItem],
                                "OK");
                        };

                        cell = btnP;
                        break;
                    }

                    tr.Cells.Add(identifier, cell);
                }

                list.Add(tr);
            }

            return(list);
        }
        public ICell CreateCell(int cellType)
        {
            ICell cell = null;

            switch (cellType)
            {
            case 0:     //TextField
                var tf = new TextFieldCell();
                tf.Text = nameof(TextFieldCell);

                cell = tf;
                break;

            case 1:     //TextView
                var txtv = new TextViewCell();
                txtv.Text = nameof(TextViewCell) + " change column size";

                cell = txtv;
                break;

            case 2:     //Button
                var btn = new ButtonCell();
                btn.Text    = nameof(ButtonCell);
                btn.Enabled = true;

                btn.Activated = () => {
                    _alertWindow.ShowAlert(
                        nameof(ButtonCell),
                        "You activeted button",
                        "OK");
                };

                cell = btn;
                break;

            case 3:     //CheckBox
                var ckb = new CheckboxCell();
                ckb.Text            = nameof(CheckboxCell);
                ckb.AllowMixedState = true;
                ckb.Enabled         = true;

                //also can use
                //ckb.StateChanged += (state) => {};

                ckb.Activated = () => {
                    var state = string.Empty;

                    if (ckb.State == null)
                    {
                        state = "mixed";
                    }
                    else
                    {
                        state = ckb.State.ToString();
                    }

                    _alertWindow.ShowAlert(
                        nameof(CheckboxCell),
                        "You activeted checkbox. State: " + state,
                        "OK");
                };

                cell = ckb;
                break;

            case 4:     //PopUp
                var btnP = new PopUpButtonCell();
                //popup.Text = nameof(PopUpButtonCell);
                btnP.Enabled = true;

                btnP.MenuTitles = new string[] {
                    "Title1", "Title2", "Title3"
                };

                //also can use
                //btnP.SelectItem += (index) => {};

                btnP.Activated = () => {
                    _alertWindow.ShowAlert(
                        nameof(CheckboxCell),
                        "You activeted checkbox. Selected title: " +
                        btnP.MenuTitles[btnP.IndexOfSelectedItem],
                        "OK");
                };

                cell = btnP;
                break;
            }


            return(cell);
        }