private void SelectVersion(object sender, EventArgs e) { frmRevisionBrowse form = new frmRevisionBrowse(); bool first = true; for (int i = 0; i < ImageInfos.Count; i++) { XmlNode n = ImageInfos[i]; ListViewItem item = new ListViewItem(new string[] { "", (first ? (Localization.GetString("CurrentVersion_Label") + "\n") : "") + FormatTimestamp(n), FormatDimensions(n), n.Attributes["user"] == null ? Localization.GetString("UserNameHidden") : n.Attributes["user"].Value, n.Attributes["comment"] == null ? Localization.GetString("CommentHidden") : n.Attributes["comment"].Value }); item.Tag = i; // download thumbnail if (n.Attributes["thumburl"] != null && n.Attributes["thumburl"].Value != "") { WebClient cl = new WebClient(); cl.Headers.Add("User-Agent", MorebitsDotNet.UserAgent); cl.DownloadDataCompleted += new DownloadDataCompletedEventHandler( delegate(object s, DownloadDataCompletedEventArgs v) { // sometimes thumbnails can't be generated and the server gives a 404 if (v.Error != null) { Invoke((MethodInvoker) delegate() { lock (form) { form.imageList.Images.Add(GetThumbnailFailImage()); item.ImageIndex = form.imageList.Images.Count - 1; } }); return; } byte[] data = v.Result; Invoke((MethodInvoker) delegate() { Image original = Image.FromStream(new MemoryStream(data, false)); Bitmap img = new Bitmap(150, 150, System.Drawing.Imaging.PixelFormat.Format32bppArgb); using (Graphics g = Graphics.FromImage(img)) { g.FillRectangle(CheckerBrush, 0, 0, img.Width, img.Height); if (original.Width > original.Height) { float newHeight = ((float) original.Height) / ((float) original.Width / 150); g.DrawImage(original, 0f, (150f - newHeight) / 2f, 150f, newHeight); } else { float newWidth = ((float) original.Width) / ((float) original.Height / 150f); g.DrawImage(original, (150f - newWidth) / 2f, 0f, newWidth, 150f); } } lock (form) { form.imageList.Images.Add(img); item.ImageIndex = form.imageList.Images.Count - 1; } }); }); cl.DownloadDataAsync(new Uri(n.Attributes["thumburl"].Value)); } else { lock (form) { form.imageList.Images.Add(GetThumbnailFailImage()); item.ImageIndex = form.imageList.Images.Count - 1; } } if (first) { item.UseItemStyleForSubItems = false; item.SubItems[1].Font = new Font(form.Font, FontStyle.Bold); } form.listView.Items.Add(item); if (Array.IndexOf(SelectedRevisions, i) != -1) item.Selected = true; first = false; } if (form.ShowDialog() == DialogResult.Cancel) return; if (form.listView.SelectedItems.Count == 0) { ErrorHandler(Localization.GetString("NoRevisionSelected")); return; } SelectedRevisions = new int[form.listView.SelectedItems.Count]; for (int i = 0; i < form.listView.SelectedItems.Count; i++) SelectedRevisions[i] = (int) form.listView.SelectedItems[i].Tag; DownloadFileAndDisplayThumb(); }
private void SelectVersion(object sender, EventArgs e) { frmRevisionBrowse form = new frmRevisionBrowse(); bool first = true; foreach (XmlNode i in iis) { ListViewItem item = new ListViewItem(new string[] { "", (first ? (Localization.GetString("CurrentVersion_Label") + "\n") : "") + FormatTimestamp(i), FormatDimensions(i), i.Attributes["user"].Value, i.Attributes["comment"].Value }); item.Tag = i; // download thumbnail if (i.Attributes["thumburl"].Value != "") { WebClient cl = new WebClient(); cl.Headers.Add("User-Agent", MorebitsDotNet.UserAgent); cl.DownloadDataCompleted += new DownloadDataCompletedEventHandler( delegate(object s, DownloadDataCompletedEventArgs v) { // sometimes thumbnails can't be generated and the server gives a 404 if (v.Error != null) { Invoke(new Action(delegate() { Bitmap img = new Bitmap(150, 150); using (Graphics g = Graphics.FromImage(img)) { g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit; g.DrawString(Localization.GetString("FailedToGenerateThumbnail1_Label") + "\n" + Localization.GetString("FailedToGenerateThumbnail2_Label") + "\n" + Localization.GetString("FailedToGenerateThumbnail3_Label"), Font, Brushes.Black, 5, 5); } lock (form) { form.imageList.Images.Add(img); item.ImageIndex = form.imageList.Images.Count - 1; } })); return; } byte[] data = v.Result; Invoke(new Action(delegate() { Image original = Image.FromStream(new MemoryStream(data, false)); Bitmap img = new Bitmap(150, 150, System.Drawing.Imaging.PixelFormat.Format32bppArgb); using (Graphics g = Graphics.FromImage(img)) { g.FillRectangle(checker, 0, 0, img.Width, img.Height); if (original.Width > original.Height) { float newHeight = ((float) original.Height) / ((float) original.Width / 150); g.DrawImage(original, 0f, (150f - newHeight) / 2f, 150f, newHeight); } else { float newWidth = ((float) original.Width) / ((float) original.Height / 150f); g.DrawImage(original, (150f - newWidth) / 2f, 0f, newWidth, 150f); } } lock (form) { form.imageList.Images.Add(img); item.ImageIndex = form.imageList.Images.Count - 1; } })); }); cl.DownloadDataAsync(new Uri(i.Attributes["thumburl"].Value)); } if (first) { item.UseItemStyleForSubItems = false; item.SubItems[1].Font = new Font(form.Font, FontStyle.Bold); } form.listView.Items.Add(item); first = false; } if (form.ShowDialog() == DialogResult.Cancel) return; if (form.listView.SelectedItems.Count != 1) { MessageBox.Show(Localization.GetString("NoRevisionSelected")); return; } ImageData = null; DownloadFileAndDisplayThumb((XmlNode) form.listView.SelectedItems[0].Tag); }