Set() 공개 메소드

public Set ( string value ) : void
value string
리턴 void
예제 #1
0
        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());
                }
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
                }
            }
        }
예제 #4
0
        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);
                }
            }
        }
예제 #5
0
		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;
		}
예제 #6
0
		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;
		}