1 /*
2  *  "GEDKeeper", the personal genealogical database editor.
3  *  Copyright (C) 2009-2018 by Sergey V. Zhdanovskih.
4  *
5  *  This file is part of "GEDKeeper".
6  *
7  *  This program is free software: you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation, either version 3 of the License, or
10  *  (at your option) any later version.
11  *
12  *  This program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
19  */
20 
21 using System;
22 using System.Windows.Forms;
23 using BSLib.Design.MVP.Controls;
24 using GDModel;
25 using GKCore;
26 using GKCore.Controllers;
27 using GKCore.Interfaces;
28 using GKCore.Lists;
29 using GKCore.MVP.Views;
30 using GKCore.Types;
31 using GKUI.Components;
32 
33 namespace GKUI.Forms
34 {
35     public sealed partial class GroupEditDlg : EditorDialog, IGroupEditDlg
36     {
37         private readonly GroupEditDlgController fController;
38 
39         private readonly GKSheetList fMembersList;
40         private readonly GKSheetList fNotesList;
41         private readonly GKSheetList fMediaList;
42 
43         public GDMGroupRecord Group
44         {
45             get { return fController.Group; }
46             set { fController.Group = value; }
47         }
48 
49         #region View Interface
50 
51         ISheetList IGroupEditDlg.NotesList
52         {
53             get { return fNotesList; }
54         }
55 
56         ISheetList IGroupEditDlg.MediaList
57         {
58             get { return fMediaList; }
59         }
60 
61         ISheetList IGroupEditDlg.MembersList
62         {
63             get { return fMembersList; }
64         }
65 
66         ITextBox IGroupEditDlg.Name
67         {
68             get { return GetControlHandler<ITextBox>(edName); }
69         }
70 
71         #endregion
72 
GroupEditDlg(IBaseWindow baseWin)73         public GroupEditDlg(IBaseWindow baseWin)
74         {
75             InitializeComponent();
76 
77             btnAccept.Image = UIHelper.LoadResourceImage("Resources.btn_accept.gif");
78             btnCancel.Image = UIHelper.LoadResourceImage("Resources.btn_cancel.gif");
79 
80             fMembersList = new GKSheetList(pageMembers);
81             fMembersList.SetControlName("fMembersList"); // for purpose of tests
82             fMembersList.OnModify += ModifyMembersSheet;
83 
84             fNotesList = new GKSheetList(pageNotes);
85             fMediaList = new GKSheetList(pageMultimedia);
86 
87             // SetLocale()
88             Title = LangMan.LS(LSID.LSID_WinGroupEdit);
89             btnAccept.Text = LangMan.LS(LSID.LSID_DlgAccept);
90             btnCancel.Text = LangMan.LS(LSID.LSID_DlgCancel);
91             lblName.Text = LangMan.LS(LSID.LSID_Title);
92             pageMembers.Text = LangMan.LS(LSID.LSID_Members);
93             pageNotes.Text = LangMan.LS(LSID.LSID_RPNotes);
94             pageMultimedia.Text = LangMan.LS(LSID.LSID_RPMultimedia);
95 
96             fController = new GroupEditDlgController(this);
97             fController.Init(baseWin);
98 
99             fMembersList.ListModel = new GroupMembersSublistModel(baseWin, fController.LocalUndoman);
100             fNotesList.ListModel = new NoteLinksListModel(baseWin, fController.LocalUndoman);
101             fMediaList.ListModel = new MediaLinksListModel(baseWin, fController.LocalUndoman);
102         }
103 
ModifyMembersSheet(object sender, ModifyEventArgs eArgs)104         private void ModifyMembersSheet(object sender, ModifyEventArgs eArgs)
105         {
106             if (eArgs.Action == RecordAction.raJump) {
107                 fController.JumpToRecord(eArgs.ItemData as GDMIndividualRecord);
108             }
109         }
110 
btnAccept_Click(object sender, EventArgs e)111         private void btnAccept_Click(object sender, EventArgs e)
112         {
113             DialogResult = fController.Accept() ? DialogResult.OK : DialogResult.None;
114         }
115 
btnCancel_Click(object sender, EventArgs e)116         private void btnCancel_Click(object sender, EventArgs e)
117         {
118             DialogResult = fController.Cancel() ? DialogResult.Cancel : DialogResult.None;
119         }
120 
OnFormClosing(FormClosingEventArgs e)121         protected override void OnFormClosing(FormClosingEventArgs e)
122         {
123             base.OnFormClosing(e);
124             e.Cancel = fController.CheckChangesPersistence();
125         }
126     }
127 }
128