PersonEditControl.cs

Description du code

PersonEditControl.cs est un fichier du projet BiblioBrol.
Ce fichier est situé dans /var/www/bin/sniplets/bibliobrol/src/.

Projet BiblioBrol :

Gestion de media en CSharp.

Pour plus d'infos, vous pouvez consulter la brève analyse.

Code source ou contenu du fichier

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using be.gaudry.bibliobrol.model;
  9. using be.gaudry.bibliobrol.model.identity;
  10. using be.gaudry.bibliobrol.view.utils;
  11. using be.gaudry.bibliobrol.view.dialogs;
  12. using be.gaudry.events;
  13. using be.gaudry.model.drawing;
  14. using be.gaudry.bibliobrol.config;
  15.  
  16. namespace be.gaudry.bibliobrol.view.controls
  17. {
  18. public partial class PersonEditControl : UserControl
  19. {
  20. #region declarations and constructor
  21.  
  22. public delegate void EnableEventHandler(bool enabled);
  23. private bool pictureModified;
  24. private Image birthdateAddImg, birthdateDelImg;
  25. private ActorRole[] roles;
  26. public PersonEditControl()
  27. {
  28. roles = ModelAdapter.getRoles().ToArray();
  29. pictureModified = false;
  30. birthdateAddImg = global::be.gaudry.bibliobrol.Properties.Resources.brolCalendar;
  31. birthdateDelImg = global::be.gaudry.bibliobrol.Properties.Resources.brolDelBtn;
  32. InitializeComponent();
  33. fillSexCB();
  34.  
  35. persSexCB.DataSource = Enum.GetValues(typeof(SEX));
  36. defRoleCB.DisplayMember = "Name";
  37. defRoleCB.Items.AddRange(roles);
  38. }
  39. #endregion
  40.  
  41. #region properties and events
  42. [
  43. Category("PersonEditControl"),
  44. Browsable(true),
  45. Description("Fired on enable save")
  46. ]
  47. public event EnableEventHandler onEnableSave;
  48. #endregion
  49.  
  50. #region initializations
  51. /// <summary>
  52. /// Used only once into constructor call through the init() method call
  53. /// Sex values are same for all persons
  54. /// Selected value is set by fillPersInfos() method call
  55. /// </summary>
  56. private void fillSexCB()
  57. {
  58. persSexCB.Items.AddRange(Enum.GetNames(typeof(SEX)));
  59. }
  60. #endregion
  61.  
  62. #region public methods
  63. public Person getPerson()
  64. {
  65. return personBindingSource.Current as Person;
  66. }
  67. public void setPerson(Person person)
  68. {
  69.  
  70. Person oldPerson = personBindingSource.Current as Person;
  71. if (oldPerson != null && !oldPerson.Equals(new Person()))
  72. {
  73. if (!oldPerson.Edited)
  74. {
  75. ModelAdapter.unlockPerson(oldPerson.Id);
  76. }
  77. if (persSaveBtn.Enabled)
  78. {
  79. //prompt to save previous person
  80. DialogResult r = MessageBox.Show(
  81. this,
  82. String.Format("Sauver les modifications apportées à {0}?", oldPerson.ToString()),
  83. "Modification de la personne",
  84. MessageBoxButtons.YesNo,
  85. MessageBoxIcon.Question,
  86. MessageBoxDefaultButton.Button1
  87. );
  88. if (r == DialogResult.Yes)
  89. {
  90. savePerson();
  91. }
  92. }
  93. }
  94. //set new person
  95. personBindingSource.DataSource = person;
  96. unlockPersonBtn.Visible = person.Edited;
  97.  
  98. /*
  99.   persLNameTB.Modified = false;
  100.   persFNameTB.Modified = false;
  101.   persPseudoTB.Modified = false;
  102.   */
  103. showBirthdate(!person.Birthdate.Equals(new DateTime(0L)));
  104. setPersImg(person);
  105.  
  106. //persDelBtn.Enabled = true;
  107. displayRoles(person);
  108. ActorRole role = ModelAdapter.getDefaultRole(person);
  109. if (role != null)
  110. {
  111. defRoleCB.SelectedItem = role;
  112. }
  113. else
  114. {
  115. defRoleCB.SelectedIndex = -1;
  116. }
  117. enableSavePers(false);
  118. }
  119. public void clearForm()
  120. {
  121. personBindingSource.DataSource = new Person();
  122. //label1.Text = "";
  123. showBirthdate(false);
  124. persImg.Image = persImg.InitialImage;
  125. enableSavePers(false);
  126. defRoleCB.SelectedIndex = -1;
  127. rolesDGV.Rows.Clear();
  128. }
  129. public void unlockPersonIfAllowed()
  130. {
  131. //get previous pers if exists
  132. Person person = personBindingSource.Current as Person;
  133. //unlock previous selected person
  134. if (person != null && person.Id >= 0 && !person.Edited)
  135. ModelAdapter.unlockPerson(person.Id);
  136. }
  137. #endregion
  138.  
  139. #region save
  140. public void onPersonSave_Click(object sender, EventArgs e)
  141. {
  142. savePerson();
  143. }
  144. private void savePerson()
  145. {
  146. Person person = personBindingSource.Current as Person;
  147. if (person != null)
  148. {
  149. if (person.Edited)
  150. {
  151. MessageBox.Show(
  152. this,
  153. "Cette personne est en cours d'édition par un autre utilisateur et ne peut être sauvée à cet instant",
  154. "Sauvegarde d'une personne",
  155. MessageBoxButtons.OK,
  156. MessageBoxIcon.Exclamation,
  157. MessageBoxDefaultButton.Button1);
  158. return;
  159. }
  160. if (!dateTimePicker.Visible)
  161. {
  162. person.Birthdate = new DateTime(0L);
  163. }
  164. if (person.Id >= 0)
  165. {
  166. ModelAdapter.updatePerson(person);
  167. }
  168. else
  169. {
  170. int testId = ModelAdapter.personExists(person);
  171. if (testId > 0)
  172. {
  173. DialogResult r = MessageBox.Show(
  174. this,
  175. String.Format("Il existe déjà une personne nommée {0} {1} dans l'application.\n\rDésirez-vous utiliser cette personne ?\n\rNon pour sauver une nouvelle personne ?",
  176. person.LastName,
  177. person.FirstName
  178. ),
  179. "Sauvegarde de la personne",
  180. MessageBoxButtons.YesNo,
  181. MessageBoxIcon.Question,
  182. MessageBoxDefaultButton.Button1
  183. );
  184. if (r == DialogResult.Yes)
  185. {
  186. person.Id = testId;
  187. }
  188. else
  189. {
  190. person.Id = ModelAdapter.insertPerson(person);
  191. }
  192. }
  193. else
  194. {
  195. person.Id = ModelAdapter.insertPerson(person);
  196. }
  197. }
  198. //must do AFTER update or insert to have the right ID
  199. checkPersonImage(person);
  200. ActorRole role = defRoleCB.SelectedItem as ActorRole;
  201. if (role != null)
  202. {
  203. ModelAdapter.setDefaultRole(person, role);
  204. }
  205. enableSavePers(false);
  206. //onPersonsRoleIndexChanged(personsByRoleTSCB, null);
  207. }
  208. }
  209.  
  210. private void enableSavePers(bool enabled)
  211. {
  212. persSaveBtn.Enabled = enabled;
  213. persSaveTsMic.Enabled = enabled;
  214. if (onEnableSave != null)
  215. {
  216. onEnableSave(enabled);
  217. }
  218.  
  219. }
  220. #endregion
  221.  
  222. #region detect person modifications
  223.  
  224. private void persLNameTB_ModifiedChanged(object sender, EventArgs e)
  225. {
  226. try
  227. {
  228. persLNameTB.DataBindings["Text"].WriteValue();
  229. enableSavePers(true);
  230. }
  231. catch (Exception) { }
  232. }
  233.  
  234. private void persFNameTB_ModifiedChanged(object sender, EventArgs e)
  235. {
  236. try
  237. {
  238. persFNameTB.DataBindings["Text"].WriteValue();
  239. enableSavePers(true);
  240. }
  241. catch (Exception) { }
  242. }
  243. private void persPseudoTB_ModifiedChanged(object sender, EventArgs e)
  244. {
  245. try
  246. {
  247. persPseudoTB.DataBindings["Text"].WriteValue();
  248. enableSavePers(true);
  249. }
  250. catch (Exception) { }
  251. }
  252.  
  253. private void persSexCB_SelectionChangeCommitted(object sender, EventArgs e)
  254. {
  255. try
  256. {
  257. persSexCB.DataBindings["SelectedItem"].WriteValue();
  258. enableSavePers(true);
  259. }
  260. catch (Exception) { }
  261. }
  262.  
  263. private void dateTimePicker_ValueChanged(object sender, EventArgs e)
  264. {
  265.  
  266. try
  267. {
  268. dateTimePicker.DataBindings["Value"].WriteValue();
  269. enableSavePers(true);
  270. }
  271. catch (Exception) { }
  272. }
  273. private void defRoleCB_SelectionChangeCommitted(object sender, EventArgs e)
  274. {
  275. enableSavePers(true);
  276. }
  277.  
  278. #endregion
  279.  
  280. #region misc private methods
  281. private void addBirthdateBtn_Click(object sender, EventArgs e)
  282. {
  283. dateTimePicker.Value = DateTime.Now;
  284. showBirthdate(!dateTimePicker.Visible);
  285. }
  286.  
  287. private void showBirthdate(bool show)
  288. {
  289. if (show)
  290. {
  291. addBirthdateBtn.Image = birthdateDelImg;
  292. }
  293. else
  294. {
  295. addBirthdateBtn.Image = birthdateAddImg;
  296. }
  297. //addBirthdateBtn.Visible = !show;
  298. dateTimePicker.Visible = show;
  299. }
  300. /// <summary>
  301. /// Force unlock even if current person was locked by another user
  302. /// </summary>
  303. /// <param name="sender"></param>
  304. /// <param name="e"></param>
  305. private void unlockPersonBtn_Click(object sender, EventArgs e)
  306. {
  307. Person person = personBindingSource.Current as Person;
  308. if (person != null && person.Id >= 0)
  309. {
  310. if (ModelAdapter.unlockPerson(person.Id))
  311. {
  312. unlockPersonBtn.Visible = false;
  313. person.Edited = false;
  314. }
  315. }
  316. }
  317.  
  318. public void onOpenUserForm_Click(object sender, EventArgs e)
  319. {
  320. Person person = personBindingSource.Current as Person;
  321. if (person != null)
  322. {
  323. User user = ModelAdapter.getUser(person.Id);
  324. if (user != null)
  325. {
  326. UserForm eidform = new UserForm();
  327. //eidform.MdiParent = this.MdiParent;
  328. //eidform.WindowState = this.WindowState;
  329.  
  330. user.Edited = person.Edited;
  331. eidform.setUser(user);
  332.  
  333. eidform.Show();
  334. }
  335. else
  336. {
  337. MessageBox.Show(
  338. this,
  339. "Impossible de déterminer la personne à éditer.\r\nVeuillez sélectionner une personne.",
  340. "Fiche d'identité",
  341. MessageBoxButtons.OK,
  342. MessageBoxIcon.Exclamation,
  343. MessageBoxDefaultButton.Button1
  344. );
  345. }
  346. }
  347. }
  348. #endregion
  349.  
  350. #region photo
  351. public void onModifyImage_Click(object sender, EventArgs e)
  352. {
  353. ImageHelper.setImageLocation(this.ParentForm, persImg);
  354. pictureModified = true;
  355. enableSavePers(true);
  356. }
  357.  
  358. private void setPersImg(Person person)
  359. {
  360. persImg.ImageLocation = Img.getPersImgPath(person);
  361. infoTT.SetToolTip(persImg, persImg.ImageLocation);
  362. persImgBtn.Text = (System.IO.File.Exists(persImg.ImageLocation)) ? "Modifier la photo" : "Ajouter une photo";
  363. }
  364.  
  365. private void checkPersonImage(Person person)
  366. {
  367. if (pictureModified)
  368. {
  369. if (person.Id >= 0)
  370. {
  371. string newImgPath = Img.getPersImgPath(person);
  372. bool newImage = true;
  373. if (System.IO.File.Exists(newImgPath))
  374. {
  375. DialogResult r = MessageBox.Show(
  376. this,
  377. "Une photo était déjà présente pour cette personne.\r\nDésirez-vous écraser l'ancien fichier par cette nouvelle photo?",
  378. "Sauvegarde de photo",
  379. MessageBoxButtons.YesNo,
  380. MessageBoxIcon.Question,
  381. MessageBoxDefaultButton.Button1
  382. );
  383. newImage = (r == DialogResult.Yes);
  384. }
  385. if (newImage)
  386. {
  387. persImg.Image.Save(newImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);
  388. }
  389. }
  390. else
  391. {
  392. MessageBox.Show(
  393. this,
  394. "Cette personne n'est pas encore sauvée, impossible de sauver sa photo.",
  395. "Sauvegarde de photo",
  396. MessageBoxButtons.OK,
  397. MessageBoxIcon.Error,
  398. MessageBoxDefaultButton.Button1
  399. );
  400. }
  401. }
  402. }
  403. #endregion
  404.  
  405. #region drag and drop
  406. private void onEditActorDragDrop(object sender, DragEventArgs e)
  407. {
  408. if (EventMethods.imageDragDrop(sender, e, persImg))
  409. {
  410. pictureModified = true;
  411. enableSavePers(true);
  412. }
  413. }
  414.  
  415. private void onEditActorDragEnter(object sender, DragEventArgs e)
  416. {
  417. e.Effect = DragDropEffects.All;
  418. }
  419. #endregion
  420.  
  421. #region role methods
  422. private void displayRoles(Person person)
  423. {
  424. List<ActorRole> roles = ModelAdapter.getRoles(person);
  425. rolesDGV.Rows.Clear();
  426. foreach (ActorRole role in roles)
  427. {
  428. if (role.RoleId != Config.BibliobrolId)
  429. {
  430. rolesDGV.Rows.Add(new Object[] { role.Name, role.Info, role.RoleId, role.Value });
  431. }
  432. }
  433. }
  434.  
  435. private void rolesDGV_SelectionChanged(object sender, EventArgs e)
  436. {
  437. brolInfoTsMi.Enabled = (rolesDGV.SelectedRows.Count == 1);
  438. }
  439.  
  440. private void addRoleTsMi_Click(object sender, EventArgs e)
  441. {
  442.  
  443. }
  444. private void brolInfoTsMi_Click(object sender, EventArgs e)
  445. {
  446. if (rolesDGV.SelectedRows.Count == 1)
  447. {
  448. int brolId = (int)rolesDGV.SelectedRows[0].Cells[2].Value;
  449. BrolPropertiesForm form = new BrolPropertiesForm();
  450. form.Brol = ModelAdapter.getBrol(brolId, false);
  451. form.ShowDialog(this);
  452. }
  453. }
  454. #endregion
  455. }
  456. }

