From 903c4fc182003ade1e4d539dec2e35115b9858b2 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 10 Dec 2014 21:45:27 +0100 Subject: [PATCH] Remove proxy songmenu class --- Vocaluxe/Base/CMain.cs | 5 + Vocaluxe/Screens/CScreenSong.cs | 6 + VocaluxeLib/IBasic.cs | 2 + VocaluxeLib/Menu/CMenu.cs | 27 +- VocaluxeLib/Menu/COrderedDictionaryLite.cs | 5 + VocaluxeLib/Menu/SongMenu/CSongMenu.cs | 238 ------------------ VocaluxeLib/Menu/SongMenu/CSongMenuFactory.cs | 54 ++++ VocaluxeLib/Menu/SongMenu/CSongMenuList.cs | 3 +- VocaluxeLib/VocaluxeLib.csproj | 2 +- 9 files changed, 99 insertions(+), 243 deletions(-) delete mode 100644 VocaluxeLib/Menu/SongMenu/CSongMenu.cs create mode 100644 VocaluxeLib/Menu/SongMenu/CSongMenuFactory.cs diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index 58f140bc..fab4eaa0 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -160,6 +160,11 @@ namespace Vocaluxe.Base { CConfig.SongMenuChanged += onSongMenuChanged; } + + public void RemoveSongMenuListener(OnSongMenuChanged onSongMenuChanged) + { + CConfig.SongMenuChanged -= onSongMenuChanged; + } } class CBsettings : ISettings diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index 75dea6b9..3445c25c 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -147,6 +147,12 @@ namespace Vocaluxe.Screens _DragAndDropCover = GetNewStatic(); } + protected override void _OnSongMenuChanged() + { + base._OnSongMenuChanged(); + _SongMenu = _SongMenus[_SongMenuName]; + } + public override void LoadTheme(string xmlPath) { base.LoadTheme(xmlPath); diff --git a/VocaluxeLib/IBasic.cs b/VocaluxeLib/IBasic.cs index c3f1fbc1..ef287370 100644 --- a/VocaluxeLib/IBasic.cs +++ b/VocaluxeLib/IBasic.cs @@ -28,6 +28,7 @@ using VocaluxeLib.Songs; namespace VocaluxeLib { public delegate void OnSongMenuChanged(); + public interface IConfig { EOffOn GetSaveModifiedSongs(); @@ -60,6 +61,7 @@ namespace VocaluxeLib bool GetLoadOldThemeFiles(); void AddSongMenuListener(OnSongMenuChanged onSongMenuChanged); + void RemoveSongMenuListener(OnSongMenuChanged onSongMenuChanged); } public interface ISettings diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs index 4c100a12..5bfc1c2f 100644 --- a/VocaluxeLib/Menu/CMenu.cs +++ b/VocaluxeLib/Menu/CMenu.cs @@ -89,6 +89,12 @@ namespace VocaluxeLib.Menu protected CMenu() { PartyModeID = -1; + CBase.Config.AddSongMenuListener(_OnSongMenuChanged); + } + + ~CMenu() + { + CBase.Config.RemoveSongMenuListener(_OnSongMenuChanged); } public override void Init() @@ -113,6 +119,16 @@ namespace VocaluxeLib.Menu _ThemeScreenSettings = null; } + protected virtual void _OnSongMenuChanged() + { + for (int i = 0; i < _SongMenus.Count; i++) + { + SThemeSongMenu theme = (SThemeSongMenu)_SongMenus[i].GetTheme(); + _SongMenus[i] = CSongMenuFactory.CreateSongMenu(theme, PartyModeID); + _SongMenus[i].LoadSkin(); + } + } + #region ThemeHandler protected override void _ClearElements() { @@ -201,7 +217,7 @@ namespace VocaluxeLib.Menu _AddSingNote(new CSingNotes(sb, PartyModeID), sb.Name); foreach (SThemeSongMenu sm in Theme.SongMenus) - _AddSongMenu(new CSongMenu(sm, PartyModeID), sm.Name); + _AddSongMenu(CSongMenuFactory.CreateSongMenu(sm, PartyModeID), sm.Name); foreach (SThemeStatic st in Theme.Statics) _AddStatic(new CStatic(st, PartyModeID), st.Name); @@ -258,7 +274,14 @@ namespace VocaluxeLib.Menu _LoadThemeElement(_ThemeTexts, _AddText, xmlReader); _LoadThemeElement(_ThemeButtons, _AddButton, xmlReader); _LoadThemeElement(_ThemeSelectSlides, _AddSelectSlide, xmlReader); - _LoadThemeElement(_ThemeSongMenus, _AddSongMenu, xmlReader); + foreach (string elName in _ThemeSongMenus) + { + ISongMenu element = CSongMenuFactory.CreateSongMenu(PartyModeID); + if (element.LoadTheme("//root/" + ThemeName, elName, xmlReader)) + _AddSongMenu(element, elName); + else + CBase.Log.LogError("Can't load songmenu \"" + elName + "\" in screen " + ThemeName); + } _LoadThemeElement(_ThemeSongMenus, _AddSongMenu, xmlReader); _LoadThemeElement(_ThemeLyrics, _AddLyric, xmlReader); _LoadThemeElement(_ThemeSingNotes, _AddSingNote, xmlReader); diff --git a/VocaluxeLib/Menu/COrderedDictionaryLite.cs b/VocaluxeLib/Menu/COrderedDictionaryLite.cs index d1d5463f..3bb7d995 100644 --- a/VocaluxeLib/Menu/COrderedDictionaryLite.cs +++ b/VocaluxeLib/Menu/COrderedDictionaryLite.cs @@ -36,6 +36,11 @@ namespace VocaluxeLib.Menu _ParentName = _ParentName.Remove(0, 1); } + public int Count + { + get { return _Items.Count; } + } + public T this[int index] { get { return _Items[index]; } diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenu.cs b/VocaluxeLib/Menu/SongMenu/CSongMenu.cs deleted file mode 100644 index 7dfd0dad..00000000 --- a/VocaluxeLib/Menu/SongMenu/CSongMenu.cs +++ /dev/null @@ -1,238 +0,0 @@ -#region license -// This file is part of Vocaluxe. -// -// Vocaluxe is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Vocaluxe is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Vocaluxe. If not, see . -#endregion - -using System; -using VocaluxeLib.PartyModes; -using VocaluxeLib.Xml; - -namespace VocaluxeLib.Menu.SongMenu -{ - public class CSongMenu : ISongMenu - { - private readonly int _PartyModeID; - private ISongMenu _SongMenu; - - /// - /// Deprecated! Only used for old theme loading. - /// - /// - public CSongMenu(int partyModeID) - { - _PartyModeID = partyModeID; - _SongMenu = new CSongMenuTileBoard(partyModeID); - } - - public CSongMenu(SThemeSongMenu theme, int partyModeID) - { - _PartyModeID = partyModeID; - _CreateSongMenu(theme); - CBase.Config.AddSongMenuListener(_OnSongMenuChanged); - } - - #region ISongMenu - public bool SmallView - { - get { return _SongMenu.SmallView; } - set { _SongMenu.SmallView = value; } - } - - public void Update(SScreenSongOptions songOptions) - { - _SongMenu.Update(songOptions); - } - - public void OnShow() - { - _SongMenu.OnShow(); - } - - public void OnHide() - { - _SongMenu.OnHide(); - } - - public bool HandleInput(ref SKeyEvent keyEvent, SScreenSongOptions options) - { - return _SongMenu.HandleInput(ref keyEvent, options); - } - - public bool HandleMouse(ref SMouseEvent mouseEvent, SScreenSongOptions songOptions) - { - return _SongMenu.HandleMouse(ref mouseEvent, songOptions); - } - - public void Draw() - { - _SongMenu.Draw(); - } - - public bool IsMouseOverSelectedSong(SMouseEvent mEvent) - { - return _SongMenu.IsMouseOverSelectedSong(mEvent); - } - - public int GetPreviewSongNr() - { - return _SongMenu.GetPreviewSongNr(); - } - - public int GetSelectedSongNr() - { - return _SongMenu.GetSelectedSongNr(); - } - - public CStatic GetSelectedSongCover() - { - return _SongMenu.GetSelectedSongCover(); - } - - public void SetSelectedSong(int visibleSongNr) - { - _SongMenu.SetSelectedSong(visibleSongNr); - } - - public int GetSelectedCategory() - { - return _SongMenu.GetSelectedCategory(); - } - - public void SetSelectedCategory(int categoryNr) - { - _SongMenu.SetSelectedCategory(categoryNr); - } - - public bool EnterSelectedCategory() - { - return _SongMenu.EnterSelectedCategory(); - } - - public int GetPreviewSong() - { - return _SongMenu.GetPreviewSong(); - } - #endregion ISongMenu - - #region IMenuElement - public bool Highlighted - { - get { return _SongMenu.Highlighted; } - set { _SongMenu.Highlighted = value; } - } - public bool Selected - { - get { return _SongMenu.Selected; } - set { _SongMenu.Selected = value; } - } - - public bool Selectable - { - get { return _SongMenu.Selectable; } - } - public bool Visible - { - get { return _SongMenu.Visible; } - set { _SongMenu.Visible = value; } - } - - public SRectF Rect - { - get { return _SongMenu.Rect; } - } - public SRectF MaxRect - { - get { return _SongMenu.MaxRect; } - set { _SongMenu.MaxRect = value; } - } - #endregion IMenuElement - - #region IThemeable - public string GetThemeName() - { - return _SongMenu.GetThemeName(); - } - - public object GetTheme() - { - return _SongMenu.GetTheme(); - } - - public bool ThemeLoaded - { - get { return _SongMenu.ThemeLoaded; } - } - - public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader) - { - return _SongMenu.LoadTheme(xmlPath, elementName, xmlReader); - } - - public void UnloadSkin() - { - _SongMenu.UnloadSkin(); - } - - public void LoadSkin() - { - _SongMenu.LoadSkin(); - } - - public void ReloadSkin() - { - _SongMenu.ReloadSkin(); - } - - public void MoveElement(int stepX, int stepY) - { - _SongMenu.MoveElement(stepX, stepY); - } - - public void ResizeElement(int stepW, int stepH) - { - _SongMenu.ResizeElement(stepW, stepH); - } - #endregion IThemeable - - private void _OnSongMenuChanged() - { - _CreateSongMenu((SThemeSongMenu)_SongMenu.GetTheme()); - _SongMenu.LoadSkin(); - } - - private void _CreateSongMenu(SThemeSongMenu theme) - { - switch (CBase.Config.GetSongMenuType()) - { - case ESongMenu.TR_CONFIG_LIST: - _SongMenu = new CSongMenuList(theme, _PartyModeID); - break; - - //case ESongMenu.TR_CONFIG_DREIDEL: - // _SongMenu = new CSongMenuDreidel(); - // break; - case ESongMenu.TR_CONFIG_TILE_BOARD: - _SongMenu = new CSongMenuTileBoard(theme, _PartyModeID); - break; - - //case ESongMenu.TR_CONFIG_BOOK: - // _SongMenu = new CSongMenuBook(); - // break; - default: - throw new ArgumentException("Invalid songmenu type: " + CBase.Config.GetSongMenuType()); - } - } - } -} \ No newline at end of file diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuFactory.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuFactory.cs new file mode 100644 index 00000000..fe4bbb73 --- /dev/null +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuFactory.cs @@ -0,0 +1,54 @@ +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; + +namespace VocaluxeLib.Menu.SongMenu +{ + public static class CSongMenuFactory + { + public static ISongMenu CreateSongMenu(SThemeSongMenu theme, int partyModeID) + { + switch (CBase.Config.GetSongMenuType()) + { + case ESongMenu.TR_CONFIG_LIST: + return new CSongMenuList(theme, partyModeID); + + //case ESongMenu.TR_CONFIG_DREIDEL: + // _SongMenu = new CSongMenuDreidel(); + // break; + case ESongMenu.TR_CONFIG_TILE_BOARD: + return new CSongMenuTileBoard(theme, partyModeID); + + //case ESongMenu.TR_CONFIG_BOOK: + // _SongMenu = new CSongMenuBook(); + // break; + } + throw new ArgumentException("Invalid songmenu type: " + CBase.Config.GetSongMenuType()); + } + + /// + /// Deprecated! Only used for old theme loading. + /// + /// + /// + public static ISongMenu CreateSongMenu(int partyModeID) + { + return new CSongMenuTileBoard(partyModeID); + } + } +} \ No newline at end of file diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs index cd5f6eb0..836e7e9a 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs @@ -638,14 +638,13 @@ namespace VocaluxeLib.Menu.SongMenu public override void LoadSkin() { - base.LoadSkin(); foreach (IThemeable themeable in _SubElements.OfType()) themeable.LoadSkin(); // Those are drawn seperately so they are not in the above list _CoverBig.LoadSkin(); _TextBG.LoadSkin(); - Init(); + base.LoadSkin(); } } } \ No newline at end of file diff --git a/VocaluxeLib/VocaluxeLib.csproj b/VocaluxeLib/VocaluxeLib.csproj index 5b6cec3f..3eb458fa 100644 --- a/VocaluxeLib/VocaluxeLib.csproj +++ b/VocaluxeLib/VocaluxeLib.csproj @@ -108,7 +108,6 @@ - @@ -129,6 +128,7 @@ +