Horizon – Rev 8
?pathlinks?
using System;
using System.Windows.Forms;
using Be.Windows.Forms;
using Horizon.Database;
using Horizon.Utilities;
namespace Horizon.Snapshots
{
public partial class HexViewForm : Form
{
#region Public Events & Delegates
public event EventHandler<SaveDataEventArgs> SaveData;
#endregion
#region Public Methods
public void UpdateData(byte[] data)
{
hexBox1.InvokeIfRequired(hexBox =>
{
_originalData = (byte[])data.Clone();
_dynamicByteProvider = new DynamicByteProvider(data);
hexBox.ByteProvider = _dynamicByteProvider;
hexBox.Refresh();
});
}
#endregion
#region Private Delegates, Events, Enums, Properties, Indexers and Fields
private readonly SnapshotDatabase _snapshotDatabase;
private DynamicByteProvider _dynamicByteProvider;
private string _hash;
private byte[] _originalData;
#endregion
#region Constructors, Destructors and Finalizers
public HexViewForm()
{
InitializeComponent();
}
public HexViewForm(SnapshotDatabase snapshotDatabase, string hash, byte[] data) : this()
{
_originalData = (byte[])data.Clone();
_hash = hash;
_snapshotDatabase = snapshotDatabase;
_snapshotDatabase.SnapshotDataUpdate += SnapshotDatabaseSnapshotDataUpdate;
_dynamicByteProvider = new DynamicByteProvider(data);
hexBox1.ByteProvider = _dynamicByteProvider;
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && components != null)
{
components.Dispose();
}
_snapshotDatabase.SnapshotDataUpdate -= SnapshotDatabaseSnapshotDataUpdate;
base.Dispose(disposing);
}
#endregion
#region Event Handlers
private void HexViewForm_Load(object sender, EventArgs e)
{
Utilities.WindowState.FormTracker.Track(this);
}
private void SnapshotDatabaseSnapshotDataUpdate(object sender, SnapshotDataUpdateEventArgs e)
{
switch (e)
{
case SnapshotDataUpdateSuccessEventArgs snapshotDataUpdateSuccessEventArgs:
_hash = snapshotDataUpdateSuccessEventArgs.NewHash;
statusStrip1.InvokeIfRequired(statusStrip =>
{
toolStripProgressBar1.Value = toolStripProgressBar1.Maximum;
toolStripStatusLabel1.Text = "Data saved.";
});
break;
case SnapshotDataUpdateFailureEventArgs _:
statusStrip1.InvokeIfRequired(statusStrip =>
{
toolStripProgressBar1.Value = toolStripProgressBar1.Minimum;
toolStripStatusLabel1.Text = "Could not save data.";
});
break;
}
}
private void SaveToolStripMenuItem_Click(object sender, EventArgs e)
{
if (_dynamicByteProvider.HasChanges())
{
_dynamicByteProvider.ApplyChanges();
statusStrip1.InvokeIfRequired(statusStrip =>
{
toolStripProgressBar1.Value = toolStripProgressBar1.Minimum;
toolStripStatusLabel1.Text = "Saving.";
});
SaveData?.Invoke(this, new SaveDataEventArgs(_hash, _dynamicByteProvider.Bytes.ToArray()));
}
}
private void ReloadToolStripMenuItem_Click(object sender, EventArgs e)
{
hexBox1.InvokeIfRequired(hexBox =>
{
_dynamicByteProvider = new DynamicByteProvider(_originalData);
hexBox.ByteProvider = _dynamicByteProvider;
hexBox.Refresh();
});
}
#endregion
}
}
Generated by GNU Enscript 1.6.5.90.