Merge branch 'master' of github.com:alcexhim/UniversalEditor

This commit is contained in:
Michael Becker 2014-08-05 17:04:33 -04:00
commit c983aa5537
28 changed files with 2266 additions and 126 deletions

View File

@ -0,0 +1,356 @@
namespace UniversalEditor.Editors
{
partial class ShortcutEditor
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}

View File

@ -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<byte>(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;
}
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -105,6 +105,12 @@
<Compile Include="Editors\PlainTextEditor.Designer.cs">
<DependentUpon>PlainTextEditor.cs</DependentUpon>
</Compile>
<Compile Include="Editors\ShortcutEditor.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Editors\ShortcutEditor.Designer.cs">
<DependentUpon>ShortcutEditor.cs</DependentUpon>
</Compile>
<Compile Include="IconMethods.cs" />
<Compile Include="OptionPanel.cs">
<SubType>UserControl</SubType>
@ -181,6 +187,9 @@
<EmbeddedResource Include="Editors\PlainTextEditor.resx">
<DependentUpon>PlainTextEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Editors\ShortcutEditor.resx">
<DependentUpon>ShortcutEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>

View File

@ -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);
}

View File

@ -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.
/// <summary>
/// Description of VoiceDatabaseEditor.
/// </summary>
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);
}
}
}
}
}
}

View File

@ -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
{
/// <summary>
/// Designer variable used to keep track of non-visual components.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Disposes resources used by the control.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing) {
if (components != null) {
components.Dispose();
}
}
base.Dispose(disposing);
}
/// <summary>
/// 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.
/// </summary>
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;
}
}

View File

@ -0,0 +1,273 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="imlExplorerLargeIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>9, 8</value>
</metadata>
<data name="imlExplorerLargeIcons.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
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
</value>
</data>
<metadata name="imlExplorerSmallIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>162, 10</value>
</metadata>
<data name="imlExplorerSmallIcons.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
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
</value>
</data>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>37</value>
</metadata>
</root>

View File

@ -100,6 +100,12 @@
<Compile Include="Editors\Multimedia\Audio\Synthesized\SynthesizedAudioEditor.Designer.cs">
<DependentUpon>SynthesizedAudioEditor.cs</DependentUpon>
</Compile>
<Compile Include="Editors\Multimedia\Audio\Voicebank\VoicebankEditor.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Editors\Multimedia\Audio\Voicebank\VoicebankEditor.designer.cs">
<DependentUpon>VoicebankEditor.cs</DependentUpon>
</Compile>
<Compile Include="Editors\Multimedia\Audio\Waveform\WaveformAudioEditor.cs">
<SubType>UserControl</SubType>
</Compile>
@ -166,6 +172,9 @@
<EmbeddedResource Include="Editors\Multimedia\Audio\Synthesized\SynthesizedAudioEditor.resx">
<DependentUpon>SynthesizedAudioEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Editors\Multimedia\Audio\Voicebank\VoicebankEditor.resx">
<DependentUpon>VoicebankEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Editors\Multimedia\Audio\Waveform\WaveformAudioEditor.resx">
<DependentUpon>WaveformAudioEditor.cs</DependentUpon>
</EmbeddedResource>

View File

@ -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<DesktopShortcutAction>
{
}
private string mvarName = String.Empty;
public string Name { get { return mvarName; } set { mvarName = value; } }
private string mvarTitle = String.Empty;
/// <summary>
/// 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.
/// </summary>
public string Title { get { return mvarTitle; } set { mvarTitle = value; } }
private string mvarIconFileName = String.Empty;
/// <summary>
/// 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.
/// </summary>
public string IconFileName { get { return mvarIconFileName; } set { mvarIconFileName = value; } }
private string mvarExecutableFileName = String.Empty;
/// <summary>
/// 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.
/// </summary>
public string ExecutableFileName { get { return mvarExecutableFileName; } set { mvarExecutableFileName = value; } }
private System.Collections.Specialized.StringCollection mvarExecutableArguments = new System.Collections.Specialized.StringCollection();
/// <summary>
/// Arguments passed into the associated program when it is executed.
/// </summary>
public System.Collections.Specialized.StringCollection ExecutableArguments { get { return mvarExecutableArguments; } }
}
}

View File

