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/FrmProgressWindowFix.cs
2014-09-23 12:06:15 -07:00

182 lines
5.7 KiB
C#

/******************************************************
* ROMVault2 is written by Gordon J. *
* Contact gordon@romvault.com *
* Copyright 2014 *
******************************************************/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
using ROMVault2.Properties;
namespace ROMVault2
{
public partial class FrmProgressWindowFix : Form
{
private bool _bDone;
private readonly Form _parentForm;
private readonly Queue<DataGridViewRow> _rowQueue;
public FrmProgressWindowFix(Form parentForm)
{
_rowQueue = new Queue<DataGridViewRow>();
_parentForm = parentForm;
InitializeComponent();
timer1.Interval = 100;
timer1.Enabled = true;
}
private void Timer1Tick(object sender, EventArgs e)
{
int rowCount = _rowQueue.Count;
if (rowCount == 0)
return;
DataGridViewRow[] dgvr = new DataGridViewRow[rowCount];
for (int i = 0; i < rowCount; i++)
dgvr[i] = _rowQueue.Dequeue();
dataGridView1.Rows.AddRange(dgvr);
int iRow = dataGridView1.Rows.Count - 1;
dataGridView1.FirstDisplayedScrollingRowIndex = iRow;
}
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 FrmProgressWindowFixShown(object sender, EventArgs e)
{
bgWork.DoWork += FixFiles.PerformFixes;
bgWork.ProgressChanged += BgwProgressChanged;
bgWork.RunWorkerCompleted += BgwRunWorkerCompleted;
bgWork.RunWorkerAsync(SynchronizationContext.Current);
}
private void BgwProgressChanged(object sender, ProgressChangedEventArgs e)
{
BgwProgressChanged(e.UserState);
}
private void BgwProgressChanged(object e)
{
bgwShowFix bgwSf = e as bgwShowFix;
if (bgwSf != null)
{
DataGridViewRow dgrq = (DataGridViewRow)dataGridView1.RowTemplate.Clone();
dgrq.CreateCells(dataGridView1, bgwSf.FixDir, bgwSf.FixZip, bgwSf.FixFile, bgwSf.Size, bgwSf.Dir, bgwSf.SourceDir, bgwSf.SourceZip, bgwSf.SourceFile);
_rowQueue.Enqueue(dgrq);
return;
}
bgwShowFixError bgwSFE = e as bgwShowFixError;
if (bgwSFE != null)
{
int iRow = dataGridView1.Rows.Count - 1;
dataGridView1.Rows[iRow].Cells[4].Style.BackColor = Color.Red;
dataGridView1.Rows[iRow].Cells[4].Style.ForeColor = Color.Black;
dataGridView1.Rows[iRow].Cells[4].Value = bgwSFE.FixError;
return;
}
bgwProgress bgwProg = e as bgwProgress;
if (bgwProg != null)
{
if (bgwProg.Progress >= progressBar.Minimum && bgwProg.Progress <= progressBar.Maximum)
progressBar.Value = bgwProg.Progress;
UpdateStatusText();
return;
}
bgwText bgwT = e as bgwText;
if (bgwT != null)
{
label.Text = bgwT.Text;
return;
}
bgwSetRange bgwSR = e as bgwSetRange;
if (bgwSR != null)
{
progressBar.Minimum = 0;
progressBar.Maximum = bgwSR.MaxVal >= 0 ? bgwSR.MaxVal : 0;
progressBar.Value = 0;
UpdateStatusText();
}
}
private void BgwRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
cancelButton.Text = Resources.ProgressWindowFix_DoDone_Close;
cancelButton.Enabled = true;
_bDone = true;
}
private void UpdateStatusText()
{
int range = progressBar.Maximum - progressBar.Minimum;
int percent = range > 0 ? (progressBar.Value * 100) / range : 0;
Text = String.Format("Fixing Files - {0}% complete", percent);
}
private void CancelButtonClick(object sender, EventArgs e)
{
if (_bDone)
Close();
else
{
cancelButton.Enabled = false;
cancelButton.Text = Resources.ProgressWindowFix_OnClosing_Cancelling;
bgWork.CancelAsync();
}
}
private void DataGridView1SelectionChanged(object sender, EventArgs e)
{
dataGridView1.ClearSelection();
}
private void FrmProgressWindowFixResize(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;
}
}
}
}