#region Copyright & License Information /* * Copyright 2007-2014 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, * see COPYING. */ #endregion using System; using System.Collections.Generic; using System.Linq; namespace OpenRA.Mods.RA.Widgets.Logic { class TabCompletionLogic { IList candidates = new List(); int currentCandidateIndex = 0; string lastCompleted; string prefix; string suffix; public IList Commands { get; set; } public IList Names { get; set; } public string Complete(string text) { if (string.IsNullOrWhiteSpace(text)) return text; if (lastCompleted == text) { lastCompleted = prefix + candidates[++currentCandidateIndex % candidates.Count] + suffix; return lastCompleted; } var toComplete = ""; if (text.StartsWith("/") && Commands != null) { prefix = "/"; suffix = ""; toComplete = text.Substring(1); candidates = Commands.Where(x => x.StartsWith(toComplete, StringComparison.InvariantCultureIgnoreCase)).ToList(); } else if (Names != null) { var oneWord = text.Contains(' '); if (oneWord) { prefix = text.Substring(0, text.LastIndexOf(' ') + 1); suffix = ""; toComplete = text.Substring(prefix.Length); } else { prefix = ""; suffix = ": "; toComplete = text; } candidates = Names.Where(x => x.StartsWith(toComplete, StringComparison.InvariantCultureIgnoreCase)).ToList(); } else return text; currentCandidateIndex = 0; if (candidates.Count == 0) return text; lastCompleted = prefix + candidates[currentCandidateIndex] + suffix; return lastCompleted; } } }