/// <summary> /// Switches the group of a specified index /// </summary> /// <param name="key">The Input-Key to the key you want moved</param> /// <param name="targetGroup">The Index of the Group you want the key moved to</param> public void SwitchGroup(Key key, int targetGroup) { lock (ThreadLock) { if (key.Group >= Groups.Count || key.Member >= Groups[key.Group].Members.Count || targetGroup >= Groups.Count) { return; } //Grab the Input we want moved OpenTextInput input = Groups[key.Group].Members[key.Member]; //Update the Index of the Input input.Index = Groups[targetGroup].Members.Count; //Add it to the desired group Groups[targetGroup].Members.Add(input); { //Check if this is in favorites string str = $"{key.Group}-{key.Member}"; if (FavoriteMembers.Contains(str)) { FavoriteMembers.Remove(str); str = $"{targetGroup}-{input.Index}"; FavoriteMembers.Add(str); } } //Remove it from its old location Groups[key.Group].Members.RemoveAt(key.Member); //Remove the Group if it is empty if (key.Group != 0 && Groups[key.Group].Members.Count < 1) { { //Check if this is in favorites if (FavoriteGroups.Contains(key.Group)) { FavoriteGroups.Remove(key.Group); } } Groups.RemoveAt(key.Group); UpdateGroupIndexes(); } else //Otherwise update the Member Indexes { UpdateMemberIndexes(key.Group); } } EventStream(); }
public void ArchiveGroup(int group) { lock (ThreadLock) { if (group >= Groups.Count) { return; } for (int i = Groups[group].Members.Count - 1; i >= 0; i--) { Key key = new Key { Group = group, Member = i }; ArchiveInput(key); } int prev = Groups[group].Column; { //Check if this is in favorites if (FavoriteGroups.Contains(group)) { FavoriteGroups.Remove(group); } } Groups.RemoveAt(group); if (Groups.All(check => check.Column != prev)) { RemoveColumn(group); } UpdateGroupIndexes(); } EventStream(); }
public void SwitchGroup(IEnumerable <Key> keys, int target) { if (target >= Groups.Count) { return; } foreach (Key key in keys) { if (key.Group == target || key.Group >= Groups.Count || key.Member >= Groups[key.Group].Members.Count) { continue; } //Grab the Input we want moved OpenTextInput input = Groups[key.Group].Members[key.Member]; //Update the Index of the Input input.Index = Groups[target].Members.Count; lock (ThreadLock) { { //Check if this is in favorites string str = $"{key.Group}-{key.Member}"; if (FavoriteMembers.Contains(str)) { FavoriteMembers.Remove(str); str = $"{target}-{input.Index}"; FavoriteMembers.Add(str); } } //Remove it from its old location Groups[key.Group].Members.RemoveAt(key.Member); //Add it to the desired group Groups[target].Members.Add(input); } } for (int i = 1; i < Groups.Count; i++) { if (Groups[i].Members.Count < 1) //TODO: Keep Previously Empty Groups? { int prev = Groups[i].Column; { //Check if this is in favorites if (FavoriteGroups.Contains(i)) { FavoriteGroups.Remove(i); } } Groups.RemoveAt(i); if (Groups.All(check => check.Column != prev)) { RemoveColumn(prev); } i--; } } UpdateGroupIndexes(); foreach (OpenTextGroup group in Groups) { lock (ThreadLock) { UpdateMemberIndexes(group.Index); } } EventStream(); }