@ -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;
/// <summary>
/// Specific name of the application, for example "Mozilla".
/// </summary>
public string ApplicationTitle { get { return mvarApplicationTitle; } set { mvarApplicationTitle = value; } }
private string mvarGenericTitle = String.Empty;
/// <summary>
/// Generic name of the application, for example "Web Browser".
/// </summary>
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;
/// <summary>
/// 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).
/// </summary>
public bool HideFromMenus { get { return mvarHideFromMenus; } set { mvarHideFromMenus = value; } }
private bool mvarDeleted = false;
/// <summary>
/// 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.
/// </summary>
public bool Deleted { get { return mvarDeleted; } set { mvarDeleted = value; } }
private System.Collections.Specialized.StringCollection mvarRestrictedEnvironments = new System.Collections.Specialized.StringCollection();
/// <summary>
/// <para>
/// A list of strings identifying the desktop environments that should display/not
/// display a given desktop entry.
/// </para>
/// <para>
/// 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.
/// </para>
/// <para>
/// 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).
/// </para>
/// <para>
/// The same desktop name may not appear in both OnlyShowIn and NotShowIn of a group.
/// </para>
/// </summary>
public System.Collections.Specialized.StringCollection RestrictedEnvironments { get { return mvarRestrictedEnvironments; } }
private System.Collections.Specialized.StringCollection mvarExcludedEnvironments = new System.Collections.Specialized.StringCollection();
/// <summary>
/// <para>
/// A list of strings identifying the desktop environments that should display/not
/// display a given desktop entry.
/// </para>
/// <para>
/// 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.
/// </para>
/// <para>
/// 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).
/// </para>
/// <para>
/// The same desktop name may not appear in both OnlyShowIn and NotShowIn of a group.
/// </para>
/// </summary>
public System.Collections.Specialized.StringCollection ExcludedEnvironments { get { return mvarExcludedEnvironments; } }
private bool mvarDBusActivatable = false;
/// <summary>
/// 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.
/// </summary>
public bool DBusActivatable { get { return mvarDBusActivatable; } set { mvarDBusActivatable = value; } }
private string mvarTryExec = String.Empty;
/// <summary>
/// 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).
/// </summary>
public string TryExec { get { return mvarTryExec; } set { mvarTryExec = value; } }
private DesktopShortcutAction.DesktopShortcutActionCollection mvarActions = new DesktopShortcutAction.DesktopShortcutActionCollection();
/// <summary>
/// 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.
/// </summary>
public DesktopShortcutAction.DesktopShortcutActionCollection Actions { get { return mvarActions; } }
private System.Collections.Specialized.StringCollection mvarSupportedMimeTypes = new System.Collections.Specialized.StringCollection();
/// <summary>
/// The MIME type(s) supported by this application.
/// </summary>
public System.Collections.Specialized.StringCollection SupportedMimeTypes { get { return mvarSupportedMimeTypes; } }
private System.Collections.Specialized.StringCollection mvarCategories = new System.Collections.Specialized.StringCollection();
/// <summary>
/// Categories in which the entry should be shown in a menu (for possible values see the Desktop Menu Specification).
/// </summary>
public System.Collections.Specialized.StringCollection Categories { get { return mvarCategories; } }
private System.Collections.Specialized.StringCollection mvarKeywords = new System.Collections.Specialized.StringCollection();
/// <summary>
/// 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.
/// </summary>
public System.Collections.Specialized.StringCollection Keywords { get { return mvarKeywords; } }
private DesktopShortcutStartupNotifyBehavior mvarStartupNotify = DesktopShortcutStartupNotifyBehavior.Disabled;
/// <summary>
/// If set to <see cref="DesktopShortcutStartupNotifyBehavior.Supported" />, it is KNOWN
/// that the application will send a "remove" message when started with the
/// DESKTOP_STARTUP_ID environment variable set. If set to
/// <see cref="DesktopShortcutStartupNotifyBehavior.Unsupported" />, 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
/// <see cref="DesktopShortcutStartupNotifyBehavior.Disabled" />, a reasonable handling is
/// up to implementations (assuming false, using StartupWMClass, etc.). (See the Startup
/// Notification Protocol Specification for more details).
/// </summary>
public DesktopShortcutStartupNotifyBehavior StartupNotify { get { return mvarStartupNotify; } set { mvarStartupNotify = value; } }
private string mvarStartupWindowClass = String.Empty;
/// <summary>
/// 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).
/// </summary>
public string StartupWindowClass { get { return mvarStartupWindowClass; } set { mvarStartupWindowClass = value; } }
protected override void BeforeLoadInternal(Stack<ObjectModel> objectModels)
{
base.BeforeLoadInternal(objectModels);
objectModels.Push(new PropertyListObjectModel());
}
protected override void AfterLoadInternal(Stack<ObjectModel> objectModels)
{
base.AfterLoadInternal(objectModels);
PropertyListObjectModel plom = (objectModels.Pop() as PropertyListObjectModel);
ShortcutObjectModel shortcut = (objectModels.Pop() as ShortcutObjectModel);
}
protected override void BeforeSaveInternal(Stack<ObjectModel> 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);
}
}
}

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -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;
/// <summary>
/// Tooltip for the entry, for example "View sites on the Internet". The value should not
/// be redundant with the shortcut title.
/// </summary>
public string Comment { get { return mvarComment; } set { mvarComment = value; } }
private string mvarIconFileName = String.Empty;
/// <summary>
/// File name or known icon name of the icon to display in the file manager, menus, etc.
/// </summary>
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;
/// <summary>
/// The directory in which to run the program, if different than the program's location.
/// </summary>
public string WorkingDirectory { get { return mvarWorkingDirectory; } set { mvarWorkingDirectory = value; } }
private bool mvarRunInTerminal = false;
/// <summary>
/// Whether the program runs in a terminal window.
/// </summary>
public bool RunInTerminal { get { return mvarRunInTerminal; } set { mvarRunInTerminal = value; } }
}
}

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
@ -55,6 +55,10 @@
<Compile Include="DataFormats\PropertyList\UniversalPropertyList\VariantType.cs" />
<Compile Include="DataFormats\PropertyList\WindowsConfigurationDataFormat.cs" />
<Compile Include="DataFormats\PropertyList\XML\XMLPropertyListDataFormat.cs" />
<Compile Include="DataFormats\Shortcut\FreeDesktop\DesktopShortcutAction.cs" />
<Compile Include="DataFormats\Shortcut\FreeDesktop\DesktopShortcutDataFormat.cs" />
<Compile Include="DataFormats\Shortcut\FreeDesktop\DesktopShortcutStartupNotifyBehavior.cs" />
<Compile Include="DataFormats\Shortcut\FreeDesktop\DesktopShortcutType.cs" />
<Compile Include="ObjectModels\Chunked\ChunkedObjectModel.cs" />
<Compile Include="ObjectModels\Chunked\RIFFChunk.cs" />
<Compile Include="ObjectModels\Chunked\RIFFDataChunk.cs" />
@ -85,6 +89,7 @@
<Compile Include="ObjectModels\Project\ProjectFileSystem.cs" />
<Compile Include="ObjectModels\Project\ProjectFolder.cs" />
<Compile Include="ObjectModels\Project\Reference.cs" />
<Compile Include="ObjectModels\Shortcut\ShortcutObjectModel.cs" />
<Compile Include="ObjectModels\Solution\SolutionObjectModel.cs" />
<Compile Include="ObjectModels\Text\Plain\PlainTextObjectModel.cs" />
<Compile Include="ProjectType.cs" />

