This repository has been archived on 2025-05-24. You can view files and clone it, but cannot push or open issues or pull requests.
Files
RomVault/ROMVault2/FrmProgressWindow.cs
2014-09-23 12:06:15 -07:00

242 lines
7.9 KiB
C#

/******************************************************
* ROMVault2 is written by Gordon J. *
* Contact gordon@romvault.com *
* Copyright 2014 *
******************************************************/
using System;
using System.ComponentModel;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
using ROMVault2.Properties;
namespace ROMVault2
{
public partial class FrmProgressWindow : Form
{
private readonly string _titleRoot;
private bool _errorOpen;
private bool _bDone;
private Form _parentForm;
public FrmProgressWindow(Form parentForm, string titleRoot, DoWorkEventHandler function)
{
_parentForm = parentForm;
_titleRoot = titleRoot;
InitializeComponent();
ClientSize = new Size(498, 131);
_titleRoot = titleRoot;
bgWork.DoWork += function;
}
protected override CreateParams CreateParams
{
get
{
const int CP_NOCLOSE_BUTTON = 0x200;
CreateParams mdiCp = base.CreateParams;
mdiCp.ClassStyle = mdiCp.ClassStyle | CP_NOCLOSE_BUTTON;
return mdiCp;
}
}
private void FrmProgressWindowNewShown(object sender, EventArgs e)
{
bgWork.ProgressChanged += BgwProgressChanged;
bgWork.RunWorkerCompleted += BgwRunWorkerCompleted;
bgWork.RunWorkerAsync(SynchronizationContext.Current);
}
private void BgwProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (e.UserState == null)
{
if (e.ProgressPercentage >= progressBar.Minimum && e.ProgressPercentage <= progressBar.Maximum)
progressBar.Value = e.ProgressPercentage;
UpdateStatusText();
return;
}
bgwText bgwT = e.UserState as bgwText;
if (bgwT != null)
{
label.Text = bgwT.Text;
return;
}
bgwSetRange bgwSR = e.UserState as bgwSetRange;
if (bgwSR != null)
{
progressBar.Minimum = 0;
progressBar.Maximum = bgwSR.MaxVal >= 0 ? bgwSR.MaxVal : 0;
progressBar.Value = 0;
UpdateStatusText();
return;
}
bgwText2 bgwT2 = e.UserState as bgwText2;
if (bgwT2 != null)
{
label2.Text = bgwT2.Text;
return;
}
bgwValue2 bgwV2 = e.UserState as bgwValue2;
if (bgwV2 != null)
{
if (bgwV2.Value >= progressBar2.Minimum && bgwV2.Value <= progressBar2.Maximum)
progressBar2.Value = bgwV2.Value;
UpdateStatusText2();
return;
}
bgwSetRange2 bgwSR2 = e.UserState as bgwSetRange2;
if (bgwSR2 != null)
{
progressBar2.Minimum = 0;
progressBar2.Maximum = bgwSR2.MaxVal >= 0 ? bgwSR2.MaxVal : 0;
progressBar2.Value = 0;
UpdateStatusText2();
return;
}
bgwRange2Visible bgwR2V = e.UserState as bgwRange2Visible;
if (bgwR2V != null)
{
label2.Visible = bgwR2V.Visible;
progressBar2.Visible = bgwR2V.Visible;
lbl2Prog.Visible = bgwR2V.Visible;
return;
}
bgwText3 bgwT3 = e.UserState as bgwText3;
if (bgwT3 != null)
{
label3.Text = bgwT3.Text;
return;
}
bgwShowCorrupt bgwSC = e.UserState as bgwShowCorrupt;
if (bgwSC != null)
{
if (!_errorOpen)
{
_errorOpen = true;
ClientSize = new Size(498, 292);
MinimumSize = new Size(498, 292);
FormBorderStyle = FormBorderStyle.SizableToolWindow;
}
ErrorGrid.Rows.Add();
int row = ErrorGrid.Rows.Count - 1;
ErrorGrid.Rows[row].Cells["CError"].Value = bgwSC.zr;
ErrorGrid.Rows[row].Cells["CError"].Style.ForeColor = Color.FromArgb(255, 0, 0);
ErrorGrid.Rows[row].Cells["CErrorFile"].Value = bgwSC.filename;
ErrorGrid.Rows[row].Cells["CErrorFile"].Style.ForeColor = Color.FromArgb(255, 0, 0);
if (row >= 0) ErrorGrid.FirstDisplayedScrollingRowIndex = row;
}
bgwShowError bgwSDE = e.UserState as bgwShowError;
if (bgwSDE != null)
{
if (!_errorOpen)
{
_errorOpen = true;
ClientSize = new Size(498, 292);
MinimumSize = new Size(498, 292);
FormBorderStyle = FormBorderStyle.SizableToolWindow;
}
ErrorGrid.Rows.Add();
int row = ErrorGrid.Rows.Count - 1;
ErrorGrid.Rows[row].Cells["CError"].Value = bgwSDE.error;
ErrorGrid.Rows[row].Cells["CError"].Style.ForeColor = Color.FromArgb(255, 0, 0);
ErrorGrid.Rows[row].Cells["CErrorFile"].Value = bgwSDE.filename;
ErrorGrid.Rows[row].Cells["CErrorFile"].Style.ForeColor = Color.FromArgb(255, 0, 0);
if (row >= 0) ErrorGrid.FirstDisplayedScrollingRowIndex = row;
}
}
private void UpdateStatusText()
{
int range = progressBar.Maximum - progressBar.Minimum;
int percent = range > 0 ? (progressBar.Value * 100) / range : 0;
Text = _titleRoot + String.Format(" - {0}% complete", percent);
}
private void UpdateStatusText2()
{
lbl2Prog.Text = progressBar2.Maximum > 0 ? string.Format("{0}/{1}", progressBar2.Value, progressBar2.Maximum) : "";
}
private void BgwRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (_errorOpen)
{
cancelButton.Text = Resources.ProgressWindowFix_DoDone_Close;
cancelButton.Enabled = true;
_bDone = true;
}
else
{
_parentForm.Show();
Close();
}
}
private void CancelButtonClick(object sender, EventArgs e)
{
if (_bDone)
{
if (!_parentForm.Visible) _parentForm.Show();
Close();
}
else
{
cancelButton.Text = Resources.ProgressWindowFix_OnClosing_Cancelling;
cancelButton.Enabled = false;
bgWork.CancelAsync();
}
}
private void ErrorGridSelectionChanged(object sender, EventArgs e)
{
ErrorGrid.ClearSelection();
}
private void FrmProgressWindow_Resize(object sender, EventArgs e)
{
switch (WindowState)
{
case FormWindowState.Minimized:
if (_parentForm.Visible) _parentForm.Hide();
return;
case FormWindowState.Maximized:
if (!_parentForm.Visible) _parentForm.Show();
return;
case FormWindowState.Normal:
if (!_parentForm.Visible) _parentForm.Show();
return;
}
}
}
}