/// <summary> /// used to add/remove/update a specific <see cref="KBind"/> /// </summary> /// <param name="kBind"></param> /// <param name="add"></param> private bool UpdateKeyBindGroups(KBind kBind, KBindChange change) { bool changeHappened = false; kBind.Init(); //if(kBind.keyCombinations != null && kBind.keyCombinations[0].modifiers != null) // Log(kBind.keyCombinations[0].modifiers[0]); //Log(kBind); EnsureInitializedKeyBinding(); if (change == KBindChange.Update) { changeHappened |= UpdateKeyBindGroups(kBind, KBindChange.Remove); change = KBindChange.Add; } for (int k = 0; k < keyBindGroups.Length; ++k) { KBindGroup group = keyBindGroups[k]; changeHappened |= group.UpdateKeyBinding(kBind, change); } if (updateText && changeHappened) { UpdateCurrentKeyBindText(); } return(changeHappened); }
public string CalcualteCurrentKeyBindText() { EnsureInitializedKeyBinding(); StringBuilder sb = new StringBuilder(); for (int s = 0; s < keyBindGroups.Length; ++s) { KBindGroup ks = keyBindGroups[s]; if (ks.allKeyBindings.Count == 0) { continue; } sb.Append("[" + ks.name + "]\n"); for (int i = 0; i < ks.allKeyBindings.Count; ++i) { KBind kb = ks.allKeyBindings[i]; bool needsPriority = true; bool hasKeys = true; if (kb.keyCombinations.Length != 0 && (kb.keyCombinations.Length != 1 || kb.keyCombinations[0].key != KCode.None)) { KCombo theseKeys = kb.keyCombinations[0]; bool hasPrev = i > 0; bool hasNext = i < ks.allKeyBindings.Count - 1; KBind prev = (hasPrev) ? ks.allKeyBindings[i - 1] : null; KBind next = (hasNext) ? ks.allKeyBindings[i + 1] : null; KCombo prevKeys = hasPrev && prev.keyCombinations.Length > 0 ? prev.keyCombinations[0] : null; KCombo nextKeys = hasNext && next.keyCombinations.Length > 0 ? next.keyCombinations[0] : null; needsPriority = (prevKeys != null && prevKeys.CompareTo(theseKeys) == 0 || nextKeys != null && nextKeys.CompareTo(theseKeys) == 0); } else { hasKeys = false; } if (hasKeys) { sb.Append(kb.ShortDescribe(" | ")); } else { sb.Append("(no keys)"); } sb.Append(" :"); if (needsPriority) { sb.Append(kb.priority.ToString()); } sb.Append(": "); sb.Append(kb.name); sb.Append("\n"); } } if (AxisBinds.Count > 0) { sb.Append("[Axis]\n"); for (int i = 0; i < AxisBinds.Count; ++i) { AxBind ab = AxisBinds[i]; sb.Append(ab.ShortDescribe(" | ")); sb.Append(" :: "); sb.Append(ab.name); sb.Append("\n"); } } return(sb.ToString()); }