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 octets1718647342 17/06/2024 20:02:22
| _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.

Document créé le 16/10/2009, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/cs-bibliobrol-source-rf-view/controls/PersonEditControl.cs.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.