diff --git a/Core/EmulationSettings.h b/Core/EmulationSettings.h index a8709081..f173e4c7 100644 --- a/Core/EmulationSettings.h +++ b/Core/EmulationSettings.h @@ -67,7 +67,10 @@ enum EmulationFlags : uint64_t DisableGameSelectionScreen = 0x200000000000, ConfirmExitResetPower = 0x400000000000, - + + NsfRepeat = 0x800000000000, + NsfShuffle = 0x1000000000000, + ForceMaxSpeed = 0x4000000000000000, ConsoleMode = 0x8000000000000000, }; diff --git a/Core/NsfMapper.cpp b/Core/NsfMapper.cpp index caadb90c..77ff7b46 100644 --- a/Core/NsfMapper.cpp +++ b/Core/NsfMapper.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include #include "NsfMapper.h" #include "CPU.h" #include "Console.h" @@ -198,13 +199,27 @@ void NsfMapper::ClockLengthAndFadeCounters() } if(_trackFadeCounter <= 0) { - _songNumber = (_songNumber + 1) % _nsfHeader.TotalSongs; - InternalSelectTrack(_songNumber); - _trackEnded = false; + SelectNextTrack(); } } } +void NsfMapper::SelectNextTrack() +{ + if(!EmulationSettings::CheckFlag(EmulationFlags::NsfRepeat)) { + if(EmulationSettings::CheckFlag(EmulationFlags::NsfShuffle)) { + std::random_device rd; + std::mt19937 mt(rd()); + std::uniform_int_distribution<> dist(0, _nsfHeader.TotalSongs - 1); + _songNumber = dist(mt); + } else { + _songNumber = (_songNumber + 1) % _nsfHeader.TotalSongs; + } + } + InternalSelectTrack(_songNumber); + _trackEnded = false; +} + void NsfMapper::ProcessCpuClock() { CPU::SetIRQMask(EmulationSettings::GetNsfDisableApuIrqs() ? (uint8_t)IRQSource::External : 0xFF); diff --git a/Core/NsfMapper.h b/Core/NsfMapper.h index b2838273..d0979a9b 100644 --- a/Core/NsfMapper.h +++ b/Core/NsfMapper.h @@ -96,6 +96,7 @@ private: void InternalSelectTrack(uint8_t trackNumber, bool requestReset = true); void ClockLengthAndFadeCounters(); + void SelectNextTrack(); protected: uint16_t GetPRGPageSize() override { return 0x1000; } diff --git a/GUI.NET/Config/PreferenceInfo.cs b/GUI.NET/Config/PreferenceInfo.cs index 73c64c30..6ca9bb43 100644 --- a/GUI.NET/Config/PreferenceInfo.cs +++ b/GUI.NET/Config/PreferenceInfo.cs @@ -39,6 +39,8 @@ namespace Mesen.GUI.Config public Int32 NsfMoveToNextTrackTime = 120; public bool NsfAutoDetectSilence = true; public Int32 NsfAutoDetectSilenceDelay = 3000; + public bool NsfRepeat = false; + public bool NsfShuffle = false; public bool PauseOnMovieEnd = true; public bool AutomaticallyCheckForUpdates = true; @@ -133,6 +135,9 @@ namespace Mesen.GUI.Config InteropEmu.SetFlag(EmulationFlags.ConfirmExitResetPower, preferenceInfo.ConfirmExitResetPower); InteropEmu.NsfSetNsfConfig(preferenceInfo.NsfAutoDetectSilence ? preferenceInfo.NsfAutoDetectSilenceDelay : 0, preferenceInfo.NsfMoveToNextTrackAfterTime ? preferenceInfo.NsfMoveToNextTrackTime : -1, preferenceInfo.NsfDisableApuIrqs); + InteropEmu.SetFlag(EmulationFlags.NsfRepeat, preferenceInfo.NsfRepeat); + InteropEmu.SetFlag(EmulationFlags.NsfShuffle, preferenceInfo.NsfShuffle); + InteropEmu.SetAutoSaveOptions(preferenceInfo.AutoSave ? (uint)preferenceInfo.AutoSaveDelay : 0, preferenceInfo.AutoSaveNotify); InteropEmu.SetEmulatorKeys(new EmulatorKeyMappingSet() { KeySet1 = preferenceInfo.EmulatorKeySet1.Value, KeySet2 = preferenceInfo.EmulatorKeySet2.Value }); diff --git a/GUI.NET/Controls/ctrlNsfPlayer.Designer.cs b/GUI.NET/Controls/ctrlNsfPlayer.Designer.cs index bad70bc6..68159d58 100644 --- a/GUI.NET/Controls/ctrlNsfPlayer.Designer.cs +++ b/GUI.NET/Controls/ctrlNsfPlayer.Designer.cs @@ -29,9 +29,6 @@ { this.components = new System.ComponentModel.Container(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.btnPrevious = new System.Windows.Forms.Button(); - this.btnPause = new System.Windows.Forms.Button(); - this.btnNext = new System.Windows.Forms.Button(); this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); this.lblCopyrightValue = new System.Windows.Forms.Label(); this.lblArtistValue = new System.Windows.Forms.Label(); @@ -47,7 +44,6 @@ this.lblVrc6 = new System.Windows.Forms.Label(); this.lblVrc7 = new System.Windows.Forms.Label(); this.lblSoundChips = new System.Windows.Forms.Label(); - this.picBackground = new System.Windows.Forms.PictureBox(); this.trkVolume = new System.Windows.Forms.TrackBar(); this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); this.cboTrack = new System.Windows.Forms.ComboBox(); @@ -60,21 +56,31 @@ this.lblFastForward = new System.Windows.Forms.Label(); this.lblFastForwardIcon = new System.Windows.Forms.Label(); this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); - this.panel1 = new System.Windows.Forms.Panel(); - this.panel2 = new System.Windows.Forms.Panel(); this.panel3 = new System.Windows.Forms.Panel(); this.lblSlowMotion = new System.Windows.Forms.Label(); this.lblSlowMotionIcon = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.panel1 = new System.Windows.Forms.Panel(); + this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); + this.picRepeat = new System.Windows.Forms.PictureBox(); + this.picShuffle = new System.Windows.Forms.PictureBox(); + this.btnPrevious = new System.Windows.Forms.Button(); + this.btnPause = new System.Windows.Forms.Button(); + this.btnNext = new System.Windows.Forms.Button(); + this.picBackground = new System.Windows.Forms.PictureBox(); this.tableLayoutPanel1.SuspendLayout(); this.tableLayoutPanel2.SuspendLayout(); this.tableLayoutPanel3.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.picBackground)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.trkVolume)).BeginInit(); this.flowLayoutPanel1.SuspendLayout(); this.tableLayoutPanel4.SuspendLayout(); - this.panel1.SuspendLayout(); - this.panel2.SuspendLayout(); this.panel3.SuspendLayout(); + this.panel2.SuspendLayout(); + this.panel1.SuspendLayout(); + this.tableLayoutPanel5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picRepeat)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.picShuffle)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.picBackground)).BeginInit(); this.SuspendLayout(); // // tableLayoutPanel1 @@ -101,47 +107,10 @@ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel1.Size = new System.Drawing.Size(371, 281); this.tableLayoutPanel1.TabIndex = 0; // - // btnPrevious - // - this.btnPrevious.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.btnPrevious.BackColor = System.Drawing.SystemColors.Control; - this.btnPrevious.Image = global::Mesen.GUI.Properties.Resources.PrevTrack; - this.btnPrevious.Location = new System.Drawing.Point(126, 220); - this.btnPrevious.Name = "btnPrevious"; - this.btnPrevious.Size = new System.Drawing.Size(33, 25); - this.btnPrevious.TabIndex = 1; - this.btnPrevious.UseVisualStyleBackColor = true; - this.btnPrevious.Click += new System.EventHandler(this.btnPrevious_Click); - // - // btnPause - // - this.btnPause.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.btnPause.BackColor = System.Drawing.SystemColors.Control; - this.btnPause.Image = global::Mesen.GUI.Properties.Resources.Pause; - this.btnPause.Location = new System.Drawing.Point(165, 216); - this.btnPause.Name = "btnPause"; - this.btnPause.Size = new System.Drawing.Size(40, 33); - this.btnPause.TabIndex = 0; - this.btnPause.UseVisualStyleBackColor = true; - this.btnPause.Click += new System.EventHandler(this.btnPause_Click); - // - // btnNext - // - this.btnNext.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.btnNext.BackColor = System.Drawing.SystemColors.Control; - this.btnNext.Image = global::Mesen.GUI.Properties.Resources.NextTrack; - this.btnNext.Location = new System.Drawing.Point(211, 220); - this.btnNext.Name = "btnNext"; - this.btnNext.Size = new System.Drawing.Size(33, 25); - this.btnNext.TabIndex = 2; - this.btnNext.UseVisualStyleBackColor = true; - this.btnNext.Click += new System.EventHandler(this.btnNext_Click); - this.btnNext.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnNext_MouseDown); - this.btnNext.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btnNext_MouseUp); - // // tableLayoutPanel2 // this.tableLayoutPanel2.AutoSize = true; @@ -352,21 +321,6 @@ this.lblSoundChips.TabIndex = 7; this.lblSoundChips.Text = "Sound Chips:"; // - // picBackground - // - this.picBackground.Anchor = System.Windows.Forms.AnchorStyles.None; - this.picBackground.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.tableLayoutPanel1.SetColumnSpan(this.picBackground, 5); - this.picBackground.Image = global::Mesen.GUI.Properties.Resources.NsfBackground; - this.picBackground.Location = new System.Drawing.Point(66, 13); - this.picBackground.Margin = new System.Windows.Forms.Padding(10); - this.picBackground.MaximumSize = new System.Drawing.Size(334, 380); - this.picBackground.Name = "picBackground"; - this.picBackground.Size = new System.Drawing.Size(238, 95); - this.picBackground.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.picBackground.TabIndex = 5; - this.picBackground.TabStop = false; - // // trkVolume // this.trkVolume.Location = new System.Drawing.Point(257, 210); @@ -501,7 +455,7 @@ this.tableLayoutPanel4.Controls.Add(this.panel2, 0, 0); this.tableLayoutPanel4.Controls.Add(this.panel1, 0, 1); this.tableLayoutPanel4.Location = new System.Drawing.Point(5, 5); - this.tableLayoutPanel4.Margin = new System.Windows.Forms.Padding(0, 0, 0, 0); + this.tableLayoutPanel4.Margin = new System.Windows.Forms.Padding(0); this.tableLayoutPanel4.Name = "tableLayoutPanel4"; this.tableLayoutPanel4.RowCount = 4; this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); @@ -511,30 +465,6 @@ this.tableLayoutPanel4.Size = new System.Drawing.Size(121, 60); this.tableLayoutPanel4.TabIndex = 13; // - // panel1 - // - this.panel1.AutoSize = true; - this.panel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.panel1.Controls.Add(this.lblFastForward); - this.panel1.Controls.Add(this.lblFastForwardIcon); - this.panel1.Location = new System.Drawing.Point(0, 18); - this.panel1.Margin = new System.Windows.Forms.Padding(0, 0, 0, 0); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(82, 18); - this.panel1.TabIndex = 0; - // - // panel2 - // - this.panel2.AutoSize = true; - this.panel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.panel2.Controls.Add(this.lblRecordingDot); - this.panel2.Controls.Add(this.lblRecording); - this.panel2.Location = new System.Drawing.Point(0, 0); - this.panel2.Margin = new System.Windows.Forms.Padding(0, 0, 0, 0); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(44, 18); - this.panel2.TabIndex = 1; - // // panel3 // this.panel3.AutoSize = true; @@ -570,11 +500,129 @@ this.lblSlowMotionIcon.TabIndex = 12; this.lblSlowMotionIcon.Text = "«"; // + // panel2 + // + this.panel2.AutoSize = true; + this.panel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panel2.Controls.Add(this.lblRecordingDot); + this.panel2.Controls.Add(this.lblRecording); + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Margin = new System.Windows.Forms.Padding(0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(44, 18); + this.panel2.TabIndex = 1; + // + // panel1 + // + this.panel1.AutoSize = true; + this.panel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panel1.Controls.Add(this.lblFastForward); + this.panel1.Controls.Add(this.lblFastForwardIcon); + this.panel1.Location = new System.Drawing.Point(0, 18); + this.panel1.Margin = new System.Windows.Forms.Padding(0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(82, 18); + this.panel1.TabIndex = 0; + // + // tableLayoutPanel5 + // + this.tableLayoutPanel5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel5.ColumnCount = 1; + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel5.Controls.Add(this.picRepeat, 0, 1); + this.tableLayoutPanel5.Controls.Add(this.picShuffle, 0, 0); + this.tableLayoutPanel5.Location = new System.Drawing.Point(336, 8); + this.tableLayoutPanel5.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel5.Name = "tableLayoutPanel5"; + this.tableLayoutPanel5.RowCount = 3; + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel5.Size = new System.Drawing.Size(30, 60); + this.tableLayoutPanel5.TabIndex = 14; + // + // picRepeat + // + this.picRepeat.Cursor = System.Windows.Forms.Cursors.Hand; + this.picRepeat.Image = global::Mesen.GUI.Properties.Resources.Repeat; + this.picRepeat.Location = new System.Drawing.Point(3, 33); + this.picRepeat.Name = "picRepeat"; + this.picRepeat.Size = new System.Drawing.Size(24, 24); + this.picRepeat.TabIndex = 4; + this.picRepeat.TabStop = false; + this.picRepeat.Click += new System.EventHandler(this.picRepeat_Click); + // + // picShuffle + // + this.picShuffle.Cursor = System.Windows.Forms.Cursors.Hand; + this.picShuffle.Image = global::Mesen.GUI.Properties.Resources.Shuffle; + this.picShuffle.Location = new System.Drawing.Point(3, 3); + this.picShuffle.Name = "picShuffle"; + this.picShuffle.Size = new System.Drawing.Size(24, 24); + this.picShuffle.TabIndex = 3; + this.picShuffle.TabStop = false; + this.picShuffle.Click += new System.EventHandler(this.picShuffle_Click); + // + // btnPrevious + // + this.btnPrevious.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.btnPrevious.BackColor = System.Drawing.SystemColors.Control; + this.btnPrevious.Image = global::Mesen.GUI.Properties.Resources.PrevTrack; + this.btnPrevious.Location = new System.Drawing.Point(126, 220); + this.btnPrevious.Name = "btnPrevious"; + this.btnPrevious.Size = new System.Drawing.Size(33, 25); + this.btnPrevious.TabIndex = 1; + this.btnPrevious.UseVisualStyleBackColor = true; + this.btnPrevious.Click += new System.EventHandler(this.btnPrevious_Click); + // + // btnPause + // + this.btnPause.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.btnPause.BackColor = System.Drawing.SystemColors.Control; + this.btnPause.Image = global::Mesen.GUI.Properties.Resources.Pause; + this.btnPause.Location = new System.Drawing.Point(165, 216); + this.btnPause.Name = "btnPause"; + this.btnPause.Size = new System.Drawing.Size(40, 33); + this.btnPause.TabIndex = 0; + this.btnPause.UseVisualStyleBackColor = true; + this.btnPause.Click += new System.EventHandler(this.btnPause_Click); + // + // btnNext + // + this.btnNext.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.btnNext.BackColor = System.Drawing.SystemColors.Control; + this.btnNext.Image = global::Mesen.GUI.Properties.Resources.NextTrack; + this.btnNext.Location = new System.Drawing.Point(211, 220); + this.btnNext.Name = "btnNext"; + this.btnNext.Size = new System.Drawing.Size(33, 25); + this.btnNext.TabIndex = 2; + this.btnNext.UseVisualStyleBackColor = true; + this.btnNext.Click += new System.EventHandler(this.btnNext_Click); + this.btnNext.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnNext_MouseDown); + this.btnNext.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btnNext_MouseUp); + // + // picBackground + // + this.picBackground.Anchor = System.Windows.Forms.AnchorStyles.None; + this.picBackground.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.tableLayoutPanel1.SetColumnSpan(this.picBackground, 5); + this.picBackground.Image = global::Mesen.GUI.Properties.Resources.NsfBackground; + this.picBackground.Location = new System.Drawing.Point(66, 13); + this.picBackground.Margin = new System.Windows.Forms.Padding(10); + this.picBackground.MaximumSize = new System.Drawing.Size(334, 380); + this.picBackground.Name = "picBackground"; + this.picBackground.Size = new System.Drawing.Size(238, 95); + this.picBackground.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.picBackground.TabIndex = 5; + this.picBackground.TabStop = false; + // // ctrlNsfPlayer // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.Black; + this.Controls.Add(this.tableLayoutPanel5); this.Controls.Add(this.tableLayoutPanel4); this.Controls.Add(this.tableLayoutPanel1); this.Name = "ctrlNsfPlayer"; @@ -586,18 +634,21 @@ this.tableLayoutPanel2.PerformLayout(); this.tableLayoutPanel3.ResumeLayout(false); this.tableLayoutPanel3.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.picBackground)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.trkVolume)).EndInit(); this.flowLayoutPanel1.ResumeLayout(false); this.flowLayoutPanel1.PerformLayout(); this.tableLayoutPanel4.ResumeLayout(false); this.tableLayoutPanel4.PerformLayout(); - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.panel2.ResumeLayout(false); - this.panel2.PerformLayout(); this.panel3.ResumeLayout(false); this.panel3.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.tableLayoutPanel5.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.picRepeat)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.picShuffle)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.picBackground)).EndInit(); this.ResumeLayout(false); } @@ -641,5 +692,8 @@ private System.Windows.Forms.Panel panel3; private System.Windows.Forms.Label lblSlowMotion; private System.Windows.Forms.Label lblSlowMotionIcon; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5; + private System.Windows.Forms.PictureBox picShuffle; + private System.Windows.Forms.PictureBox picRepeat; } } diff --git a/GUI.NET/Controls/ctrlNsfPlayer.cs b/GUI.NET/Controls/ctrlNsfPlayer.cs index 4adfd526..575c6835 100644 --- a/GUI.NET/Controls/ctrlNsfPlayer.cs +++ b/GUI.NET/Controls/ctrlNsfPlayer.cs @@ -31,6 +31,40 @@ namespace Mesen.GUI.Controls this.trkVolume.KeyUp += Child_KeyUp; } + private bool Repeat + { + get + { + bool repeat = ConfigManager.Config.PreferenceInfo.NsfRepeat; + picRepeat.Image = repeat ? Properties.Resources.RepeatEnabled : Properties.Resources.Repeat; + return repeat; + } + set + { + ConfigManager.Config.PreferenceInfo.NsfRepeat = value; + ConfigManager.ApplyChanges(); + ConfigManager.Config.ApplyConfig(); + picRepeat.Image = value ? Properties.Resources.RepeatEnabled : Properties.Resources.Repeat; + } + } + + private bool Shuffle + { + get + { + bool shuffle = ConfigManager.Config.PreferenceInfo.NsfShuffle; + picShuffle.Image = shuffle ? Properties.Resources.ShuffleEnabled : Properties.Resources.Shuffle; + return shuffle; + } + set + { + ConfigManager.Config.PreferenceInfo.NsfShuffle = value; + ConfigManager.ApplyChanges(); + ConfigManager.Config.ApplyConfig(); + picShuffle.Image = value ? Properties.Resources.ShuffleEnabled : Properties.Resources.Shuffle; + } + } + private void Child_KeyUp(object sender, KeyEventArgs e) { if((e.KeyCode == Keys.Right || e.KeyCode == Keys.Control) && _fastForwarding) { @@ -182,10 +216,14 @@ namespace Mesen.GUI.Controls private void btnNext_Click(object sender, EventArgs e) { if(!_fastForwarding) { - int soundCount = InteropEmu.NsfGetHeader().TotalSongs; - int currentTrack = InteropEmu.NsfGetCurrentTrack(); - currentTrack = (currentTrack + 1) % soundCount; - InteropEmu.NsfSelectTrack((byte)currentTrack); + int trackCount = InteropEmu.NsfGetHeader().TotalSongs; + int newTrack = 0; + if(this.Shuffle) { + newTrack = new Random().Next() % trackCount; + } else { + newTrack = (InteropEmu.NsfGetCurrentTrack() + 1) % trackCount; + } + InteropEmu.NsfSelectTrack((byte)newTrack); _frameCount = 0; } } @@ -248,6 +286,8 @@ namespace Mesen.GUI.Controls private void ctrlNsfPlayer_VisibleChanged(object sender, EventArgs e) { + this.Repeat = this.Repeat; + this.Shuffle = this.Shuffle; btnPause.Focus(); } @@ -331,6 +371,16 @@ namespace Mesen.GUI.Controls _frameCount = 0; } } + + private void picRepeat_Click(object sender, EventArgs e) + { + this.Repeat = !this.Repeat; + } + + private void picShuffle_Click(object sender, EventArgs e) + { + this.Shuffle = !this.Shuffle; + } } public class ComboboxItem diff --git a/GUI.NET/GUI.NET.csproj b/GUI.NET/GUI.NET.csproj index 12870e7b..8b300072 100644 --- a/GUI.NET/GUI.NET.csproj +++ b/GUI.NET/GUI.NET.csproj @@ -737,6 +737,11 @@ + + + + + diff --git a/GUI.NET/InteropEmu.cs b/GUI.NET/InteropEmu.cs index a96e07d5..cf53a8bc 100644 --- a/GUI.NET/InteropEmu.cs +++ b/GUI.NET/InteropEmu.cs @@ -1089,6 +1089,9 @@ namespace Mesen.GUI ConfirmExitResetPower = 0x400000000000, + NsfRepeat = 0x800000000000, + NsfShuffle = 0x1000000000000, + ForceMaxSpeed = 0x4000000000000000, ConsoleMode = 0x8000000000000000, } diff --git a/GUI.NET/Properties/Resources.Designer.cs b/GUI.NET/Properties/Resources.Designer.cs index cf453d9d..a4a93616 100644 --- a/GUI.NET/Properties/Resources.Designer.cs +++ b/GUI.NET/Properties/Resources.Designer.cs @@ -590,6 +590,26 @@ namespace Mesen.GUI.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Repeat { + get { + object obj = ResourceManager.GetObject("Repeat", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap RepeatEnabled { + get { + object obj = ResourceManager.GetObject("RepeatEnabled", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -600,6 +620,26 @@ namespace Mesen.GUI.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Shuffle { + get { + object obj = ResourceManager.GetObject("Shuffle", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ShuffleEnabled { + get { + object obj = ResourceManager.GetObject("ShuffleEnabled", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/GUI.NET/Properties/Resources.resx b/GUI.NET/Properties/Resources.resx index 2892ad30..24c039b0 100644 --- a/GUI.NET/Properties/Resources.resx +++ b/GUI.NET/Properties/Resources.resx @@ -118,208 +118,220 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\Resources\Close.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Icon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\NextArrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\PreviousArrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\audio-x-generic.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\camera-photo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\emblem-system.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\input-gaming.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\media-eject.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\system-log-out.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\media-floppy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\folder-open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\view-fullscreen.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\internet-web-browser.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\help-browser.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\MesenIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\applications-multimedia.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\network-workgroup.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\media-playback-pause.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\media-playback-start.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\view-refresh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\system-software-update.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\appointment-new.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\media-playback-stop.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\image-x-generic.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\coins.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\DipSwitches.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\accept.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\DownArrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\microphone.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Record.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\LogWindow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\NextTrack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\NsfBackground.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\PrevTrack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Export.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Import.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\CheatCode.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Warning.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Dice.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Donate.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\VideoFilter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\VideoRecorder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\bug.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\network-workgroup.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\pencil.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\media-playback-stop.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\pipette.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\CheatCode.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Edit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Breakpoint.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\BreakpointDisabled.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Chip.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Donate.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\find.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\font.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\view-fullscreen.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\SplitView.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\DownArrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\StepInto.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Dice.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\StepOut.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\image-x-generic.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\PrevTrack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bug.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\applications-multimedia.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\appointment-new.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\media-playback-start.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\NextTrack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\media-eject.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\StepOver.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\microphone.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\system-log-out.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\font.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\LogWindow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\BreakpointEnableDisable.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Copy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\internet-web-browser.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\CommandLine.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\accept.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\MesenIconSmall.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Shuffle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\PowerCycle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\VideoFilter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\HdPack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\StepBack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\ArrowKeys.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\PsIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\audio-x-generic.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\WasdKeys.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ArrowKeys.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Import.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\MesenIconSmall.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Breakpoint.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Copy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\help-browser.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\coins.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\StepOut.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\media-floppy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\BreakpointDisabled.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\camera-photo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\PsIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\CommandLine.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Icon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Export.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\input-gaming.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\MesenIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\StepBack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\folder-open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SplitView.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\PreviousArrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\media-playback-pause.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Close.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Warning.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\system-software-update.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\XbIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\PowerCycle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\view-refresh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\NextArrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\NsfBackground.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pipette.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pencil.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\HdPack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\StepInto.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\DipSwitches.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\emblem-system.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Record.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Chip.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Edit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Repeat.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\RepeatEnabled.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ShuffleEnabled.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/GUI.NET/Resources/Repeat.png b/GUI.NET/Resources/Repeat.png new file mode 100644 index 00000000..6db90e6a Binary files /dev/null and b/GUI.NET/Resources/Repeat.png differ diff --git a/GUI.NET/Resources/RepeatEnabled.png b/GUI.NET/Resources/RepeatEnabled.png new file mode 100644 index 00000000..8e64ed61 Binary files /dev/null and b/GUI.NET/Resources/RepeatEnabled.png differ diff --git a/GUI.NET/Resources/Shuffle.png b/GUI.NET/Resources/Shuffle.png new file mode 100644 index 00000000..a810414b Binary files /dev/null and b/GUI.NET/Resources/Shuffle.png differ diff --git a/GUI.NET/Resources/ShuffleEnabled.png b/GUI.NET/Resources/ShuffleEnabled.png new file mode 100644 index 00000000..931395ac Binary files /dev/null and b/GUI.NET/Resources/ShuffleEnabled.png differ