SearchMediaUserControl.cs
Description du code
SearchMediaUserControl.cs est un fichier du projet BrolExplorer.Ce fichier est situé dans /var/www/bin/sniplets/bibliobrol/brolexplorer/.
Projet BrolExplorer :
Explorateur de media en CSharp.
Code source ou contenu du fichier
Code c# (SearchMediaUserControl.cs) (687 lignes)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; using be.gaudry.explorer.model; using System.IO; using be.gaudry.events; using be.gaudry.view.controls; using be.gaudry.model.enums; using be.gaudry.model.drawing; using be.gaudry.model.config; using be.gaudry.model; using be.gaudry.model.drawing.colors; using be.gaudry.model.file; using System.Drawing.Printing; using be.gaudry.view.utils; namespace be.gaudry.explorer.view.controls { public partial class SearchMediaUserControl : UserControl { #region constructor and declarations private MediaParser fileParser; /// <summary> /// used to get the "mouse over cell" for the context menu /// </summary> private DataGridViewCellEventArgs mouseLocation; public SearchMediaUserControl() { InitializeComponent(); imageList1.Images.Add(IconExtractor.ExtractIcon(Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.System), "shell32.dll" ), 4).ToBitmap()); imageList1.Images.Add(IconExtractor.ExtractIcon(Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.System), "shell32.dll" ), 126).ToBitmap()); startPathICB.pushAndSelect( Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), 1); progressGB.Dock = DockStyle.Fill; "tri dgv", this.Name, "http://msdn2.microsoft.com/fr-fr/library/ms171608(VS.80).aspx", "Tri des datagridview" ) ); "images dgv", this.Name, "http://msdn2.microsoft.com/fr-fr/library/z1cc356h(vs.80).aspx", "Images et datagridview" ) ); "context menu dgv", this.Name, "http://msdn2.microsoft.com/fr-fr/library/system.windows.forms.datagridviewrow.contextmenustrip.aspx", "Menu contextuel et datagridview" ) ); "association fichier", this.Name, "http://faqcsharp.developpez.com/?page=syst#syst_procstartshell", "Ouvrir un fichier avec l'application par défaut" ) ); } #endregion #region properties [ Category("Action"), Browsable(true), Description("Event called on file selected") ] public event FileSelectedEventHandler FileSelected; [ Category("Action"), Browsable(true), Description("Event called on directory selected") ] public event FileSelectedEventHandler DirectorySelected; #endregion #region search private void onKeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { startSearch(); } } private void searchBtn_Click(object sender, EventArgs e) { startSearch(); } private void startSearch() { if (startParseBtn.Text.Equals("Démarrer")) { String error = null; startPathICB.pushAndSelect(0); String startPath = startPathICB.SelectedInnerText; if (Directory.Exists(startPath)) { fileParser.Extensions.Clear(); /*if (findDVDChkB.Checked) fileParser.addExtension("DVD");*/ fileParser.addExtension("AVI"); { fileParser.addExtension("MPG"); fileParser.addExtension("MPEG"); } fileParser.addExtension("WMV"); fileParser.addExtension("MP3"); fileParser.addExtension("WAV"); { fileParser.addExtension("JPG"); fileParser.addExtension("JPEG"); } fileParser.addExtension("GIF"); fileParser.addExtension("PNG"); fileParser.addExtension("BMP"); fileParser.addExtension("PDF"); fileParser.addExtension("DOC"); fileParser.addExtension("TXT"); { fileParser.addExtension("PPS"); fileParser.addExtension("PPT"); } { fileParser.addExtension(findOtherTB.Text); } { error = "\nAucun type de fichier n'est sélectionné."; } else { startParseBtn.Text = "Arrêter"; startParseBtn.Image = global::be.gaudry.explorer.Properties.Resources.StopHS; if (mediaBrowserBgWorker.IsBusy) { error = "Impossible de lancer la recherche car une recherche est déjà en cours..."; } else { fileParser.StartPath = startPath; fileParser.SearchText = fileNameTB.Text; long min = 0L; { if (long.TryParse(sizeCriterionTB.Text, out min)) { min = min * 1024 * 1024; } /* else { min = 0; } } else { min = 0;*/ } fileParser.MinimumSize = min; /*if (calcProgressChkB.Checked) { calcProgressChkB.Enabled = false; }*/ displayProgressGB(); mediaBrowserBgWorker.RunWorkerAsync(); } } } else { error = String.Format("\n{0} n'est pas un chemin valide.", startPath); startPathICB.Items.RemoveAt(0); } if (error != null) { MessageBox.Show( this, error, "Impossible de démarrer la recherche", MessageBoxButtons.OK, MessageBoxIcon.Stop ); } } else { mediaBrowserBgWorker.CancelAsync(); startParseBtn.Text = "Démarrer"; startParseBtn.Image = global::be.gaudry.explorer.Properties.Resources.PlayHS; //browsePgB.ParameterValue = 0; } } #endregion #region browse settings /// <summary> /// Invoke delegate on path modification /// Reinit the progress max value /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void onPathModified(object sender, EventArgs e) { if (DirectorySelected != null) { DirectorySelected( this, startPathICB.Text ); } reinitProgressMaxValue(sender, e); } public void setPath(String path) { int img = 0; if (path.Equals(Environment.SpecialFolder.MyDocuments)) { img = 1; } startPathICB.pushAndSelect(path, img); } private void browseStartPathBtn_Click(object sender, EventArgs e) { //folderBrowserDialog.RootFolder = Environment.SpecialFolder.MyDocuments; if (DialogResult.OK == folderBrowserDialog.ShowDialog()) { setPath(folderBrowserDialog.SelectedPath); } } private void fileNameChkB_Click(object sender, EventArgs e) { fileNameTB.Text = ""; } private void findAllExtensionsChkB_Click(object sender, EventArgs e) { enableExtensionVideo(enable); enableExtensionAudio(enable); enableExtensionImage(enable); foreach (Control c in fileTypeGB.Controls) { c.Enabled = enable; } findAllExtensionsChkB.Enabled = true; } private void enableExtensionVideo(bool enable) { } private void enableExtensionImage(bool enable) { } private void enableExtensionAudio(bool enable) { } private void enableExtensionBooks(bool enable) { } private void allFilmsChkB_Click(object sender, EventArgs e) { } private void allImagesChkB_Click(object sender, EventArgs e) { } private void allMusicsChkB_Click(object sender, EventArgs e) { } private void allBooksChkB_Click(object sender, EventArgs e) { } private void findOtherChkB_Click(object sender, EventArgs e) { findOtherTB.Text = ""; } private void sizeCriterionChkB_Click(object sender, EventArgs e) { } private void cleanDtgBtn_Click(object sender, EventArgs e) { resultsDGV.Rows.Clear(); cleanDtgBtn.Enabled = false; enableOutputBtn(false); cleanDtgBtn.Text = "Vider les résultats"; } private void enableOutputBtn(bool enabled) { printBtn.Enabled = enabled; saveBtn.Enabled = enabled; } #endregion #region progress methods private void displayProgressGB() { browsePgB.Value = 0; browsePgB.Style = ProgressBarStyle.Marquee; curDirValLbl.Text = ""; progressGB.Visible = true; } /// <summary> /// Reinit the progress max value /// (this value depends of the quantity of files into the directory to scan) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void reinitProgressMaxValue(object sender, EventArgs e) { searchResultsLbl.Visible = false; calcProgressChkB.Enabled = true; } /// <summary> /// Start asynchroneous search /// </summary> /// <remarks> /// In this method, do not modify any graphic component /// </remarks> /// <param name="sender"></param> /// <param name="e"></param> private void mediaBrowserBgWorker_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker bgw = sender as BackgroundWorker; // Call the model asynchroneous search //e.Result = fileParser.browse(bgw, e); e.Result = fileParser.parse(bgw, e); } /// <summary> /// Display results throws by the search /// </summary> /// <remarks> /// The graphic components may here react at the results /// </remarks> /// <param name="sender"></param> /// <param name="e"></param> private void mediaBrowserBgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { switch(e.ProgressPercentage) { case (int)BGWORKER.currentInfo: { String s = e.UserState as String; if(s!=null)curDirValLbl.Text = s; break; } case (int)BGWORKER.progressBarStyle_Block: { browsePgB.Style = ProgressBarStyle.Blocks; break; } default: { if (e.ProgressPercentage > 0) { browsePgB.Value = e.ProgressPercentage; if (e.UserState != null) { Object[] results = e.UserState as object[]; if (results != null) { if(!fileExistsInDGV(results[0] as string)) resultsDGV.Rows.Add(results); } } } break; } } } private void mediaBrowserBgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { startParseBtn.Text = "Démarrer"; browsePgB.Value = 0; cleanDtgBtn.Enabled = resultsDGV.RowCount > 0; enableOutputBtn( cleanDtgBtn.Enabled); cleanDtgBtn.Text = String.Format("Vider les {0} résultats", resultsDGV.RowCount); /*try { if (e.Result != null) { previousMaxResult = (float)e.Result; } } catch (System.Reflection.TargetInvocationException) { }*/ if (e.Error != null) { searchResultsLbl.Text = "Erreur : " + e.Error.Message; } else if (e.Cancelled) { searchResultsLbl.Text = "La recherche a été stoppée avant sa fin... Tous les résultats ne sont pas présents."; } else { searchResultsLbl.Text = String.Format("Taille du répertoire : {0}", Units.getLengthString((long)e.Result)); // The model maintains the previous results if no significative changes occurs calcProgressChkB.Enabled = false; } //searchResultsLbl.Text = String.Format("Taille du répertoire : {0}", Units.getLengthString((long)e.Result)); searchResultsLbl.Visible = true; startParseBtn.Image = global::be.gaudry.explorer.Properties.Resources.PlayHS; progressGB.Visible = false; } /// <summary> /// Check if a full filename exists in the DGV to avoid insert it again /// </summary> /// <param name="pathToCheck">(string) full filename to find in the DGV</param> /// <returns>(bool) true if exists, false otherwise</returns> private bool fileExistsInDGV(string pathToCheck) { if (pathToCheck == null) return false; foreach (DataGridViewRow row in resultsDGV.Rows) { if (row.Cells[0].Value.Equals(pathToCheck)) { return true; } } return false; } #endregion #region results format private void systemIconsChkB_Click(object sender, EventArgs e) { } private void resultsDGV_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (e.RowIndex < 0) return; // Set the colors for file extensions in the mediaType column. if (resultsDGV.Columns[e.ColumnIndex].Name.Equals("mediaType")) { BrolColor.BrolInnerColor color; String mediaTypeStr = (String)e.Value; switch (mediaTypeStr) { case "DVD": color = BrolColor.getBrolColor(1); break; case ".AVI": color = BrolColor.getBrolColor(2); break; case ".MPG": color = BrolColor.getBrolColor(3); break; case ".MPEG": color = BrolColor.getBrolColor(4); break; case ".WMV": color = BrolColor.getBrolColor(5); break; case ".MP3": color = BrolColor.getBrolColor(6); break; case ".WAV": color = BrolColor.getBrolColor(7); break; case ".JPEG": color = BrolColor.getBrolColor(8); break; case ".JPG": color = BrolColor.getBrolColor(9); break; case ".GIF": color = BrolColor.getBrolColor(10); break; case ".PNG": color = BrolColor.getBrolColor(11); break; case ".BMP": color = BrolColor.getBrolColor(12); break; case ".PDF": color = BrolColor.getBrolColor(13); break; case ".DOC": color = BrolColor.getBrolColor(14); break; case ".TXT": color = BrolColor.getBrolColor(15); break; case ".PPS": color = BrolColor.getBrolColor(16); break; case ".PPT": color = BrolColor.getBrolColor(17); break; default: color = BrolColor.getBrolColor(0); break; } e.CellStyle.BackColor = color.BackColor; e.CellStyle.ForeColor = color.ForeColor; //e.CellStyle.SelectionBackColor = Color.Brown; } // Replace filename values with system icons. { // Ensure that the value is a string. String stringValue = e.Value as string; if (stringValue == null) return; // Set the cell ToolTip to the text value. DataGridViewCell iconCell = resultsDGV[e.ColumnIndex, e.RowIndex]; iconCell.ToolTipText = stringValue; e.Value = iconList1.getImage(stringValue); } // Format file length if (resultsDGV.Columns[e.ColumnIndex].Name.Equals("mediaLength")) { // Ensure that the value is a string. long fileLength = (long)e.Value; { // Set the cell ToolTip to the text value. //DataGridViewCell cell = dataGridView1[e.ColumnIndex, e.RowIndex]; //cell.ToolTipText = String.Format("Taille de {0} octets", fileLength); e.Value = Units.getLengthString(fileLength); } } } #endregion #region results actions /// <summary> /// Used to get row infos /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void resultsDGV_CellMouseEnter(object sender, DataGridViewCellEventArgs e) { mouseLocation = e; } /// <summary> /// Notify the selected file on right click /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void resultsDGV_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) { if ( mouseLocation.RowIndex < 0 || mouseLocation.ColumnIndex < 0 || e.Button != MouseButtons.Right || FileSelected == null ) return; FileSelected( this, (String)resultsDGV.Rows[mouseLocation.RowIndex].Cells["mediaIcon"].Value ); } /// <summary> /// Open file with system default application /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void resultsDGV_MouseDoubleClick(object sender, MouseEventArgs e) { if (mouseLocation.RowIndex >= 0 && mouseLocation.ColumnIndex >= 0) { FileHelper.open( (String)resultsDGV.Rows[mouseLocation.RowIndex].Cells["mediaIcon"].Value, "BrolExplorer" ); } } /// <summary> /// Notify the selected file on double click or on arrow click /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void resultsDGV_CurrentCellChanged(object sender, EventArgs e) { if (resultsDGV.CurrentRow==null || resultsDGV.CurrentRow.Index < 0 || FileSelected == null) return; FileSelected( this, (String)resultsDGV.CurrentRow.Cells["mediaIcon"].Value ); } #endregion #region print and save methods protected internal void printBtn_Click(object sender, EventArgs e) { DgvFactory.print(resultsDGV, "Résultats de la recherche dans "+startPathICB.Text, this.ParentForm); } protected internal void saveBtn_Click(object sender, EventArgs e) { DgvFactory.save(resultsDGV, "Résultats de la recherche dans " + startPathICB.Text, this.ParentForm); } #endregion #region public methods public int getResultsCount() { return resultsDGV.RowCount; } #endregion /*private void startPathCB_DrawItem(object sender, DrawItemEventArgs e) { //SolidBrush solidBrush = new SolidBrush(startPathCB.ForeColor); //e.Graphics.DrawImage(dirExpandedImg, e.Bounds.X, e.Bounds.Y); //StringFormat stringFormat = new StringFormat(); //stringFormat.Alignment = StringAlignment.Near; //stringFormat.LineAlignment = StringAlignment.Center; Rectangle oRect = new Rectangle( e.Bounds.X + dirExpandedImg.Width, e.Bounds.Y, e.Bounds.Width - dirExpandedImg.Width, e.Bounds.Height); e.Graphics.DrawString(startPathCB.Items[e.Index].ToString(), startPathCB.Font, solidBrush, oRect, stringFormat); //solidBrush.Dispose(); }*/ } }
Structure et Fichiers du projet
Afficher/masquer...Icône | Nom | Taille | Modification |
Pas de sous-répertoires. | |||
Icône | Nom | Taille | Modification |
| _ | Répertoire parent | 0 octets | 1732382956 23/11/2024 18:29:16 |
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 30/10/2009 gemaakt, de laatste keer de 26/10/2018 gewijzigd
Bron van het afgedrukte document:https://www.gaudry.be/nl/cs-brolexplorer-source-rf-view/controls//SearchMediaUserControl.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.