X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=562152961c32009cb61133db36eeb424b1c0e160;hb=8b685a52cd9bdf6ad20d1fb6e4c8f8d70c99603e;hp=aa97093c5669144986d4746b8de9f0e66daf0e2e;hpb=1c527635393b7bc090eb9833f302b329f8aacd23;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index aa97093c..56215296 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -2542,12 +2542,12 @@ static int compareTreeInfoEntries(const void *object1, const void *object2) return compare_result; } -static void createParentTreeInfoNode(TreeInfo *node_parent) +static TreeInfo *createParentTreeInfoNode(TreeInfo *node_parent) { TreeInfo *ti_new; if (node_parent == NULL) - return; + return NULL; 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->subdir, ".."); + setString(&ti_new->subdir, STRING_PARENT_DIRECTORY); 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); + + 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)); + 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