Structure et Fichiers du projet

Afficher/masquer...


Répertoires contenus dans /var/www/bin/sniplets/bibliobrol/src/view/controls/ 
IcôneNomTailleModification
IcôneNomTailleModification
| _ Répertoire parent0 octets1731654872 15/11/2024 08:14:32
| _dao0 octets1541007199 31/10/2018 18:33:19
| _toolBars0 octets1541007200 31/10/2018 18:33:20
| _webInfo0 octets1541007201 31/10/2018 18:33:21
Fichiers contenus dans /var/www/bin/sniplets/bibliobrol/src/view/controls/ 
IcôneNomTailleModificationAction
IcôneNomTailleModificationAction
Afficher le fichier .cs|.csPersonSelectControl.cs4.89 Ko31/10/2018 18:32:57-refusé-
Afficher le fichier .cs|.csCreateStructureControl.cs7.49 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .cs|.csDBSelectControl.cs3.23 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .cs|.csPersonInfoControl.Designer.cs13.13 Ko31/10/2018 18:32:57-refusé-
Afficher le fichier .resx|.resxDirControl.resx5.68 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .resx|.resxBrolInfoControl.resx6.06 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .cs|.csBrolEditControl.cs25.36 Ko31/10/2018 18:32:55-refusé-
Afficher le fichier .cs|.csPersonEditControl.cs15.67 Ko31/10/2018 18:32:57-refusé-
Afficher le fichier .cs|.csSearchControl.cs18.88 Ko31/10/2018 18:32:57-refusé-
Afficher le fichier .resx|.resxDBSelectControl.resx5.88 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .cs|.csBrolInfoControl.Designer.cs22.81 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .cs|.csInfoControl.cs2.04 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .cs|.csDirControl.Designer.cs5.83 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .cs|.csSelectConsoleVerboseControl.cs5.49 Ko31/10/2018 18:32:57-refusé-
Afficher le fichier .cs|.csPersonSelectedEventArgs.cs779 octets31/10/2018 18:32:57-refusé-
Afficher le fichier .resx|.resxSelectConsoleVerboseControl.resx5.68 Ko31/10/2018 18:32:57-refusé-
Afficher le fichier .cs|.csTodoControl.cs13.73 Ko31/10/2018 18:32:58-refusé-
Afficher le fichier .cs|.csSelectConsoleVerboseControl.Designer.cs45.29 Ko31/10/2018 18:32:57-refusé-
Afficher le fichier .cs|.csBrolEditControl.Designer.cs40.09 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .cs|.csDBSelectControl.Designer.cs6.71 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .cs|.csPersonEditControl.Designer.cs27.54 Ko31/10/2018 18:32:57-refusé-
Afficher le fichier .resx|.resxPersonInfoControl.resx6.42 Ko31/10/2018 18:32:57-refusé-
Afficher le fichier .cs|.csCreateStructureControl.Designer.cs5 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .cs|.csDirPathModifiedEventArgs.cs871 octets31/10/2018 18:32:56-refusé-
Afficher le fichier .cs|.csInfoControl.Designer.cs3.18 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .cs|.csBrolInfoControl.cs5.14 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .resx|.resxBrolEditControl.resx6.04 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .cs|.csPersonInfoControl.cs2.22 Ko31/10/2018 18:32:57-refusé-
Afficher le fichier .resx|.resxInfoControl.resx5.68 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .cs|.csDirControl.cs4.51 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .resx|.resxCreateStructureControl.resx6.44 Ko31/10/2018 18:32:56-refusé-
Afficher le fichier .cs|.csSerieEditControl.cs2.58 Ko31/10/2018 18:32:58-refusé-
Afficher le fichier .resx|.resxSerieEditControl.resx7.45 Ko31/10/2018 18:32:58-refusé-
Afficher le fichier .resx|.resxTodoControl.resx6.76 Ko31/10/2018 18:32:58-refusé-
Afficher le fichier .cs|.csTodoControl.Designer.cs28.27 Ko31/10/2018 18:32:58-refusé-
Afficher le fichier .resx|.resxSearchControl.resx6.43 Ko31/10/2018 18:32:57-refusé-
Afficher le fichier .cs|.csPersonSelectControl.Designer.cs14.74 Ko31/10/2018 18:32:57-refusé-
Afficher le fichier .cs|.csSearchControl.Designer.cs25.75 Ko31/10/2018 18:32:57-refusé-
Afficher le fichier .resx|.resxPersonEditControl.resx7.96 Ko31/10/2018 18:32:57-refusé-
Afficher le fichier .cs|.csSerieEditControl.Designer.cs6.65 Ko31/10/2018 18:32:58-refusé-
Afficher le fichier .resx|.resxPersonSelectControl.resx5.68 Ko31/10/2018 18:32:57-refusé-

