BrolForm.cs
Description du code
BrolForm.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
Code c# (BrolForm.cs) (717 lignes)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using be.gaudry.bibliobrol.model; using be.gaudry.bibliobrol.model.dao; using System.IO; using be.gaudry.bibliobrol.view.utils; using be.gaudry.bibliobrol.view.dialogs; using be.gaudry.observer; using be.gaudry.view; using be.gaudry.bibliobrol.view.controls.webInfo; using be.gaudry.view.utils; namespace be.gaudry.bibliobrol.view { public partial class BrolForm : MDIChildForm, IMDIChild { #region constructor and declarations /// <summary> /// if false, no updates are done on the brolInfoControl and BrolEditControl /// avoid view flickering on multiple brolsDGV_SelectionChanged call /// </summary> private bool viewUpdateAllowed = false; private BrolType brolType; private DataTable dataTable; private Brol brol; private int dGVColSerieNbr, dGVColIdNbr, dGVColTitleNbr; //private IBrolDao brolDao; private const String ALL_ACTORS = " -TOUS- "; private List<DAOUtils.BROL_FIELD> brolFields; //private List<DAOUtils.MEDIABROL_FIELD> mediabrolFields; /// <summary> /// Path of the persons images directory /// </summary> public BrolForm() { dGVColSerieNbr = -1; InitializeComponent(); this.SuspendLayout(); addToolStrip(mainTS); initBrolTypeMenu(); //ModelAdapter.Instance.addObserver(this); brol.Id = -1; //diaSetActorRole = new DiaSetActorRole(brolType,editActorsLB.Items); //brolInfoCtl.reset(); //cleanEditForm(); this.ResumeLayout(true); // Activates double buffering SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.DoubleBuffer, true); } #endregion #region brolsDGV #region mediabrols /*private void initMediabrolsDGV() { mediabrolFields = new List<DAOUtils.MEDIABROL_FIELD>(); mediabrolFields.Add(DAOUtils.MEDIABROL_FIELD.name); mediabrolFields.Add(DAOUtils.MEDIABROL_FIELD.owner); mediabrolFields.Add(DAOUtils.MEDIABROL_FIELD.date); } private void fillMediabrolsDGV() { if (mediabrolFields == null) initMediabrolsDGV(); //mediabrolsDGV.Rows.Clear(); mediabrolsDGV.DataSource = DAOFactory.Instance.getMediaBrolDao().loadMediaBrols(brol, mediabrolFields); } */ #endregion private void sortDataTable() { { brolsDGV.Sort(brolsDGV.Columns[dGVColSerieNbr], ListSortDirection.Descending); } { brolsDGV.Sort(brolsDGV.Columns[dGVColTitleNbr], ListSortDirection.Ascending); } else { brolsDGV.Sort(brolsDGV.Columns[dGVColIdNbr], ListSortDirection.Descending); } } private void fillDataTable(bool sortIds) { viewUpdateAllowed = false; //todo : fill datatable in another thread dataTable = DAOFactory.Instance.getBrolDao().loadDataTableVos(brolFields, brolType.Id); brolsDGV.DataSource = dataTable; //a type of media is selected /*foreach (Control control in editTP.Controls) { control.Enabled = true; }*/ foreach (ToolStripItem tsi in mainTS.Items) { tsi.Enabled = true; } //editDelBrolBtn.Enabled = false; //editDelBrolTSBtn.Enabled = false; viewUpdateAllowed = true; if (sortIds) { sortDataTable(); } } private void initMediaTable() { this.startProgress(); viewUpdateAllowed = false; brolInfoCtl.Visible = false; this.SuspendLayout(); //mediaTC.SuspendLayout(); //brolInfoCtl.SuspendLayout(); brolsDGV.Columns.Clear(); brol.BrolType = brolType; multiWebInfoControl.setBrolType(brolType); brolFields.Add(DAOUtils.BROL_FIELD.id); brolFields.Add(DAOUtils.BROL_FIELD.title); { brolFields.Add(DAOUtils.BROL_FIELD.date); } { brolFields.Add(DAOUtils.BROL_FIELD.serie); } fillDataTable(false); int colCounter = 0; //brolsDGV.DataSource = dataTable; if (brolsDGV.ColumnCount > 0) { dGVColIdNbr = colCounter; brolsDGV.Columns[colCounter].Width = 25; brolsDGV.Columns[colCounter++].HeaderText = "N°"; dGVColTitleNbr = colCounter; brolsDGV.Columns[colCounter].FillWeight = 0.3F; brolsDGV.Columns[colCounter].AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; brolsDGV.Columns[colCounter++].HeaderText = "Titre"; { brolsDGV.Columns[colCounter].HeaderText = "Date"; brolsDGV.Columns[colCounter++].Width = 75; } { dGVColSerieNbr = colCounter; brolsDGV.Columns[colCounter].HeaderText = "Série"; brolsDGV.Columns[colCounter].FillWeight = 0.2F; brolsDGV.Columns[colCounter].AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; brolsDGV.Columns[colCounter++].Width = 75; } else { dGVColSerieNbr = -1; } } brolsDGV.RowsDefaultCellStyle.BackColor = Color.White; brolsDGV.AlternatingRowsDefaultCellStyle.BackColor = Color.WhiteSmoke; sortDataTable(); brolsDGV.Visible = true; viewUpdateAllowed = true; loadSelectedBrol(); //brolInfoCtl.ResumeLayout(true); //mediaTC.ResumeLayout(true); brolInfoCtl.Visible = brolsDGV.RowCount > 0; this.ResumeLayout(true); this.stopProgress(); } private void brolsDGV_CellClick(object sender, DataGridViewCellEventArgs e) { loadSelectedBrol(); } private void brolsDGV_SelectionChanged(object sender, EventArgs e) { loadSelectedBrol(); } private void loadSelectedBrol() { if (viewUpdateAllowed) { int id = (brolsDGV.RowCount > 0) ? (int)brolsDGV.CurrentRow.Cells["id"].Value : -1; //brolInfoCtl.Visible = id > 0; try { ModelAdapter.unlockBrol(brol.Id); brol = ModelAdapter.getBrol(id, true); saveEditedBrolBtn.Text = "Sauver"; editSaveTSBtn.Text = "Sauver"; if (brol.BrolLocked) { editSaveTSBtn.Enabled = false; saveEditedBrolBtn.Enabled = false; StaticObservable.notify(new Notification(Notification.VERBOSE.error, "Edition d'un ouvrage", "Impossible de modifier cet ouvrage car il est verrouillé par un autre utilisateur", this)); } editBrolControl.setBrol(brol, brol.BrolType); /* if (brol.Id > 0) { fillMediabrolsDGV(); } */ brolInfoCtl.setBrol(brol); multiWebInfoControl.setParam(brol.Title); } catch (Exception ex) { StaticObservable.notify(new Notification(Notification.VERBOSE.lowError, "Edition d'un ouvrage", "Aucun ouvrage sélectionné", ex, this)); } #region enable modifications only if needed /* try { switch (mediaTC.SelectedTab.Name) { case "editTP": brol = ModelAdapter.getBrol(id, true); saveEditedBrolBtn.Text = "Sauver"; editSaveTSBtn.Text = "Sauver"; if (brol.BrolLocked) { editSaveTSBtn.Enabled = false; saveEditedBrolBtn.Enabled = false; StaticObservable.notify(new Notification(Notification.VERBOSE.error, "Edition d'un ouvrage", "Impossible de modifier cet ouvrage car il est verrouillé par un autre utilisateur", this)); } editBrolControl.setBrol(brol, brol.BrolType); break; case "biblioBrolItemTP": ModelAdapter.unlockBrol(brol.Id); if (brol.Id > 0) { fillMediabrolsDGV(); } break; default: brol = ModelAdapter.getBrol(id, false); //fillInfoTP(); brolInfoCtl.fill(brol); break; } multiWebInfoControl.setParam(brol.Title); } catch (Exception ex) { StaticObservable.notify(new Notification(Notification.VERBOSE.lowError, "Edition d'un ouvrage", "Aucun ouvrage sélectionné",ex, this)); }*/ #endregion } } #endregion #region brolsDGV sort and display options /* private void refreshOnAddTsMi_Click(object sender, EventArgs e) { DialogResult r = MessageBox.Show( this, "Si vous sélectionnez cette option, la table des ouvrages sera mise à jour à chaque ajout d'un ouvrage," + " mais il ne sera plus possible de modifier les images associées aux ouvrages." + "\n\nDésirez-vous tout de même cocher cette option ?", "Rafraîchissement de la table des ouvrages", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2 ); if (r == DialogResult.OK) { refreshOnAddTsMi.Checked = true; editBrolControl.ImageEditable = false; } else { refreshOnAddTsMi.Checked = false; editBrolControl.ImageEditable = true; } } private void refreshOnUpdateTsMi_Click(object sender, EventArgs e) { DialogResult r = MessageBox.Show( this, "Si vous sélectionnez cette option, la table des ouvrages sera mise à jour à chaque modification d'un ouvrage,"+ " mais il ne sera plus possible de modifier les images associées aux ouvrages."+ "\n\nDésirez-vous tout de même cocher cette option ?", "Rafraîchissement de la table des ouvrages", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2 ); if (r == DialogResult.OK) { refreshOnUpdateTsMi.Checked = true; editBrolControl.ImageEditable = false; } else { refreshOnUpdateTsMi.Checked = false; editBrolControl.ImageEditable = true; } }*/ private void brolFieldIdTsMi_Click(object sender, EventArgs e) { } private void brolFieldDateTsMi_Click(object sender, EventArgs e) { initMediaTable(); } private void brolFieldSerieTsMi_Click(object sender, EventArgs e) { initMediaTable(); } private void brolSortSerieTsMi_Click(object sender, EventArgs e) { sortDataTable(); } private void brolSortTitleTsMi_Click(object sender, EventArgs e) { sortDataTable(); } private void brolIdTsMi_Click(object sender, EventArgs e) { sortDataTable(); } #endregion #region menu private void initBrolTypeMenu() { List<BrolType> types = ModelAdapter.getBrolTypes(); foreach (BrolType type in types) { /* * We must initialize a new BrolType object to avoid than all anonym methods * share the same local variable type. * All instances of our anonym methods are executed by different thread than initBrolTypeMenu iterator method. * That makes all delegates have the last brolType object return by the iterator. */ BrolType tempType = type; //get image if exists, or default image System.Drawing.Image img = Img.getTypeImage(type.Name); mainTS.Items.Add( type.Name.Trim(), img, delegate { brolType = tempType; initMediaTable(); } ); /* fetchTSMenuItem.DropDownItems.Add( new ToolStripMenuItem( type.Name, img, delegate { brolType = tempType; initMediaTable(); }, "dyn" + type.Name + "TSMenuItem" ) ); */ brolsTsMi.DropDownItems.Add( new ToolStripMenuItem( "Charger ("+type.Name+")", img, delegate { brolType = tempType; initMediaTable(); }, "dyn" + type.Name + "TSMenuItem" ) ); } } #endregion #region display media /*private void cleanInfoTP() { infoSynopsisRTB.Text = ""; infoTitleLbl.Text = ""; infoActorsLB.Items.Clear(); infoCategoriesLB.Items.Clear(); infoCotationLbl.Text = "Cote : "; } private void fillInfoTP() { coverPB.ImageLocation = Img.getBrolImgPath(brol); coverPB.Size = new System.Drawing.Size(111, 149); infoTitleLbl.Text = brol.Title; infoSynopsisRTB.Text = brol.Synopsis; infoCategoriesLB.Items.Clear(); infoCategoriesLB.Items.AddRange(brol.Categories.ToArray()); int i = infoCategoriesLB.Items.Count; if (i > 0) { infoCategoriesLbl.Text = i + " catégorie(s) : "; infoCategoriesLB.Visible = true; } else { infoCategoriesLbl.Text = "Aucune catégorie trouvée"; infoCategoriesLB.Visible = false; } infoActorsLB.Items.Clear(); infoActorsLB.Items.AddRange(brol.Actors.ToArray()); i = infoActorsLB.Items.Count; if (i > 0) { infoActorsLbl.Text = i + " personne(s) / rôle(s) : "; infoActorsLB.Visible = true; } else { infoActorsLbl.Text = "Aucune personne trouvée"; infoActorsLB.Visible = false; } infoCotationLbl.Text = "Cote : " + brol.Cotation + "/10"; }*/ #endregion #region edit media #region general edit page /* /// <summary> /// Used to reset all brol edit from fields /// </summary> private void cleanEditForm() { editSynopsisRTB.Text = ""; editTitleTB.Text = ""; editCotationCB.SelectedIndex = -1; editCategoriesLB.Items.Clear(); editActorsLB.Items.Clear(); persImg.Image = global::be.gaudry.bibliobrol.Properties.Resources.brolImg; editSpCommentRTB.Text = ""; }*/ private void EditTP_Leave(object sender, EventArgs e) { if (brolsDGV.RowCount > 0) { int id = (int)brolsDGV.SelectedRows[0].Cells["id"].Value; ModelAdapter.unlockBrol(id); } } /* /// <summary> /// Used to fill all brol values from edit from fields /// </summary> private void setBrolFromEditForm() { } /// <summary> /// Used to fill all brol edit from fields from brol values /// </summary> private void fillEditForm(Brol brol) { } */ private void editTitleTB_TextChanged(object sender, EventArgs e) { //multiWebInfoControl.setParam(editTitleTB.Text); } #endregion #endregion //end edit media #region edit private void editLoadBtn_Click(object sender, EventArgs e) { try { int id = (int)brolsDGV.SelectedRows[0].Cells["id"].Value; brol = ModelAdapter.getBrol(id, true); editBrolControl.setBrol(brol, brol.BrolType); mediaTC.SelectedTab = editTP; } catch (Exception ex) { StaticObservable.notify(new Notification(Notification.VERBOSE.lowError, "Impossible de charger l'élément sélectionné", ex, this)); } } #endregion #region manage image private void deleteBrolCover() { bool deleted = false; String path = Img.getBrolImgPath(brol); try { File.Delete(path); deleted = true; } catch (Exception e) { StaticObservable.notify(new Notification(Notification.VERBOSE.lowError, "Suppression de l'affiche", e, this)); deleted = false; } if (deleted) StaticObservable.notify(new Notification(Notification.VERBOSE.opsResult, "Affiche supprimée : " + path, this)); } private void delImageBtn_Click(object sender, EventArgs e) { deleteBrolCover(); } #endregion #region overrided methods public override String ToString() { return "BrolForm"; } public override int GetHashCode() { //todo : reimplement GetHashCode return this.ToString().GetHashCode(); } #endregion #region Form private void BrolForm_Enter(object sender, EventArgs e) { this.Icon = global::be.gaudry.bibliobrol.Properties.Resources.brolIcon; } #endregion #region edit brol actions private void saveEditedBrolBtn_Click(object sender, EventArgs e) { bool refresh; if (brol.Id >= 0) { } else { } brol = editBrolControl.saveBrol(!refresh); if (refresh) { fillDataTable(true); } } private void onDeleteBrol_Click(object sender, EventArgs e) { DialogResult dr = MessageBox.Show( this, string.Format( "Désirez-vous supprimer définitivement l'ouvrage ?\n\r{0}", brol.Title ), "Suppression d'un ouvrage", MessageBoxButtons.OKCancel, MessageBoxIcon.Question ); if ( dr== DialogResult.OK && ModelAdapter.deleteBrol(brol)) { deleteBrolCover(); } } private void onAddBrol_Click(object sender, EventArgs e) { brol.BrolType = brolType; editBrolControl.setBrol(brol, brol.BrolType); mediaTC.SelectedTab = editTP; } private void onDuplicateBrol_Click(object sender, EventArgs e) { str.Append(brol.Title.Trim()); str.Append("\" portant l'identifiant n°"); str.Append(brol.Id); str.Append(" est dupliqué.\n\nTant qu'il n'est pas sauvé, son identifiant est égal à -1."); brol.Id = -1; foreach (Actor actor in brol.Actors) { actor.Status = STATUS.toAdd; } foreach (BrolCategory category in brol.Categories) { category.Status = STATUS.toAdd; } //keep only serieItems without argument (like film production, book collection, etc.). foreach (SerieItem serieItem in brol.SerieItems) { if (string.Empty.Equals(serieItem.getRank())) { serieItem.getSerie().Status = STATUS.toAdd; } } brol.SerieItems.RemoveAll(removeIfStatusIsNotToAdd); //brol.SerieItems.Clear(); editBrolControl.setBrol(brol); } private static bool removeIfStatusIsNotToAdd(SerieItem serieItem) { return (serieItem.getSerie().Status != STATUS.toAdd); } #endregion private void addMediabrolTSBtn_Click(object sender, EventArgs e) { editBrolControl.promptInsertMediabrol(brol); } #region IObserver Membres /* public void update(Notification notification) { //if (notification.Level.Equals(Notification.VERBOSE.modified)) switch (notification.Msg) { case "insertBrol" : if (refreshOnAddTsMi.Checked) { fillDataTable(true); } break; case "deleteBrol": if (refreshOnDeleteTsMi.Checked) { fillDataTable(true); } break; case "updateBrol": if (refreshOnUpdateTsMi.Checked) { fillDataTable(true); } break; default: break; } } */ #endregion #region save and print DGV actions private void printDGVAction(object sender, EventArgs e) { DgvFactory.print(brolsDGV, "Ouvrages de BiblioBrol", this); } private void saveDGVAction(object sender, EventArgs e) { DgvFactory.save(brolsDGV, "Ouvrages de BiblioBrol", this); } #endregion #region IMDIChild Members public MenuStrip getMainMenuStrip() { return mainMenuStrip; } #endregion private void showMediabrolsTsMi_Click(object sender, EventArgs e) { if (brol != null) { form.setBrol(brol); form.ShowDialog(this); } else { MessageBox.Show("Veuillez sélectionner un ouvrage avant de consulter les exemplaires associés"); } } } }
Structure et Fichiers du projet
Afficher/masquer...Icône | Nom | Taille | Modification |
Icône | Nom | Taille | Modification |
| _ | Répertoire parent | 0 octets | 1732211653 21/11/2024 18:54:13 |
| _ | wizards | 0 octets | 1541007184 31/10/2018 18:33:04 |
| _ | utils | 0 octets | 1541007184 31/10/2018 18:33:04 |
| _ | controls | 0 octets | 1541007178 31/10/2018 18:32:58 |
| _ | dialogs | 0 octets | 1541007183 31/10/2018 18:33:03 |
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.
Nederlandse vertaling
U hebt gevraagd om deze site in het Nederlands te bezoeken. Voor nu wordt alleen de interface vertaald, maar nog niet alle inhoud.Als je me wilt helpen met vertalingen, is je bijdrage welkom. Het enige dat u hoeft te doen, is u op de site registreren en mij een bericht sturen waarin u wordt gevraagd om u toe te voegen aan de groep vertalers, zodat u de gewenste pagina's kunt vertalen. Een link onderaan elke vertaalde pagina geeft aan dat u de vertaler bent en heeft een link naar uw profiel.
Bij voorbaat dank.
Document heeft de 16/10/2009 gemaakt, de laatste keer de 26/10/2018 gewijzigd
Bron van het afgedrukte document:https://www.gaudry.be/nl/cs-bibliobrol-source-rf-view/BrolForm.cs.html
De infobrol is een persoonlijke site waarvan de inhoud uitsluitend mijn verantwoordelijkheid is. De tekst is beschikbaar onder CreativeCommons-licentie (BY-NC-SA). Meer info op de gebruiksvoorwaarden en de auteur.