private void UpdateVariables(bool read, bool force) { if ((force == true) || (_liveUpdate == true)) { if ((_cvar != null) && (_cvarStr.NeedsUpdate == true)) { if (read == true) { _cvarStr.Set(_cvarStr.ToString()); } else { _cvar.Set(_cvarStr.ToString()); } } if ((read == false) && (_guiStr.NeedsUpdate == true)) { _guiStr.Set(_currentChoice.ToString()); } } }
public bool Parse(idScriptParser parser) { // first token should be function call // then a potentially variable set of parms // ended with a ; idToken token; GuiCommand cmd = new GuiCommand(); if ((token = parser.ReadToken()) == null) { parser.Error("Unexpected end of file"); return(false); } _handler = null; string tokenLower = token.ToString().ToLower(); foreach (GuiCommand tmp in CommandList) { if (tmp.Name.ToLower() == tokenLower) { _handler = tmp.Handler; cmd = tmp; break; } } if (_handler == null) { parser.Error("Unknown script call {0}", token.ToString()); } // now read parms til ; // all parms are read as idWinStr's but will be fixed up later // to be proper types while (true) { if ((token = parser.ReadToken()) == null) { parser.Error("Unexpected end of file"); return(false); } tokenLower = token.ToString().ToLower(); if (tokenLower == ";") { break; } else if (tokenLower == "}") { parser.UnreadToken(token); break; } idWinString str = new idWinString(string.Empty); str.Set(token.ToString()); _parameters.Add(new idWinGuiScript(true, str)); } // // verify min/max params if ((_handler != null) && ((_parameters.Count < cmd.MinParameterCount) || (_parameters.Count > cmd.MaxParameterCount))) { parser.Error("incorrect number of parameters for script {0}", cmd.Name); } // return(true); }
public void FixupParameters(idWindow window) { if (_handler == Script_Set) { bool precacheBackground = false; bool precacheSounds = false; idWinString str = (idWinString)_parameters[0].Variable; idWindowVariable dest = window.GetVariableByName(str.ToString(), true); if (dest != null) { _parameters[0].Variable = dest; _parameters[0].Owner = false; if (dest is idWinBackground) { precacheBackground = true; } } else if (str.ToString().ToLower() == "cmd") { precacheSounds = true; } int parameterCount = _parameters.Count; for (int i = 1; i < parameterCount; i++) { str = (idWinString)_parameters[i].Variable; string strValue = str.ToString(); if (strValue.StartsWith("gui::", StringComparison.InvariantCultureIgnoreCase) == true) { // always use a string here, no point using a float if it is one // FIXME: This creates duplicate variables, while not technically a problem since they // are all bound to the same guiDict, it does consume extra memory and is generally a bad thing idWinString defVar = new idWinString(null); defVar.Init(strValue, window); window.AddDefinedVariable(defVar); _parameters[i].Variable = defVar; _parameters[i].Owner = false; //dest = win->GetWinVarByName(*str, true); //if (dest) { // delete parms[i].var; // parms[i].var = dest; // parms[i].own = false; //} // } else if (strValue.StartsWith("$") == true) { // // dont include the $ when asking for variable dest = window.UserInterface.Desktop.GetVariableByName(strValue.Substring(1), true); // if (dest != null) { _parameters[i].Variable = dest; _parameters[i].Owner = false; } } else if (strValue.StartsWith("#str_") == true) { str.Set(idE.Language.Get(strValue)); } else if (precacheBackground == true) { idE.DeclManager.FindMaterial(strValue).Sort = (float)MaterialSort.Gui; } else if (precacheSounds == true) { idConsole.Warning("TODO: PrecacheSounds"); // Search for "play <...>" /*idToken token; * idParser parser( LEXFL_NOSTRINGCONCAT | LEXFL_ALLOWMULTICHARLITERALS | LEXFL_ALLOWBACKSLASHSTRINGCONCAT ); * parser.LoadMemory(str->c_str(), str->Length(), "command"); * * while ( parser.ReadToken(&token) ) { * if ( token.Icmp("play") == 0 ) { * if ( parser.ReadToken(&token) && ( token != "" ) ) { * declManager->FindSound( token.c_str() ); * } * } * }*/ } } } else if (_handler == Script_Transition) { if (_parameters.Count < 4) { idConsole.Warning("Window {0} in gui {1} has a bad transition definition", window.Name, window.UserInterface.SourceFile); } idWinString str = (idWinString)_parameters[0].Variable; // DrawWindow destOwner = null; idWindowVariable dest = window.GetVariableByName(str.ToString(), true, ref destOwner); // if (dest != null) { _parameters[0].Variable = dest; _parameters[0].Owner = false; } else { idConsole.Warning("Window {0} in gui {1}: a transition does not have a valid destination var {2}", window.Name, window.UserInterface.SourceFile, str); } // // support variables as parameters for (int c = 1; c < 3; c++) { str = (idWinString)_parameters[c].Variable; idWinVector4 v4 = new idWinVector4(null); _parameters[c].Variable = v4; _parameters[c].Owner = true; DrawWindow owner = null; if (str.ToString().StartsWith("$") == true) { dest = window.GetVariableByName(str.ToString().Substring(1), true, ref owner); } else { dest = null; } if (dest != null) { idWindow ownerParent; idWindow destParent; if (owner != null) { ownerParent = (owner.Simple != null) ? owner.Simple.Parent : owner.Window.Parent; destParent = (destOwner.Simple != null) ? destOwner.Simple.Parent : destOwner.Window.Parent; // if its the rectangle they are referencing then adjust it if ((ownerParent != null) && (destParent != null) && (dest == ((owner.Simple != null) ? owner.Simple.GetVariableByName("rect") : owner.Window.GetVariableByName("rect")))) { idRectangle rect = ((idWinRectangle)dest).Data; ownerParent.ClientToScreen(ref rect); destParent.ScreenToClient(ref rect); v4.Set(dest.ToString()); } else { v4.Set(dest.ToString()); } } else { v4.Set(dest.ToString()); } } else { v4.Set(str.ToString()); } } } else { int c = _parameters.Count; for (int i = 0; i < c; i++) { _parameters[i].Variable.Init(_parameters[i].Variable.ToString(), window); } } }
public idSimpleWindow(idWindow win) { _gui = win.UserInterface; _context = win.DeviceContext; _drawRect = win.DrawRectangle; _clientRect = win.ClientRectangle; _textRect = win.TextRectangle; _origin = win.Origin; _fontFamily = win.FontFamily; _name = win.Name; _materialScaleX = win.MaterialScaleX; _materialScaleY = win.MaterialScaleY; _borderSize = win.BorderSize; _textAlign = win.TextAlign; _textAlignX = win.TextAlignX; _textAlignY = win.TextAlignY; _background = win.Background; _flags = win.Flags; _textShadow = win.TextShadow; _visible.Set(win.IsVisible); _text.Set(win.Text); _rect.Set(win.Rectangle); _backColor.Set(win.BackColor); _materialColor.Set(win.MaterialColor); _foreColor.Set(win.ForeColor); _borderColor.Set(win.BorderColor); _textScale.Set(win.TextScale); _rotate.Set(win.Rotate); _shear.Set(win.Shear); _backgroundName.Set(win.BackgroundName); if (_backgroundName != string.Empty) { _background = idE.DeclManager.FindMaterial(_backgroundName); _background.Sort = (float)MaterialSort.Gui;; _background.ImageClassification = 1; // just for resource tracking } _backgroundName.Material = _background; _parent = win.Parent; _hideCursor.Set(win.HideCursor); if (_parent != null) { if (_text.NeedsUpdate == true) { _parent.AddUpdateVariable(_text); } if (_visible.NeedsUpdate == true) { _parent.AddUpdateVariable(_visible); } if (_rect.NeedsUpdate == true) { _parent.AddUpdateVariable(_rect); } if (_backColor.NeedsUpdate == true) { _parent.AddUpdateVariable(_backColor); } if (_materialColor.NeedsUpdate == true) { _parent.AddUpdateVariable(_materialColor); } if (_foreColor.NeedsUpdate == true) { _parent.AddUpdateVariable(_foreColor); } if (_borderColor.NeedsUpdate == true) { _parent.AddUpdateVariable(_borderColor); } if (_textScale.NeedsUpdate == true) { _parent.AddUpdateVariable(_textScale); } if (_rotate.NeedsUpdate == true) { _parent.AddUpdateVariable(_rotate); } if (_shear.NeedsUpdate == true) { _parent.AddUpdateVariable(_shear); } if (_backgroundName.NeedsUpdate == true) { _parent.AddUpdateVariable(_backgroundName); } } }
public bool Parse(idScriptParser parser) { // first token should be function call // then a potentially variable set of parms // ended with a ; idToken token; GuiCommand cmd = new GuiCommand(); if((token = parser.ReadToken()) == null) { parser.Error("Unexpected end of file"); return false; } _handler = null; string tokenLower = token.ToString().ToLower(); foreach(GuiCommand tmp in CommandList) { if(tmp.Name.ToLower() == tokenLower) { _handler = tmp.Handler; cmd = tmp; break; } } if(_handler == null) { parser.Error("Unknown script call {0}", token.ToString()); } // now read parms til ; // all parms are read as idWinStr's but will be fixed up later // to be proper types while(true) { if((token = parser.ReadToken()) == null) { parser.Error("Unexpected end of file"); return false; } tokenLower = token.ToString().ToLower(); if(tokenLower == ";") { break; } else if(tokenLower == "}") { parser.UnreadToken(token); break; } idWinString str = new idWinString(string.Empty); str.Set(token.ToString()); _parameters.Add(new idWinGuiScript(true, str)); } // // verify min/max params if((_handler != null) && ((_parameters.Count < cmd.MinParameterCount) || (_parameters.Count > cmd.MaxParameterCount))) { parser.Error("incorrect number of parameters for script {0}", cmd.Name); } // return true; }
private bool ParseRegisterEntry(string name, idScriptParser parser) { string work = name.ToLower(); idWindowVariable var = GetVariableByName(work, false); if(var != null) { RegisterType regType; // check builtins first if(_builtInVariables.TryGetValue(work, out regType) == true) { _regList.AddRegister(work, regType, parser, this, var); return true; } } // not predefined so just read the next token and add it to the state idToken token; if((token = parser.ReadToken()) != null) { if(var != null) { var.Set(token.ToString()); return true; } switch(token.Type) { case TokenType.Number: if((token.SubType & TokenSubType.Integer) == TokenSubType.Integer) { var = new idWinInteger(work); var.Set(token.ToString()); } else if((token.SubType & TokenSubType.Float) == TokenSubType.Float) { var = new idWinFloat(work); var.Set(token.ToString()); } else { var = new idWinString(work); var.Set(token.ToString()); } _definedVariables.Add(var); break; default: var = new idWinString(work); var.Set(token.ToString()); _definedVariables.Add(var); break; } } return true; }