Example #1
0
        private void AddPhoneRow(Phone newPhone)
        {
            datatablePhones.NRows = RowNum + 1;

            var phoneDataCombo = new yListComboBox();

            phoneDataCombo.WidthRequest = 100;
            phoneDataCombo.SetRenderTextFunc((PhoneType x) => x.Name);
            phoneDataCombo.ItemsList = phoneTypes;
            phoneDataCombo.Binding.AddBinding(newPhone, e => e.PhoneType, w => w.SelectedItem).InitializeFromSource();
            datatablePhones.Attach(phoneDataCombo, (uint)0, (uint)1, RowNum, RowNum + 1, AttachOptions.Fill | AttachOptions.Expand, (AttachOptions)0, (uint)0, (uint)0);

            Gtk.Label textPhoneLabel = new Gtk.Label("+7");
            datatablePhones.Attach(textPhoneLabel, (uint)1, (uint)2, RowNum, RowNum + 1, (AttachOptions)0, (AttachOptions)0, (uint)0, (uint)0);

            var phoneDataEntry = new yValidatedEntry();

            phoneDataEntry.ValidationMode = ValidationType.phone;
            phoneDataEntry.Tag            = newPhone;
            phoneDataEntry.WidthChars     = 19;
            phoneDataEntry.Binding.AddBinding(newPhone, e => e.Number, w => w.Text).InitializeFromSource();
            datatablePhones.Attach(phoneDataEntry, (uint)2, (uint)3, RowNum, RowNum + 1, AttachOptions.Expand | AttachOptions.Fill, (AttachOptions)0, (uint)0, (uint)0);

            HandsetView handset = new HandsetView(newPhone.DigitsNumber);

            datatablePhones.Attach(handset, (uint)3, (uint)4, RowNum, RowNum + 1, (AttachOptions)0, (AttachOptions)0, (uint)0, (uint)0);

            Gtk.Label textAdditionalLabel = new Gtk.Label("доб.");
            datatablePhones.Attach(textAdditionalLabel, (uint)4, (uint)5, RowNum, RowNum + 1, (AttachOptions)0, (AttachOptions)0, (uint)0, (uint)0);

            var additionalDataEntry = new yEntry();

            additionalDataEntry.WidthRequest = 50;
            additionalDataEntry.MaxLength    = 10;
            additionalDataEntry.Binding.AddBinding(newPhone, e => e.Additional, w => w.Text).InitializeFromSource();
            datatablePhones.Attach(additionalDataEntry, (uint)5, (uint)6, RowNum, RowNum + 1, AttachOptions.Fill, (AttachOptions)0, (uint)0, (uint)0);

            Gtk.Label labelName = new Gtk.Label("имя:");
            datatablePhones.Attach(labelName, (uint)6, (uint)7, RowNum, RowNum + 1, (AttachOptions)0, (AttachOptions)0, (uint)0, (uint)0);

            var entryName = new yEntry();

            //entryName.WidthRequest = 50;
            entryName.MaxLength = 150;
            entryName.Binding.AddBinding(newPhone, e => e.Name, w => w.Text).InitializeFromSource();
            datatablePhones.Attach(entryName, (uint)7, (uint)8, RowNum, RowNum + 1, AttachOptions.Expand | AttachOptions.Fill, (AttachOptions)0, (uint)0, (uint)0);

            Gtk.Button deleteButton = new Gtk.Button();
            Gtk.Image  image        = new Gtk.Image();
            image.Pixbuf          = Stetic.IconLoader.LoadIcon(this, "gtk-delete", global::Gtk.IconSize.Menu);
            deleteButton.Image    = image;
            deleteButton.Clicked += OnButtonDeleteClicked;
            datatablePhones.Attach(deleteButton, (uint)8, (uint)9, RowNum, RowNum + 1, (AttachOptions)0, (AttachOptions)0, (uint)0, (uint)0);

            datatablePhones.ShowAll();

            RowNum++;
        }
