diff --git a/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/Editors/ShortcutEditor.Designer.cs b/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/Editors/ShortcutEditor.Designer.cs new file mode 100644 index 00000000..1a2b95f7 --- /dev/null +++ b/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/Editors/ShortcutEditor.Designer.cs @@ -0,0 +1,356 @@ +namespace UniversalEditor.Editors +{ + partial class ShortcutEditor + { + /// + /// 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 Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.cboTargetType = new System.Windows.Forms.ComboBox(); + this.txtTarget = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.cmdBrowseTarget = new System.Windows.Forms.Button(); + this.txtStartIn = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.txtShortcutKey = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.cboWindowSize = new System.Windows.Forms.ComboBox(); + this.txtComment = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.fraShortcutInformation = new System.Windows.Forms.GroupBox(); + this.fraAdvancedOptions = new System.Windows.Forms.GroupBox(); + this.chkRunInSeparateMemorySpace = new System.Windows.Forms.CheckBox(); + this.chkRunWithDifferentCredentials = new System.Windows.Forms.CheckBox(); + this.fraIcon = new System.Windows.Forms.GroupBox(); + this.lvIcons = new System.Windows.Forms.ListView(); + this.txtIconFileName = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); + this.label7 = new System.Windows.Forms.Label(); + this.fraShortcutInformation.SuspendLayout(); + this.fraAdvancedOptions.SuspendLayout(); + this.fraIcon.SuspendLayout(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.label1.Location = new System.Drawing.Point(18, 25); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(64, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Target type:"; + // + // cboTargetType + // + this.cboTargetType.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.cboTargetType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cboTargetType.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.cboTargetType.FormattingEnabled = true; + this.cboTargetType.Items.AddRange(new object[] { + "Local file/directory", + "Shell namespace extension"}); + this.cboTargetType.Location = new System.Drawing.Point(94, 22); + this.cboTargetType.Name = "cboTargetType"; + this.cboTargetType.Size = new System.Drawing.Size(383, 21); + this.cboTargetType.TabIndex = 1; + this.cboTargetType.SelectedIndexChanged += new System.EventHandler(this.cboTargetType_SelectedIndexChanged); + // + // txtTarget + // + this.txtTarget.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtTarget.Location = new System.Drawing.Point(94, 49); + this.txtTarget.Name = "txtTarget"; + this.txtTarget.Size = new System.Drawing.Size(383, 20); + this.txtTarget.TabIndex = 2; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.label2.Location = new System.Drawing.Point(18, 52); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(41, 13); + this.label2.TabIndex = 3; + this.label2.Text = "Target:"; + // + // cmdBrowseTarget + // + this.cmdBrowseTarget.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.cmdBrowseTarget.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.cmdBrowseTarget.Location = new System.Drawing.Point(402, 75); + this.cmdBrowseTarget.Name = "cmdBrowseTarget"; + this.cmdBrowseTarget.Size = new System.Drawing.Size(75, 23); + this.cmdBrowseTarget.TabIndex = 4; + this.cmdBrowseTarget.Text = "&Browse..."; + this.cmdBrowseTarget.UseVisualStyleBackColor = true; + this.cmdBrowseTarget.Click += new System.EventHandler(this.cmdBrowseTarget_Click); + // + // txtStartIn + // + this.txtStartIn.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtStartIn.Location = new System.Drawing.Point(94, 104); + this.txtStartIn.Name = "txtStartIn"; + this.txtStartIn.Size = new System.Drawing.Size(383, 20); + this.txtStartIn.TabIndex = 2; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.label3.Location = new System.Drawing.Point(18, 107); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(43, 13); + this.label3.TabIndex = 3; + this.label3.Text = "Start in:"; + // + // txtShortcutKey + // + this.txtShortcutKey.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtShortcutKey.Location = new System.Drawing.Point(94, 130); + this.txtShortcutKey.Name = "txtShortcutKey"; + this.txtShortcutKey.Size = new System.Drawing.Size(383, 20); + this.txtShortcutKey.TabIndex = 2; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.label4.Location = new System.Drawing.Point(18, 133); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(70, 13); + this.label4.TabIndex = 3; + this.label4.Text = "Shortcut key:"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.label5.Location = new System.Drawing.Point(18, 159); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(70, 13); + this.label5.TabIndex = 0; + this.label5.Text = "Window size:"; + // + // cboWindowSize + // + this.cboWindowSize.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.cboWindowSize.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.cboWindowSize.FormattingEnabled = true; + this.cboWindowSize.Location = new System.Drawing.Point(94, 156); + this.cboWindowSize.Name = "cboWindowSize"; + this.cboWindowSize.Size = new System.Drawing.Size(383, 21); + this.cboWindowSize.TabIndex = 1; + // + // txtComment + // + this.txtComment.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtComment.Location = new System.Drawing.Point(94, 183); + this.txtComment.Name = "txtComment"; + this.txtComment.Size = new System.Drawing.Size(383, 20); + this.txtComment.TabIndex = 2; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.label6.Location = new System.Drawing.Point(18, 186); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(54, 13); + this.label6.TabIndex = 3; + this.label6.Text = "Comment:"; + // + // fraShortcutInformation + // + this.fraShortcutInformation.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.fraShortcutInformation.Controls.Add(this.label1); + this.fraShortcutInformation.Controls.Add(this.cmdBrowseTarget); + this.fraShortcutInformation.Controls.Add(this.cboTargetType); + this.fraShortcutInformation.Controls.Add(this.label4); + this.fraShortcutInformation.Controls.Add(this.label5); + this.fraShortcutInformation.Controls.Add(this.label3); + this.fraShortcutInformation.Controls.Add(this.cboWindowSize); + this.fraShortcutInformation.Controls.Add(this.label6); + this.fraShortcutInformation.Controls.Add(this.txtTarget); + this.fraShortcutInformation.Controls.Add(this.label2); + this.fraShortcutInformation.Controls.Add(this.txtComment); + this.fraShortcutInformation.Controls.Add(this.txtShortcutKey); + this.fraShortcutInformation.Controls.Add(this.txtStartIn); + this.fraShortcutInformation.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.fraShortcutInformation.Location = new System.Drawing.Point(3, 3); + this.fraShortcutInformation.Name = "fraShortcutInformation"; + this.fraShortcutInformation.Size = new System.Drawing.Size(483, 224); + this.fraShortcutInformation.TabIndex = 5; + this.fraShortcutInformation.TabStop = false; + this.fraShortcutInformation.Text = "Shortcut information"; + // + // fraAdvancedOptions + // + this.fraAdvancedOptions.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.fraAdvancedOptions.Controls.Add(this.chkRunInSeparateMemorySpace); + this.fraAdvancedOptions.Controls.Add(this.chkRunWithDifferentCredentials); + this.fraAdvancedOptions.Location = new System.Drawing.Point(3, 233); + this.fraAdvancedOptions.Name = "fraAdvancedOptions"; + this.fraAdvancedOptions.Size = new System.Drawing.Size(483, 43); + this.fraAdvancedOptions.TabIndex = 6; + this.fraAdvancedOptions.TabStop = false; + this.fraAdvancedOptions.Text = "Advanced options"; + // + // chkRunInSeparateMemorySpace + // + this.chkRunInSeparateMemorySpace.AutoSize = true; + this.chkRunInSeparateMemorySpace.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.chkRunInSeparateMemorySpace.Location = new System.Drawing.Point(196, 19); + this.chkRunInSeparateMemorySpace.Name = "chkRunInSeparateMemorySpace"; + this.chkRunInSeparateMemorySpace.Size = new System.Drawing.Size(178, 18); + this.chkRunInSeparateMemorySpace.TabIndex = 0; + this.chkRunInSeparateMemorySpace.Text = "Run in separate memory space"; + this.chkRunInSeparateMemorySpace.UseVisualStyleBackColor = true; + // + // chkRunWithDifferentCredentials + // + this.chkRunWithDifferentCredentials.AutoSize = true; + this.chkRunWithDifferentCredentials.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.chkRunWithDifferentCredentials.Location = new System.Drawing.Point(21, 19); + this.chkRunWithDifferentCredentials.Name = "chkRunWithDifferentCredentials"; + this.chkRunWithDifferentCredentials.Size = new System.Drawing.Size(169, 18); + this.chkRunWithDifferentCredentials.TabIndex = 0; + this.chkRunWithDifferentCredentials.Text = "Run with different credentials"; + this.chkRunWithDifferentCredentials.UseVisualStyleBackColor = true; + // + // fraIcon + // + this.fraIcon.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.fraIcon.Controls.Add(this.lvIcons); + this.fraIcon.Controls.Add(this.txtIconFileName); + this.fraIcon.Controls.Add(this.button1); + this.fraIcon.Controls.Add(this.label7); + this.fraIcon.Location = new System.Drawing.Point(3, 282); + this.fraIcon.Name = "fraIcon"; + this.fraIcon.Size = new System.Drawing.Size(483, 114); + this.fraIcon.TabIndex = 7; + this.fraIcon.TabStop = false; + this.fraIcon.Text = "Icon"; + // + // lvIcons + // + this.lvIcons.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lvIcons.Location = new System.Drawing.Point(94, 47); + this.lvIcons.Name = "lvIcons"; + this.lvIcons.Size = new System.Drawing.Size(383, 61); + this.lvIcons.TabIndex = 5; + this.lvIcons.UseCompatibleStateImageBehavior = false; + // + // txtIconFileName + // + this.txtIconFileName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtIconFileName.Location = new System.Drawing.Point(94, 21); + this.txtIconFileName.Name = "txtIconFileName"; + this.txtIconFileName.ReadOnly = true; + this.txtIconFileName.Size = new System.Drawing.Size(302, 20); + this.txtIconFileName.TabIndex = 0; + // + // button1 + // + this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.button1.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.button1.Location = new System.Drawing.Point(402, 19); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 4; + this.button1.Text = "&Browse..."; + this.button1.UseVisualStyleBackColor = true; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.label7.Location = new System.Drawing.Point(18, 24); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(55, 13); + this.label7.TabIndex = 3; + this.label7.Text = "File name:"; + // + // WindowsShortcutEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.fraIcon); + this.Controls.Add(this.fraAdvancedOptions); + this.Controls.Add(this.fraShortcutInformation); + this.Name = "WindowsShortcutEditor"; + this.Size = new System.Drawing.Size(489, 399); + this.fraShortcutInformation.ResumeLayout(false); + this.fraShortcutInformation.PerformLayout(); + this.fraAdvancedOptions.ResumeLayout(false); + this.fraAdvancedOptions.PerformLayout(); + this.fraIcon.ResumeLayout(false); + this.fraIcon.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox cboTargetType; + private System.Windows.Forms.TextBox txtTarget; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button cmdBrowseTarget; + private System.Windows.Forms.TextBox txtStartIn; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox txtShortcutKey; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.ComboBox cboWindowSize; + private System.Windows.Forms.TextBox txtComment; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.GroupBox fraShortcutInformation; + private System.Windows.Forms.GroupBox fraAdvancedOptions; + private System.Windows.Forms.CheckBox chkRunWithDifferentCredentials; + private System.Windows.Forms.CheckBox chkRunInSeparateMemorySpace; + private System.Windows.Forms.GroupBox fraIcon; + private System.Windows.Forms.ListView lvIcons; + private System.Windows.Forms.TextBox txtIconFileName; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Label label7; + + } +} diff --git a/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/Editors/ShortcutEditor.cs b/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/Editors/ShortcutEditor.cs new file mode 100644 index 00000000..5536a1c1 --- /dev/null +++ b/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/Editors/ShortcutEditor.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; +using UniversalEditor.UserInterface.WindowsForms; + +namespace UniversalEditor.Editors +{ + public partial class ShortcutEditor : Editor + { + public ShortcutEditor() + { + InitializeComponent(); + + base.SupportedObjectModels.Add(typeof(ShortcutObjectModel)); + cboTargetType.SelectedIndex = 0; + } + + private void cboTargetType_SelectedIndexChanged(object sender, EventArgs e) + { + txtTarget.ReadOnly = (cboTargetType.SelectedIndex == 1); + } + + protected override void OnObjectModelChanged(EventArgs e) + { + base.OnObjectModelChanged(e); + + ShortcutObjectModel doc = (base.ObjectModel as ShortcutObjectModel); + if (doc == null) return; + + if (doc.Type == ShortcutType.Normal) + { + cboTargetType.SelectedIndex = 0; + } + else + { + cboTargetType.SelectedIndex = 1; + switch (doc.Type) + { + case ShortcutType.Computer: + txtTarget.Text = "My Computer"; + break; + case ShortcutType.Documents: + txtTarget.Text = "My Documents"; + break; + case ShortcutType.Network: + txtTarget.Text = "My Network Places"; + break; + case ShortcutType.Trash: + txtTarget.Text = "Recycle Bin"; + break; + case ShortcutType.Unknown: + txtTarget.Text = Common.Methods.ArrayToString(doc.ShellTarget); + break; + case ShortcutType.Normal: + txtTarget.Text = doc.Target; + break; + } + } + + if (doc.IconFileName != "") + { + txtIconFileName.Text = doc.IconFileName; + + // Read the icons from the file, through Resource Viewer + } + } + + private void cmdBrowseTarget_Click(object sender, EventArgs e) + { + switch (cboTargetType.SelectedIndex) + { + case 0: + break; + case 1: + break; + } + } + } +} diff --git a/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/Editors/ShortcutEditor.resx b/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/Editors/ShortcutEditor.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/Editors/ShortcutEditor.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/UniversalEditor.UserInterface.WindowsForms.csproj b/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/UniversalEditor.UserInterface.WindowsForms.csproj index 678a6b8b..5ae08226 100644 --- a/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/UniversalEditor.UserInterface.WindowsForms.csproj +++ b/CSharp/Engines/WindowsForms/Libraries/UniversalEditor.UserInterface.WindowsForms/UniversalEditor.UserInterface.WindowsForms.csproj @@ -105,6 +105,12 @@ PlainTextEditor.cs + + UserControl + + + ShortcutEditor.cs + UserControl @@ -181,6 +187,9 @@ PlainTextEditor.cs + + ShortcutEditor.cs + ResXFileCodeGenerator Resources.Designer.cs diff --git a/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Synthesized/SynthesizedAudioEditor.cs b/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Synthesized/SynthesizedAudioEditor.cs index 06d7f8f7..d61139d8 100644 --- a/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Synthesized/SynthesizedAudioEditor.cs +++ b/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Synthesized/SynthesizedAudioEditor.cs @@ -23,96 +23,96 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized InitializeComponent(); base.SupportedObjectModels.Add(typeof(SynthesizedAudioObjectModel)); - #region Menu Bar - #region View - ActionMenuItem mnuView = base.MenuBar.Items.Add("mnuView", "&View"); - mnuView.Items.Add("mnuViewTrackOverlay", "Track &Overlay", mnuViewTrackOverlay_Click, 3); - mnuView.Items.AddSeparator(4); - #endregion - #region Job - ActionMenuItem mnuJob = base.MenuBar.Items.Add("mnuJob", "&Job", 4); - mnuJob.Items.Add("mnuJobNormalizeNotes", "&Normalize Overlapping Notes...", mnuJobNormalizeNotes_Click); - mnuJob.Items.AddSeparator(); - mnuJob.Items.Add("mnuJobInsertBars", "&Insert Measures...", mnuJobInsertBars_Click); - mnuJob.Items.Add("mnuJobDeleteBars", "&Delete Measures...", mnuJobDeleteBars_Click); - mnuJob.Items.AddSeparator(); - mnuJob.Items.Add("mnuJobRandomize", "Insert &Random Notes...", mnuJobRandomize_Click); - mnuJob.Items.Add("mnuJobConnect", "&Connect Notes...", mnuJobConnect_Click); - mnuJob.Items.AddSeparator(); - mnuJob.Items.Add("mnuJobInsertLyrics", "Insert &Lyrics...", mnuJobInsertLyrics_Click); - #endregion - #region Track - ActionMenuItem mnuTrack = base.MenuBar.Items.Add("mnuTrack", "Trac&k", 5); - mnuTrack.Items.Add("mnuTrackEnable", "Enable Trac&k", mnuTrackEnable_Click); - mnuTrack.Items.AddSeparator(); - mnuTrack.Items.Add("mnuTrackAdd", "&Add Track", mnuTrackAdd_Click); - mnuTrack.Items.Add("mnuTrackDuplicate", "Dupli&cate Track", mnuTrackDuplicate_Click); - mnuTrack.Items.Add("mnuTrackRename", "&Rename Track", mnuTrackRename_Click); - mnuTrack.Items.Add("mnuTrackDelete", "&Delete Track", mnuTrackDelete_Click); - mnuTrack.Items.AddSeparator(); - mnuTrack.Items.Add("mnuTrackRenderCurrent", "Render Current &Track", mnuTrackRenderCurrent_Click); - mnuTrack.Items.Add("mnuTrackRenderAll", "Render All Track&s", mnuTrackRenderAll_Click); - #endregion - ActionMenuItem mnuPart = base.MenuBar.Items.Add("mnuPart", "Pa&rt", 6); + #region Menu Bar + #region View + ActionMenuItem mnuView = base.MenuBar.Items.Add("mnuView", "&View"); + mnuView.Items.Add("mnuViewTrackOverlay", "Track &Overlay", mnuViewTrackOverlay_Click, 3); + mnuView.Items.AddSeparator(4); + #endregion + #region Job + ActionMenuItem mnuJob = base.MenuBar.Items.Add("mnuJob", "&Job", 4); + mnuJob.Items.Add("mnuJobNormalizeNotes", "&Normalize Overlapping Notes...", mnuJobNormalizeNotes_Click); + mnuJob.Items.AddSeparator(); + mnuJob.Items.Add("mnuJobInsertBars", "&Insert Measures...", mnuJobInsertBars_Click); + mnuJob.Items.Add("mnuJobDeleteBars", "&Delete Measures...", mnuJobDeleteBars_Click); + mnuJob.Items.AddSeparator(); + mnuJob.Items.Add("mnuJobRandomize", "Insert &Random Notes...", mnuJobRandomize_Click); + mnuJob.Items.Add("mnuJobConnect", "&Connect Notes...", mnuJobConnect_Click); + mnuJob.Items.AddSeparator(); + mnuJob.Items.Add("mnuJobInsertLyrics", "Insert &Lyrics...", mnuJobInsertLyrics_Click); + #endregion + #region Track + ActionMenuItem mnuTrack = base.MenuBar.Items.Add("mnuTrack", "Trac&k", 5); + mnuTrack.Items.Add("mnuTrackEnable", "Enable Trac&k", mnuTrackEnable_Click); + mnuTrack.Items.AddSeparator(); + mnuTrack.Items.Add("mnuTrackAdd", "&Add Track", mnuTrackAdd_Click); + mnuTrack.Items.Add("mnuTrackDuplicate", "Dupli&cate Track", mnuTrackDuplicate_Click); + mnuTrack.Items.Add("mnuTrackRename", "&Rename Track", mnuTrackRename_Click); + mnuTrack.Items.Add("mnuTrackDelete", "&Delete Track", mnuTrackDelete_Click); + mnuTrack.Items.AddSeparator(); + mnuTrack.Items.Add("mnuTrackRenderCurrent", "Render Current &Track", mnuTrackRenderCurrent_Click); + mnuTrack.Items.Add("mnuTrackRenderAll", "Render All Track&s", mnuTrackRenderAll_Click); + #endregion + ActionMenuItem mnuPart = base.MenuBar.Items.Add("mnuPart", "Pa&rt", 6); ActionMenuItem mnuLyrics = base.MenuBar.Items.Add("mnuLyrics", "&Lyrics", 7); ActionMenuItem mnuTransport = base.MenuBar.Items.Add("mnuTransport", "Tra&nsport", 8); - #endregion - } + #endregion + } - #region Event Handlers - #region Menu Bar - #region View - private void mnuViewTrackOverlay_Click(object sender, EventArgs e) - { - } - #endregion - #region Job - private void mnuJobNormalizeNotes_Click(object sender, EventArgs e) - { - } - private void mnuJobInsertBars_Click(object sender, EventArgs e) - { - } - private void mnuJobDeleteBars_Click(object sender, EventArgs e) - { - } - private void mnuJobRandomize_Click(object sender, EventArgs e) - { - } - private void mnuJobConnect_Click(object sender, EventArgs e) - { - } - private void mnuJobInsertLyrics_Click(object sender, EventArgs e) - { - } - #endregion - #region Track - private void mnuTrackEnable_Click(object sender, EventArgs e) - { - } - private void mnuTrackAdd_Click(object sender, EventArgs e) - { - } - private void mnuTrackDuplicate_Click(object sender, EventArgs e) - { - } - private void mnuTrackRename_Click(object sender, EventArgs e) - { - } - private void mnuTrackDelete_Click(object sender, EventArgs e) - { - } - private void mnuTrackRenderCurrent_Click(object sender, EventArgs e) - { - } - private void mnuTrackRenderAll_Click(object sender, EventArgs e) - { - } - #endregion - #endregion - #endregion + #region Event Handlers + #region Menu Bar + #region View + private void mnuViewTrackOverlay_Click(object sender, EventArgs e) + { + } + #endregion + #region Job + private void mnuJobNormalizeNotes_Click(object sender, EventArgs e) + { + } + private void mnuJobInsertBars_Click(object sender, EventArgs e) + { + } + private void mnuJobDeleteBars_Click(object sender, EventArgs e) + { + } + private void mnuJobRandomize_Click(object sender, EventArgs e) + { + } + private void mnuJobConnect_Click(object sender, EventArgs e) + { + } + private void mnuJobInsertLyrics_Click(object sender, EventArgs e) + { + } + #endregion + #region Track + private void mnuTrackEnable_Click(object sender, EventArgs e) + { + } + private void mnuTrackAdd_Click(object sender, EventArgs e) + { + } + private void mnuTrackDuplicate_Click(object sender, EventArgs e) + { + } + private void mnuTrackRename_Click(object sender, EventArgs e) + { + } + private void mnuTrackDelete_Click(object sender, EventArgs e) + { + } + private void mnuTrackRenderCurrent_Click(object sender, EventArgs e) + { + } + private void mnuTrackRenderAll_Click(object sender, EventArgs e) + { + } + #endregion + #endregion + #endregion - protected override void OnObjectModelChanged(EventArgs e) + protected override void OnObjectModelChanged(EventArgs e) { base.OnObjectModelChanged(e); } diff --git a/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Voicebank/VoicebankEditor.cs b/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Voicebank/VoicebankEditor.cs new file mode 100644 index 00000000..67766d02 --- /dev/null +++ b/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Voicebank/VoicebankEditor.cs @@ -0,0 +1,152 @@ +// one line to give the program's name and an idea of what it does. +// Copyright (C) yyyy name of author +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +using UniversalEditor.ObjectModels.Multimedia.Audio.Voicebank; +using UniversalEditor.UserInterface; +using UniversalEditor.UserInterface.WindowsForms; + +namespace UniversalEditor.Editors.Multimedia.Audio.Voicebank +{ + // TODO: Create a file-format-independent explorer listview. + + // The VoiceDatabaseEditor uses an Explorer listview interface. This means that + // PhonemeGroups are represented as folders, and Phonemes within those PhonemeGroups + // are represented as files. This makes it easy for a user to add/delete these kinds + // of items without having to learn complex interfaces. + + // Where practical, I'd like to implement this interface in editors. If there is more + // than one editor that can be used to edit a particular type of file (for example, + // VoiceDatabaseProgrammerEditor and VoiceDatabaseExplorerEditor), the different + // editors will be listed when GetAvailableEditors (...) is called. + + // For our test case (EDSEdit), these editors will be listed as tabs near the bottom + // of the screen. The upside to this model of course is that there will be a common + // editor for these types of files. + + // The ExplorerEditorBase will expose a Folders collection and a Files collection. + // The ExplorerEditorBase will also have a built-in search box (which can be hidden + // if developing an app that has its own search methods) and a built-in search + // function Search(string text) (which can be used when developing aformentioned app) + + // When user clicks on a folder (or a file), the ExplorerView will fire an ItemClick + // event (or for double-clicks, an ItemDoubleClick event) that the author of the Editor + // will handle by overriding the OnItemClick (or OnItemDoubleClick) event. The item + // that had been clicked will automatically go into the navigation stack (so a Back/Up + // button can be implemented without too much difficulty) and the author will be + // responsible for populating the next set of items in the hierarchy. + + // Of course, the entire idea behind this is that EDS will become a drop-in replacement + // for any explorer on any system, and will be able to read and edit any files without + // difficulty. + + /// + /// Description of VoiceDatabaseEditor. + /// + public partial class VoicebankEditor : Editor + { + public VoicebankEditor() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + base.SupportedObjectModels.Add(typeof(VoicebankObjectModel)); + + // Select "Explorer" view by default, it looks nice~ + tabControl1.SelectedIndex = 1; + } + + /* + public override bool NavigateImaginaryPath(string path) + { + if (base.ObjectModel is VoicebankObjectModel) + { + VoicebankObjectModel ddi = (base.ObjectModel as VoicebankObjectModel); + PhonemeGroup pg = ddi.PhonemeGroups[path]; + if (pg != null) + { + lvGroups.Items[ddi.PhonemeGroups.IndexOf(pg)].Selected = true; + } + else + { + MessageBox.Show("Phoneme group " + path + " does not exist in this file!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + return false; + } + */ + + + protected override void OnObjectModelChanged(EventArgs e) + { + base.OnObjectModelChanged(e); + + if (base.ObjectModel is VoicebankObjectModel) + { + VoicebankObjectModel ddi = (base.ObjectModel as VoicebankObjectModel); + lvGroups.Items.Clear(); + lvPhonemes.Items.Clear(); + + foreach(PhonemeGroup pg in ddi.PhonemeGroups) + { + ListViewItem lvi = new ListViewItem(); + lvi.Text = pg.Title; + lvi.SubItems.Add(pg.Phonemes.Count.ToString()); + // lvi.SubItems.Add(pg.Data1.ToString()); + // lvi.SubItems.Add(pg.Data2.ToString()); + lvGroups.Items.Add(lvi); + + ListViewItem lvie = new ListViewItem(); + lvie.Text = pg.Title; + lvie.SubItems.Add(pg.Phonemes.Count.ToString()); + // lvie.SubItems.Add(pg.Data1.ToString()); + // lvie.SubItems.Add(pg.Data2.ToString()); + lvie.ImageKey = "folder_closed"; + lvExplorer.Items.Add(lvie); + } + } + } + + void lvGroups_SelectedIndexChanged(object sender, EventArgs e) + { + if (base.ObjectModel is VoicebankObjectModel) + { + VoicebankObjectModel ddi = (base.ObjectModel as VoicebankObjectModel); + lvPhonemes.Items.Clear(); + if (lvGroups.SelectedIndices.Count == 1) + { + foreach (Phoneme p in ddi.PhonemeGroups[lvGroups.SelectedIndices[0]].Phonemes) + { + ListViewItem lvi = new ListViewItem(); + lvi.Text = p.Title; + // lvi.SubItems.Add(p.Data.ToString()); + lvPhonemes.Items.Add(lvi); + } + } + } + } + } +} diff --git a/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Voicebank/VoicebankEditor.designer.cs b/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Voicebank/VoicebankEditor.designer.cs new file mode 100644 index 00000000..d40895ab --- /dev/null +++ b/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Voicebank/VoicebankEditor.designer.cs @@ -0,0 +1,286 @@ +// one line to give the program's name and an idea of what it does. +// Copyright (C) yyyy name of author +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +namespace UniversalEditor.Editors.Multimedia.Audio.Voicebank +{ + partial class VoicebankEditor + { + /// + /// Designer variable used to keep track of non-visual components. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Disposes resources used by the control. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(VoiceDatabaseEditor)); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button2 = new System.Windows.Forms.Button(); + this.lvPhonemes = new System.Windows.Forms.ListView(); + this.chPhonemeName = new System.Windows.Forms.ColumnHeader(); + this.chPhonemeData = new System.Windows.Forms.ColumnHeader(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.button1 = new System.Windows.Forms.Button(); + this.lvGroups = new System.Windows.Forms.ListView(); + this.chPhonemeGroupName = new System.Windows.Forms.ColumnHeader(); + this.chPhonemeGroupPhonemeCount = new System.Windows.Forms.ColumnHeader(); + this.chPhonemeGroupData1 = new System.Windows.Forms.ColumnHeader(); + this.chPhonemeGroupData2 = new System.Windows.Forms.ColumnHeader(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.lvExplorer = new System.Windows.Forms.ListView(); + this.imlExplorerLargeIcons = new System.Windows.Forms.ImageList(this.components); + this.imlExplorerSmallIcons = new System.Windows.Forms.ImageList(this.components); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Controls.Add(this.lvPhonemes); + this.groupBox1.Location = new System.Drawing.Point(3, 123); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(400, 175); + this.groupBox1.TabIndex = 1; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Phoneme List"; + // + // button2 + // + this.button2.Location = new System.Drawing.Point(6, 19); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 0; + this.button2.Text = "button1"; + this.button2.UseVisualStyleBackColor = true; + // + // lvPhonemes + // + this.lvPhonemes.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lvPhonemes.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.chPhonemeName, + this.chPhonemeData}); + this.lvPhonemes.FullRowSelect = true; + this.lvPhonemes.GridLines = true; + this.lvPhonemes.HideSelection = false; + this.lvPhonemes.Location = new System.Drawing.Point(6, 48); + this.lvPhonemes.Name = "lvPhonemes"; + this.lvPhonemes.Size = new System.Drawing.Size(388, 121); + this.lvPhonemes.TabIndex = 1; + this.lvPhonemes.UseCompatibleStateImageBehavior = false; + this.lvPhonemes.View = System.Windows.Forms.View.Details; + // + // chPhonemeName + // + this.chPhonemeName.Text = "Name"; + this.chPhonemeName.Width = 285; + // + // chPhonemeData + // + this.chPhonemeData.Text = "Data"; + this.chPhonemeData.Width = 94; + // + // groupBox2 + // + this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox2.Controls.Add(this.button1); + this.groupBox2.Controls.Add(this.lvGroups); + this.groupBox2.Location = new System.Drawing.Point(3, 3); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(397, 114); + this.groupBox2.TabIndex = 0; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Phoneme Groups"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(6, 19); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 0; + this.button1.Text = "button1"; + this.button1.UseVisualStyleBackColor = true; + // + // lvGroups + // + this.lvGroups.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lvGroups.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.chPhonemeGroupName, + this.chPhonemeGroupPhonemeCount, + this.chPhonemeGroupData1, + this.chPhonemeGroupData2}); + this.lvGroups.FullRowSelect = true; + this.lvGroups.GridLines = true; + this.lvGroups.HideSelection = false; + this.lvGroups.Location = new System.Drawing.Point(6, 48); + this.lvGroups.Name = "lvGroups"; + this.lvGroups.Size = new System.Drawing.Size(385, 60); + this.lvGroups.TabIndex = 1; + this.lvGroups.UseCompatibleStateImageBehavior = false; + this.lvGroups.View = System.Windows.Forms.View.Details; + this.lvGroups.SelectedIndexChanged += new System.EventHandler(this.lvGroups_SelectedIndexChanged); + // + // chPhonemeGroupName + // + this.chPhonemeGroupName.Text = "Name"; + this.chPhonemeGroupName.Width = 190; + // + // chPhonemeGroupPhonemeCount + // + this.chPhonemeGroupPhonemeCount.Text = "Phonemes"; + this.chPhonemeGroupPhonemeCount.Width = 82; + // + // chPhonemeGroupData1 + // + this.chPhonemeGroupData1.Text = "Data 1"; + // + // chPhonemeGroupData2 + // + this.chPhonemeGroupData2.Text = "Data 2"; + // + // tabControl1 + // + this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Location = new System.Drawing.Point(3, 3); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(414, 327); + this.tabControl1.TabIndex = 3; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.groupBox2); + this.tabPage1.Controls.Add(this.groupBox1); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(406, 301); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "Programmer"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.lvExplorer); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(406, 301); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "Explorer"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // lvExplorer + // + this.lvExplorer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lvExplorer.FullRowSelect = true; + this.lvExplorer.GridLines = true; + this.lvExplorer.HideSelection = false; + this.lvExplorer.LargeImageList = this.imlExplorerLargeIcons; + this.lvExplorer.Location = new System.Drawing.Point(3, 3); + this.lvExplorer.Name = "lvExplorer"; + this.lvExplorer.Size = new System.Drawing.Size(400, 295); + this.lvExplorer.SmallImageList = this.imlExplorerSmallIcons; + this.lvExplorer.TabIndex = 1; + this.lvExplorer.UseCompatibleStateImageBehavior = false; + // + // imlExplorerLargeIcons + // + this.imlExplorerLargeIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imlExplorerLargeIcons.ImageStream"))); + this.imlExplorerLargeIcons.TransparentColor = System.Drawing.Color.Transparent; + this.imlExplorerLargeIcons.Images.SetKeyName(0, "folder_closed"); + this.imlExplorerLargeIcons.Images.SetKeyName(1, "folder_open"); + // + // imlExplorerSmallIcons + // + this.imlExplorerSmallIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imlExplorerSmallIcons.ImageStream"))); + this.imlExplorerSmallIcons.TransparentColor = System.Drawing.Color.Transparent; + this.imlExplorerSmallIcons.Images.SetKeyName(0, "folder_closed"); + this.imlExplorerSmallIcons.Images.SetKeyName(1, "folder_open"); + // + // VoiceDatabaseEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.tabControl1); + this.Name = "VoiceDatabaseEditor"; + this.Size = new System.Drawing.Size(420, 333); + this.groupBox1.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.ResumeLayout(false); + } + private System.Windows.Forms.ImageList imlExplorerSmallIcons; + private System.Windows.Forms.ImageList imlExplorerLargeIcons; + private System.Windows.Forms.ListView lvExplorer; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.ColumnHeader chPhonemeGroupData2; + private System.Windows.Forms.ColumnHeader chPhonemeGroupData1; + private System.Windows.Forms.ListView lvPhonemes; + private System.Windows.Forms.ColumnHeader chPhonemeGroupPhonemeCount; + private System.Windows.Forms.ColumnHeader chPhonemeGroupName; + private System.Windows.Forms.ColumnHeader chPhonemeData; + private System.Windows.Forms.ColumnHeader chPhonemeName; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.ListView lvGroups; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.GroupBox groupBox1; + } +} diff --git a/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Voicebank/VoicebankEditor.resx b/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Voicebank/VoicebankEditor.resx new file mode 100644 index 00000000..2009534e --- /dev/null +++ b/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/Editors/Multimedia/Audio/Voicebank/VoicebankEditor.resx @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 9, 8 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACC + GAAAAk1TRnQBSQFMAgEBAgEAAQQBAAEEAQABIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA + AwABIAMAAQEBAAEgBgABQP8A/wD/AP8A/wD/AKgAAwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMB + Af8DAQH/AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMB + Af8DAQH/AwEB/wMBAf8DAQH//wAJAAMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMB + Af8DAQH/AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMB + Af8DAQH/AwEB/wMBAf8DAQH/AwEB/xAAA4EB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEB + AoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEB + AoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEB + AoEB/wEBAoEB/wMBAf//AAEAA4EB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEB + AoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEB + AoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEBAoEB/wEB + AoEB/wEBAoEB/wEBAoEB/wEBAoEB/wMBAf8MAAOBAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBAoEB/wMBAf//AAEAA4EF/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEB + A/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPA + Af8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQKBAf8DAQH/DAADgQH/A8AB/wEBA/8DwAH/AQED/wPA + Af8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEB + A/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8BAQKBAf8DAQH//wABAAOBBf8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/AQECgQH/AwEB/wgAA4EB/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wMBAf8DAQH//wABAAOBBf8BAQP/ + A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQECgQH/AwEB/wgA + A4EB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/A8AB/wMBAf8DAQH/ + /wABAAOBBf8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/ + AQECgQH/AwEB/wgAA4EB/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A4EB/wMBAf8DAQH//wABAAOBBf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/AQECgQH/AwEB/wgAA4EB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/A4EB/wMBAf8DAQH//wABAAOBBf8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/AQECgQH/AwEB/wQAA4EB/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wMBAf8BAQKBAf8DAQH//wABAAOBBf8BAQP/A8AB/wEB + A/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPA + Af8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQECgQH/AwEB/wQAA4EB/wPA + Af8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEB + A/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wMBAf8BAQKBAf8DAQH/ + /wABAAOBBf8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/ + AQECgQH/AwEB/wQAA4EB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + A4EB/wMBAf8BAQKBAf8DAQH//wABAAOBBf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEB + A/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPA + Af8BAQP/A8AB/wEBA/8DwAH/AQECgQH/AwEB/wQAA4EB/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPA + Af8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEB + A/8DwAH/AQED/wPAAf8BAQP/A4EB/wMBAf8BAQKBAf8DAQH//wABAAOBBf8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/AQECgQH/AwEB/wOBAf8DwAH/AQED/wPA + Af8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEB + A/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8DAQH/A4EB/wEBAoEB/wMBAf//AAEA + A4EF/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQKB + Af8DAQH/A4EB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEB + A/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wMB + Af8DgQH/AQECgQH/AwEB//8AAQADgQX/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/AQED/wEBAoEB/wMBAf8DgQH/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEB + A/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPA + Af8BAQP/A8AB/wEBA/8DgQH/AwEB/wEBA/8BAQKBAf8DAQH//wABAAOBBf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQECgQH/AwEB/wOBAf8BAQP/A8AB/wEB + A/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPA + Af8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wOBAf8DAQH/A8AB/wEBAoEB/wMBAf//AAEA + A4EF/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8BAQKB + Af8DAQH/A4Fp/wMBAf8DgQH/AQED/wEBAoEB/wMBAf//AAEAA4EF/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQKBAf8DAQH/BAADgQH/A4EB/wPAAf8DwAH/ + A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/ + A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8BAQP/A8AB/wEBAoEB/wMBAf//AAEAA4EF/wPA + Af8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEB + A/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8BAQKBAf8DAQH/ + DAADgQX/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPA + Af8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wEBAoEB/wMBAf//AAEA + A4EF/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQKB + Af8DAQH/DAADgQX/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBAoEB/wMB + Af//AAEAA4EF/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPA + Af8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEB + A/8BAQKBAf8DAQH/DAADgQX/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEB + A/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wEB + AoEB/wMBAf//AAEAA4EF/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQKBAf8DAQH/DAADgQX/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/ + AQED/wPAAf8BAQP/A8AB/wEBL/8DAQH//wAFAAOBdf8BAQKBAf8DAQH/DAADgQX/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8DgQH/A4EB/wOBAf8DgQH/ + A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB//8ACQADgQH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/ + A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/ + A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DAQH/FAADgQX/AQED/wPAAf8BAQP/A8AB/wEB + A/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/A4EB//8AOQADgQX/AQED/wPAAf8BAQP/A8AB/wEB + A/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/A4EB/1QAA4EF/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/AQED/wPAAf8DgQH//wBBAAOBBf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/A4EB/1wAA4El/wOBAf//AEkAA4El/wOBAf9kAAOBAf8DgQH/A4EB/wOBAf8DgQH/ + A4EB/wOBAf8DgQH/A4EB//8AUQADgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf//AP8A + /wDPAAFCAU0BPgcAAT4DAAEoAwABgAMAASADAAEBAQABAQYAAQIWAAP/AQAI/wgACP8IAAj/CAAE/wHw + AgABAQgAAYACAAEBAeAPAAHgDwAB4A8AAcAPAAHADwABwA8AAcAPAAGADwABgA8AAYAPAAGAXwABgA8A + AeAPAAHgDwAB4A8AAeACAAEBDAAB4AIAAQMLAAEBAfABAAEfAf8IAAGAAQAC/wH4AQABPwH/CAABwAEB + Av8B/AEAAX8B/wgAAeABAwL/Af4BAAL/CAAB8AEHBv8IAAj/CAAL + + + + 162, 10 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADI + BQAAAk1TRnQBSQFMAgEBAgEAAQUBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABEAMAAQEBAAEgBgABEP8A/wAYAAMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMB + Af8DAQH/AwEB/wMBAf8DAQH/EAADAQH/AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/ + AwEB/wMBAf8DAQH/gAADgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOB + Af8DgQH/A4EB/wMBAf8MAAOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/ + A4EB/wMBAf8DAQH/gAADgQX/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEB + A/8DgQH/AwEB/wwAA4EF/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wOBAf8DAQH/ + AwEB/4AAA4EF/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/A4EB/wMB + Af8IAAOBBf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AwEB/wOBAf8DAQH/ + gAADgQX/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DgQH/AwEB/wgA + A4EF/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wOBAf8DAQH/A4EB/wMBAf+AAAOB + Bf8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wOBAf8DAQH/BAADgQX/ + A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wMBAf8DgQH/A4EB/wMBAf+AAAOB + Bf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wOBAf8DAQH/BAADgSn/ + A4EB/wMBAf8DwAH/A4EB/wMBAf+AAAOBBf8DwAH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPA + Af8BAQP/A8AB/wOBAf8DAQH/BAADgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/ + A4EB/wOBAf8DgQH/AQED/wOBAf8DAQH/gAADgQX/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPA + Af8BAQP/A8AB/wEBA/8DgQH/AwEB/wgAA4EF/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A8AB/wEBA/8DwAH/A4EB/wMBAf+AAAOBMf8DgQH/AwEB/wgAA4EF/wEBA/8DwAH/AQED/wPAAf8BAQP/ + A8AV/wOBAf8DAQH/gAADgQH/AQED/wPAAf8BAQP/A8AB/wEBA/8DwAH/AQED/wOBAf8DgQH/A4EB/wOB + Af8DgQH/A4EB/wwAA4EF/wPAAf8BAQP/A8AB/wEBA/8DwAX/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/ + iAADgQH/AQED/wPAAf8BAQP/A8AB/wEBA/8DgQH/KAADgRX/A4EB/6QAA4EB/wOBAf8DgQH/A4EB/wOB + Af8wAAOBAf8DgQH/A4EB/wOBAf8DgQH//wChAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUA + AYAXAAP/AQAE/wQABP8EAAGAAQEB4AYAAQEBwAYAAQEBwAYAAQEBgAYAAQEBgAYAAQEHAAEBBwABAQcA + AQEBgAYAAQEBgAYAAQMBgAEBBAABgAH/AcABfwQAAcEB/wHgAf8EAAT/BAAL + + + + 37 + + \ No newline at end of file diff --git a/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms.csproj b/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms.csproj index eeada1e9..f7eb8fbb 100644 --- a/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms.csproj +++ b/CSharp/Engines/WindowsForms/Plugins/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms/UniversalEditor.Plugins.Multimedia.UserInterface.WindowsForms.csproj @@ -100,6 +100,12 @@ SynthesizedAudioEditor.cs + + UserControl + + + VoicebankEditor.cs + UserControl @@ -166,6 +172,9 @@ SynthesizedAudioEditor.cs + + VoicebankEditor.cs + WaveformAudioEditor.cs diff --git a/CSharp/Plugins/UniversalEditor.Essential/DataFormats/Shortcut/FreeDesktop/DesktopShortcutAction.cs b/CSharp/Plugins/UniversalEditor.Essential/DataFormats/Shortcut/FreeDesktop/DesktopShortcutAction.cs new file mode 100644 index 00000000..343302fe --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Essential/DataFormats/Shortcut/FreeDesktop/DesktopShortcutAction.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.DataFormats.Shortcut.FreeDesktop +{ + public class DesktopShortcutAction + { + public class DesktopShortcutActionCollection + : System.Collections.ObjectModel.Collection + { + + } + + private string mvarName = String.Empty; + public string Name { get { return mvarName; } set { mvarName = value; } } + + private string mvarTitle = String.Empty; + /// + /// Label that will be shown to the user. Since actions are always shown in the context of + /// a specific application (that is, as a submenu of a launcher), this only needs to be + /// unambiguous within one application and should not include the application name. + /// + public string Title { get { return mvarTitle; } set { mvarTitle = value; } } + + private string mvarIconFileName = String.Empty; + /// + /// Icon to be shown togheter with the action. If the name is an absolute path, the given + /// file will be used. If the name is not an absolute path, the algorithm described in the + /// Icon Theme Specification will be used to locate the icon. Implementations may choose + /// to ignore it. + /// + public string IconFileName { get { return mvarIconFileName; } set { mvarIconFileName = value; } } + + private string mvarExecutableFileName = String.Empty; + /// + /// Program to execute for this action. See the Exec key for details on how this key + /// works. The Exec key is required if DBusActivatable is not set to true in the main + /// desktop entry group. Even if DBusActivatable is true, Exec should be specified for + /// compatibility with implementations that do not understand DBusActivatable. + /// + public string ExecutableFileName { get { return mvarExecutableFileName; } set { mvarExecutableFileName = value; } } + + private System.Collections.Specialized.StringCollection mvarExecutableArguments = new System.Collections.Specialized.StringCollection(); + /// + /// Arguments passed into the associated program when it is executed. + /// + public System.Collections.Specialized.StringCollection ExecutableArguments { get { return mvarExecutableArguments; } } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Essential/DataFormats/Shortcut/FreeDesktop/DesktopShortcutDataFormat.cs b/CSharp/Plugins/UniversalEditor.Essential/DataFormats/Shortcut/FreeDesktop/DesktopShortcutDataFormat.cs new file mode 100644 index 00000000..3ee384ff --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Essential/DataFormats/Shortcut/FreeDesktop/DesktopShortcutDataFormat.cs @@ -0,0 +1,418 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using UniversalEditor.ObjectModels.PropertyList; +using UniversalEditor.DataFormats.PropertyList; +using UniversalEditor.ObjectModels.Shortcut; + +namespace UniversalEditor.DataFormats.Shortcut.FreeDesktop +{ + public class DesktopShortcutDataFormat : WindowsConfigurationDataFormat + { + private static DataFormatReference _dfr = null; + public override DataFormatReference MakeReference() + { + if (_dfr == null) + { + _dfr = new DataFormatReference(GetType()); + _dfr.Capabilities.Add(typeof(ShortcutObjectModel), DataFormatCapabilities.All); + _dfr.ExportOptions.Add(new CustomOptionText("ApplicationTitle", "&Application title: ")); + _dfr.ExportOptions.Add(new CustomOptionText("GenericTitle", "&Generic title: ")); + _dfr.ExportOptions.Add(new CustomOptionBoolean("HideFromMenus", "&Do not display this entry in menus")); + _dfr.ExportOptions.Add(new CustomOptionBoolean("Deleted", "&Mark this shortcut as being deleted by the user")); + _dfr.ExportOptions.Add(new CustomOptionBoolean("DBusActivatable", "&Enable DBus activation")); + _dfr.Sources.Add("http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html"); + _dfr.Filters.Add("FreeDesktop.org desktop/directory shortcut entry", new string[] { "*.desktop", "*.directory" }); + } + return _dfr; + } + + private string mvarApplicationTitle = String.Empty; + /// + /// Specific name of the application, for example "Mozilla". + /// + public string ApplicationTitle { get { return mvarApplicationTitle; } set { mvarApplicationTitle = value; } } + + private string mvarGenericTitle = String.Empty; + /// + /// Generic name of the application, for example "Web Browser". + /// + public string GenericTitle { get { return mvarGenericTitle; } set { mvarGenericTitle = value; } } + + private DesktopShortcutType mvarType = DesktopShortcutType.Application; + public DesktopShortcutType Type { get { return mvarType; } set { mvarType = value; } } + + private bool mvarHideFromMenus = false; + /// + /// NoDisplay means "this application exists, but don't display it in the menus". This + /// can be useful to e.g. associate this application with MIME types, so that it gets + /// launched from a file manager (or other apps), without having a menu entry for it + /// (there are tons of good reasons for this, including e.g. the netscape -remote, or + /// kfmclient openURL kind of stuff). + /// + public bool HideFromMenus { get { return mvarHideFromMenus; } set { mvarHideFromMenus = value; } } + + private bool mvarDeleted = false; + /// + /// Hidden should have been called Deleted. It means the user deleted (at his level) + /// something that was present (at an upper level, e.g. in the system dirs). It's strictly + /// equivalent to the .desktop file not existing at all, as far as that user is concerned. + /// This can also be used to "uninstall" existing files (e.g. due to a renaming) - by + /// letting make install install a file with Hidden=true in it. + /// + public bool Deleted { get { return mvarDeleted; } set { mvarDeleted = value; } } + + private System.Collections.Specialized.StringCollection mvarRestrictedEnvironments = new System.Collections.Specialized.StringCollection(); + /// + /// + /// A list of strings identifying the desktop environments that should display/not + /// display a given desktop entry. + /// + /// + /// By default, a desktop file should be shown, unless an + /// OnlyShowIn key is present, in which case, the default is for the file not to be + /// shown. + /// + /// + /// If $XDG_CURRENT_DIRECTORY is set then it contains a colon-separated list of strings. + /// In order, each string is considered. If a matching entry is found in OnlyShowIn then + /// the desktop file is shown. If an entry is found in NotShowIn then the desktop file is + /// not shown. If none of the strings match then the default action is taken (as above). + /// + /// + /// The same desktop name may not appear in both OnlyShowIn and NotShowIn of a group. + /// + /// + public System.Collections.Specialized.StringCollection RestrictedEnvironments { get { return mvarRestrictedEnvironments; } } + + private System.Collections.Specialized.StringCollection mvarExcludedEnvironments = new System.Collections.Specialized.StringCollection(); + /// + /// + /// A list of strings identifying the desktop environments that should display/not + /// display a given desktop entry. + /// + /// + /// By default, a desktop file should be shown, unless an + /// OnlyShowIn key is present, in which case, the default is for the file not to be + /// shown. + /// + /// + /// If $XDG_CURRENT_DIRECTORY is set then it contains a colon-separated list of strings. + /// In order, each string is considered. If a matching entry is found in OnlyShowIn then + /// the desktop file is shown. If an entry is found in NotShowIn then the desktop file is + /// not shown. If none of the strings match then the default action is taken (as above). + /// + /// + /// The same desktop name may not appear in both OnlyShowIn and NotShowIn of a group. + /// + /// + public System.Collections.Specialized.StringCollection ExcludedEnvironments { get { return mvarExcludedEnvironments; } } + + private bool mvarDBusActivatable = false; + /// + /// A boolean value specifying if D-Bus activation is supported for this application. If + /// this key is missing, the default value is false. If the value is true then + /// implementations should ignore the Exec key and send a D-Bus message to launch the + /// application. See D-Bus Activation for more information on how this works. + /// Applications should still include Exec= lines in their desktop files for + /// compatibility with implementations that do not understand the DBusActivatable key. + /// + public bool DBusActivatable { get { return mvarDBusActivatable; } set { mvarDBusActivatable = value; } } + + private string mvarTryExec = String.Empty; + /// + /// Path to an executable file on disk used to determine if the program is actually + /// installed. If the path is not an absolute path, the file is looked up in the $PATH + /// environment variable. If the file is not present or if it is not executable, the entry + /// may be ignored (not be used in menus, for example). + /// + public string TryExec { get { return mvarTryExec; } set { mvarTryExec = value; } } + + private DesktopShortcutAction.DesktopShortcutActionCollection mvarActions = new DesktopShortcutAction.DesktopShortcutActionCollection(); + /// + /// Identifiers for application actions. This can be used to tell the application to make + /// a specific action, different from the default behavior. The Application actions + /// section describes how actions work. + /// + public DesktopShortcutAction.DesktopShortcutActionCollection Actions { get { return mvarActions; } } + + private System.Collections.Specialized.StringCollection mvarSupportedMimeTypes = new System.Collections.Specialized.StringCollection(); + /// + /// The MIME type(s) supported by this application. + /// + public System.Collections.Specialized.StringCollection SupportedMimeTypes { get { return mvarSupportedMimeTypes; } } + + private System.Collections.Specialized.StringCollection mvarCategories = new System.Collections.Specialized.StringCollection(); + /// + /// Categories in which the entry should be shown in a menu (for possible values see the Desktop Menu Specification). + /// + public System.Collections.Specialized.StringCollection Categories { get { return mvarCategories; } } + + private System.Collections.Specialized.StringCollection mvarKeywords = new System.Collections.Specialized.StringCollection(); + /// + /// A list of strings which may be used in addition to other metadata to describe this + /// entry. This can be useful e.g. to facilitate searching through entries. The values + /// are not meant for display, and should not be redundant with the values of Name or + /// GenericName. + /// + public System.Collections.Specialized.StringCollection Keywords { get { return mvarKeywords; } } + + private DesktopShortcutStartupNotifyBehavior mvarStartupNotify = DesktopShortcutStartupNotifyBehavior.Disabled; + /// + /// If set to , it is KNOWN + /// that the application will send a "remove" message when started with the + /// DESKTOP_STARTUP_ID environment variable set. If set to + /// , it is KNOWN that the + /// application does not work with startup notification at all (does not shown any window, + /// breaks even when using StartupWMClass, etc.). If set to + /// , a reasonable handling is + /// up to implementations (assuming false, using StartupWMClass, etc.). (See the Startup + /// Notification Protocol Specification for more details). + /// + public DesktopShortcutStartupNotifyBehavior StartupNotify { get { return mvarStartupNotify; } set { mvarStartupNotify = value; } } + + private string mvarStartupWindowClass = String.Empty; + /// + /// If specified, it is known that the application will map at least one window with the + /// given string as its WM class or WM name hint (see the Startup Notification Protocol + /// Specification for more details). + /// + public string StartupWindowClass { get { return mvarStartupWindowClass; } set { mvarStartupWindowClass = value; } } + + protected override void BeforeLoadInternal(Stack objectModels) + { + base.BeforeLoadInternal(objectModels); + objectModels.Push(new PropertyListObjectModel()); + } + protected override void AfterLoadInternal(Stack objectModels) + { + base.AfterLoadInternal(objectModels); + + PropertyListObjectModel plom = (objectModels.Pop() as PropertyListObjectModel); + ShortcutObjectModel shortcut = (objectModels.Pop() as ShortcutObjectModel); + + + } + protected override void BeforeSaveInternal(Stack objectModels) + { + base.BeforeSaveInternal(objectModels); + ShortcutObjectModel shortcut = (objectModels.Pop() as ShortcutObjectModel); + PropertyListObjectModel plom = new PropertyListObjectModel(); + + #region Desktop Entry + { + Group group = new Group("Desktop Entry"); + + // Version of the Desktop Entry Specification that the desktop entry conforms + // with. Entries that confirm with this version of the specification should use + // 1.0. Note that the version field is not required to be present. + group.Properties.Add("Version", "1.0"); + + if (!String.IsNullOrEmpty(mvarApplicationTitle)) + { + group.Properties.Add("Name", mvarApplicationTitle); + } + if (!String.IsNullOrEmpty(mvarGenericTitle)) + { + group.Properties.Add("GenericName", mvarGenericTitle); + } + if (mvarHideFromMenus) + { + group.Properties.Add("NoDisplay", "true"); + } + if (!String.IsNullOrEmpty(shortcut.Comment)) + { + group.Properties.Add("Comment", shortcut.Comment); + } + if (!String.IsNullOrEmpty(shortcut.IconFileName)) + { + // Icon to display in file manager, menus, etc. If the name is an absolute + // path, the given file will be used. If the name is not an absolute path, the + // algorithm described in the Icon Theme Specification will be used to locate + // the icon. + group.Properties.Add("Icon", shortcut.IconFileName); + } + if (mvarDeleted) + { + group.Properties.Add("Hidden", true); + } + if (mvarRestrictedEnvironments.Count > 0) + { + StringBuilder sb = new StringBuilder(); + foreach (string s in mvarRestrictedEnvironments) + { + sb.Append(s); + if (mvarRestrictedEnvironments.IndexOf(s) < mvarRestrictedEnvironments.Count - 1) + { + sb.Append(":"); + } + } + group.Properties.Add("OnlyShowIn", sb.ToString()); + } + if (mvarExcludedEnvironments.Count > 0) + { + StringBuilder sb = new StringBuilder(); + foreach (string s in mvarExcludedEnvironments) + { + sb.Append(s); + if (mvarExcludedEnvironments.IndexOf(s) < mvarExcludedEnvironments.Count - 1) + { + sb.Append(":"); + } + } + group.Properties.Add("NotShowIn", sb.ToString()); + } + + if (mvarDBusActivatable) + { + group.Properties.Add("DBusActivatable", true); + } + + if (!String.IsNullOrEmpty(mvarTryExec)) + { + group.Properties.Add("TryExec", mvarTryExec); + } + if (!String.IsNullOrEmpty(shortcut.ExecutableFileName)) + { + // Program to execute, possibly with arguments. See the Exec key for details + // on how this key works. The Exec key is required if DBusActivatable is not + // set to true. Even if DBusActivatable is true, Exec should be specified for + // compatibility with implementations that do not understand DBusActivatable. + + StringBuilder sb = new StringBuilder(); + sb.Append(shortcut.ExecutableFileName); + foreach (string arg in shortcut.ExecutableArguments) + { + sb.Append(" "); + sb.Append(arg); + } + group.Properties.Add("Exec", sb.ToString()); + } + if (!String.IsNullOrEmpty(shortcut.WorkingDirectory)) + { + // If entry is of type Application, the working directory in which to run the + // program. + group.Properties.Add("Path", shortcut.WorkingDirectory); + } + if (shortcut.RunInTerminal) + { + // Whether the program runs in a terminal window. + group.Properties.Add("Terminal", true); + } + #region Desktop Actions + { + // Identifiers for application actions. This can be used to tell the + // application to make a specific action, different from the default + // behavior. The Application actions section describes how actions work. + StringBuilder sb = new StringBuilder(); + foreach (DesktopShortcutAction action in mvarActions) + { + sb.Append(action.Name); + sb.Append(";"); + } + group.Properties.Add("Actions", sb.ToString()); + } + #endregion + + if (mvarSupportedMimeTypes.Count > 0) + { + StringBuilder sb = new StringBuilder(); + foreach (string s in mvarSupportedMimeTypes) + { + sb.Append(s); + sb.Append(";"); + } + group.Properties.Add("MimeType", sb.ToString()); + } + if (mvarCategories.Count > 0) + { + StringBuilder sb = new StringBuilder(); + foreach (string s in mvarCategories) + { + sb.Append(s); + sb.Append(";"); + } + group.Properties.Add("Categories", sb.ToString()); + } + if (mvarKeywords.Count > 0) + { + StringBuilder sb = new StringBuilder(); + foreach (string s in mvarKeywords) + { + sb.Append(s); + sb.Append(";"); + } + group.Properties.Add("Keywords", sb.ToString()); + } + + switch (mvarStartupNotify) + { + case DesktopShortcutStartupNotifyBehavior.Disabled: + { + break; + } + case DesktopShortcutStartupNotifyBehavior.Supported: + { + group.Properties.Add("StartupNotify", true); + break; + } + case DesktopShortcutStartupNotifyBehavior.Unsupported: + { + group.Properties.Add("StartupNotify", false); + break; + } + } + + if (!String.IsNullOrEmpty(mvarStartupWindowClass)) + { + group.Properties.Add("StartupWMClass", mvarStartupWindowClass); + } + + if (mvarType == DesktopShortcutType.InternetLink) + { + group.Properties.Add("URL", shortcut.ExecutableFileName); + } + + + // This specification defines 3 types of desktop entries: Application (type 1), + // Link (type 2) and Directory (type 3). To allow the addition of new types in the + // future, implementations should ignore desktop entries with an unknown type. + // group.Properties.Add("Type"); + + plom.Groups.Add(group); + + + #region Desktop Actions + { + // Identifiers for application actions. This can be used to tell the + // application to make a specific action, different from the default + // behavior. The Application actions section describes how actions work. + foreach (DesktopShortcutAction action in mvarActions) + { + Group group1 = new Group("Desktop Action " + action.Name); + + StringBuilder sb = new StringBuilder(); + sb.Append(action.ExecutableFileName); + foreach (string s in action.ExecutableArguments) + { + sb.Append(" "); + sb.Append(s); + } + group1.Properties.Add("Exec", sb.ToString()); + + group1.Properties.Add("Name", action.Title); + group1.Properties.Add("Icon", action.IconFileName); + + plom.Groups.Add(group1); + } + } + #endregion + } + #endregion + + objectModels.Push(plom); + } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Essential/DataFormats/Shortcut/FreeDesktop/DesktopShortcutStartupNotifyBehavior.cs b/CSharp/Plugins/UniversalEditor.Essential/DataFormats/Shortcut/FreeDesktop/DesktopShortcutStartupNotifyBehavior.cs new file mode 100644 index 00000000..8c4fc8d1 --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Essential/DataFormats/Shortcut/FreeDesktop/DesktopShortcutStartupNotifyBehavior.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.DataFormats.Shortcut.FreeDesktop +{ + public enum DesktopShortcutStartupNotifyBehavior + { + Disabled = 0, + Supported = 1, + Unsupported = 2 + } +} diff --git a/CSharp/Plugins/UniversalEditor.Essential/DataFormats/Shortcut/FreeDesktop/DesktopShortcutType.cs b/CSharp/Plugins/UniversalEditor.Essential/DataFormats/Shortcut/FreeDesktop/DesktopShortcutType.cs new file mode 100644 index 00000000..5031a896 --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Essential/DataFormats/Shortcut/FreeDesktop/DesktopShortcutType.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.DataFormats.Shortcut.FreeDesktop +{ + public enum DesktopShortcutType + { + InternetLink + } +} diff --git a/CSharp/Plugins/UniversalEditor.Essential/ObjectModels/Shortcut/ShortcutObjectModel.cs b/CSharp/Plugins/UniversalEditor.Essential/ObjectModels/Shortcut/ShortcutObjectModel.cs new file mode 100644 index 00000000..0e2ab98d --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Essential/ObjectModels/Shortcut/ShortcutObjectModel.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.ObjectModels.Shortcut +{ + public class ShortcutObjectModel : ObjectModel + { + private static ObjectModelReference _omr = null; + public override ObjectModelReference MakeReference() + { + if (_omr == null) + { + _omr = base.MakeReference(); + _omr.Title = "Shortcut"; + } + return _omr; + } + + public override void Clear() + { + } + + public override void CopyTo(ObjectModel where) + { + } + + private string mvarComment = String.Empty; + /// + /// Tooltip for the entry, for example "View sites on the Internet". The value should not + /// be redundant with the shortcut title. + /// + public string Comment { get { return mvarComment; } set { mvarComment = value; } } + + private string mvarIconFileName = String.Empty; + /// + /// File name or known icon name of the icon to display in the file manager, menus, etc. + /// + public string IconFileName { get { return mvarIconFileName; } set { mvarIconFileName = value; } } + + private string mvarExecutableFileName = String.Empty; + public string ExecutableFileName { get { return mvarExecutableFileName; } set { mvarExecutableFileName = value; } } + + private System.Collections.Specialized.StringCollection mvarExecutableArguments = new System.Collections.Specialized.StringCollection(); + public System.Collections.Specialized.StringCollection ExecutableArguments { get { return mvarExecutableArguments; } } + + private string mvarWorkingDirectory = String.Empty; + /// + /// The directory in which to run the program, if different than the program's location. + /// + public string WorkingDirectory { get { return mvarWorkingDirectory; } set { mvarWorkingDirectory = value; } } + + private bool mvarRunInTerminal = false; + /// + /// Whether the program runs in a terminal window. + /// + public bool RunInTerminal { get { return mvarRunInTerminal; } set { mvarRunInTerminal = value; } } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Essential/UniversalEditor.Essential.csproj b/CSharp/Plugins/UniversalEditor.Essential/UniversalEditor.Essential.csproj index 07fb80dd..bd273733 100644 --- a/CSharp/Plugins/UniversalEditor.Essential/UniversalEditor.Essential.csproj +++ b/CSharp/Plugins/UniversalEditor.Essential/UniversalEditor.Essential.csproj @@ -1,4 +1,4 @@ - + @@ -55,6 +55,10 @@ + + + + @@ -85,6 +89,7 @@ + diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700DataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700DataFormat.cs index 7120f2ba..946ab6f7 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700DataFormat.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700DataFormat.cs @@ -1,6 +1,24 @@ +// Universal Editor DataFormat for loading SPC700 synthesized audio files +// Copyright (C) 2014 Mike Becker's Software +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + using System; using UniversalEditor.IO; using UniversalEditor.ObjectModels.Multimedia.Audio.Synthesized; + namespace UniversalEditor.DataFormats.Multimedia.Audio.Synthesized.SPC { public class SPC700DataFormat : DataFormat @@ -10,12 +28,12 @@ namespace UniversalEditor.DataFormats.Multimedia.Audio.Synthesized.SPC DataFormatReference dfr = base.MakeReference(); dfr.Filters.Add("SNES-SPC700 sound file", new byte?[][] { new byte?[] { (byte)'S', (byte)'N', (byte)'E', (byte)'S', (byte)'-', (byte)'S', (byte)'P', (byte)'C', (byte)'7', (byte)'0', (byte)'0', (byte)' ', (byte)'S', (byte)'o', (byte)'u', (byte)'n', (byte)'d', (byte)' ', (byte)'F', (byte)'i', (byte)'l', (byte)'e', (byte)' ', (byte)'D', (byte)'a', (byte)'t', (byte)'a' } }, new string[] { "*.spc" }); dfr.Capabilities.Add(typeof(SynthesizedAudioObjectModel), DataFormatCapabilities.All); - - dfr.ExportOptions.Add(new CustomOptionChoice("Generator", "&Generator:", true, - new CustomOptionFieldChoice("Unknown", SPC700Emulator.Unknown, true), - new CustomOptionFieldChoice("ZSNES", SPC700Emulator.ZSNES), - new CustomOptionFieldChoice("Snes9x", SPC700Emulator.Snes9x) - )); + + dfr.ExportOptions.Add(new CustomOptionChoice("Generator", "&Generator:", true, + new CustomOptionFieldChoice("Unknown", SPC700Emulator.Unknown, true), + new CustomOptionFieldChoice("ZSNES", SPC700Emulator.ZSNES), + new CustomOptionFieldChoice("Snes9x", SPC700Emulator.Snes9x) + )); return dfr; } @@ -25,19 +43,19 @@ namespace UniversalEditor.DataFormats.Multimedia.Audio.Synthesized.SPC private byte mvarID666DefaultChannelDisables = 0; public byte ID666DefaultChannelDisables { get { return mvarID666DefaultChannelDisables; } set { mvarID666DefaultChannelDisables = value; } } - private SPC700Emulator mvarGenerator = SPC700Emulator.Unknown; - /// - /// The emulator that generated this file. - /// - public SPC700Emulator Generator { get { return mvarGenerator; } set { mvarGenerator = value; } } + private SPC700Emulator mvarGenerator = SPC700Emulator.Unknown; + /// + /// The emulator that generated this file. + /// + public SPC700Emulator Generator { get { return mvarGenerator; } set { mvarGenerator = value; } } protected override void LoadInternal(ref ObjectModel objectModel) { SynthesizedAudioObjectModel au = (objectModel as SynthesizedAudioObjectModel); - Reader br = base.Accessor.Reader; + Reader br = base.Accessor.Reader; string fileHeader = br.ReadFixedLengthString(33); - if (!fileHeader.StartsWith("SNES-SPC700 Sound File Data")) throw new InvalidDataFormatException("File does not begin with \"SNES-SPC700 Sound File Data\""); + if (!fileHeader.StartsWith("SNES-SPC700 Sound File Data")) throw new InvalidDataFormatException("File does not begin with \"SNES-SPC700 Sound File Data\""); byte[] flags = br.ReadBytes(2u); byte hasID666Value = br.ReadByte(); @@ -62,7 +80,7 @@ namespace UniversalEditor.DataFormats.Multimedia.Audio.Synthesized.SPC au.Information.FadeOutLength = int.Parse(br.ReadNullTerminatedString(5)); au.Information.SongArtist = br.ReadNullTerminatedString(32); this.mvarID666DefaultChannelDisables = br.ReadByte(); - mvarGenerator = (SPC700Emulator)br.ReadByte(); + mvarGenerator = (SPC700Emulator)br.ReadByte(); byte[] id666Reserved = br.ReadBytes(45u); this.mvarID666Reserved = id666Reserved; } @@ -118,7 +136,7 @@ namespace UniversalEditor.DataFormats.Multimedia.Audio.Synthesized.SPC arg_17A_0.WriteFixedLengthString(num.ToString(), 5); bw.WriteFixedLengthString(au.Information.SongArtist, 32); bw.WriteByte(mvarID666DefaultChannelDisables); - bw.WriteByte((byte)mvarGenerator); + bw.WriteByte((byte)mvarGenerator); bw.WriteFixedLengthBytes(this.mvarID666Reserved, 45); } diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700Emulator.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700Emulator.cs index 36a00429..49297710 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700Emulator.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700Emulator.cs @@ -1,5 +1,5 @@ -// one line to give the program's name and an idea of what it does. -// Copyright (C) yyyy name of author +// Universal Editor DataFormat for loading SPC700 synthesized audio files +// Copyright (C) 2014 Mike Becker's Software // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700ExtendedID666Tag.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700ExtendedID666Tag.cs index 89f29a24..1740af0c 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700ExtendedID666Tag.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700ExtendedID666Tag.cs @@ -1,5 +1,5 @@ -// one line to give the program's name and an idea of what it does. -// Copyright (C) 2010 Mike Becker +// Universal Editor DataFormat for loading SPC700 synthesized audio files +// Copyright (C) 2014 Mike Becker's Software // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700ID666Tag.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700ID666Tag.cs index 580dfb45..b2e2bf26 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700ID666Tag.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700ID666Tag.cs @@ -1,5 +1,5 @@ -// one line to give the program's name and an idea of what it does. -// Copyright (C) yyyy name of author +// Universal Editor DataFormat for loading SPC700 synthesized audio files +// Copyright (C) 2014 Mike Becker's Software // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700Memory.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700Memory.cs index cc18a531..d64b29c1 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700Memory.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700Memory.cs @@ -1,5 +1,5 @@ -// one line to give the program's name and an idea of what it does. -// Copyright (C) yyyy name of author +// Universal Editor DataFormat for loading SPC700 synthesized audio files +// Copyright (C) 2014 Mike Becker's Software // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700Registers.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700Registers.cs index ad681119..c6d7375e 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700Registers.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Synthesized/SPC/SPC700Registers.cs @@ -1,5 +1,5 @@ -// one line to give the program's name and an idea of what it does. -// Copyright (C) yyyy name of author +// Universal Editor DataFormat for loading SPC700 synthesized audio files +// Copyright (C) 2014 Mike Becker's Software // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/AudioCollection/Synthesized/SPC2/SPC2DataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/AudioCollection/Synthesized/SPC2/SPC2DataFormat.cs new file mode 100644 index 00000000..ecc914a0 --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/AudioCollection/Synthesized/SPC2/SPC2DataFormat.cs @@ -0,0 +1,143 @@ +// Universal Editor DataFormat for loading SPC2 synthesized audio files +// Copyright (C) 2014 Mike Becker's Software +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UniversalEditor.DataFormats.Multimedia.Audio.Synthesized.SPC; +using UniversalEditor.IO; +using UniversalEditor.ObjectModels.FileSystem; +using UniversalEditor.ObjectModels.Multimedia.AudioCollection.Synthesized; + +namespace UniversalEditor.DataFormats.Multimedia.AudioCollection.Synthesized.SPC2 +{ + public class SPC2DataFormat : DataFormat + { + private static DataFormatReference _dfr = null; + public override DataFormatReference MakeReference() + { + if (_dfr == null) + { + _dfr = base.MakeReference(); + _dfr.Capabilities.Add(typeof(SynthesizedAudioCollectionObjectModel), DataFormatCapabilities.All); + _dfr.ImportOptions.Add(new CustomOptionBoolean("UseID666TagInformationIfAvailable", "Use &ID666 tag information if available")); + _dfr.ExportOptions.Add(new CustomOptionBoolean("IncludeID666TagInformation", "Include &ID666 tag information in output file")); + _dfr.Filters.Add("K.Horton's KSPC/SPC2 audio file", new byte?[][] { new byte?[] { (byte)'K', (byte)'S', (byte)'P', (byte)'C', (byte)0x1A } }, new string[] { "*.kspc" }); + _dfr.Sources.Add("http://blog.kevtris.org/blogfiles/spc2_file_specification_v1.txt"); + } + return _dfr; + } + + private bool mvarUseID666TagInformationIfAvailable = false; + public bool UseID666TagInformationIfAvailable { get { return mvarUseID666TagInformationIfAvailable; } set { mvarUseID666TagInformationIfAvailable = value; } } + + protected override void LoadInternal(ref ObjectModel objectModel) + { + SynthesizedAudioCollectionObjectModel coll = (objectModel as SynthesizedAudioCollectionObjectModel); + if (coll == null) throw new ObjectModelNotSupportedException(); + + Reader reader = base.Accessor.Reader; + string signature = reader.ReadFixedLengthString(4); + byte x1A = reader.ReadByte(); + if (signature != "KSPC" || x1A != 0x1A) throw new InvalidDataFormatException("File does not begin with 'KSPC', 0x1A"); + + byte versionMajor = reader.ReadByte(); + byte versionMinor = reader.ReadByte(); + + ushort fileCount = reader.ReadUInt16(); + byte[] expansion = reader.ReadBytes(7); + + for (ushort i = 0; i < fileCount; i++) + { + // Each SPC data block has this format + for (int j = 0; j < 256; j++) + { + // Offsets for all 256, 256 byte blocks of data in RAM + ushort dataBlockRAMOffset = reader.ReadUInt16(); + } + + // DSP register data (as-is from .SPC) + byte[] dspRegisterData = reader.ReadBytes(128); + + // IPL ROM (as-is from .SPC) + byte[] iplROM = reader.ReadBytes(64); + + // PCL, PCH, A, X, Y, PSW, SP (as-is from .SPC) + byte registerPCL = reader.ReadByte(); + byte registerPCH = reader.ReadByte(); + byte registerA = reader.ReadByte(); + byte registerX = reader.ReadByte(); + byte registerY = reader.ReadByte(); + byte registerPSW = reader.ReadByte(); + byte registerSP = reader.ReadByte(); + + // channel enable bits, 1 per chan (0 = en, 1 = dis) (as-is) + byte channelEnableBits = reader.ReadByte(); + + // stored as four bytes, in mm/dd/yyyy as BCD, like so: + // 01h, 12h, 20h, 00h would be 01/12/2000 + // 07h, 30h, 19h, 95h would be 07/30/1995 + byte[] dateParts = reader.ReadBytes(4); + DateTime date = new DateTime + ( + Int32.Parse(dateParts[2].ToString("X").PadLeft(2, '0') + dateParts[3].ToString("X").PadLeft(2, '0')), + Int32.Parse(dateParts[0].ToString("X").PadLeft(2, '0')), + Int32.Parse(dateParts[1].ToString("X").PadLeft(2, '0')) + ); + + // 1/64000th's to play before fadeout + uint fadeoutDelay = reader.ReadUInt32(); + // 1/64000th's to fade to silence + uint fadeoutLength = reader.ReadUInt32(); + + // amplification value (10000h == 1.00) + uint iAmplificationValue = reader.ReadUInt32(); + double amplificationValue = (double)iAmplificationValue * 0.00001; + + SPC700Emulator emulator = (SPC700Emulator)reader.ReadByte(); + + byte ostDisk = reader.ReadByte(); + byte ostTrackNumber = reader.ReadByte(); + + ushort copyrightYear = reader.ReadUInt16(); + + byte[] unused = reader.ReadBytes(34); + + SynthesizedAudioCollectionTrack track = new SynthesizedAudioCollectionTrack(); + track.SongTitle = reader.ReadFixedLengthString(32).TrimNull().Trim(); + track.GameTitle = reader.ReadFixedLengthString(32).TrimNull().Trim(); + track.ArtistName = reader.ReadFixedLengthString(32).TrimNull().Trim(); + track.DumperName = reader.ReadFixedLengthString(32).TrimNull().Trim(); + track.Comments = reader.ReadFixedLengthString(32).TrimNull().Trim(); + track.AlbumTitle = reader.ReadFixedLengthString(32).TrimNull().Trim(); + track.PublisherName = reader.ReadFixedLengthString(32).TrimNull().Trim(); + track.OriginalFileName = reader.ReadFixedLengthString(28).TrimNull().Trim(); + + uint extendedDataBlockOffset = reader.ReadUInt32(); + } + } + + protected override void SaveInternal(ObjectModel objectModel) + { + SynthesizedAudioCollectionObjectModel coll = (objectModel as SynthesizedAudioCollectionObjectModel); + if (coll == null) throw new ObjectModelNotSupportedException(); + + Writer writer = base.Accessor.Writer; + } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Voicebank/Phoneme.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Voicebank/Phoneme.cs new file mode 100644 index 00000000..cbe50631 --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Voicebank/Phoneme.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.ObjectModels.Multimedia.Audio.Voicebank +{ + public class Phoneme + { + public class PhonemeCollection + : System.Collections.ObjectModel.Collection + { + + } + + private string mvarTitle = String.Empty; + public string Title { get { return mvarTitle; } set { mvarTitle = value; } } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Voicebank/PhonemeGroup.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Voicebank/PhonemeGroup.cs new file mode 100644 index 00000000..f196bbb0 --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Voicebank/PhonemeGroup.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.ObjectModels.Multimedia.Audio.Voicebank +{ + public class PhonemeGroup + { + public class PhonemeGroupCollection + : System.Collections.ObjectModel.Collection + { + + } + + private string mvarTitle = String.Empty; + public string Title { get { return mvarTitle; } set { mvarTitle = value; } } + + private Phoneme.PhonemeCollection mvarPhonemes = new Phoneme.PhonemeCollection(); + public Phoneme.PhonemeCollection Phonemes { get { return mvarPhonemes; } } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Voicebank/VoicebankObjectModel.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Voicebank/VoicebankObjectModel.cs index 3a4a8d04..e84eecd2 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Voicebank/VoicebankObjectModel.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Voicebank/VoicebankObjectModel.cs @@ -14,20 +14,20 @@ namespace UniversalEditor.ObjectModels.Multimedia.Audio.Voicebank { ObjectModelReference omr = base.MakeReference(); omr.Title = "Synthesized audio voice bank"; - omr.Path = new string[] { "Multimedia", "Audio", "Voicebank" }; - return omr; + omr.Path = new string[] { "Multimedia", "Audio", "Voicebank" }; + return omr; } - public override void Clear() - { - mvarBankSelect = 0; - mvarCreatorVersion = new Version(1, 0); - mvarID = String.Empty; - mvarInstallationPath = String.Empty; - mvarProgramChange = 0; - mvarSamples.Clear(); - mvarSynthesisParameters.Clear(); - } + public override void Clear() + { + mvarBankSelect = 0; + mvarCreatorVersion = new Version(1, 0); + mvarID = String.Empty; + mvarInstallationPath = String.Empty; + mvarProgramChange = 0; + mvarSamples.Clear(); + mvarSynthesisParameters.Clear(); + } private int mvarBankSelect = 0; public int BankSelect { get { return mvarBankSelect; } set { mvarBankSelect = value; } } @@ -38,6 +38,9 @@ namespace UniversalEditor.ObjectModels.Multimedia.Audio.Voicebank private string mvarID = string.Empty; public string ID { get { return mvarID; } set { mvarID = value; } } + private PhonemeGroup.PhonemeGroupCollection mvarPhonemeGroups = new PhonemeGroup.PhonemeGroupCollection(); + public PhonemeGroup.PhonemeGroupCollection PhonemeGroups { get { return mvarPhonemeGroups; } } + private VoicebankSynthesisParameters mvarSynthesisParameters = new VoicebankSynthesisParameters(); public VoicebankSynthesisParameters SynthesisParameters { get { return mvarSynthesisParameters; } } @@ -56,7 +59,7 @@ namespace UniversalEditor.ObjectModels.Multimedia.Audio.Voicebank public override void CopyTo(ObjectModel destination) { VoicebankObjectModel clone = (destination as VoicebankObjectModel); - if (clone == null) return; + if (clone == null) return; foreach (VoicebankSample phoneme in this.mvarSamples) { diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/AudioCollection/Synthesized/SynthesizedAudioCollectionObjectModel.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/AudioCollection/Synthesized/SynthesizedAudioCollectionObjectModel.cs new file mode 100644 index 00000000..ed6de2ee --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/AudioCollection/Synthesized/SynthesizedAudioCollectionObjectModel.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UniversalEditor.ObjectModels.Multimedia.Audio.Synthesized; + +namespace UniversalEditor.ObjectModels.Multimedia.AudioCollection.Synthesized +{ + public class SynthesizedAudioCollectionObjectModel : ObjectModel + { + private static ObjectModelReference _omr = null; + public override ObjectModelReference MakeReference() + { + if (_omr == null) + { + _omr = base.MakeReference(); + _omr.Title = "Synthesized audio collection"; + } + return _omr; + } + + private SynthesizedAudioCollectionTrack.SynthesizedAudioCollectionTrackCollection mvarTracks = new SynthesizedAudioCollectionTrack.SynthesizedAudioCollectionTrackCollection(); + public SynthesizedAudioCollectionTrack.SynthesizedAudioCollectionTrackCollection Tracks { get { return mvarTracks; } } + + public override void Clear() + { + mvarTracks.Clear(); + } + + public override void CopyTo(ObjectModel where) + { + SynthesizedAudioCollectionObjectModel clone = (where as SynthesizedAudioCollectionObjectModel); + foreach (SynthesizedAudioCollectionTrack track in mvarTracks) + { + clone.Tracks.Add(track.Clone() as SynthesizedAudioCollectionTrack); + } + } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/AudioCollection/Synthesized/SynthesizedAudioCollectionTrack.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/AudioCollection/Synthesized/SynthesizedAudioCollectionTrack.cs new file mode 100644 index 00000000..19f1e38d --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/AudioCollection/Synthesized/SynthesizedAudioCollectionTrack.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UniversalEditor.ObjectModels.Multimedia.Audio.Synthesized; + +namespace UniversalEditor.ObjectModels.Multimedia.AudioCollection.Synthesized +{ + public class SynthesizedAudioCollectionTrack : ICloneable + { + public class SynthesizedAudioCollectionTrackCollection + : System.Collections.ObjectModel.Collection + { + + } + + private string mvarSongTitle = String.Empty; + public string SongTitle { get { return mvarSongTitle; } set { mvarSongTitle = value; } } + + private string mvarGameTitle = String.Empty; + public string GameTitle { get { return mvarGameTitle; } set { mvarGameTitle = value; } } + + private string mvarArtistName = String.Empty; + public string ArtistName { get { return mvarArtistName; } set { mvarArtistName = value; } } + + private string mvarDumperName = String.Empty; + public string DumperName { get { return mvarDumperName; } set { mvarDumperName = value; } } + + private string mvarComments = String.Empty; + public string Comments { get { return mvarComments; } set { mvarComments = value; } } + + private string mvarAlbumTitle = String.Empty; + public string AlbumTitle { get { return mvarAlbumTitle; } set { mvarAlbumTitle = value; } } + + private string mvarPublisherName = String.Empty; + public string PublisherName { get { return mvarPublisherName; } set { mvarPublisherName = value; } } + + private string mvarOriginalFileName = String.Empty; + public string OriginalFileName { get { return mvarOriginalFileName; } set { mvarOriginalFileName = value; } } + + private SynthesizedAudioObjectModel mvarObjectModel = null; + public SynthesizedAudioObjectModel ObjectModel { get { return mvarObjectModel; } } + + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/UniversalEditor.Plugins.Multimedia.csproj b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/UniversalEditor.Plugins.Multimedia.csproj index 4750c383..d3173502 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/UniversalEditor.Plugins.Multimedia.csproj +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/UniversalEditor.Plugins.Multimedia.csproj @@ -1,4 +1,4 @@ - + {BE4D0BA3-0888-42A5-9C09-FC308A4509D2} @@ -70,6 +70,7 @@ + @@ -137,6 +138,8 @@ + + Code @@ -184,6 +187,8 @@ + + Code