Fixed bug with playlist-mouse-handling.

This commit is contained in:
Florian Kuepper committed 2012-12-08 22:38:43 +01:00
1 parent 2235f85896
commit 968fc04c5a
1 file changed
+197 -193
+197 -193
View File
@@ -420,7 +420,7 @@ namespace Vocaluxe.Menu
public bool IsMouseOver(MouseEvent MouseEvent) public bool IsMouseOver(MouseEvent MouseEvent)
{ {
return CHelper.IsInBounds(Rect, MouseEvent.X, MouseEvent.Y) || _Interactions.IsMouseOver(MouseEvent); return CHelper.IsInBounds(CompleteRect, MouseEvent.X, MouseEvent.Y) || _Interactions.IsMouseOver(MouseEvent);
} }
public void UnloadTextures() public void UnloadTextures()
@@ -835,145 +835,223 @@ namespace Vocaluxe.Menu
public bool HandleMouse(MouseEvent MouseEvent) public bool HandleMouse(MouseEvent MouseEvent)
{ {
_Interactions.HandleMouse(MouseEvent);
if (CHelper.IsInBounds(CompleteRect, MouseEvent) && Visible) if (CHelper.IsInBounds(CompleteRect, MouseEvent) && Visible)
{ {
//Scroll _Interactions.HandleMouse(MouseEvent);
if (MouseEvent.Wheel > 0)
{
if (PlaylistElements.Count + Offset + MouseEvent.Wheel <= PlaylistElementContents.Count)
{
Offset += MouseEvent.Wheel;
Update();
}
return true;
}
else if (MouseEvent.Wheel < 0)
{
if (Offset + MouseEvent.Wheel >= 0)
{
Offset += MouseEvent.Wheel;
Update();
}
return true;
}
bool hover_set = false; if (CHelper.IsInBounds(Rect, MouseEvent) && Visible)
for (int i = 0; i < PlaylistElements.Count; i++)
{ {
//Hover for playlist-element //Scroll
if (PlaylistElementContents.Count - 1 >= i && CHelper.IsInBounds(PlaylistElements[i].Background.Rect, MouseEvent)) if (MouseEvent.Wheel > 0)
{ {
hover_set = true; if (PlaylistElements.Count + Offset + MouseEvent.Wheel <= PlaylistElementContents.Count)
CurrentPlaylistElement = i; {
_Interactions.SetInteractionToSelectSlide(PlaylistElements[CurrentPlaylistElement].SelectSlide); Offset += MouseEvent.Wheel;
_Interactions.ProcessMouseMove(MouseEvent.X, MouseEvent.Y); Update();
} }
//Delete Entry with RB
if (CHelper.IsInBounds(PlaylistElements[i].Background.Rect, MouseEvent) && MouseEvent.RB && PlaylistElements[i].Content != -1)
{
CPlaylists.Playlists[ActivePlaylistID].DeleteSong(PlaylistElements[i].Content);
UpdatePlaylist();
return true; return true;
} }
} else if (MouseEvent.Wheel < 0)
if (!hover_set) {
{ if (Offset + MouseEvent.Wheel >= 0)
CurrentPlaylistElement = -1;
}
switch (_EditMode)
{
//Normal mode
case EEditMode.None:
//LB actions
if (MouseEvent.LB)
{ {
if (CurrentPlaylistElement != -1) Offset += MouseEvent.Wheel;
{ Update();
CPlaylists.Playlists[ActivePlaylistID].Songs[CurrentPlaylistElement + Offset].GameMode = PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection]; }
UpdatePlaylist(); return true;
} }
if (_Theme.ButtonPlaylistClose.Selected)
{ bool hover_set = false;
ClosePlaylist(); for (int i = 0; i < PlaylistElements.Count; i++)
return true; {
} //Hover for playlist-element
else if (_Theme.ButtonPlaylistSing.Selected) if (PlaylistElementContents.Count - 1 >= i && CHelper.IsInBounds(PlaylistElements[i].Background.Rect, MouseEvent))
{ {
StartPlaylistSongs(); hover_set = true;
return true; CurrentPlaylistElement = i;
} _Interactions.SetInteractionToSelectSlide(PlaylistElements[CurrentPlaylistElement].SelectSlide);
else if (_Theme.ButtonPlaylistSave.Selected) _Interactions.ProcessMouseMove(MouseEvent.X, MouseEvent.Y);
{
CPlaylists.SavePlaylist(ActivePlaylistID);
return true;
}
else if (_Theme.ButtonPlaylistDelete.Selected)
{
CPlaylists.DeletePlaylist(ActivePlaylistID);
ClosePlaylist();
return true;
}
else if (_Theme.ButtonPlaylistName.Selected)
{
_EditMode = EEditMode.PlaylistName;
_Theme.ButtonPlaylistName.EditMode = true;
return true;
}
} }
//Change order with holding LB //Delete Entry with RB
if (MouseEvent.LBH && CurrentPlaylistElement != -1 && PlaylistElementContents.Count > 1 && DragAndDropSongID == -1) if (CHelper.IsInBounds(PlaylistElements[i].Background.Rect, MouseEvent) && MouseEvent.RB && PlaylistElements[i].Content != -1)
{ {
CPlaylists.Playlists[ActivePlaylistID].DeleteSong(PlaylistElements[i].Content);
UpdatePlaylist();
return true;
}
}
if (!hover_set)
{
CurrentPlaylistElement = -1;
}
ChangeOrderSource = CurrentPlaylistElement + Offset; switch (_EditMode)
{
//Normal mode
case EEditMode.None:
//Update of Drag/Drop-Texture //LB actions
if (ChangeOrderSource >= PlaylistElementContents.Count) if (MouseEvent.LB)
return true; {
if (CurrentPlaylistElement != -1)
{
CPlaylists.Playlists[ActivePlaylistID].Songs[CurrentPlaylistElement + Offset].GameMode = PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection];
UpdatePlaylist();
}
if (_Theme.ButtonPlaylistClose.Selected)
{
ClosePlaylist();
return true;
}
else if (_Theme.ButtonPlaylistSing.Selected)
{
StartPlaylistSongs();
return true;
}
else if (_Theme.ButtonPlaylistSave.Selected)
{
CPlaylists.SavePlaylist(ActivePlaylistID);
return true;
}
else if (_Theme.ButtonPlaylistDelete.Selected)
{
CPlaylists.DeletePlaylist(ActivePlaylistID);
ClosePlaylist();
return true;
}
else if (_Theme.ButtonPlaylistName.Selected)
{
_EditMode = EEditMode.PlaylistName;
_Theme.ButtonPlaylistName.EditMode = true;
return true;
}
}
ChangeOrderElement = new PlaylistElement(PlaylistElements[CurrentPlaylistElement]); //Change order with holding LB
ChangeOrderElement.Background.Rect.Z = CSettings.zNear; if (MouseEvent.LBH && CurrentPlaylistElement != -1 && PlaylistElementContents.Count > 1 && DragAndDropSongID == -1)
ChangeOrderElement.Cover.Rect.Z = CSettings.zNear; {
ChangeOrderElement.SelectSlide.Rect.Z = CSettings.zNear;
ChangeOrderElement.SelectSlide.RectArrowLeft.Z = CSettings.zNear;
ChangeOrderElement.SelectSlide.RectArrowRight.Z = CSettings.zNear;
ChangeOrderElement.Text1.Z = CSettings.zNear;
ChangeOrderElement.Background.Texture = CTheme.GetSkinTexture(_Theme.TextureBackgroundName); ChangeOrderSource = CurrentPlaylistElement + Offset;
ChangeOrderElement.Background.Color = BackgroundColor;
//Update of Drag/Drop-Texture
if (ChangeOrderSource >= PlaylistElementContents.Count)
return true;
ChangeOrderElement = new PlaylistElement(PlaylistElements[CurrentPlaylistElement]);
ChangeOrderElement.Background.Rect.Z = CSettings.zNear;
ChangeOrderElement.Cover.Rect.Z = CSettings.zNear;
ChangeOrderElement.SelectSlide.Rect.Z = CSettings.zNear;
ChangeOrderElement.SelectSlide.RectArrowLeft.Z = CSettings.zNear;
ChangeOrderElement.SelectSlide.RectArrowRight.Z = CSettings.zNear;
ChangeOrderElement.Text1.Z = CSettings.zNear;
ChangeOrderElement.Background.Texture = CTheme.GetSkinTexture(_Theme.TextureBackgroundName);
ChangeOrderElement.Background.Color = BackgroundColor;
OldMousePosX = MouseEvent.X;
OldMousePosY = MouseEvent.Y;
_EditMode = EEditMode.ChangeOrder;
}
if (!MouseEvent.LBH && DragAndDropSongID != -1)
{
EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL;
CSong song = CSongs.GetSong(DragAndDropSongID);
if (song != null)
{
if (song.IsDuet)
gm = EGameMode.TR_GAMEMODE_DUET;
if (CurrentPlaylistElement != -1)
{
CPlaylists.Playlists[ActivePlaylistID].SongInsert(CurrentPlaylistElement + Offset, DragAndDropSongID, gm);
UpdatePlaylist();
}
else
{
if (MouseEvent.Y < PlaylistElements[0].Background.Rect.Y && Offset == 0)
{
CPlaylists.Playlists[ActivePlaylistID].SongInsert(0, DragAndDropSongID, gm);
UpdatePlaylist();
}
else
{
if (PlaylistElements.Count + Offset >= PlaylistElementContents.Count)
{
float min = 0f;
for (int i = PlaylistElements.Count - 1; i >= 0; i--)
{
if (PlaylistElements[i].SelectSlide.Visible)
{
min = PlaylistElements[i].SelectSlide.Rect.Y + PlaylistElements[i].SelectSlide.Rect.H;
break;
}
}
if (MouseEvent.Y > min)
{
CPlaylists.Playlists[ActivePlaylistID].AddSong(DragAndDropSongID, gm);
UpdatePlaylist();
ScrollToBottom();
}
}
}
DragAndDropSongID = -1;
UpdatePlaylist();
}
}
}
break;
case EEditMode.PlaylistName:
_Interactions.SetInteractionToButton(_Theme.ButtonPlaylistName);
CurrentPlaylistElement = -1;
if (MouseEvent.LB)
{
if (_Theme.ButtonPlaylistName.Selected)
{
CPlaylists.Playlists[ActivePlaylistID].PlaylistName = _Theme.ButtonPlaylistName.Text.Text;
CPlaylists.Playlists[ActivePlaylistID].SavePlaylist();
_EditMode = EEditMode.None;
return true;
}
}
else if (MouseEvent.RB)
{
if (_Theme.ButtonPlaylistName.Selected)
{
_Theme.ButtonPlaylistName.Text.Text = CPlaylists.Playlists[ActivePlaylistID].PlaylistName;
_EditMode = EEditMode.None;
_Theme.ButtonPlaylistName.EditMode = false;
return true;
}
}
break;
case EEditMode.ChangeOrder:
//Actions according to playlist-element
//Update coords for Drag/Drop-Texture
ChangeOrderElement.MouseMove(MouseEvent.X, MouseEvent.Y, OldMousePosX, OldMousePosY);
OldMousePosX = MouseEvent.X; OldMousePosX = MouseEvent.X;
OldMousePosY = MouseEvent.Y; OldMousePosY = MouseEvent.Y;
_EditMode = EEditMode.ChangeOrder; if (!MouseEvent.LBH)
}
if (!MouseEvent.LBH && DragAndDropSongID != -1)
{
EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL;
CSong song = CSongs.GetSong(DragAndDropSongID);
if (song != null)
{ {
if (song.IsDuet) if (CurrentPlaylistElement != -1 && CurrentPlaylistElement + Offset != ChangeOrderSource)
gm = EGameMode.TR_GAMEMODE_DUET;
if (CurrentPlaylistElement != -1)
{ {
CPlaylists.Playlists[ActivePlaylistID].SongInsert(CurrentPlaylistElement + Offset, DragAndDropSongID, gm); CPlaylists.Playlists[ActivePlaylistID].SongMove(ChangeOrderSource, CurrentPlaylistElement + Offset);
UpdatePlaylist(); UpdatePlaylist();
} }
else else if (CurrentPlaylistElement == -1)
{ {
if (MouseEvent.Y < PlaylistElements[0].Background.Rect.Y && Offset == 0) if (MouseEvent.Y < PlaylistElements[0].Background.Rect.Y && Offset == 0)
{ {
CPlaylists.Playlists[ActivePlaylistID].SongInsert(0, DragAndDropSongID, gm); CPlaylists.Playlists[ActivePlaylistID].SongMove(ChangeOrderSource, 0);
UpdatePlaylist();
} }
else else
{ {
@@ -991,93 +1069,19 @@ namespace Vocaluxe.Menu
if (MouseEvent.Y > min) if (MouseEvent.Y > min)
{ {
CPlaylists.Playlists[ActivePlaylistID].AddSong(DragAndDropSongID, gm); CPlaylists.Playlists[ActivePlaylistID].SongMove(ChangeOrderSource, PlaylistElementContents.Count - 1);
UpdatePlaylist();
ScrollToBottom();
} }
} }
} }
DragAndDropSongID = -1;
UpdatePlaylist(); UpdatePlaylist();
} }
}
}
break;
case EEditMode.PlaylistName:
_Interactions.SetInteractionToButton(_Theme.ButtonPlaylistName);
CurrentPlaylistElement = -1;
if (MouseEvent.LB)
{
if (_Theme.ButtonPlaylistName.Selected)
{
CPlaylists.Playlists[ActivePlaylistID].PlaylistName = _Theme.ButtonPlaylistName.Text.Text;
CPlaylists.Playlists[ActivePlaylistID].SavePlaylist();
_EditMode = EEditMode.None; _EditMode = EEditMode.None;
return true;
} }
} break;
else if (MouseEvent.RB) }
{
if (_Theme.ButtonPlaylistName.Selected)
{
_Theme.ButtonPlaylistName.Text.Text = CPlaylists.Playlists[ActivePlaylistID].PlaylistName;
_EditMode = EEditMode.None;
_Theme.ButtonPlaylistName.EditMode = false;
return true;
}
}
break;
case EEditMode.ChangeOrder:
//Actions according to playlist-element
//Update coords for Drag/Drop-Texture
ChangeOrderElement.MouseMove(MouseEvent.X, MouseEvent.Y, OldMousePosX, OldMousePosY);
OldMousePosX = MouseEvent.X;
OldMousePosY = MouseEvent.Y;
if (!MouseEvent.LBH)
{
if (CurrentPlaylistElement != -1 && CurrentPlaylistElement + Offset != ChangeOrderSource)
{
CPlaylists.Playlists[ActivePlaylistID].SongMove(ChangeOrderSource, CurrentPlaylistElement + Offset);
UpdatePlaylist();
}
else if (CurrentPlaylistElement == -1)
{
if (MouseEvent.Y < PlaylistElements[0].Background.Rect.Y && Offset == 0)
{
CPlaylists.Playlists[ActivePlaylistID].SongMove(ChangeOrderSource, 0);
}
else
{
if (PlaylistElements.Count + Offset >= PlaylistElementContents.Count)
{
float min = 0f;
for (int i = PlaylistElements.Count - 1; i >= 0; i--)
{
if (PlaylistElements[i].SelectSlide.Visible)
{
min = PlaylistElements[i].SelectSlide.Rect.Y + PlaylistElements[i].SelectSlide.Rect.H;
break;
}
}
if (MouseEvent.Y > min)
{
CPlaylists.Playlists[ActivePlaylistID].SongMove(ChangeOrderSource, PlaylistElementContents.Count - 1);
}
}
}
UpdatePlaylist();
}
_EditMode = EEditMode.None;
}
break;
} }
return false;
} }
return false; return false;
} }