Example #2
0
        private void AddPersonRow(Person newPerson)
        {
            datatablePersons.NRows = RowNum + 1;

            Gtk.Label labelSurame = new Gtk.Label("Фамилия:");
            datatablePersons.Attach(labelSurame, (uint)0, (uint)1, RowNum, RowNum + 1, (AttachOptions)0, (AttachOptions)0, (uint)0, (uint)0);

            var nameDataEntry = new yEntry();

            nameDataEntry.Binding.AddBinding(newPerson, e => e.Lastname, w => w.Text).InitializeFromSource();
            nameDataEntry.WidthChars = 20;
            datatablePersons.Attach(nameDataEntry, (uint)1, (uint)2, RowNum, RowNum + 1, AttachOptions.Expand | AttachOptions.Fill, (AttachOptions)0, (uint)0, (uint)0);

            Gtk.Label labelName = new Gtk.Label("Имя:");
            datatablePersons.Attach(labelName, (uint)2, (uint)3, RowNum, RowNum + 1, (AttachOptions)0, (AttachOptions)0, (uint)0, (uint)0);

            var surnameDataEntry = new yEntry();

            surnameDataEntry.Binding.AddBinding(newPerson, e => e.Name, w => w.Text).InitializeFromSource();
            surnameDataEntry.WidthChars = 20;
            datatablePersons.Attach(surnameDataEntry, (uint)3, (uint)4, RowNum, RowNum + 1, AttachOptions.Expand | AttachOptions.Fill, (AttachOptions)0, (uint)0, (uint)0);

            Gtk.Label labelPatronymic = new Gtk.Label("Отчество:");
            datatablePersons.Attach(labelPatronymic, (uint)4, (uint)5, RowNum, RowNum + 1, (AttachOptions)0, (AttachOptions)0, (uint)0, (uint)0);

            var patronymicDataEntry = new yEntry();

            patronymicDataEntry.Binding.AddBinding(newPerson, e => e.PatronymicName, w => w.Text).InitializeFromSource();
            patronymicDataEntry.WidthChars = 20;
            datatablePersons.Attach(patronymicDataEntry, (uint)5, (uint)6, RowNum, RowNum + 1, AttachOptions.Expand | AttachOptions.Fill, (AttachOptions)0, (uint)0, (uint)0);

            Gtk.Button deleteButton = new Gtk.Button();
            Gtk.Image  image        = new Gtk.Image();
            image.Pixbuf          = Stetic.IconLoader.LoadIcon(this, "gtk-delete", global::Gtk.IconSize.Menu);
            deleteButton.Image    = image;
            deleteButton.Clicked += OnButtonDeleteClicked;
            datatablePersons.Attach(deleteButton, (uint)6, (uint)7, RowNum, RowNum + 1, (AttachOptions)0, (AttachOptions)0, (uint)0, (uint)0);

            datatablePersons.ShowAll();

            RowNum++;
        }
