Prototype new music player

This commit is contained in:
Paul Chote
2010-08-14 14:05:32 +12:00
parent 3f3ac377b2
commit 1aa4f57a68
5 changed files with 96 additions and 22 deletions

View File

@@ -16,7 +16,7 @@ namespace OpenRA.GameRules
{ {
public readonly string Filename = null; public readonly string Filename = null;
public readonly string Title = null; public readonly string Title = null;
public readonly float Length = 0; // seconds public readonly int Length = 0; // seconds
public MusicInfo( string key, MiniYaml value ) public MusicInfo( string key, MiniYaml value )
{ {

View File

@@ -1,5 +1,7 @@
using System.Linq; using System.Linq;
using OpenRA.FileFormats; using OpenRA.FileFormats;
using System.Drawing;
using OpenRA.Support;
#region Copyright & License Information #region Copyright & License Information
/* /*
* Copyright 2007-2010 The OpenRA Developers (see AUTHORS) * Copyright 2007-2010 The OpenRA Developers (see AUTHORS)
@@ -61,6 +63,44 @@ namespace OpenRA.Widgets.Delegates
CurrentSong = GetPrevSong(); CurrentSong = GetPrevSong();
return bg.GetWidget("BUTTON_PLAY").OnMouseUp(mi); return bg.GetWidget("BUTTON_PLAY").OnMouseUp(mi);
}; };
bg.GetWidget<LabelWidget>("TIME").GetText = () => "{0:D2}:{1:D2} / {2:D2}:{3:D2}".F(0,0,Rules.Music[CurrentSong].Length / 60, Rules.Music[CurrentSong].Length % 60);
var ml = bg.GetWidget<ListBoxWidget>("MUSIC_LIST");
var itemTemplate = ml.GetWidget<LabelWidget>("MUSIC_TEMPLATE");
int offset = itemTemplate.Bounds.Y;
foreach (var kv in Rules.Music)
{
var song = kv.Key;
if (!FileSystem.Exists(Rules.Music[song].Filename))
continue;
if (CurrentSong == null)
CurrentSong = song;
var template = itemTemplate.Clone() as LabelWidget;
template.Id = "SONG_{0}".F(song);
template.GetBackground = () => ((song == CurrentSong) ? "dialog2" : null);
template.OnMouseDown = mi =>
{
CurrentSong = song;
bg.GetWidget("BUTTON_PLAY").OnMouseUp(mi);
return true;
};
template.Parent = ml;
template.Bounds = new Rectangle(template.Bounds.X, offset, template.Bounds.Width, template.Bounds.Height);
template.IsVisible = () => true;
template.GetWidget<LabelWidget>("TITLE").GetText = () => " " + Rules.Music[song].Title;
template.GetWidget<LabelWidget>("LENGTH").GetText = () => "{0:D2}:{1:D2}".F(Rules.Music[song].Length / 60, Rules.Music[song].Length % 60);
ml.AddChild(template);
offset += template.Bounds.Height;
ml.ContentHeight += template.Bounds.Height;
}
} }
string GetNextSong() string GetNextSong()

View File

@@ -65,14 +65,6 @@ namespace OpenRA.Widgets.Delegates
musicslider.OnChange += x => { Sound.MusicVolume = x; }; musicslider.OnChange += x => { Sound.MusicVolume = x; };
musicslider.GetOffset = () => { return Sound.MusicVolume; }; musicslider.GetOffset = () => { return Sound.MusicVolume; };
var music = audio.GetWidget<CheckboxWidget>("MUSICPLAYER_CHECKBOX");
music.Checked = () => { return Game.Settings.MusicPlayer; };
music.OnMouseDown = mi =>
{
Game.Settings.MusicPlayer ^= true;
Widget.RootWidget.GetWidget("MUSIC_BG").Visible = Game.Settings.MusicPlayer;
return true;
};
// Display // Display
var display = bg.GetWidget("DISPLAY_PANE"); var display = bg.GetWidget("DISPLAY_PANE");

View File

@@ -96,15 +96,14 @@ Background@PERF_BG:
Background@MUSIC_BG: Background@MUSIC_BG:
Id:MUSIC_BG Id:MUSIC_BG
Delegate:MusicPlayerDelegate Delegate:MusicPlayerDelegate
X:WINDOW_RIGHT - 175 X:WINDOW_RIGHT - WIDTH - 20
Y:WINDOW_BOTTOM - 95 Y:WINDOW_BOTTOM - HEIGHT - 20
Width: 160 Width: 300
Height: 55 Height: 210
Visible: true Visible: true
Children: Children:
Button@BUTTON_PLAY: Button@BUTTON_PLAY:
Id:BUTTON_PLAY Id:BUTTON_PLAY
Visible:false
X:50 X:50
Y:15 Y:15
Width:25 Width:25
@@ -120,6 +119,7 @@ Background@MUSIC_BG:
ImageName:play ImageName:play
Button@BUTTON_PAUSE: Button@BUTTON_PAUSE:
Id:BUTTON_PAUSE Id:BUTTON_PAUSE
Visible:false
X:50 X:50
Y:15 Y:15
Width:25 Width:25
@@ -177,4 +177,53 @@ Background@MUSIC_BG:
Width:25 Width:25
Height:25 Height:25
ImageCollection:music ImageCollection:music
ImageName:prev ImageName:prev
Label@TIME:
Id:TIME
X:PARENT_RIGHT - WIDTH - 20
Y:15
Width:100
Height:25
Align: Right
ListBox@MUSIC_LIST:
Id:MUSIC_LIST
X:10
Y:50
Width:280
Height:120
Children:
Label@MUSIC_TEMPLATE:
Id:MUSIC_TEMPLATE
Width:PARENT_RIGHT-28
Height:25
ClickThrough:false
X:2
Y:0
Visible:false
Children:
Label@TITLE:
Id:TITLE
X:5
Width:PARENT_RIGHT - 10
Height:PARENT_BOTTOM
Align: Left
Label@LENGTH:
Id:LENGTH
X:5
Width:PARENT_RIGHT - 10
Height:PARENT_BOTTOM
Align: Right
Checkbox@SHUFFLE:
Id:SHUFFLE
X:15
Y:175
Width:100
Height:20
Text:Shuffle
Checkbox@REPEAT:
Id:REPEAT
X:120
Y:175
Width:100
Height:20
Text:Repeat

View File

@@ -123,13 +123,6 @@ Background@SETTINGS_MENU:
Width:250 Width:250
Height:20 Height:20
Ticks:5 Ticks:5
Checkbox@MUSICPLAYER_CHECKBOX:
Id:MUSICPLAYER_CHECKBOX
X:0
Y:70
Width:300
Height:20
Text:Show Music Player
Container@DISPLAY_PANE: Container@DISPLAY_PANE:
Id:DISPLAY_PANE Id:DISPLAY_PANE
X:37 X:37