Example #1
0
        /// <summary>
        /// Construct the screens
        /// </summary>
        /// <param name="game">Game from which to get repos</param>
        /// <param name="reps">Collection of Repository objects</param>
        /// <param name="initName">Initial value of the Name field</param>
        /// <param name="initUrl">Iniital value of the URL field</param>
        protected RepoScreen(IGame game, SortedDictionary <string, Repository> reps, string initName, string initUrl) : base()
        {
            editList     = reps;
            defaultRepos = RepositoryList.DefaultRepositories(game);

            name = new ConsoleField(labelWidth, nameRow, -1, initName)
            {
                GhostText = () => "<Enter the name to use for this repository>"
            };
            url = new ConsoleField(labelWidth, urlRow, -1, initUrl)
            {
                GhostText = () => "<Enter the URL of this repository>"
            };

            AddObject(new ConsoleLabel(1, nameRow, labelWidth, () => "Name:"));
            AddObject(name);
            AddObject(new ConsoleLabel(1, urlRow, labelWidth, () => "URL:"));
            AddObject(url);

            AddTip("F2", "Accept");
            AddBinding(Keys.F2, (object sender, ConsoleTheme theme) => {
                if (Valid())
                {
                    Save();
                    return(false);
                }
                else
                {
                    return(true);
                }
            });

            AddTip("Esc", "Cancel");
            AddBinding(Keys.Escape, (object sender, ConsoleTheme theme) => {
                return(false);
            });

            // mainMenu = list of default options
            if (defaultRepos.repositories != null && defaultRepos.repositories.Length > 0)
            {
                List <ConsoleMenuOption> opts = new List <ConsoleMenuOption>();
                foreach (Repository r in defaultRepos.repositories)
                {
                    // This variable will be remembered correctly in our lambdas later
                    Repository repo = r;
                    opts.Add(new ConsoleMenuOption(
                                 repo.name, "", $"Import values from default mod list source {repo.name}",
                                 true, (ConsoleTheme theme) => {
                        name.Value    = repo.name;
                        name.Position = name.Value.Length;
                        url.Value     = repo.uri.ToString();
                        url.Position  = url.Value.Length;
                        return(true);
                    }
                                 ));
                }
                mainMenu = new ConsolePopupMenu(opts);
            }
        }