diff --git a/DrumKit.sln b/DrumKit.sln
index b14fa24..924b763 100644
--- a/DrumKit.sln
+++ b/DrumKit.sln
@@ -43,4 +43,7 @@ Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
+ GlobalSection(Performance) = preSolution
+ HasPerformanceSessions = true
+ EndGlobalSection
EndGlobal
diff --git a/DrumKit.suo b/DrumKit.suo
new file mode 100644
index 0000000..0e5839d
Binary files /dev/null and b/DrumKit.suo differ
diff --git a/DrumKit.v11.suo b/DrumKit.v11.suo
index 973c967..ef17176 100644
Binary files a/DrumKit.v11.suo and b/DrumKit.v11.suo differ
diff --git a/DrumKit/App.xaml.cs b/DrumKit/App.xaml.cs
index 4106c6c..f7e1fd0 100644
--- a/DrumKit/App.xaml.cs
+++ b/DrumKit/App.xaml.cs
@@ -64,7 +64,7 @@ namespace DrumKit
// When the navigation stack isn't restored navigate to the first page,
// configuring the new page by passing required information as a navigation
// parameter
- if (!rootFrame.Navigate(typeof(MainPage), args.Arguments))
+ if (!rootFrame.Navigate(typeof(LoadingPage), args.Arguments))
{
throw new Exception("Failed to create initial page");
}
@@ -80,10 +80,22 @@ namespace DrumKit
///
/// The source of the suspend request.
/// Details about the suspend request.
- private void OnSuspending(object sender, SuspendingEventArgs e)
+ private async void OnSuspending(object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();
//TODO: Save application state and stop any background activity
+ try {
+ await DataManager.Close();
+ }
+
+ catch (Exception ex) {
+ Log.Error("Exception in OnSuspending method!");
+ Log.Except(ex);
+ }
+
+ Log.Write("Application suspended.");
+
+ //TODO:::...
deferral.Complete();
}
}
diff --git a/DrumKit/Archiving/TarballReader.cs b/DrumKit/Archiving/TarballReader.cs
new file mode 100644
index 0000000..7e0bba1
--- /dev/null
+++ b/DrumKit/Archiving/TarballReader.cs
@@ -0,0 +1,328 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.IO;
+using Windows.Storage;
+
+namespace DrumKit.Archiving
+{
+ public class TarballReader
+ {
+ #region Data types etc
+ ///
+ /// Tarball header structure
+ ///
+ private struct TarballHeader
+ {
+ public string FileName;
+ public uint FileMode;
+ public uint OwnerId, GroupId;
+ public int Size;
+ public DateTime LastModified;
+ public uint Checksum;
+ public byte LinkIndicator;
+ public string LinkedFile;
+ }
+ #endregion
+
+ #region Private attributes
+ private Stream stream;
+ private TarballHeader header;
+ #endregion
+
+ #region Constructor
+ ///
+ /// Creates a new instance of a tarball archive reader.
+ ///
+ public TarballReader()
+ {
+ stream = null;
+ header = new TarballHeader();
+ }
+
+ #endregion
+
+ #region Public functions (unpack)
+ ///
+ /// Unpacks a tarball in a temporary folder.
+ ///
+ /// An URI to the tarball file.
+ /// Storage folder pointing to where the files were unpacked.
+ public async Task Unpack (Uri file)
+ {
+ var stfile = await StorageFile.GetFileFromApplicationUriAsync(file);
+ return await this.Unpack(stfile);
+ }
+
+ ///
+ /// Unpacks a tarball in a specified folder.
+ ///
+ /// An URI to the tarball file.
+ /// A folder where files will be unpacked.
+ /// Storage folder pointing to where the files were unpacked.
+ public async Task Unpack(Uri file, StorageFolder destination)
+ {
+ var stfile = await StorageFile.GetFileFromApplicationUriAsync(file);
+ return await this.Unpack(stfile, destination);
+ }
+
+ ///
+ /// Unpacks a tarball in a temporary folder.
+ ///
+ /// A path to the tarball file.
+ /// Storage folder pointing to where the files were unpacked.
+ public async Task Unpack(string file)
+ {
+ var stfile = await StorageFile.GetFileFromPathAsync(file);
+ return await this.Unpack(stfile);
+ }
+
+
+ ///
+ /// Unpacks a tarball in a specified folder.
+ ///
+ /// A path to the tarball file.
+ /// A folder where files will be unpacked.
+ /// Storage folder pointing to where the files were unpacked.
+ public async Task Unpack(string file, StorageFolder destination)
+ {
+ var stfile = await StorageFile.GetFileFromPathAsync(file);
+ return await this.Unpack(stfile, destination);
+ }
+
+
+ ///
+ /// Unpacks a tarball in a temporary folder.
+ ///
+ /// The tarball file.
+ /// Storage folder pointing to where the files were unpacked.
+ public async Task Unpack(StorageFile file)
+ {
+ // Prepare temp folder
+ var dest = await this.CreateTempFolder();
+
+ // Unpack
+ await this.Initialize(file);
+ await this.UnpackFiles(dest);
+ this.Dispose();
+
+ // Results
+ return dest;
+ }
+
+ ///
+ /// Unpacks a tarball in a specified folder.
+ ///
+ /// The tarball file.
+ /// A folder where files will be unpacked.
+ /// Storage folder pointing to where the files were unpacked.
+ public async Task Unpack(StorageFile file, StorageFolder destination)
+ {
+ // Unpack
+ await this.Initialize(file);
+ await this.UnpackFiles(destination);
+ this.Dispose();
+
+ // Results
+ return destination;
+ }
+
+ #endregion
+
+ #region Initialize, dispose
+ ///
+ /// Performs initialization actions before unpacking (such as opening the stream).
+ ///
+ private async Task Initialize(StorageFile file)
+ {
+ var str = await file.OpenReadAsync();
+ this.stream = str.AsStream();
+ }
+
+ ///
+ /// Performs cleanups after unpacking finished.
+ ///
+ private void Dispose()
+ {
+ // Clean up
+ this.stream.Dispose();
+ this.stream = null;
+
+ this.header = new TarballHeader();
+ }
+ #endregion
+
+ #region Headers
+ ///
+ /// Calculates the checksum from a header.
+ ///
+ /// The header bytes
+ private uint CalculateChecksum(byte[] buffer)
+ {
+ uint result = 0;
+
+ // Calculate sum of all bytes, with the exception of bytes 148-155
+ // (checksum field). These are all assumed to be 0x20.
+ for (int i = 0; i < buffer.Length; i++)
+ if (i >= 148 && i < 156)
+ result += 0x20;
+ else result += Convert.ToUInt32(buffer[i]);
+
+ // Done
+ return result;
+ }
+
+ ///
+ /// Converts binary data to a TarballHeader.
+ ///
+ private TarballHeader ParseHeaderFields(byte[] buffer)
+ {
+ TarballHeader header = new TarballHeader();
+ string temp;
+
+ // File name
+ temp = SharpDX.Text.ASCIIEncoding.ASCII.GetString(buffer, 0, 100).Trim('\0', ' ');
+ header.FileName = temp;
+
+ // File mode
+ temp = SharpDX.Text.ASCIIEncoding.ASCII.GetString(buffer, 100, 8).Trim('\0', ' ');
+ header.FileMode = (string.IsNullOrEmpty(temp)) ? 0 : Convert.ToUInt32(temp, 8);
+
+ // Owner id
+ temp = SharpDX.Text.ASCIIEncoding.ASCII.GetString(buffer, 108, 8).Trim('\0', ' ');
+ header.OwnerId = (string.IsNullOrEmpty(temp)) ? 0 : Convert.ToUInt32(temp, 8);
+
+ // Group id
+ temp = SharpDX.Text.ASCIIEncoding.ASCII.GetString(buffer, 116, 8).Trim('\0', ' ');
+ header.GroupId = (string.IsNullOrEmpty(temp)) ? 0 : Convert.ToUInt32(temp, 8);
+
+ // Size
+ temp = SharpDX.Text.ASCIIEncoding.ASCII.GetString(buffer, 124, 12).Trim('\0', ' ');
+ header.Size = (string.IsNullOrEmpty(temp)) ? 0 : Convert.ToInt32(temp, 8);
+
+ // Last modified date
+ temp = SharpDX.Text.ASCIIEncoding.ASCII.GetString(buffer, 136, 12).Trim('\0', ' ');
+ int seconds = (string.IsNullOrEmpty(temp)) ? 0 : Convert.ToInt32(temp, 8);
+ header.LastModified = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(seconds).ToLocalTime();
+
+ // Checksum
+ temp = SharpDX.Text.ASCIIEncoding.ASCII.GetString(buffer, 148, 8).Trim('\0', ' ');
+ header.Checksum = (string.IsNullOrEmpty(temp)) ? 0 : Convert.ToUInt32(temp, 8);
+
+ // Link indicator
+ header.LinkIndicator = buffer[156];
+
+ // Linked file
+ temp = SharpDX.Text.ASCIIEncoding.ASCII.GetString(buffer, 157, 100).Trim('\0', ' ');
+ header.LinkedFile = temp;
+
+ // Done
+ return header;
+ }
+
+ ///
+ /// Reads a file header.
+ ///
+ /// True if another header was read, false otherwise.
+ private async Task ReadNextFileHeader()
+ {
+ byte[] buffer = new byte[512];
+
+ // Check current position
+ if (stream.Position >= stream.Length)
+ return false;
+
+ // Read header
+ await stream.ReadAsync(buffer, 0, 512);
+
+ // Parse header fields
+ this.header = this.ParseHeaderFields(buffer);
+
+ // Verify checksum
+ uint checksum = this.CalculateChecksum(buffer);
+
+ if (checksum == 256) // If 256 (only the checksum bytes different than 0), then
+ return false; // we most likely hit an invalid entry, probably marking the
+ // end of the file
+ if (checksum != header.Checksum)
+ throw new IOException("Invalid checksum!");
+
+ // Done
+ return true;
+ }
+
+ #endregion
+
+ #region File system helpers
+ ///
+ /// Creates a temporary folder.
+ ///
+ private async Task CreateTempFolder()
+ {
+ // Generate file name
+ string name = "tar" + DateTime.Now.Ticks.ToString();
+
+ // Create file
+ var temp = ApplicationData.Current.TemporaryFolder;
+ return await temp.CreateFolderAsync(name, CreationCollisionOption.GenerateUniqueName);
+ }
+
+ #endregion
+
+ #region Unpack
+ ///
+ /// Unpacks a file using the information from the header.
+ /// The function assumes the header was previously read.
+ ///
+ /// The destination file.
+ private async Task UnpackNextFile(StorageFile destination)
+ {
+ // Open destination file
+ var str = await destination.OpenAsync(FileAccessMode.ReadWrite);
+ var iostr = str.AsStream();
+
+ // Write data
+ var buffer = new byte[512];
+ int read = 0, total = 0;
+
+ while (total < this.header.Size)
+ {
+ read = await this.stream.ReadAsync(buffer, 0, 512);
+ await iostr.WriteAsync(buffer, 0, Math.Min(read, this.header.Size - total));
+ total += read;
+ }
+
+ // Cleanup
+ await iostr.FlushAsync();
+ iostr.Dispose();
+ }
+
+ ///
+ /// Unpacks the files from the loaded tarball.
+ ///
+ /// Destination folder.
+ private async Task UnpackFiles(StorageFolder destination)
+ {
+ if (this.stream == null)
+ throw new ArgumentNullException("No file opened!");
+
+ while (await this.ReadNextFileHeader())
+ {
+ // Directory?
+ if (this.header.FileName.EndsWith("/"))
+ await IOHelper.CreateFolderRelativeAsync(destination, this.header.FileName);
+
+ // Create file
+ else
+ {
+ var file = await IOHelper.CreateFileRelativeAsync(destination, this.header.FileName);
+ await this.UnpackNextFile(file);
+ }
+ }
+ }
+ #endregion
+
+ }
+}
diff --git a/DrumKit/Assets/ApplicationData.tar b/DrumKit/Assets/ApplicationData.tar
new file mode 100644
index 0000000..9f703fa
Binary files /dev/null and b/DrumKit/Assets/ApplicationData.tar differ
diff --git a/DrumKit/Assets/Drums/big_drum_of.png b/DrumKit/Assets/Drums/big_drum_of.png
deleted file mode 100644
index 412a66d..0000000
Binary files a/DrumKit/Assets/Drums/big_drum_of.png and /dev/null differ
diff --git a/DrumKit/Assets/Drums/big_drum_on.png b/DrumKit/Assets/Drums/big_drum_on.png
deleted file mode 100644
index 2ef7180..0000000
Binary files a/DrumKit/Assets/Drums/big_drum_on.png and /dev/null differ
diff --git a/DrumKit/Assets/Drums/drum_of.png b/DrumKit/Assets/Drums/drum_of.png
deleted file mode 100644
index fbf9357..0000000
Binary files a/DrumKit/Assets/Drums/drum_of.png and /dev/null differ
diff --git a/DrumKit/Assets/Drums/drum_on.png b/DrumKit/Assets/Drums/drum_on.png
deleted file mode 100644
index 36c66cb..0000000
Binary files a/DrumKit/Assets/Drums/drum_on.png and /dev/null differ
diff --git a/DrumKit/Assets/Drums/plate_off.png b/DrumKit/Assets/Drums/plate_off.png
deleted file mode 100644
index ea8fe3c..0000000
Binary files a/DrumKit/Assets/Drums/plate_off.png and /dev/null differ
diff --git a/DrumKit/Assets/Drums/plate_on.png b/DrumKit/Assets/Drums/plate_on.png
deleted file mode 100644
index 88f4865..0000000
Binary files a/DrumKit/Assets/Drums/plate_on.png and /dev/null differ
diff --git a/DrumKit/Assets/Logos/BadgeIcon.png b/DrumKit/Assets/Logos/BadgeIcon.png
new file mode 100644
index 0000000..8d79354
Binary files /dev/null and b/DrumKit/Assets/Logos/BadgeIcon.png differ
diff --git a/DrumKit/Assets/Logos/Logo.png b/DrumKit/Assets/Logos/Logo.png
index e26771c..11f7dd8 100644
Binary files a/DrumKit/Assets/Logos/Logo.png and b/DrumKit/Assets/Logos/Logo.png differ
diff --git a/DrumKit/Assets/Logos/SmallLogo.png b/DrumKit/Assets/Logos/SmallLogo.png
index 1eb0d9d..4716852 100644
Binary files a/DrumKit/Assets/Logos/SmallLogo.png and b/DrumKit/Assets/Logos/SmallLogo.png differ
diff --git a/DrumKit/Assets/Logos/SplashScreen.png b/DrumKit/Assets/Logos/SplashScreen.png
deleted file mode 100644
index c951e03..0000000
Binary files a/DrumKit/Assets/Logos/SplashScreen.png and /dev/null differ
diff --git a/DrumKit/Assets/Logos/SplashScreen.scale-100.png b/DrumKit/Assets/Logos/SplashScreen.scale-100.png
new file mode 100644
index 0000000..47ff3ac
Binary files /dev/null and b/DrumKit/Assets/Logos/SplashScreen.scale-100.png differ
diff --git a/DrumKit/Assets/Logos/SplashScreen.scale-140.png b/DrumKit/Assets/Logos/SplashScreen.scale-140.png
new file mode 100644
index 0000000..09d6efe
Binary files /dev/null and b/DrumKit/Assets/Logos/SplashScreen.scale-140.png differ
diff --git a/DrumKit/Assets/Logos/SplashScreen.scale-180.png b/DrumKit/Assets/Logos/SplashScreen.scale-180.png
new file mode 100644
index 0000000..af2e5b7
Binary files /dev/null and b/DrumKit/Assets/Logos/SplashScreen.scale-180.png differ
diff --git a/DrumKit/Assets/Logos/StoreLogo.png b/DrumKit/Assets/Logos/StoreLogo.png
index dcb6727..af8bdfc 100644
Binary files a/DrumKit/Assets/Logos/StoreLogo.png and b/DrumKit/Assets/Logos/StoreLogo.png differ
diff --git a/DrumKit/Assets/Logos/WideLogo.png b/DrumKit/Assets/Logos/WideLogo.png
new file mode 100644
index 0000000..98ee0e5
Binary files /dev/null and b/DrumKit/Assets/Logos/WideLogo.png differ
diff --git a/DrumKit/Assets/default b/DrumKit/Assets/default
deleted file mode 100644
index c0aeb56..0000000
--- a/DrumKit/Assets/default
+++ /dev/null
@@ -1,40 +0,0 @@
-[Kick]
- position=.41,.2
- size=.3
- image=ms-appx:///Assets/Drums/big_drum_of.png
- sound,0=ms-appx:///Assets/Sounds/Kick07.wav
-[Snare]
- position=.16,.34
- size=.25
- image=ms-appx:///Assets/Drums/drum_of.png
- sound,0=ms-appx:///Assets/Sounds/Snare08.wav
-[High Tom]
- position=.33,.05
- size=.22
- image=ms-appx:///Assets/Drums/drum_of.png
- sound,0=ms-appx:///Assets/Sounds/TomHigh04.wav
-[Low Tom]
- position=.55,.05
- size=.22
- image=ms-appx:///Assets/Drums/drum_of.png
- sound,0=ms-appx:///Assets/Sounds/TomLow04.wav
-[Floor Tom]
- position=.66,.44
- size=.29
- image=ms-appx:///Assets/Drums/drum_of.png
- sound,0=ms-appx:///Assets/Sounds/Floor04.wav
-[HiHat]
- position=.03,.55
- size=.21
- image=ms-appx:///Assets/Drums/plate_off.png
- sound,0=ms-appx:///Assets/Sounds/HiHatOpen04.wav
-[Crash]
- position=.1,.02
- size=.25
- image=ms-appx:///Assets/Drums/plate_off.png
- sound,0=ms-appx:///Assets/Sounds/Crash05.wav
-[Ride]
- position=.72,.04
- size=.25
- image=ms-appx:///Assets/Drums/plate_off.png
- sound,0=ms-appx:///Assets/Sounds/Ride04.wav
diff --git a/DrumKit/Build/7z.exe b/DrumKit/Build/7z.exe
new file mode 100644
index 0000000..b55fefe
Binary files /dev/null and b/DrumKit/Build/7z.exe differ
diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Images/drum.png b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/drum.png
new file mode 100644
index 0000000..fdcf9c8
Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/drum.png differ
diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Images/drumPressed.png b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/drumPressed.png
new file mode 100644
index 0000000..6907b4b
Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/drumPressed.png differ
diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Images/kick.png b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/kick.png
new file mode 100644
index 0000000..629a8e3
Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/kick.png differ
diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Images/kickPressed.png b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/kickPressed.png
new file mode 100644
index 0000000..a8becda
Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/kickPressed.png differ
diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Images/pedal.png b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/pedal.png
new file mode 100644
index 0000000..efedadb
Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/pedal.png differ
diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Images/pedalPressed.png b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/pedalPressed.png
new file mode 100644
index 0000000..cd75c96
Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/pedalPressed.png differ
diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Images/plate.png b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/plate.png
new file mode 100644
index 0000000..9257735
Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/plate.png differ
diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Images/platePressed.png b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/platePressed.png
new file mode 100644
index 0000000..8935060
Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/platePressed.png differ
diff --git a/DrumKit/Assets/Sounds/Crash05.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Crash05.wav
similarity index 100%
rename from DrumKit/Assets/Sounds/Crash05.wav
rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Crash05.wav
diff --git a/DrumKit/Assets/Sounds/Floor04.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Floor04.wav
similarity index 100%
rename from DrumKit/Assets/Sounds/Floor04.wav
rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Floor04.wav
diff --git a/DrumKit/Assets/Sounds/Hat04.WAV b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Hat04.WAV
similarity index 100%
rename from DrumKit/Assets/Sounds/Hat04.WAV
rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Hat04.WAV
diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/HiHatClosed04.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/HiHatClosed04.wav
new file mode 100644
index 0000000..34e2c82
Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/HiHatClosed04.wav differ
diff --git a/DrumKit/Assets/Sounds/HiHatOpen04.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/HiHatOpen04.wav
similarity index 100%
rename from DrumKit/Assets/Sounds/HiHatOpen04.wav
rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/HiHatOpen04.wav
diff --git a/DrumKit/Assets/Sounds/Kick07.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Kick07.wav
similarity index 100%
rename from DrumKit/Assets/Sounds/Kick07.wav
rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Kick07.wav
diff --git a/DrumKit/Assets/Sounds/Ride04.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Ride04.wav
similarity index 100%
rename from DrumKit/Assets/Sounds/Ride04.wav
rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Ride04.wav
diff --git a/DrumKit/Assets/Sounds/Snare08.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Snare08.wav
similarity index 100%
rename from DrumKit/Assets/Sounds/Snare08.wav
rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Snare08.wav
diff --git a/DrumKit/Assets/Sounds/TomHigh04.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/TomHigh04.wav
similarity index 100%
rename from DrumKit/Assets/Sounds/TomHigh04.wav
rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/TomHigh04.wav
diff --git a/DrumKit/Assets/Sounds/TomLow04.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/TomLow04.wav
similarity index 100%
rename from DrumKit/Assets/Sounds/TomLow04.wav
rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/TomLow04.wav
diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/config.xml b/DrumKit/Build/ApplicationData/Drumkits/Default/config.xml
new file mode 100644
index 0000000..21313ba
--- /dev/null
+++ b/DrumKit/Build/ApplicationData/Drumkits/Default/config.xml
@@ -0,0 +1,41 @@
+
+
+
+
+ 1.0
+ A
+
+
+ 1.0
+ B
+
+
+ 1.0
+ C
+
+
+ 1.0
+ D
+
+
+ 1.0
+ E
+
+
+ 1.0
+ F
+
+
+ 1.0
+ G
+
+
+ 1.0
+ H
+
+
+ 1.0
+ I
+
+
+
\ No newline at end of file
diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/drumkit.xml b/DrumKit/Build/ApplicationData/Drumkits/Default/drumkit.xml
new file mode 100644
index 0000000..4f5d85a
--- /dev/null
+++ b/DrumKit/Build/ApplicationData/Drumkits/Default/drumkit.xml
@@ -0,0 +1,144 @@
+
+
+
+
+
+ Default
+ Default drums
+
+
+ config.xml
+ layout.xml
+
+
+
+
+ Kick
+ Images/kick.png
+ Images/kickPressed.png
+
+ Sounds/Kick07.wav
+
+
+
+
+ Snare
+ Images/drum.png
+ Images/drumPressed.png
+
+ Sounds/Snare08.wav
+
+
+
+
+ High Tom
+ Images/drum.png
+ Images/drumPressed.png
+
+ Sounds/TomHigh04.wav
+
+
+
+
+ Low Tom
+ Images/drum.png
+ Images/drumPressed.png
+
+ Sounds/TomLow04.wav
+
+
+
+
+ Floor Tom
+ Images/drum.png
+ Images/drumPressed.png
+
+ Sounds/Floor04.wav
+
+
+
+
+ Hi-Hat Closed (pedal)
+ Images/pedal.png
+ Images/pedalPressed.png
+
+ Sounds/HiHatClosed04.wav
+
+
+
+
+ Hi-Hat Opened
+ Images/plate.png
+ Images/platePressed.png
+
+ Sounds/HiHatOpen04.wav
+
+
+
+
+ Crash
+ Images/plate.png
+ Images/platePressed.png
+
+ Sounds/Crash05.wav
+
+
+
+
+ Ride
+ Images/plate.png
+ Images/platePressed.png
+
+ Sounds/Ride04.wav
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/layout.xml b/DrumKit/Build/ApplicationData/Drumkits/Default/layout.xml
new file mode 100644
index 0000000..e97306b
--- /dev/null
+++ b/DrumKit/Build/ApplicationData/Drumkits/Default/layout.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+ Standard layout
+ Snapped|Landscape|Filled|Portrait
+ true
+
+
+
+ .3
+ .41
+ .2
+ 0
+
+
+ .25
+ .16
+ .34
+ 2
+ 61
+
+
+ .22
+ .33
+ .05
+ 1
+ 150
+
+
+ .22
+ .55
+ .05
+ 1
+ 150
+
+
+ .29
+ .66
+ .44
+ 1
+ -30
+
+
+ .055
+ .11
+ .89
+ 3
+
+
+ .21
+ .03
+ .55
+ 4
+ 80
+
+
+ .26
+ .1
+ .02
+ 4
+ 80
+
+
+ .25
+ .72
+ .04
+ 4
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DrumKit/Common/StandardStyles.xaml b/DrumKit/Common/StandardStyles.xaml
index 6ad467a..975f119 100644
--- a/DrumKit/Common/StandardStyles.xaml
+++ b/DrumKit/Common/StandardStyles.xaml
@@ -424,7 +424,13 @@
-