From fb616cd6126b9ed904ceb452f67952cecf75b18f Mon Sep 17 00:00:00 2001 From: Sour Date: Sun, 3 Feb 2019 20:13:35 -0500 Subject: [PATCH] History Viewer: Add option to export part of a segment --- GUI.NET/Dependencies/resources.ca.xml | 8 + GUI.NET/Dependencies/resources.en.xml | 8 + GUI.NET/Dependencies/resources.es.xml | 8 + GUI.NET/Dependencies/resources.fr.xml | 8 + GUI.NET/Dependencies/resources.ja.xml | 8 + GUI.NET/Dependencies/resources.pt.xml | 8 + GUI.NET/Dependencies/resources.ru.xml | 8 + GUI.NET/Dependencies/resources.uk.xml | 8 + GUI.NET/Dependencies/resources.zh.xml | 9 ++ GUI.NET/Forms/frmHistoryViewer.cs | 43 ++++-- .../Forms/frmSelectExportRange.Designer.cs | 141 ++++++++++++++++++ GUI.NET/Forms/frmSelectExportRange.cs | 43 ++++++ GUI.NET/Forms/frmSelectExportRange.resx | 123 +++++++++++++++ GUI.NET/GUI.NET.csproj | 9 ++ 14 files changed, 420 insertions(+), 12 deletions(-) create mode 100644 GUI.NET/Forms/frmSelectExportRange.Designer.cs create mode 100644 GUI.NET/Forms/frmSelectExportRange.cs create mode 100644 GUI.NET/Forms/frmSelectExportRange.resx diff --git a/GUI.NET/Dependencies/resources.ca.xml b/GUI.NET/Dependencies/resources.ca.xml index 29493132..bf086b15 100644 --- a/GUI.NET/Dependencies/resources.ca.xml +++ b/GUI.NET/Dependencies/resources.ca.xml @@ -611,6 +611,12 @@ Resume Gameplay Close +
+ Start time: + End time: + D'acord + Cancel·la +
Exemple d'ús General @@ -734,6 +740,8 @@ Desa al fitxer... Segment #{0} + Export entire segment + Export specific range... An error occurred while trying to save the movie file. An error occurred while trying to save the file. diff --git a/GUI.NET/Dependencies/resources.en.xml b/GUI.NET/Dependencies/resources.en.xml index d9e2e464..6f26f7f9 100644 --- a/GUI.NET/Dependencies/resources.en.xml +++ b/GUI.NET/Dependencies/resources.en.xml @@ -621,6 +621,12 @@ Resume Gameplay Close
+
+ Start time: + End time: + OK + Cancel +
Usage Example General @@ -764,6 +770,8 @@ Save to file... Segment #{0} + Export entire segment + Export specific range... An error occurred while trying to save the movie file. An error occurred while trying to save the file. diff --git a/GUI.NET/Dependencies/resources.es.xml b/GUI.NET/Dependencies/resources.es.xml index 5221bea3..69369c89 100644 --- a/GUI.NET/Dependencies/resources.es.xml +++ b/GUI.NET/Dependencies/resources.es.xml @@ -609,6 +609,12 @@ Continuar el juego Cerrar
+
+ Start time: + End time: + Ok + Cancelar +
Ejemplo de uso General @@ -751,6 +757,8 @@ Guardar en archivo... Parte #{0} + Export entire segment + Export specific range... Se produjo un error al intentar guardar el archivo de película. An error occurred while trying to save the file. diff --git a/GUI.NET/Dependencies/resources.fr.xml b/GUI.NET/Dependencies/resources.fr.xml index bf7c95f2..cc69aff1 100644 --- a/GUI.NET/Dependencies/resources.fr.xml +++ b/GUI.NET/Dependencies/resources.fr.xml @@ -621,6 +621,12 @@ Reprendre le jeu Fermer
+
+ Début: + Fin: + OK + Annuler +
Exemple d'utilisation Général @@ -764,6 +770,8 @@ Sauvegarder dans un fichier... Segment #{0} + Exporter le segment entier + Exporter une portion du segment... Une erreur est survenue pendant la sauvegarde du film. Une erreur est survenue pendant la sauvegarde du fichier. diff --git a/GUI.NET/Dependencies/resources.ja.xml b/GUI.NET/Dependencies/resources.ja.xml index e501c347..f5eed2d5 100644 --- a/GUI.NET/Dependencies/resources.ja.xml +++ b/GUI.NET/Dependencies/resources.ja.xml @@ -611,6 +611,12 @@ ここからゲームを再開する 終了
+
+ 開始時点: + 終了時点: + OK + キャンセル +
使い方 全般 @@ -754,6 +760,8 @@ ファイルに保存する… パート {0} + 全部エクスポートする + 範囲を指定してエクスポートする... 動画エクスポートは失敗しました。 ファイルの保存に失敗しました。 diff --git a/GUI.NET/Dependencies/resources.pt.xml b/GUI.NET/Dependencies/resources.pt.xml index 98613630..629ddbb8 100644 --- a/GUI.NET/Dependencies/resources.pt.xml +++ b/GUI.NET/Dependencies/resources.pt.xml @@ -621,6 +621,12 @@ Continuar jogo Fechar
+
+ Start time: + End time: + OK + Cancelar +
Exemplo de uso Geral @@ -764,6 +770,8 @@ Salvar para arquivo... Segmento #{0} + Export entire segment + Export specific range... Ocorreu um erro ao tentar salvar o vídeo. An error occurred while trying to save the file. diff --git a/GUI.NET/Dependencies/resources.ru.xml b/GUI.NET/Dependencies/resources.ru.xml index 313587d1..b477a69c 100644 --- a/GUI.NET/Dependencies/resources.ru.xml +++ b/GUI.NET/Dependencies/resources.ru.xml @@ -609,6 +609,12 @@ Resume Gameplay Close
+
+ Start time: + End time: + ОК + Отмена +
Usage example General @@ -752,6 +758,8 @@ Save to file... Segment #{0} + Export entire segment + Export specific range... An error occurred while trying to save the movie file. An error occurred while trying to save the file. diff --git a/GUI.NET/Dependencies/resources.uk.xml b/GUI.NET/Dependencies/resources.uk.xml index 2f3b11a6..d22f2bd4 100644 --- a/GUI.NET/Dependencies/resources.uk.xml +++ b/GUI.NET/Dependencies/resources.uk.xml @@ -609,6 +609,12 @@ Відновити геймплей Закрити
+
+ Start time: + End time: + ОК + Вiдмiна +
Приклад використання Загальний @@ -752,6 +758,8 @@ Зберегти в файл... Сегмент #{0} + Export entire segment + Export specific range... Сталася помилка під час спроби зберегти відео файл. An error occurred while trying to save the file. diff --git a/GUI.NET/Dependencies/resources.zh.xml b/GUI.NET/Dependencies/resources.zh.xml index b1fe3eed..a3c5e5e4 100644 --- a/GUI.NET/Dependencies/resources.zh.xml +++ b/GUI.NET/Dependencies/resources.zh.xml @@ -635,6 +635,12 @@ 继续播放 关闭
+
+ Start time: + End time: + 确定 + 取消 +
用法示例 常规 @@ -776,7 +782,10 @@ 从文件载入... 保存到文件... + 第 #{0} 段 + Export entire segment + Export specific range... 导出电影失败. 保存文件失败. diff --git a/GUI.NET/Forms/frmHistoryViewer.cs b/GUI.NET/Forms/frmHistoryViewer.cs index d268c4c7..d9d5a301 100644 --- a/GUI.NET/Forms/frmHistoryViewer.cs +++ b/GUI.NET/Forms/frmHistoryViewer.cs @@ -184,20 +184,25 @@ namespace Mesen.GUI.Forms TimeSpan end = new TimeSpan(0, 0, (int)(segEnd / 2)); string segmentName = ResourceHelper.GetMessage("MovieSegment", (mnuExportMovie.DropDownItems.Count + 1).ToString()); - ToolStripMenuItem item = new ToolStripMenuItem(segmentName + ", " + start.ToString() + " - " + end.ToString()); - item.Click += (s, evt) => { - using(SaveFileDialog sfd = new SaveFileDialog()) { - sfd.SetFilter(ResourceHelper.GetMessage("FilterMovie")); - sfd.InitialDirectory = ConfigManager.MovieFolder; - sfd.FileName = InteropEmu.GetRomInfo().GetRomName() + ".mmo"; - if(sfd.ShowDialog() == DialogResult.OK) { - if(!InteropEmu.HistoryViewerSaveMovie(sfd.FileName, segStart, segEnd)) { - MesenMsgBox.Show("MovieSaveError", MessageBoxButtons.OK, MessageBoxIcon.Error); - } + ToolStripMenuItem segmentItem = new ToolStripMenuItem(segmentName + ", " + start.ToString() + " - " + end.ToString()); + + ToolStripMenuItem exportFull = new ToolStripMenuItem(ResourceHelper.GetMessage("MovieExportEntireSegment")); + exportFull.Click += (s, evt) => { + ExportMovie(segStart, segEnd); + }; + + ToolStripMenuItem exportCustomRange = new ToolStripMenuItem(ResourceHelper.GetMessage("MovieExportSpecificRange")); + exportCustomRange.Click += (s, evt) => { + using(frmSelectExportRange frm = new frmSelectExportRange(segStart, segEnd)) { + if(frm.ShowDialog(this) == DialogResult.OK) { + ExportMovie(frm.ExportStart, frm.ExportEnd); } } }; - mnuExportMovie.DropDownItems.Add(item); + + segmentItem.DropDown.Items.Add(exportFull); + segmentItem.DropDown.Items.Add(exportCustomRange); + mnuExportMovie.DropDownItems.Add(segmentItem); } segmentStart = segments[i] + 1; } @@ -205,7 +210,21 @@ namespace Mesen.GUI.Forms mnuImportMovie.Visible = false; mnuExportMovie.Enabled = mnuExportMovie.HasDropDownItems && !_isNsf; } - + + private void ExportMovie(UInt32 segStart, UInt32 segEnd) + { + using(SaveFileDialog sfd = new SaveFileDialog()) { + sfd.SetFilter(ResourceHelper.GetMessage("FilterMovie")); + sfd.InitialDirectory = ConfigManager.MovieFolder; + sfd.FileName = InteropEmu.GetRomInfo().GetRomName() + ".mmo"; + if(sfd.ShowDialog() == DialogResult.OK) { + if(!InteropEmu.HistoryViewerSaveMovie(sfd.FileName, segStart, segEnd)) { + MesenMsgBox.Show("MovieSaveError", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } + private void mnuCreateSaveState_Click(object sender, EventArgs e) { using(SaveFileDialog sfd = new SaveFileDialog()) { diff --git a/GUI.NET/Forms/frmSelectExportRange.Designer.cs b/GUI.NET/Forms/frmSelectExportRange.Designer.cs new file mode 100644 index 00000000..3087a41d --- /dev/null +++ b/GUI.NET/Forms/frmSelectExportRange.Designer.cs @@ -0,0 +1,141 @@ +using Mesen.GUI.Controls; + +namespace Mesen.GUI.Forms +{ + partial class frmSelectExportRange + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if(disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.dtpStart = new System.Windows.Forms.DateTimePicker(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.lblStartTime = new System.Windows.Forms.Label(); + this.lblEndTime = new System.Windows.Forms.Label(); + this.dtpEnd = new System.Windows.Forms.DateTimePicker(); + this.tableLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // baseConfigPanel + // + this.baseConfigPanel.Location = new System.Drawing.Point(0, 61); + this.baseConfigPanel.Size = new System.Drawing.Size(198, 29); + // + // dtpStart + // + this.dtpStart.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.dtpStart.CustomFormat = "HH:mm:ss"; + this.dtpStart.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dtpStart.Location = new System.Drawing.Point(63, 3); + this.dtpStart.MaxDate = new System.DateTime(3000, 1, 1, 0, 0, 0, 0); + this.dtpStart.MinDate = new System.DateTime(2000, 1, 1, 0, 0, 0, 0); + this.dtpStart.Name = "dtpStart"; + this.dtpStart.ShowUpDown = true; + this.dtpStart.Size = new System.Drawing.Size(69, 20); + this.dtpStart.TabIndex = 0; + this.dtpStart.Value = new System.DateTime(2000, 1, 1, 0, 0, 0, 0); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 3; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.dtpStart, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.lblStartTime, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.lblEndTime, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.dtpEnd, 1, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(198, 61); + this.tableLayoutPanel1.TabIndex = 1; + // + // lblStartTime + // + this.lblStartTime.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblStartTime.AutoSize = true; + this.lblStartTime.Location = new System.Drawing.Point(3, 6); + this.lblStartTime.Name = "lblStartTime"; + this.lblStartTime.Size = new System.Drawing.Size(54, 13); + this.lblStartTime.TabIndex = 2; + this.lblStartTime.Text = "Start time:"; + // + // lblEndTime + // + this.lblEndTime.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblEndTime.AutoSize = true; + this.lblEndTime.Location = new System.Drawing.Point(3, 32); + this.lblEndTime.Name = "lblEndTime"; + this.lblEndTime.Size = new System.Drawing.Size(51, 13); + this.lblEndTime.TabIndex = 3; + this.lblEndTime.Text = "End time:"; + // + // dtpEnd + // + this.dtpEnd.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.dtpEnd.CustomFormat = "HH:mm:ss"; + this.dtpEnd.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dtpEnd.Location = new System.Drawing.Point(63, 29); + this.dtpEnd.MaxDate = new System.DateTime(3000, 1, 1, 0, 0, 0, 0); + this.dtpEnd.MinDate = new System.DateTime(2000, 1, 1, 0, 0, 0, 0); + this.dtpEnd.Name = "dtpEnd"; + this.dtpEnd.ShowUpDown = true; + this.dtpEnd.Size = new System.Drawing.Size(69, 20); + this.dtpEnd.TabIndex = 1; + this.dtpEnd.Value = new System.DateTime(2000, 1, 1, 0, 0, 0, 0); + // + // frmSelectExportRange + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(198, 90); + this.Controls.Add(this.tableLayoutPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "frmSelectExportRange"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Custom range..."; + this.Controls.SetChildIndex(this.baseConfigPanel, 0); + this.Controls.SetChildIndex(this.tableLayoutPanel1, 0); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.DateTimePicker dtpStart; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Label lblEndTime; + private System.Windows.Forms.DateTimePicker dtpEnd; + private System.Windows.Forms.Label lblStartTime; + } +} \ No newline at end of file diff --git a/GUI.NET/Forms/frmSelectExportRange.cs b/GUI.NET/Forms/frmSelectExportRange.cs new file mode 100644 index 00000000..8982f92d --- /dev/null +++ b/GUI.NET/Forms/frmSelectExportRange.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Mesen.GUI.Forms +{ + public partial class frmSelectExportRange : BaseConfigForm + { + public UInt32 ExportStart { get; private set; } + public UInt32 ExportEnd { get; private set; } + + public frmSelectExportRange(UInt32 segStart, UInt32 segEnd) + { + InitializeComponent(); + + dtpStart.Value = new DateTime(2000, 1, 1, 0, 0, 0).AddSeconds((int)(Math.Ceiling((decimal)segStart / 2))); + dtpEnd.Value = new DateTime(2000, 1, 1, 0, 0, 0).AddSeconds(segEnd / 2); + + dtpStart.MinDate = dtpStart.Value; + dtpStart.MaxDate = dtpEnd.Value; + dtpEnd.MinDate = dtpStart.Value; + dtpEnd.MaxDate = dtpEnd.Value; + } + + protected override bool ValidateInput() + { + return dtpStart.Value < dtpEnd.Value; + } + + protected override void OnFormClosing(FormClosingEventArgs e) + { + base.OnFormClosing(e); + ExportStart = (UInt32)(dtpStart.Value.TimeOfDay.TotalSeconds * 2); + ExportEnd = (UInt32)(dtpEnd.Value.TimeOfDay.TotalSeconds * 2); + } + } +} diff --git a/GUI.NET/Forms/frmSelectExportRange.resx b/GUI.NET/Forms/frmSelectExportRange.resx new file mode 100644 index 00000000..8766f298 --- /dev/null +++ b/GUI.NET/Forms/frmSelectExportRange.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/GUI.NET/GUI.NET.csproj b/GUI.NET/GUI.NET.csproj index 32f5c832..00e8fb80 100644 --- a/GUI.NET/GUI.NET.csproj +++ b/GUI.NET/GUI.NET.csproj @@ -1209,6 +1209,12 @@ frmRecordAvi.cs + + Form + + + frmSelectExportRange.cs + Form @@ -1772,6 +1778,9 @@ frmRecordAvi.cs + + frmSelectExportRange.cs + frmSelectRom.cs