added main menu backlink to level set selection
authorHolger Schemel <info@artsoft.org>
Tue, 10 Mar 2015 19:11:16 +0000 (20:11 +0100)
committerHolger Schemel <info@artsoft.org>
Tue, 10 Mar 2015 19:11:16 +0000 (20:11 +0100)
src/libgame/setup.c
src/libgame/system.h
src/screens.c

index aa97093c5669144986d4746b8de9f0e66daf0e2e..562152961c32009cb61133db36eeb424b1c0e160 100644 (file)
@@ -2542,12 +2542,12 @@ static int compareTreeInfoEntries(const void *object1, const void *object2)
   return compare_result;
 }
 
   return compare_result;
 }
 
-static void createParentTreeInfoNode(TreeInfo *node_parent)
+static TreeInfo *createParentTreeInfoNode(TreeInfo *node_parent)
 {
   TreeInfo *ti_new;
 
   if (node_parent == NULL)
 {
   TreeInfo *ti_new;
 
   if (node_parent == NULL)
-    return;
+    return NULL;
 
   ti_new = newTreeInfo();
   setTreeInfoToDefaults(ti_new, node_parent->type);
 
   ti_new = newTreeInfo();
   setTreeInfoToDefaults(ti_new, node_parent->type);
@@ -2559,7 +2559,7 @@ static void createParentTreeInfoNode(TreeInfo *node_parent)
   setString(&ti_new->name, ".. (parent directory)");
   setString(&ti_new->name_sorting, ti_new->name);
 
   setString(&ti_new->name, ".. (parent directory)");
   setString(&ti_new->name_sorting, ti_new->name);
 
-  setString(&ti_new->subdir, "..");
+  setString(&ti_new->subdir, STRING_PARENT_DIRECTORY);
   setString(&ti_new->fullpath, node_parent->fullpath);
 
   ti_new->sort_priority = node_parent->sort_priority;
   setString(&ti_new->fullpath, node_parent->fullpath);
 
   ti_new->sort_priority = node_parent->sort_priority;
@@ -2568,6 +2568,44 @@ static void createParentTreeInfoNode(TreeInfo *node_parent)
   setString(&ti_new->class_desc, getLevelClassDescription(ti_new));
 
   pushTreeInfo(&node_parent->node_group, ti_new);
   setString(&ti_new->class_desc, getLevelClassDescription(ti_new));
 
   pushTreeInfo(&node_parent->node_group, ti_new);
+
+  return ti_new;
+}
+
+static TreeInfo *createTopTreeInfoNode(TreeInfo *node_first)
+{
+  TreeInfo *ti_new, *ti_new2;
+
+  if (node_first == NULL)
+    return NULL;
+
+  ti_new = newTreeInfo();
+  setTreeInfoToDefaults(ti_new, TREE_TYPE_LEVEL_DIR);
+
+  ti_new->node_parent = NULL;
+  ti_new->parent_link = FALSE;
+
+  setString(&ti_new->identifier, node_first->identifier);
+  setString(&ti_new->name, "level sets");
+  setString(&ti_new->name_sorting, ti_new->name);
+
+  setString(&ti_new->subdir, STRING_TOP_DIRECTORY);
+  setString(&ti_new->fullpath, node_first->fullpath);
+
+  ti_new->sort_priority = node_first->sort_priority;;
+  ti_new->latest_engine = node_first->latest_engine;
+
+  setString(&ti_new->class_desc, "level sets");
+
+  ti_new->node_group = node_first;
+  ti_new->level_group = TRUE;
+
+  ti_new2 = createParentTreeInfoNode(ti_new);
+
+  setString(&ti_new2->name, ".. (main menu)");
+  setString(&ti_new2->name_sorting, ti_new2->name);
+
+  return ti_new;
 }
 
 
 }
 
 
@@ -2978,6 +3016,8 @@ void LoadLevelInfo()
   LoadLevelInfoFromLevelDir(&leveldir_first, NULL, options.level_directory);
   LoadLevelInfoFromLevelDir(&leveldir_first, NULL, getUserLevelDir(NULL));
 
   LoadLevelInfoFromLevelDir(&leveldir_first, NULL, options.level_directory);
   LoadLevelInfoFromLevelDir(&leveldir_first, NULL, getUserLevelDir(NULL));
 
+  leveldir_first = createTopTreeInfoNode(leveldir_first);
+
   /* after loading all level set information, clone the level directory tree
      and remove all level sets without levels (these may still contain artwork
      to be offered in the setup menu as "custom artwork", and are therefore
   /* after loading all level set information, clone the level directory tree
      and remove all level sets without levels (these may still contain artwork
      to be offered in the setup menu as "custom artwork", and are therefore
index 5050c72675af29cfb669f875e7c2fa192cd9f77f..d3f518ed3b17c2f1e31ef4293f6ae500a00775d8 100644 (file)
 
 #define ERROR_BASENAME         "stderr.txt"
 
 
 #define ERROR_BASENAME         "stderr.txt"
 
+#define STRING_PARENT_DIRECTORY                ".."
+#define STRING_TOP_DIRECTORY           "/"
+
 #define CHAR_PATH_SEPARATOR_UNIX       '/'
 #define CHAR_PATH_SEPARATOR_DOS                '\\'
 
 #define CHAR_PATH_SEPARATOR_UNIX       '/'
 #define CHAR_PATH_SEPARATOR_DOS                '\\'
 
index e8e4133f76551431deb3d3527b217fa03cdb78d1..ccf4e8f4d5495d24b893ab45ef89074c1bcd91f5 100644 (file)
@@ -3290,6 +3290,15 @@ static void DrawChooseTree(TreeInfo **ti_ptr)
 {
   int fade_mask = (DrawingAreaChanged() ? REDRAW_ALL : REDRAW_FIELD);
 
 {
   int fade_mask = (DrawingAreaChanged() ? REDRAW_ALL : REDRAW_FIELD);
 
+  if (strEqual((*ti_ptr)->subdir, STRING_TOP_DIRECTORY))
+  {
+    game_status = GAME_MODE_MAIN;
+
+    DrawMainMenuExt(REDRAW_FIELD, FALSE);
+
+    return;
+  }
+
   UnmapAllGadgets();
 
   FreeScreenGadgets();
   UnmapAllGadgets();
 
   FreeScreenGadgets();