Fixed bug with playlist-mouse-handling.
This commit is contained in:
1 parent
2235f85896
commit
968fc04c5a
1 file changed
+197
-193
+197
-193
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user