View File

@ -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;
/// <summary>
/// The emulator that generated this file.
/// </summary>
public SPC700Emulator Generator { get { return mvarGenerator; } set { mvarGenerator = value; } }
private SPC700Emulator mvarGenerator = SPC700Emulator.Unknown;
/// <summary>
/// The emulator that generated this file.
/// </summary>
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);
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;
}
}
}

View File

@ -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<Phoneme>
{
}
private string mvarTitle = String.Empty;
public string Title { get { return mvarTitle; } set { mvarTitle = value; } }
}
}

View File

@ -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<PhonemeGroup>
{
}
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; } }
}
}

View File

@ -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)
{

View File

@ -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);
}
}
}
}

View File

@ -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<SynthesizedAudioCollectionTrack>
{
}
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; } }
}
}

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{BE4D0BA3-0888-42A5-9C09-FC308A4509D2}</ProjectGuid>
@ -70,6 +70,7 @@
<Compile Include="DataFormats\Multimedia\Audio\Synthesized\ExtendedMIDI\XMIDataFormat.cs" />
<Compile Include="DataFormats\Multimedia\Audio\Synthesized\PSF\PSFDataFormat.cs" />
<Compile Include="DataFormats\Multimedia\Audio\Synthesized\PSF\PSFPlatform.cs" />
<Compile Include="DataFormats\Multimedia\AudioCollection\Synthesized\SPC2\SPC2DataFormat.cs" />
<Compile Include="DataFormats\Multimedia\Audio\Synthesized\SPC\SPC700Emulator.cs" />
<Compile Include="DataFormats\Multimedia\Audio\Synthesized\SPC\SPC700ExtendedID666Tag.cs" />
<Compile Include="DataFormats\Multimedia\Audio\Synthesized\SPC\SPC700ID666Tag.cs" />
@ -137,6 +138,8 @@
<Compile Include="DataFormats\Multimedia\Video\UVS\UVSFlags.cs" />
<Compile Include="DataFormats\Multimedia\Video\UVS\UVSLayoutID.cs" />
<Compile Include="ExtensionMethods.cs" />
<Compile Include="ObjectModels\Multimedia\AudioCollection\Synthesized\SynthesizedAudioCollectionObjectModel.cs" />
<Compile Include="ObjectModels\Multimedia\AudioCollection\Synthesized\SynthesizedAudioCollectionTrack.cs" />
<Compile Include="ObjectModels\Multimedia\Audio\AudioObjectModel.cs">
<SubType>Code</SubType>
</Compile>
@ -184,6 +187,8 @@
<Compile Include="ObjectModels\Multimedia\Audio\VoicebankPhonemeDictionary\Phoneme.cs" />
<Compile Include="ObjectModels\Multimedia\Audio\VoicebankPhonemeDictionary\PhonemeDictionaryObjectModel.cs" />
<Compile Include="ObjectModels\Multimedia\Audio\VoicebankPhonemeDictionary\PhonemeList.cs" />
<Compile Include="ObjectModels\Multimedia\Audio\Voicebank\Phoneme.cs" />
<Compile Include="ObjectModels\Multimedia\Audio\Voicebank\PhonemeGroup.cs" />
<Compile Include="ObjectModels\Multimedia\Audio\Voicebank\VoicebankObjectModel.cs">
<SubType>Code</SubType>
</Compile>