X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=win%2FC%23%2FfrmActivityWindow.cs;h=613a1a4c2c31a912d16abb5fa1f0940996703642;hb=4f0019f03c2e85e8634150ff0c9a31bee6d35ce5;hp=e3468927e9079248fe012687c35d0bafe669dbc3;hpb=c63aa009f42272821994d6d43f130da9243e6dbb;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/win/C#/frmActivityWindow.cs b/win/C#/frmActivityWindow.cs index e3468927..613a1a4c 100644 --- a/win/C#/frmActivityWindow.cs +++ b/win/C#/frmActivityWindow.cs @@ -22,6 +22,8 @@ namespace Handbrake /// public partial class frmActivityWindow : Form { + /* Private Variables */ + /// /// The current position in the log file /// @@ -40,35 +42,39 @@ namespace Handbrake /// /// The Scan Object /// - private Scan scan; + private ScanService scan; /// /// The Type of log that the window is currently dealing with /// private ActivityLogMode mode; + /* Constructor */ + /// /// Initializes a new instance of the class. /// - /// - /// The mode. - /// /// /// The encode. /// /// /// The scan. /// - public frmActivityWindow(ActivityLogMode mode, Encode encode, Scan scan) + public frmActivityWindow(Encode encode, ScanService scan) { InitializeComponent(); this.encode = encode; this.scan = scan; - this.mode = mode; this.position = 0; + + // Listen for Scan and Encode Starting Events + scan.ScanStared += scan_ScanStared; + encode.EncodeStarted += encode_EncodeStarted; } + /* Delegates */ + /// /// A callback function for updating the ui /// @@ -82,7 +88,15 @@ namespace Handbrake /// private delegate void SetTextClearCallback(); - // Public + /// + /// Set mode callback + /// + /// + /// The set mode. + /// + private delegate void SetModeCallback(ActivityLogMode setMode); + + /* Private Methods */ /// /// Set the window to scan mode @@ -90,14 +104,44 @@ namespace Handbrake /// /// The set Mode. /// - public void SetMode(ActivityLogMode setMode) + private void SetMode(ActivityLogMode setMode) { - Reset(); - this.mode = setMode; - this.Text = mode == ActivityLogMode.Scan ? "Activity Window (Scan Log)" : "Activity Window (Enocde Log)"; - } + if (IsHandleCreated) + { + if (rtf_actLog.InvokeRequired) + { + IAsyncResult invoked = BeginInvoke(new SetModeCallback(SetMode), new object[] {setMode}); + EndInvoke(invoked); + } + else + { + Reset(); + this.mode = setMode; + + Array values = Enum.GetValues(typeof(ActivityLogMode)); + Properties.Settings.Default.ActivityWindowLastMode = (int) values.GetValue(Convert.ToInt32(setMode)); + Properties.Settings.Default.Save(); - // Logging + this.Text = mode == ActivityLogMode.Scan + ? "Activity Window (Scan Log)" + : "Activity Window (Encode Log)"; + + if (mode == ActivityLogMode.Scan) + { + scan.ScanCompleted += stopWindowRefresh; + encode.EncodeEnded -= stopWindowRefresh; + } + else + { + scan.ScanCompleted -= stopWindowRefresh; + encode.EncodeEnded += stopWindowRefresh; + } + + // Start a fresh window timer + windowTimer = new Timer(new TimerCallback(LogMonitor), null, 1000, 1000); + } + } + } /// /// On Window load, start a new timer @@ -110,7 +154,51 @@ namespace Handbrake /// private void NewActivityWindow_Load(object sender, EventArgs e) { - windowTimer = new Timer(new TimerCallback(LogMonitor), null, 1000, 1000); + ActivityLogMode activitLogMode = (ActivityLogMode) Enum.ToObject(typeof(ActivityLogMode), Properties.Settings.Default.ActivityWindowLastMode); + SetMode(activitLogMode); + } + + /// + /// Set the Log window to encode mode when an encode starts. + /// + /// + /// The sender. + /// + /// + /// The e. + /// + private void encode_EncodeStarted(object sender, EventArgs e) + { + SetMode(ActivityLogMode.Encode); + } + + /// + /// Set the log widow to scan mode when a scan starts + /// + /// + /// The sender. + /// + /// + /// The e. + /// + private void scan_ScanStared(object sender, EventArgs e) + { + SetMode(ActivityLogMode.Scan); + } + + /// + /// Stop refreshing the window when no scanning or encoding is happening. + /// + /// + /// The sender. + /// + /// + /// The e. + /// + private void stopWindowRefresh(object sender, EventArgs e) + { + windowTimer.Dispose(); + LogMonitor(null); } /// @@ -133,7 +221,7 @@ namespace Handbrake private StringBuilder GetLog() { StringBuilder appendText = new StringBuilder(); - + if (this.mode == ActivityLogMode.Scan) { if (scan == null || scan.ActivityLog == string.Empty) @@ -213,6 +301,12 @@ namespace Handbrake else lock (rtf_actLog) rtf_actLog.AppendText(text.ToString()); + + // Stop the refresh process if log has finished. + if (text.ToString().Contains("HandBrake has Exited")) + { + windowTimer.Dispose(); + } } } catch (Exception) @@ -301,7 +395,7 @@ namespace Handbrake windowTimer = new Timer(new TimerCallback(LogMonitor), null, 1000, 1000); } - // Menus and Buttons + /* Menus and Buttons */ /// /// Copy log to clipboard @@ -383,7 +477,7 @@ namespace Handbrake SetMode(ActivityLogMode.Encode); } - // Overrides + /* Overrides */ /// /// override onclosing @@ -393,6 +487,12 @@ namespace Handbrake /// protected override void OnClosing(CancelEventArgs e) { + scan.ScanStared -= scan_ScanStared; + encode.EncodeStarted -= encode_EncodeStarted; + + scan.ScanCompleted -= stopWindowRefresh; + encode.EncodeEnded -= stopWindowRefresh; + windowTimer.Dispose(); e.Cancel = true; this.Dispose();