Marked as SoundBoard v0.9.8.0(stable) according to the folder.

This commit is contained in:
2021-01-28 18:48:49 -06:00
parent 406760bca2
commit a31bdee087
321 changed files with 659 additions and 326 deletions
Binary file not shown.
+72
View File
@@ -3,11 +3,83 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace SoundBoard namespace SoundBoard
{ {
class GenerateRandomPlayList class GenerateRandomPlayList
{ {
private Random randomNumber = new Random(); //Random number generator
private string __workingDirectory = Path.GetDirectoryName(Application.ExecutablePath);
public string[] SingleViewPlayList(List<List<String>> listViewContents, int iterations, int index)
{
string[] playList = new String[iterations];
string tempFileName;
int i = 0;
int itemCount = listViewContents[index].Count - 1; //Count is not zero index based
do
{
tempFileName = listViewContents[index][randomNumber.Next(0, itemCount)];
if (playList.Contains(tempFileName))
{
playList[i] = listViewContents[index][randomNumber.Next(0, itemCount)];
}
else
{
playList[i] = tempFileName;
}
i++;
} while (i < iterations);
return playList;
}
public string[] MulitViewPlayList(List<List<String>> listViewContents, int iterations)
{
string[] playList = new String[iterations];
int zeroIndexCount = listViewContents[0].Count;
int tabCount = listViewContents.Count;
int itemCount;
int i = 0;
int temp;
string tempFilePath;
do
{
if (zeroIndexCount > 5)
{
temp = randomNumber.Next(0, tabCount - 1);
itemCount = listViewContents[temp].Count - 1; //Count is zero index based
tempFilePath = listViewContents[temp][randomNumber.Next(0, itemCount)];
if (playList.Contains(tempFilePath))
{
playList[i] = listViewContents[temp][randomNumber.Next(0, itemCount)];
}
else
{
playList[i] = tempFilePath;
}
}
else
{
temp = randomNumber.Next(1, tabCount - 1);
itemCount = listViewContents[temp].Count - 1; //Count is zero index based
tempFilePath = listViewContents[temp][randomNumber.Next(0, itemCount)];
if (playList.Contains(tempFilePath))
{
playList[i] = listViewContents[temp][randomNumber.Next(0, itemCount)];
}
else
{
playList[i] = tempFilePath;
}
}
i++;
} while(i < iterations);
return playList;
}
} }
} }
+104
View File
@@ -0,0 +1,104 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Controls;
using System.IO;
using System.Windows.Forms;
namespace SoundBoard
{
class MediaPlayer
{
private MediaElement gPlayer = new MediaElement();
private bool gWillLoopMedia = false;
private bool gLoopBoxState = false; //is the loopbox on mainForm check
private string[] gPlayList;
public string gErrorMessage;
//Public constructor, used mainy to create the event handlers for the MediaElement.
public MediaPlayer()
{
gPlayer.MediaEnded += gPlayer_MediaEnded;
gPlayer.MediaFailed += gPlayer_MediaFailed;
}
void gPlayer_MediaFailed(object sender, System.Windows.ExceptionRoutedEventArgs e)
{
gErrorMessage = "The selected file ~1 could not be played"; //"~1" could be replaced with the file that caused the error to occur
}
public bool WillLoop
{
set { gWillLoopMedia = value; }
}
public bool IsLoopBoxCheck
{
set { gLoopBoxState = value; }
}
/// <summary>
/// This method captures the MediaEnded event for the MediaElement and, if the playList array contains something,
/// it will remove the first object in the array, and pass the next object in as the param to the PlaySoundFile method.
/// The orginal array is replaced with this modified array.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void gPlayer_MediaEnded(object sender, System.Windows.RoutedEventArgs e)
{
//select next item in playlist
if (gPlayList != null)
{
//Easiest way to remove the object at index zero
List<string> tempList = new List<string>();
tempList = gPlayList.ToList<string>();
tempList.RemoveAt(0);
gPlayList = tempList.ToArray<string>();
if (gPlayList.Length > 0)
{
PlaySoundFile(gPlayList[0]);
}
else
{
//check to see if the loopbox on mainForm is checked
if (gLoopBoxState)
{
gWillLoopMedia = true;
}
else
{
gWillLoopMedia = false;
}
gPlayList = null; //null out the playList string array, so the playList isn't repeated by mistake
}
}
else
{
//If the playList variable is empty then it's safe to assume the randomize function is not active.
if (gWillLoopMedia)
{
gPlayer.Position = TimeSpan.Zero;
gPlayer.Play();
}
}
}
public void PlayAudioPlaylist(string[] playList)
{
gPlayList = null;
gWillLoopMedia = false;
gPlayList = playList;
PlaySoundFile(playList[0]);
}
public void PlaySoundFile(string file)
{
gPlayer.Source = new Uri(file);
gPlayer.LoadedBehavior = MediaState.Manual;
gPlayer.UnloadedBehavior = MediaState.Manual;
gPlayer.Play();
}
}
}
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
+15 -12
View File
@@ -78,8 +78,11 @@
<GenerateManifests>true</GenerateManifests> <GenerateManifests>true</GenerateManifests>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Xaml" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
@@ -88,6 +91,7 @@
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="aboutForm.cs"> <Compile Include="aboutForm.cs">
@@ -96,6 +100,13 @@
<Compile Include="aboutForm.Designer.cs"> <Compile Include="aboutForm.Designer.cs">
<DependentUpon>aboutForm.cs</DependentUpon> <DependentUpon>aboutForm.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="MediaPlayer.cs" />
<Compile Include="programDebugConsole.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="programDebugConsole.Designer.cs">
<DependentUpon>programDebugConsole.cs</DependentUpon>
</Compile>
<Compile Include="GenerateRandomPlayList.cs" /> <Compile Include="GenerateRandomPlayList.cs" />
<Compile Include="mainForm.cs"> <Compile Include="mainForm.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
@@ -108,6 +119,9 @@
<EmbeddedResource Include="aboutForm.resx"> <EmbeddedResource Include="aboutForm.resx">
<DependentUpon>aboutForm.cs</DependentUpon> <DependentUpon>aboutForm.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="programDebugConsole.resx">
<DependentUpon>programDebugConsole.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="mainForm.resx"> <EmbeddedResource Include="mainForm.resx">
<DependentUpon>mainForm.cs</DependentUpon> <DependentUpon>mainForm.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
@@ -131,7 +145,7 @@
</Compile> </Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="App.config" /> <None Include="Properties\App.config" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="favico.ico" /> <Content Include="favico.ico" />
@@ -153,17 +167,6 @@
<Install>false</Install> <Install>false</Install>
</BootstrapperPackage> </BootstrapperPackage>
</ItemGroup> </ItemGroup>
<ItemGroup>
<COMReference Include="WMPLib">
<Guid>{6BF52A50-394A-11D3-B153-00C04F79FAA6}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
+24 -14
View File
@@ -38,11 +38,12 @@
this.mainMenuPlayAll = new System.Windows.Forms.ToolStripMenuItem(); this.mainMenuPlayAll = new System.Windows.Forms.ToolStripMenuItem();
this.mainMenuHelp = new System.Windows.Forms.ToolStripMenuItem(); this.mainMenuHelp = new System.Windows.Forms.ToolStripMenuItem();
this.mainMenuHelpAbout = new System.Windows.Forms.ToolStripMenuItem(); this.mainMenuHelpAbout = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.mainMenuHelpShowConsole = new System.Windows.Forms.ToolStripMenuItem();
this.randomIterationNumericUpDown = new System.Windows.Forms.NumericUpDown(); this.randomIterationNumericUpDown = new System.Windows.Forms.NumericUpDown();
this.soundboardTabControl = new System.Windows.Forms.TabControl(); this.soundboardTabControl = new System.Windows.Forms.TabControl();
this.loopSelectedSoundCheckBox = new System.Windows.Forms.CheckBox(); this.loopSelectedSoundCheckBox = new System.Windows.Forms.CheckBox();
this.fileSystemWatcherMain = new System.IO.FileSystemWatcher(); this.fileSystemWatcherMain = new System.IO.FileSystemWatcher();
this.label1 = new System.Windows.Forms.Label();
this.mainMenu.SuspendLayout(); this.mainMenu.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.randomIterationNumericUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.randomIterationNumericUpDown)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcherMain)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcherMain)).BeginInit();
@@ -112,7 +113,9 @@
// mainMenuHelp // mainMenuHelp
// //
this.mainMenuHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mainMenuHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.mainMenuHelpAbout}); this.mainMenuHelpAbout,
this.toolStripSeparator1,
this.mainMenuHelpShowConsole});
this.mainMenuHelp.Name = "mainMenuHelp"; this.mainMenuHelp.Name = "mainMenuHelp";
this.mainMenuHelp.Size = new System.Drawing.Size(44, 20); this.mainMenuHelp.Size = new System.Drawing.Size(44, 20);
this.mainMenuHelp.Text = "&Help"; this.mainMenuHelp.Text = "&Help";
@@ -120,10 +123,23 @@
// mainMenuHelpAbout // mainMenuHelpAbout
// //
this.mainMenuHelpAbout.Name = "mainMenuHelpAbout"; this.mainMenuHelpAbout.Name = "mainMenuHelpAbout";
this.mainMenuHelpAbout.Size = new System.Drawing.Size(107, 22); this.mainMenuHelpAbout.Size = new System.Drawing.Size(149, 22);
this.mainMenuHelpAbout.Text = "A&bout"; this.mainMenuHelpAbout.Text = "A&bout";
this.mainMenuHelpAbout.Click += new System.EventHandler(this.mainMenuHelpAbout_Click); this.mainMenuHelpAbout.Click += new System.EventHandler(this.mainMenuHelpAbout_Click);
// //
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(146, 6);
//
// mainMenuHelpShowConsole
//
this.mainMenuHelpShowConsole.CheckOnClick = true;
this.mainMenuHelpShowConsole.Name = "mainMenuHelpShowConsole";
this.mainMenuHelpShowConsole.Size = new System.Drawing.Size(149, 22);
this.mainMenuHelpShowConsole.Text = "S&how Console";
this.mainMenuHelpShowConsole.Click += new System.EventHandler(this.mainMenuHelpShowConsole_Click);
//
// randomIterationNumericUpDown // randomIterationNumericUpDown
// //
this.randomIterationNumericUpDown.Location = new System.Drawing.Point(94, 548); this.randomIterationNumericUpDown.Location = new System.Drawing.Point(94, 548);
@@ -169,21 +185,13 @@
this.fileSystemWatcherMain.EnableRaisingEvents = true; this.fileSystemWatcherMain.EnableRaisingEvents = true;
this.fileSystemWatcherMain.SynchronizingObject = this; this.fileSystemWatcherMain.SynchronizingObject = this;
// //
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(294, 548);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(35, 13);
this.label1.TabIndex = 4;
this.label1.Text = "label1";
//
// formMain // formMain
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSize = true;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.ClientSize = new System.Drawing.Size(425, 578); this.ClientSize = new System.Drawing.Size(425, 578);
this.Controls.Add(this.label1);
this.Controls.Add(this.loopSelectedSoundCheckBox); this.Controls.Add(this.loopSelectedSoundCheckBox);
this.Controls.Add(this.randomIterationNumericUpDown); this.Controls.Add(this.randomIterationNumericUpDown);
this.Controls.Add(this.soundboardTabControl); this.Controls.Add(this.soundboardTabControl);
@@ -192,6 +200,7 @@
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.KeyPreview = true; this.KeyPreview = true;
this.MainMenuStrip = this.mainMenu; this.MainMenuStrip = this.mainMenu;
this.MaximizeBox = false;
this.Name = "formMain"; this.Name = "formMain";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Interwebz\'s Soundboard"; this.Text = "Interwebz\'s Soundboard";
@@ -220,7 +229,8 @@
private System.Windows.Forms.ToolStripMenuItem mainMenuHelpAbout; private System.Windows.Forms.ToolStripMenuItem mainMenuHelpAbout;
private System.Windows.Forms.CheckBox loopSelectedSoundCheckBox; private System.Windows.Forms.CheckBox loopSelectedSoundCheckBox;
private System.IO.FileSystemWatcher fileSystemWatcherMain; private System.IO.FileSystemWatcher fileSystemWatcherMain;
public System.Windows.Forms.Label label1; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripMenuItem mainMenuHelpShowConsole;
} }
} }
+151 -300
View File
@@ -13,15 +13,16 @@ using System.Diagnostics;
namespace SoundBoard namespace SoundBoard
{ {
public partial class formMain : Form, IMessageFilter public partial class formMain : Form
{ {
private const int WM_KEYDOWN = 0x100; //private const int WM_KEYDOWN = 0x100;
public WMPLib.WindowsMediaPlayer Player = new WMPLib.WindowsMediaPlayer(); private programDebugConsole debugConsoleWindow = new programDebugConsole();
public Random randomNum = new Random(); private MediaPlayer gMultimediaPlayer = new MediaPlayer();
public ListView listViewEntity = new ListView(); private Random randomNum = new Random();
public string _workingDirectory = Path.GetDirectoryName(Application.ExecutablePath); private ListView listViewEntity = new ListView();
public string[] _soundFiles; private string _workingDirectory = Path.GetDirectoryName(Application.ExecutablePath);
public string[] _soundDirectories; private string[] _soundDirectories;
private List<List<String>> listViewContents = new List<List<string>>();
public formMain() public formMain()
{ {
@@ -30,26 +31,23 @@ namespace SoundBoard
private void formMain_Load(object sender, EventArgs e) private void formMain_Load(object sender, EventArgs e)
{ {
_soundFiles = Directory.GetFiles(_workingDirectory);
//Build the UI, foreach directory create one TabPage and one ListView object //Build the UI, foreach directory create one TabPage and one ListView object
foreach (string sound in _soundFiles) try
{ {
CreateUITabs("Working Directory", _workingDirectory); CreateUITabs("Working Directory", _workingDirectory);
_soundDirectories = Directory.GetDirectories(_workingDirectory);
foreach (string sounds in _soundDirectories)
{
CreateUITabs(Path.GetFileName(sounds), sounds);
}
} }
_soundDirectories = Directory.GetDirectories(_workingDirectory, "*", SearchOption.TopDirectoryOnly); catch (Exception ex)
foreach (string sounds in _soundDirectories)
{ {
CreateUITabs(Path.GetFileName(sounds), sounds); MessageBox.Show(ex.Message + "\nThis application will now terminate.", "Fatal Error");
Close();
} }
Application.AddMessageFilter(this);
fileSystemWatcherMain.Path = _workingDirectory; //watch in the application's working directory
fileSystemWatcherMain.IncludeSubdirectories = true; //and watch in the subfolders for changes, but only one layer down from the app's directory
fileSystemWatcherMain.Created += new FileSystemEventHandler(fileSystemUpdateDetected); //file or folder created
fileSystemWatcherMain.Deleted += new FileSystemEventHandler(fileSystemUpdateDetected); //file or folder moved or deleted
fileSystemWatcherMain.Renamed += new RenamedEventHandler(fileSystemUpdateDetected); //for any file changes like file extension changes
soundboardTabControl.SelectedIndexChanged += new EventHandler(CheckForDisabledListBox); //disables or enables the Show on Disk file menu object
Player.PlayStateChange += new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(WMP_PlayStateChange); //eventhandler for the playstate of the Player object
//check to see if the listView is empty on form load //check to see if the listView is empty on form load
if (soundboardTabControl.SelectedTab.Controls[0].Enabled == true) if (soundboardTabControl.SelectedTab.Controls[0].Enabled == true)
{ {
@@ -61,41 +59,22 @@ namespace SoundBoard
mainMenuFileShowOnDisk.Enabled = false; mainMenuFileShowOnDisk.Enabled = false;
btnRandom.Enabled = false; btnRandom.Enabled = false;
} }
soundboardTabControl.Select(); fileSystemWatcherMain.Path = _workingDirectory; //watch in the application's working directory
fileSystemWatcherMain.IncludeSubdirectories = true; //and watch in the subfolders for changes, but only one layer down from the app's directory
fileSystemWatcherMain.Created += new FileSystemEventHandler(fileSystemUpdateDetected); //file or folder created
fileSystemWatcherMain.Deleted += new FileSystemEventHandler(fileSystemUpdateDetected); //file or folder moved or deleted
fileSystemWatcherMain.Renamed += new RenamedEventHandler(fileSystemUpdateDetected); //for any file changes like file extension changes
soundboardTabControl.SelectedIndexChanged += new EventHandler(CheckForDisabledListView); //disables or enables the Show on Disk file menu object
debugConsoleWindow.FormClosing += debugConsoleWindow_FormClosing; //Capture the closing of the form and prevent it, instead hide it
} }
private void WMP_PlayStateChange(int newState) #region event-handlers
void debugConsoleWindow_FormClosing(object sender, FormClosingEventArgs e)
{ {
//check to see if the random play functions are running e.Cancel = true;
if (btnRandom.Enabled == false) debugConsoleWindow.HideConsole();
{ mainMenuHelpShowConsole.Enabled = true;
if (Player.playState == WMPLib.WMPPlayState.wmppsTransitioning) mainMenuHelpShowConsole.Checked = false;
{
//Player is transitioning, so keep the controls disabled
btnRandom.Enabled = false;
loopSelectedSoundCheckBox.Enabled = false;
}
else if (Player.playState == WMPLib.WMPPlayState.wmppsPlaying)
{
//player is still playing the random playlist, keep the controls disbaled
btnRandom.Enabled = false;
loopSelectedSoundCheckBox.Enabled = false;
}
else if (Player.playState == WMPLib.WMPPlayState.wmppsReady)
{
//renable the controls, the Random functions are done
//first check to see if the loop checkBox is checked, if so set the player to "loop"
if (soundboardTabControl.SelectedTab.Controls[0].Enabled == true)
{
btnRandom.Enabled = true;
}
if (loopSelectedSoundCheckBox.Checked == true)
{
Player.settings.setMode("loop", true);
}
loopSelectedSoundCheckBox.Enabled = true;
}
}
} }
private void fileSystemUpdateDetected(object sender, FileSystemEventArgs e) private void fileSystemUpdateDetected(object sender, FileSystemEventArgs e)
@@ -103,18 +82,9 @@ namespace SoundBoard
//perform the UI refresh operation //perform the UI refresh operation
RefreshUIControls(); RefreshUIControls();
} }
private void CheckForDisabledListView(object sender, EventArgs e)
private void CheckForDisabledListBox(object sender, EventArgs e)
{ {
try listViewEntity = (ListView)soundboardTabControl.SelectedTab.Controls[0];
{
listViewEntity = (ListView)soundboardTabControl.SelectedTab.Controls[0];
}
catch (Exception spam)
{
return;
}
if (listViewEntity.Enabled == false) if (listViewEntity.Enabled == false)
{ {
mainMenuFileShowOnDisk.Enabled = false; mainMenuFileShowOnDisk.Enabled = false;
@@ -126,12 +96,14 @@ namespace SoundBoard
btnRandom.Enabled = true; btnRandom.Enabled = true;
} }
} }
#endregion
private void RefreshUIControls() private void RefreshUIControls()
{ {
_workingDirectory = Path.GetDirectoryName(Application.ExecutablePath); _workingDirectory = Path.GetDirectoryName(Application.ExecutablePath);
_soundDirectories = Directory.GetDirectories(_workingDirectory); _soundDirectories = Directory.GetDirectories(_workingDirectory);
soundboardTabControl.SelectedIndexChanged -= new EventHandler(CheckForDisabledListView);
foreach (TabPage tabPage in soundboardTabControl.TabPages) foreach (TabPage tabPage in soundboardTabControl.TabPages)
{ {
foreach (ListView listView in tabPage.Controls) foreach (ListView listView in tabPage.Controls)
@@ -141,10 +113,10 @@ namespace SoundBoard
tabPage.Dispose(); tabPage.Dispose();
} }
foreach (string sounds in _soundFiles) listViewContents.Clear();
{
CreateUITabs("Working Directory", _workingDirectory); CreateUITabs("Working Directory", _workingDirectory);
}
foreach (string files in _soundDirectories) foreach (string files in _soundDirectories)
{ {
CreateUITabs(Path.GetFileName(files), files); CreateUITabs(Path.GetFileName(files), files);
@@ -160,6 +132,7 @@ namespace SoundBoard
mainMenuFileShowOnDisk.Enabled = false; mainMenuFileShowOnDisk.Enabled = false;
btnRandom.Enabled = false; btnRandom.Enabled = false;
} }
soundboardTabControl.SelectedIndexChanged += new EventHandler(CheckForDisabledListView);
} }
private void CreateUITabs(string tabName, string directoryPath) private void CreateUITabs(string tabName, string directoryPath)
@@ -167,87 +140,89 @@ namespace SoundBoard
//Add tabs dynamically //Add tabs dynamically
int soundControlHeight = soundboardTabControl.Height; int soundControlHeight = soundboardTabControl.Height;
int soundControlWidth = soundboardTabControl.Width; int soundControlWidth = soundboardTabControl.Width;
string[] directoryFiles; //Files in the target directory int index = soundboardTabControl.TabCount;
int fileCount = 0;
TabPage tab = new TabPage(); TabPage tab = new TabPage();
ListView localListView = new ListView(); ListView localListView = new ListView();
string[] columnNames = new string[2]; //Perhaps include a compatibility column to flag files that cause errors? string[] columnNames = new string[2]; //Perhaps include a compatibility column to flag files that cause errors?
string[] files;
ListViewItem listItemObject; ListViewItem listItemObject;
if (soundboardTabControl.Controls.ContainsKey(tabName.Replace(" ", "") + "Tab")) //Construct the TabPage and its properties
{ tab.Text = tabName; //Display the folder's full name to the user
tab.Name = tabName.Replace(" ", "") + "Tab"; //create a legal name for the tab's (name) property
tab.Height = soundControlHeight;
tab.Height = soundControlWidth;
} //Construct the ListView and its properties
else localListView.Height = soundControlHeight - 25;
{ localListView.Width = soundControlWidth - 5;
//Construct the TabPage and its properties localListView.Name = tabName.Replace(" ", "") + "ListView";
tab.Text = tabName; //Display the folder's full name to the user localListView.FullRowSelect = true;
tab.Name = tabName.Replace(" ", "") + "Tab"; //create a legal name for the tab's (name) property localListView.MultiSelect = false;
tab.Height = soundControlHeight; localListView.GridLines = true;
tab.Height = soundControlWidth; localListView.View = View.Details;
soundboardTabControl.Controls.Add(tab); localListView.Activation = ItemActivation.OneClick;
localListView.TabStop = false;
localListView.Columns.Add("File Name", 340, HorizontalAlignment.Left);
localListView.Columns.Add("File Ext", 50, HorizontalAlignment.Left);
localListView.ItemActivate += new EventHandler((sender, e) => ListViewOnLeftClick(sender, e, localListView));
//Construct the ListView and its properties files = Directory.GetFiles(directoryPath);
localListView.Height = soundControlHeight - 25; listViewContents.Add(new List<String>());
localListView.Width = soundControlWidth - 5;
localListView.Name = tabName.Replace(" ", "") + "ListView";
localListView.FullRowSelect = true;
localListView.MultiSelect = false;
localListView.GridLines = true;
localListView.View = View.Details;
localListView.Activation = ItemActivation.OneClick;
localListView.TabStop = false;
tab.Controls.Add(localListView);
localListView.Columns.Add("File Name", 340, HorizontalAlignment.Left);
localListView.Columns.Add("File Ext", 50, HorizontalAlignment.Left);
localListView.ItemActivate += new EventHandler((sender, e) => ListViewOnLeftClick(sender, e, localListView));
}
directoryFiles = Directory.GetFiles(Path.GetFullPath(directoryPath)); foreach (string file in files)
foreach (string file in directoryFiles)
{ {
switch (Path.GetExtension(file).ToLower()) switch (Path.GetExtension(file).ToLower())
{ {
//Only include sound files in the ListView //Only include sound files in the ListView / most commonly supported audio formats in Windows
case ".mp3": case ".mp3": //MPEG layer 3
case ".wav": case ".wav": //WAV audio format
case ".wma": //Windows Media Audio
case ".mid": //MIDI - Musical Instrument Digital Interface
case ".ra": //Real Audio
case ".ram": //Real Audio
case ".rm": //Real Audio
case ".ogg": //OGG audio format
columnNames[0] = Path.GetFileNameWithoutExtension(file); columnNames[0] = Path.GetFileNameWithoutExtension(file);
columnNames[1] = Path.GetExtension(file); columnNames[1] = Path.GetExtension(file);
listItemObject = new ListViewItem(columnNames); listItemObject = new ListViewItem(columnNames);
localListView.Items.Add(listItemObject); localListView.Items.Add(listItemObject);
listViewContents[index].Add(file);
fileCount++;
break; break;
default: default:
break; break;
} }
} }
if (localListView.Items.Count == 0) if (localListView.Items.Count == 0 && tab.Name == "WorkingDirectoryTab")
{ {
if (tab.Name == "WorkingDirectoryTab") soundboardTabControl.Controls.Add(tab);
{ tab.Controls.Add(localListView);
localListView.Items.Add("No sound files detected in the application's working directory."); localListView.Items.Add("No files found in the programs working directory");
}
else
{
localListView.Items.Add("No sound files detected in the " + tabName + " directory");
}
localListView.Enabled = false; localListView.Enabled = false;
if (soundboardTabControl.SelectedIndex == 0) }
{ else if (localListView.Items.Count > 0 && tab.Name == "WorkingDirectoryTab")
mainMenuFileShowOnDisk.Enabled = false; {
btnRandom.Enabled = false; soundboardTabControl.Controls.Add(tab);
} tab.Controls.Add(localListView);
}
else if (localListView.Items.Count > 0)
{
soundboardTabControl.Controls.Add(tab);
tab.Controls.Add(localListView);
}
else
{
//remove the array that represents the tab that was created above because it is empty
int i = listViewContents.Count;
listViewContents.RemoveAt(i - 1);
} }
} }
private void ListViewOnLeftClick(object sender, EventArgs e, ListView listView) private void ListViewOnLeftClick(object sender, EventArgs e, ListView listView)
{ {
if (btnRandom.Enabled == false)
{
//If the btnRandom button is disabled that means a randomise function is running, so don't interupt it
return;
}
string fileName; string fileName;
string fileExt; string fileExt;
string fileLocation; string fileLocation;
@@ -277,109 +252,27 @@ namespace SoundBoard
return; return;
} }
} }
PlaySoundFile(fileLocation); gMultimediaPlayer.PlaySoundFile(fileLocation);
} }
private void btnRandom_Click(object sender, EventArgs e) private void btnRandom_Click(object sender, EventArgs e)
{ {
int iterations = (int)randomIterationNumericUpDown.Value; int iterations = (int)randomIterationNumericUpDown.Value;
listViewEntity = (ListView)soundboardTabControl.SelectedTab.Controls[0]; listViewEntity = (ListView)soundboardTabControl.SelectedTab.Controls[0];
Player.currentPlaylist.clear(); GenerateRandomPlayList makePlayList = new GenerateRandomPlayList();
string[] playList;
//DOuble check to see if the ListView has any items that can be played
if (listViewEntity.Enabled == false)
{
//the ListView disabled and therefore contains no sounds, so return
return;
}
//disable the Random Button and the loop checkbox
btnRandom.Enabled = false;
loopSelectedSoundCheckBox.Enabled = false;
if (mainMenuPlayAll.Checked == true) if (mainMenuPlayAll.Checked == true)
{ {
playRandomSoundBothColumns(iterations); playList = makePlayList.MulitViewPlayList(listViewContents, iterations);
if (soundboardTabControl.SelectedTab.Controls[0].Enabled == true)
{ gMultimediaPlayer.PlayAudioPlaylist(playList);
btnRandom.Enabled = true;
}
loopSelectedSoundCheckBox.Enabled = true;
return;
} }
else
for (int i = 0; i < iterations; i++)
{ {
string fileLocation = ""; playList = makePlayList.SingleViewPlayList(listViewContents, iterations, soundboardTabControl.SelectedIndex);
string fileExt;
string fileName;
//Check to see if the selected tab is the working directory's tab
if (soundboardTabControl.SelectedIndex == 0)
{
listViewEntity.Items[randomNum.Next(listViewEntity.Items.Count)].Selected = true;
fileName = listViewEntity.SelectedItems[0].SubItems[0].Text;
fileExt = listViewEntity.SelectedItems[0].SubItems[1].Text;
if (File.Exists(_workingDirectory + "\\" + fileName + fileExt)) gMultimediaPlayer.PlayAudioPlaylist(playList);
{
fileLocation = _workingDirectory + "\\" + fileName + fileExt;
}
else
{
MessageBox.Show("The file couldn't be found.", "File Not Found", MessageBoxButtons.OK, MessageBoxIcon.Error);
if (soundboardTabControl.SelectedTab.Controls[0].Enabled == true)
{
btnRandom.Enabled = true;
}
loopSelectedSoundCheckBox.Enabled = true;
Player.currentPlaylist.clear();
return;
}
}
else
{
listViewEntity.Items[randomNum.Next(listViewEntity.Items.Count)].Selected = true;
fileName = listViewEntity.SelectedItems[0].SubItems[0].Text;
fileExt = listViewEntity.SelectedItems[0].SubItems[1].Text;
if (File.Exists(_workingDirectory + "\\" + soundboardTabControl.SelectedTab.Text + "\\" + fileName + fileExt))
{
fileLocation = _workingDirectory + "\\" + soundboardTabControl.SelectedTab.Text + "\\" + fileName + fileExt;
}
else
{
MessageBox.Show(_workingDirectory + "\\" + soundboardTabControl.SelectedTab.Text + "\\" + fileName + fileExt, "Not Found");
if (soundboardTabControl.SelectedTab.Controls[0].Enabled == true)
{
btnRandom.Enabled = true;
}
loopSelectedSoundCheckBox.Enabled = true;
Player.currentPlaylist.clear();
return;
}
}
//load the player with the randomly chosen sounds
enumeratePlayerPlayList(fileLocation);
}
//prepare the Player object and play the playlist
btnRandom.Enabled = false;
Player.settings.setMode("loop", false);
PlayPlayList();
}
private void PlaySoundFile(string fileLocation)
{
//Set the file to be played's location
Player.URL = fileLocation;
//Attempt to play the file
try
{
Player.controls.play();
}
catch (InvalidOperationException Ex)
{
MessageBox.Show("The file couldn't be played.", "Invalid Sound File", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
} }
} }
@@ -387,91 +280,46 @@ namespace SoundBoard
{ {
if (loopSelectedSoundCheckBox.Checked == true) if (loopSelectedSoundCheckBox.Checked == true)
{ {
Player.settings.setMode("loop", true); gMultimediaPlayer.WillLoop = true;
gMultimediaPlayer.IsLoopBoxCheck = true;
} }
else else
{ {
Player.settings.setMode("loop", false); gMultimediaPlayer.WillLoop = false;
gMultimediaPlayer.IsLoopBoxCheck = false;
} }
} }
private void playRandomSoundBothColumns(int iterations) #region Menu Strip Actions
{
int tempRandomNumber;
string fileLocation = "";
string fileName;
string fileExt;
listViewEntity = (ListView)soundboardTabControl.SelectedTab.Controls[0];
for (int i = 0; i <= iterations; i++)
{
tempRandomNumber = randomNum.Next(0, soundboardTabControl.TabCount);
if (soundboardTabControl.TabPages[tempRandomNumber].Controls[0].Enabled == true)
{
soundboardTabControl.SelectedIndex = tempRandomNumber;
if (soundboardTabControl.SelectedIndex == 0)
{
listViewEntity.Items[randomNum.Next(listViewEntity.Items.Count)].Selected = true;
fileName = listViewEntity.SelectedItems[0].SubItems[0].Text;
fileExt = listViewEntity.SelectedItems[0].SubItems[1].Text;
if (File.Exists(_workingDirectory + "\\" + fileName + fileExt))
{
fileLocation = _workingDirectory + "\\" + fileName + fileExt;
}
else
{
return;
}
}
else
{
listViewEntity.Items[randomNum.Next(listViewEntity.Items.Count)].Selected = true;
fileName = listViewEntity.SelectedItems[0].SubItems[0].Text;
fileExt = listViewEntity.SelectedItems[0].SubItems[1].Text;
if (File.Exists(_workingDirectory + "\\" + soundboardTabControl.SelectedTab.Text + "\\" + fileName + fileExt))
{
fileLocation = _workingDirectory + "\\" + soundboardTabControl.SelectedTab.Text + "\\" + fileName + fileExt;
}
else
{
return;
}
}
enumeratePlayerPlayList(fileLocation);
}
else
{
playRandomSoundBothColumns(iterations - i);
}
}
PlayPlayList();
}
private void mainMenuFileShowOnDisk_Click(object sender, EventArgs e) private void mainMenuFileShowOnDisk_Click(object sender, EventArgs e)
{ {
listViewEntity = (ListView)soundboardTabControl.SelectedTab.Controls[0]; listViewEntity = (ListView)soundboardTabControl.SelectedTab.Controls[0];
string fileName; string fileName;
string fileExt; string fileExt;
fileName = listViewEntity.SelectedItems[0].SubItems[0].Text; try
fileExt = listViewEntity.SelectedItems[0].SubItems[1].Text;
if (soundboardTabControl.SelectedIndex == 0)
{ {
if (File.Exists(_workingDirectory + "\\" + fileName + fileExt)) fileName = listViewEntity.SelectedItems[0].SubItems[0].Text;
fileExt = listViewEntity.SelectedItems[0].SubItems[1].Text;
if (soundboardTabControl.SelectedIndex == 0)
{ {
Process.Start("explorer.exe", "/select, \"" + _workingDirectory + "\\" + fileName + fileExt + "\""); if (File.Exists(_workingDirectory + "\\" + fileName + fileExt))
{
Process.Start("explorer.exe", "/select, \"" + _workingDirectory + "\\" + fileName + fileExt + "\"");
}
}
else
{
if (File.Exists(_workingDirectory + "\\" + soundboardTabControl.SelectedTab.Text + "\\" + fileName + fileExt))
{
Process.Start("explorer.exe", "/select, \"" + _workingDirectory + "\\" + soundboardTabControl.SelectedTab.Text + "\\" + fileName + fileExt + "\"");
}
} }
} }
else catch (Exception ex)
{ {
if (File.Exists(_workingDirectory + "\\" + soundboardTabControl.SelectedTab.Text + "\\" + fileName + fileExt)) MessageBox.Show("No item is selected.", "No File Selected");
{
Process.Start("explorer.exe", "/select, \"" + _workingDirectory + "\\" + soundboardTabControl.SelectedTab.Text + "\\" + fileName + fileExt + "\"");
}
} }
} }
@@ -486,29 +334,32 @@ namespace SoundBoard
{ {
Close(); Close();
} }
private void mainMenuHelpShowConsole_Click(object sender, EventArgs e)
private void enumeratePlayerPlayList(string fileLocation)
{ {
WMPLib.IWMPMedia playList = Player.newMedia(fileLocation); debugConsoleWindow.ShowConsole();
Player.currentPlaylist.appendItem(playList); mainMenuHelpShowConsole.Enabled = false;
} }
#endregion
private void PlayPlayList()
{
Player.controls.play();
}
//Handles all messages being sent to controls //Handles all messages being sent to controls
public bool PreFilterMessage(ref Message m) //NEEDS IT'S OWN THREAD!
{ //public bool PreFilterMessage(ref Message m)
Keys keyCode = (Keys)(int)m.WParam & Keys.KeyCode; //{
bool retVal = false; // Keys keyCode = (Keys)(int)m.WParam & Keys.KeyCode;
// bool retVal = false;
if (m.Msg == WM_KEYDOWN) // if (m.Msg == WM_KEYDOWN)
{ // {
// Handle the keypress // // Handle the keypress
label1.Text = keyCode.ToString(); // //Disable the Tab key
} // if (keyCode.ToString() == "Tab")
return retVal; // {
} // //Tab key caught, filter out the keystroke
// debugConsoleWindow.WriteToConsole("Keystroke seen");
// return true;
// }
// }
// return retVal;
//}
} }
} }
+110
View File
@@ -0,0 +1,110 @@
namespace SoundBoard
{
partial class programDebugConsole
{
/// <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 Windows Form 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.mainDebugMenu = new System.Windows.Forms.MenuStrip();
this.mainDebugMenuFile = new System.Windows.Forms.ToolStripMenuItem();
this.mainDebugMenuFileClearLog = new System.Windows.Forms.ToolStripMenuItem();
this.mainDebugMenuOptions = new System.Windows.Forms.ToolStripMenuItem();
this.listViewLog = new System.Windows.Forms.ListView();
this.mainDebugMenu.SuspendLayout();
this.SuspendLayout();
//
// mainDebugMenu
//
this.mainDebugMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.mainDebugMenuFile,
this.mainDebugMenuOptions});
this.mainDebugMenu.Location = new System.Drawing.Point(0, 0);
this.mainDebugMenu.Name = "mainDebugMenu";
this.mainDebugMenu.Size = new System.Drawing.Size(486, 24);
this.mainDebugMenu.TabIndex = 0;
this.mainDebugMenu.Text = "menuStrip1";
//
// mainDebugMenuFile
//
this.mainDebugMenuFile.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.mainDebugMenuFileClearLog});
this.mainDebugMenuFile.Name = "mainDebugMenuFile";
this.mainDebugMenuFile.Size = new System.Drawing.Size(37, 20);
this.mainDebugMenuFile.Text = "&File";
//
// mainDebugMenuFileClearLog
//
this.mainDebugMenuFileClearLog.Name = "mainDebugMenuFileClearLog";
this.mainDebugMenuFileClearLog.Size = new System.Drawing.Size(152, 22);
this.mainDebugMenuFileClearLog.Text = "&Clear Log";
this.mainDebugMenuFileClearLog.Click += new System.EventHandler(this.mainDebugMenuFileClearLog_Click);
//
// mainDebugMenuOptions
//
this.mainDebugMenuOptions.Name = "mainDebugMenuOptions";
this.mainDebugMenuOptions.Size = new System.Drawing.Size(61, 20);
this.mainDebugMenuOptions.Text = "&Options";
//
// listViewLog
//
this.listViewLog.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
this.listViewLog.Location = new System.Drawing.Point(0, 27);
this.listViewLog.Name = "listViewLog";
this.listViewLog.Size = new System.Drawing.Size(486, 451);
this.listViewLog.TabIndex = 1;
this.listViewLog.TabStop = false;
this.listViewLog.UseCompatibleStateImageBehavior = false;
this.listViewLog.View = System.Windows.Forms.View.List;
//
// programDebugConsole
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(486, 476);
this.Controls.Add(this.listViewLog);
this.Controls.Add(this.mainDebugMenu);
this.MainMenuStrip = this.mainDebugMenu;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "programDebugConsole";
this.Text = "SoundBoard Console";
this.Load += new System.EventHandler(this.programDebugConsole_Load);
this.mainDebugMenu.ResumeLayout(false);
this.mainDebugMenu.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.MenuStrip mainDebugMenu;
private System.Windows.Forms.ToolStripMenuItem mainDebugMenuFile;
private System.Windows.Forms.ToolStripMenuItem mainDebugMenuOptions;
private System.Windows.Forms.ListView listViewLog;
private System.Windows.Forms.ToolStripMenuItem mainDebugMenuFileClearLog;
}
}
+54
View File
@@ -0,0 +1,54 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SoundBoard
{
public partial class programDebugConsole : Form
{
public programDebugConsole()
{
InitializeComponent();
}
private void programDebugConsole_Load(object sender, EventArgs e)
{
//Create and event handler to detect for form resize
this.Resize += ProgramDebugConsole_Resize;
listViewLog.Items.Add("SoundBoard Beta v1.5.0.0, with MP3 support.");
}
private void ProgramDebugConsole_Resize(object sender, EventArgs e)
{
listViewLog.Height = this.Height;
listViewLog.Width = this.Width;
}
public void WriteToConsole(string message)
{
listViewLog.Items.Add(message);
}
private void mainDebugMenuFileClearLog_Click(object sender, EventArgs e)
{
listViewLog.Items.Clear();
listViewLog.Items.Add("SoundBoard Beta v1.5.0.0, with MP3 support.");
}
public void ShowConsole()
{
this.Show();
}
public void HideConsole()
{
this.Hide();
}
}
}
+123
View File
@@ -0,0 +1,123 @@
<?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="mainDebugMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More