Example #3
0
        /// <summary>
        /// Запуск простого диалога редактирования справочника
        /// </summary>
        /// <returns>Возвращает экземпляр сохраненного объекта, загруженного в сессии диалога. То есть не переданный объект.
        /// Если пользователь отказался от сохранения возвращаем null.
        /// </returns>
        /// <param name="editObject">Объект для редактирования. Если null создаем новый объект.</param>
        public static object RunSimpleDialog(Window parent, System.Type objectType, object editObject)
        {
            string actionTitle = null;
            string dialogTitle = null;

            if (editObject == null)
            {
                var names = DomainHelper.GetSubjectNames(objectType);
                if (names != null && names.Gender != GrammaticalGender.Unknown)
                {
                    switch (names.Gender)
                    {
                    case GrammaticalGender.Feminine:
                        actionTitle = $"Простое редактирование новой {names.Genitive}";
                        dialogTitle = $"Новая {names.Nominative}";
                        break;

                    case GrammaticalGender.Masculine:
                        actionTitle = $"Простое редактирование нового {names.Genitive}";
                        dialogTitle = $"Новый {names.Nominative}";
                        break;

                    case GrammaticalGender.Neuter:
                        actionTitle = $"Простое редактирование нового {names.Genitive}";
                        dialogTitle = $"Новое {names.Nominative}";
                        break;
                    }
                }
                else
                {
                    actionTitle = "Диалог простого редактирования";
                }
            }
            else
            {
                actionTitle = $"Простое редактирование '{DomainHelper.GetObjectTilte(editObject)}'";
                var names = DomainHelper.GetSubjectNames(objectType);
                if (names != null && names.Genitive != null)
                {
                    dialogTitle = $"Редактирование {names.Genitive}";
                }
            }
            using (IUnitOfWork uow = UnitOfWorkFactory.CreateWithoutRoot(actionTitle))
            {
                //Создаем объект редактирования
                object tempObject;
                if (editObject == null)
                {
                    tempObject = Activator.CreateInstance(objectType);
                }
                else
                {
                    if (editObject is IDomainObject)
                    {
                        tempObject = uow.GetById(objectType, (editObject as IDomainObject).Id);
                    }
                    else
                    {
                        throw new InvalidCastException("У объекта переданного для запуска простого диалога, нет интерфейса IDomainObject, объект не может быть открыт.");
                    }
                }

                //Создаем диалог
                Gtk.Dialog editDialog = new Gtk.Dialog(dialogTitle ?? "Редактирование", parent, Gtk.DialogFlags.Modal);
                editDialog.AddButton("Отмена", ResponseType.Cancel);
                editDialog.AddButton("Сохранить", ResponseType.Ok);
                Gtk.Table editDialogTable = new Table(1, 2, false);
                Label     LableName       = new Label("Название:");
                LableName.Justify = Justification.Right;
                editDialogTable.Attach(LableName, 0, 1, 0, 1);
                yEntry inputNameEntry = new yEntry();
                inputNameEntry.WidthRequest = 300;
                inputNameEntry.Binding.AddBinding(tempObject, "Name", w => w.Text).InitializeFromSource();
                editDialogTable.Attach(inputNameEntry, 1, 2, 0, 1);
                editDialog.VBox.Add(editDialogTable);

                //Запускаем диалог
                editDialog.ShowAll();
                int result = editDialog.Run();
                if (result == (int)ResponseType.Ok)
                {
                    string name = (string)tempObject.GetPropertyValue("Name");
                    if (String.IsNullOrWhiteSpace(name))
                    {
                        var    att         = DomainHelper.GetSubjectNames(tempObject);
                        string subjectName = att != null ? att.Accusative : null;
                        string msg         = String.Format("Название {0} пустое и не будет сохранено.",
                                                           string.IsNullOrEmpty(subjectName) ? "элемента справочника" : subjectName
                                                           );
                        MessageDialogHelper.RunWarningDialog(msg);
                        logger.Warn(msg);
                        editDialog.Destroy();
                        return(null);
                    }
                    var list = uow.Session.CreateCriteria(objectType)
                               .Add(Restrictions.Eq("Name", name))
                               .Add(Restrictions.Not(Restrictions.IdEq(DomainHelper.GetId(tempObject))))
                               .List();
                    if (list.Count > 0)
                    {
                        var    att         = DomainHelper.GetSubjectNames(tempObject);
                        string subjectName = att != null?att.Nominative.StringToTitleCase() : null;

                        string msg = String.Format("{0} с таким названием уже существует.",
                                                   string.IsNullOrEmpty(subjectName) ? "Элемент справочника" : subjectName
                                                   );
                        MessageDialogHelper.RunWarningDialog(msg);
                        logger.Warn(msg);
                        editDialog.Destroy();
                        return(list [0]);
                    }
                    uow.TrySave(tempObject);
                    uow.Commit();
                }
                else
                {
                    tempObject = null;
                }

                editDialog.Destroy();
                return(tempObject);
            }
        }
