added cursor key navigation to music info screens
authorHolger Schemel <holger.schemel@virtion.de>
Sun, 27 Mar 2022 12:54:40 +0000 (14:54 +0200)
committerHolger Schemel <holger.schemel@virtion.de>
Sun, 27 Mar 2022 12:59:13 +0000 (14:59 +0200)
src/files.c
src/main.h
src/screens.c

index a2efae2a1874ceacf48a4210c472ebcbe193e867..307b78895dd8e13c290095e3402f1355a1d7df23 100644 (file)
@@ -13430,6 +13430,18 @@ void LoadMusicInfo(void)
        new = &(*new)->next;
     }
   }
+
+  // add pointers to previous list nodes
+
+  struct MusicFileInfo *node = music_file_info;
+
+  while (node != NULL)
+  {
+    if (node->next)
+      node->next->prev = node;
+
+    node = node->next;
+  }
 }
 
 static void add_helpanim_entry(int element, int action, int direction,
index 3d6055a8b797f989f62555dc6bdba0f3ade54b01..b4a572917258cc0b9aee085baabb609446049d45 100644 (file)
@@ -3715,7 +3715,7 @@ struct MusicFileInfo
 
   boolean is_sound;
 
-  struct MusicFileInfo *next;
+  struct MusicFileInfo *prev, *next;
 };
 
 struct ElementActionInfo
index 816f01ed53d5cea7a8fb44025f4a045cb00d1e86..c3c87f24605dd77f1c69750fa4b0abbd0033fd0c 100644 (file)
@@ -279,7 +279,7 @@ static void DrawInfoScreen_HelpText(int, int, int, int);
 static void HandleInfoScreen_Main(int, int, int, int, int);
 static void HandleInfoScreen_TitleScreen(int);
 static void HandleInfoScreen_Elements(int);
-static void HandleInfoScreen_Music(int);
+static void HandleInfoScreen_Music(int, int, int);
 static void HandleInfoScreen_Credits(int, int, int);
 static void HandleInfoScreen_Program(int);
 static void HandleInfoScreen_Version(int);
@@ -3199,12 +3199,12 @@ static void DrawInfoScreen_Music(void)
 
   LoadMusicInfo();
 
-  HandleInfoScreen_Music(MB_MENU_INITIALIZE);
+  HandleInfoScreen_Music(0, 0, MB_MENU_INITIALIZE);
 
   FadeIn(REDRAW_FIELD);
 }
 
-void HandleInfoScreen_Music(int button)
+void HandleInfoScreen_Music(int dx, int dy, int button)
 {
   static struct MusicFileInfo *list = NULL;
   int font_title = MENU_INFO_FONT_TITLE;
@@ -3250,14 +3250,14 @@ void HandleInfoScreen_Music(int button)
 
     return;
   }
-  else if (button == MB_MENU_CHOICE || button == MB_MENU_INITIALIZE)
+  else if (button == MB_MENU_CHOICE || button == MB_MENU_INITIALIZE || dx)
   {
     if (button != MB_MENU_INITIALIZE)
     {
       PlaySound(SND_MENU_ITEM_SELECTING);
 
       if (list != NULL)
-       list = list->next;
+       list = (dx < 0 ? list->prev : list->next);
     }
 
     if (list == NULL)
@@ -4064,7 +4064,7 @@ void HandleInfoScreen(int mx, int my, int dx, int dy, int button)
   else if (info_mode == INFO_MODE_ELEMENTS)
     HandleInfoScreen_Elements(button);
   else if (info_mode == INFO_MODE_MUSIC)
-    HandleInfoScreen_Music(button);
+    HandleInfoScreen_Music(dx, dy, button);
   else if (info_mode == INFO_MODE_CREDITS)
     HandleInfoScreen_Credits(dx, dy, button);
   else if (info_mode == INFO_MODE_PROGRAM)