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