Example #4
0
        private void DrawNewRow(Phone newPhone)
        {
            if (hBoxList?.FirstOrDefault() == null)
            {
                hBoxList = new List <HBox>();
            }

            HBox hBox = new HBox();

            var phoneDataCombo = new yListComboBox();

            phoneDataCombo.WidthRequest = 100;
            phoneDataCombo.SetRenderTextFunc((PhoneType x) => x.Name);
            phoneDataCombo.ItemsList = viewModel.PhoneTypes;
            phoneDataCombo.Binding.AddBinding(newPhone, e => e.PhoneType, w => w.SelectedItem).InitializeFromSource();
            phoneDataCombo.Binding.AddFuncBinding(viewModel, e => !e.ReadOnly, w => w.Sensitive).InitializeFromSource();
            hBox.Add(phoneDataCombo);
            hBox.SetChildPacking(phoneDataCombo, true, true, 0, PackType.Start);

            Label textPhoneLabel = new Label("+7");

            hBox.Add(textPhoneLabel);
            hBox.SetChildPacking(textPhoneLabel, false, false, 0, PackType.Start);

            var phoneDataEntry = new yValidatedEntry();

            phoneDataEntry.ValidationMode = ValidationType.phone;
            phoneDataEntry.Tag            = newPhone;
            phoneDataEntry.WidthRequest   = 125;
            phoneDataEntry.WidthChars     = 19;
            phoneDataEntry.Binding.AddBinding(newPhone, e => e.Number, w => w.Text).InitializeFromSource();
            phoneDataEntry.Binding.AddFuncBinding(viewModel, e => !e.ReadOnly, w => w.IsEditable).InitializeFromSource();
            hBox.Add(phoneDataEntry);
            hBox.SetChildPacking(phoneDataEntry, false, false, 0, PackType.Start);

            HandsetView handset = new HandsetView(newPhone.DigitsNumber);

            hBox.Add(handset);
            hBox.SetChildPacking(handset, false, false, 0, PackType.Start);

            var textAdditionalLabel = new Gtk.Label("доб.");

            hBox.Add(textAdditionalLabel);
            hBox.SetChildPacking(textAdditionalLabel, false, false, 0, PackType.Start);

            var additionalDataEntry = new yEntry();

            additionalDataEntry.WidthRequest = 50;
            additionalDataEntry.MaxLength    = 10;
            additionalDataEntry.Binding.AddBinding(newPhone, e => e.Additional, w => w.Text).InitializeFromSource();
            additionalDataEntry.Binding.AddFuncBinding(viewModel, e => !e.ReadOnly, w => w.IsEditable).InitializeFromSource();
            hBox.Add(additionalDataEntry);
            hBox.SetChildPacking(additionalDataEntry, false, false, 0, PackType.Start);

            var labelName = new Label("имя:");

            hBox.Add(labelName);
            hBox.SetChildPacking(labelName, false, false, 0, PackType.Start);

            var entryName = new yEntry();

            entryName.MaxLength = 150;
            entryName.Binding.AddBinding(newPhone, e => e.Name, w => w.Text).InitializeFromSource();
            entryName.Binding.AddFuncBinding(viewModel, e => !e.ReadOnly, w => w.IsEditable).InitializeFromSource();
            hBox.Add(entryName);
            hBox.SetChildPacking(entryName, true, true, 0, PackType.Start);

            yButton deleteButton = new yButton();
            Image   image        = new Image();

            image.Pixbuf          = Stetic.IconLoader.LoadIcon(this, "gtk-delete", IconSize.Menu);
            deleteButton.Image    = image;
            deleteButton.Clicked += (sender, e) => viewModel.DeleteItemCommand.Execute(hBox.Data["phone"] as Phone);
            deleteButton.Binding.AddFuncBinding(viewModel, e => !e.ReadOnly, w => w.Sensitive).InitializeFromSource();
            hBox.Add(deleteButton);
            hBox.SetChildPacking(deleteButton, false, false, 0, PackType.Start);

            hBox.Data.Add("phone", newPhone);             //Для свзяки виджета и телефона
            hBox.ShowAll();

            vboxPhones.Add(hBox);
            vboxPhones.ShowAll();
            hBoxList.Add(hBox);
        }