Utilisation de l'explorateur de code

  • Navigation :
    • Un clic sur une icône de répertoire ouvre ce répertoire pour en afficher les fichiers.
    • Lorsque le répertoire en cours ne contient pas de sous-répertoires il est possible de remonter vers le répertoire parent.
    • La structure de répertoires en treetable (tableau en forme d'arborescence) n'est plus possibledans cette version.
    • Un clic sur une icône de fichier ouvre ce fichier pour en afficher le code avec la coloration syntaxique adaptée en fonction du langage principal utilisé dans le fichier.
  • Affichage :
    • Il est possible de trier les répertoires ou les fichiers selon certains critères (nom, taille, date).
  • Actions :
    • Les actions possible sur les fichiers dépendent de vos droits d'utilisateur sur le site. Veuillez activer le mode utilisateur pour activer les actions.

English translation

You have asked to visit this site in English. For now, only the interface is translated, but not all the content yet.

If you want to help me in translations, your contribution is welcome. All you need to do is register on the site, and send me a message asking me to add you to the group of translators, which will give you the opportunity to translate the pages you want. A link at the bottom of each translated page indicates that you are the translator, and has a link to your profile.

Thank you in advance.

Document created the 16/10/2009, last modified the 26/10/2018
Source of the printed document:https://www.gaudry.be/en/cs-bibliobrol-source-rf-view/controls//PersonEditControl.cs.html

The infobrol is a personal site whose content is my sole responsibility. The text is available under CreativeCommons license (BY-NC-SA). More info on the terms of use and the author.