private bool TestCondition(vMixControlButtonCommand cmd) { if (cmd.AdditionalParameters == null || cmd.AdditionalParameters.Count == 0) { return(false); } object part1 = null; object part2 = null; part1 = string.Format(cmd.AdditionalParameters[1].A, cmd.InputKey, cmd.AdditionalParameters[0].A); part2 = string.Format(cmd.AdditionalParameters[3].A, cmd.InputKey, cmd.AdditionalParameters[0].A); Thread.CurrentThread.CurrentCulture = _culture; Thread.CurrentThread.CurrentUICulture = _culture; return(Calculate(string.Format("{0}{1}{2}", part1?.ToString() ?? "", cmd.AdditionalParameters[2].A, part2?.ToString() ?? ""))); }
public static vMixControlButtonCommand FromString(string s) { var result = new vMixControlButtonCommand(); result.UseInActiveState = false; for (int i = 0; i < 10; i++) { result.AdditionalParameters.Add(new One <string>() { A = "" }); } var functions = SimpleIoc.Default.GetInstance <MainViewModel>().Functions; result.Action = functions.Where(x => x.Function == "None").FirstOrDefault(); var bracketIndex = s.IndexOf('('); if (bracketIndex <= 0) { var action = functions.Where(x => x.Function == s.Substring(0, s.Length).Trim().TrimStart('>', '*', '!')).FirstOrDefault(); if (action != null) { result.Action = action; } return(result); } var act = functions.Where(x => x.Function == s.Substring(0, bracketIndex).Trim().TrimStart('>', '*', '!')).FirstOrDefault(); if (act == null) { return(result); } else { result.Action = act; } int ident = 0; for (int i = 0; i < s.Length; i++) { bool brk = false; switch (s[i]) { case '\t': ident += 8; break; case '>': result.Collapsed = true; break; case '!': result.IsExecutable = false; break; case '*': result.UseInActiveState = true; break; default: brk = true; break; } if (brk) { break; } } result.Ident = new Thickness(ident, 0, 0, 0); if (s.Length - bracketIndex - 2 > 0) { s = s.Substring(bracketIndex + 1, s.Length - bracketIndex - 2); } else { return(result); } List <string> arguments = new List <string>(); var arg = ""; var br = 0; var bc = 0; var str = 0; for (int i = 0; i < s.Length; i++) { switch (s[i]) { case '\"': str++; break; case '(': br++; break; case ')': br--; break; case '[': bc++; break; case ']': bc--; break; case ',': if (str % 2 == 0) { arguments.Add(arg.Trim().Trim('"')); arg = ""; continue; } break; default: break; } arg += s[i]; } arguments.Add(arg.Trim().Trim('"')); if (act.HasInputProperty) { result.InputKey = arguments[0]; arguments.RemoveAt(0); } if (act.HasIntProperty) { result.Parameter = arguments[0]; arguments.RemoveAt(0); } if (act.HasStringProperty) { result.StringParameter = arguments[0]; arguments.RemoveAt(0); } var parameter = 0; while (arguments.Count > 0) { result.AdditionalParameters[parameter++].A = arguments[0]; arguments.RemoveAt(0); } return(result); }
private object CalculateObjectParameter(vMixControlButtonCommand cmd) { return(CalculateExpression(string.Format(cmd.StringParameter, cmd.InputKey)?.ToString() ?? "")); }