Esempio n. 1
0
		public void AddRegister(string name, RegisterType type, idScriptParser parser, idWindow window, idWindowVariable var)
		{
			idRegister register = FindRegister(name);

			if(register == null)
			{
				int regCount = idRegister.RegisterTypeCount[(int) type];
				register = new idRegister(name, type, var);
				
				if(type == RegisterType.String)
				{
					idToken token;
					
					if((token = parser.ReadToken()) != null)
					{
						var.Init(idE.Language.Get(token.ToString()), window);
					}
				}
				else
				{
					for(int i = 0; i < regCount; i++)
					{
						register.Indexes[i] = window.ParseExpression(parser, null);

						if(i < (regCount - 1))
						{
							parser.ExpectTokenString(",");
						}
					}
				}

				_registers.Add(register);
				_registerDict.Add(name, register);
			}
			else
			{
				int regCount = idRegister.RegisterTypeCount[(int) type];

				register.Variable = var;

				if(type == RegisterType.String)
				{
					idToken token = parser.ReadToken();

					if(token != null)
					{
						var.Init(token.ToString(), window);
					}
				}
				else
				{
					for(int i = 0; i < regCount; i++)
					{
						register.Indexes[i] = window.ParseExpression(parser, null);

						if(i < (regCount - 1))
						{
							parser.ExpectTokenString(",");
						}
					}
				}
			}
		}
Esempio n. 2
0
		public bool InitFromFile(string path, bool rebuild = true, bool cache = true)
		{
			if(this.Disposed == true)
			{
				throw new ObjectDisposedException(this.GetType().Name);
			}

			if(path == string.Empty)
			{
				return false;
			}

			_loading = true;
			
			if((rebuild == true) || (_desktop == null))
			{
				_desktop = new idWindow(this, idE.UIManager.Context);
			}

			_sourceFile = path;
			_state.Set("text", "Test Text!");

			// load the timestamp so reload guis will work correctly
			byte[] data = idE.FileSystem.ReadFile(path, out _timeStamp);
			string content = UTF8Encoding.UTF8.GetString(data);
			idScriptParser parser = null;

			if(content != null)
			{
				parser = new idScriptParser(LexerOptions.NoFatalErrors | LexerOptions.NoStringConcatination | LexerOptions.AllowMultiCharacterLiterals | LexerOptions.AllowBackslashStringConcatination);
				parser.LoadMemory(content, path);
			}

			if((parser != null) && (parser.IsLoaded == true))
			{
				idToken token;

				while((token = parser.ReadToken()) != null)
				{
					if(token.ToString().Equals("windowDef", StringComparison.OrdinalIgnoreCase) == true)
					{
						if(_desktop.Parse(parser, rebuild) == true)
						{
							_desktop.Flags = WindowFlags.Desktop;
							_desktop.FixupParameters();
						}
					}
				}

				_state.Set("name", path);
			}
			else
			{
				_desktop.Name = "Desktop";
				_desktop.Flags = WindowFlags.Desktop;
				_desktop.Text = string.Format("Invalid GUI: {0}", path);
				_desktop.Rectangle = new idRectangle(0, 0, 640, 480);
				_desktop.DrawRectangle = _desktop.Rectangle;
				_desktop.ForeColor = new Vector4(1.0f, 1.0f, 1.0f, 1.0f);
				_desktop.BackColor = new Vector4(0.0f, 0.0f, 0.0f, 1.0f);
				_desktop.SetupFromState();

				idConsole.Warning("Couldn't load gui: '{0}'", path);
			}

			_interactive = _desktop.IsInteractive;

			if(idE.UIManager.FindInternalInterface(this) == null)
			{
				idE.UIManager.AddInternalInterface(this);
			}

			_loading = false;

			return true;
		}
Esempio n. 3
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="parser"></param>
		/// <param name="var"></param>
		/// <param name="component"></param>
		/// <returns>Returns a register index.</returns>
		private int ParseTerm(idScriptParser parser, idWindowVariable var, int component)
		{
			int a, b;
			object tmp;

			idToken token = parser.ReadToken();
			string tokenValue = token.ToString().ToLower();

			if(tokenValue == "(")
			{
				a = ParseExpression(parser);
				parser.ExpectTokenString(")");

				return a;
			}
			else if(tokenValue == "time")
			{
				return (int) WindowExpressionRegister.Time;
			}
			// parse negative numbers
			else if(tokenValue == "-")
			{
				token = parser.ReadToken();

				if((token.Type == TokenType.Number) || (token.ToString() == "."))
				{
					return ExpressionConstant(-token.ToFloat());
				}

				parser.Warning("Bad negative number '{0}'", token.ToString());

				return 0;
			}

			if((token.Type == TokenType.Number) || (token.ToString() == ".") || (token.ToString() == "-"))
			{
				return ExpressionConstant(token.ToFloat());
			}

			// see if it is a table name
			idDeclTable table = idE.DeclManager.FindType<idDeclTable>(DeclType.Table, token.ToString(), false);

			if(table != null)
			{
				a = table.Index;

				// parse a table expression
				parser.ExpectTokenString("[");
				b = ParseExpression(parser);
				parser.ExpectTokenString("]");

				return EmitOperation(a, b, WindowExpressionOperationType.Table);
			}

			if(var == null)
			{
				var = GetVariableByName(token.ToString(), true);
			}

			if(var != null)
			{
				var.Init(tokenValue, this);

				tmp = var;
				b = component;

				if(var is idWinVector4)
				{
					if((token = parser.ReadToken()) != null)
					{
						if(token.ToString() == "[")
						{
							b = ParseExpression(parser);
							parser.ExpectTokenString("]");
						}
						else
						{
							parser.UnreadToken(token);
						}
					}

					return EmitOperation(tmp, b, WindowExpressionOperationType.Var);
				}
				else if(var is idWinFloat)
				{
					return EmitOperation(tmp, b, WindowExpressionOperationType.VarF);
				}
				else if(var is idWinInteger)
				{
					return EmitOperation(tmp, b, WindowExpressionOperationType.VarI);
				}
				else if(var is idWinBool)
				{
					return EmitOperation(tmp, b, WindowExpressionOperationType.VarB);
				}
				else if(var is idWinString)
				{
					return EmitOperation(tmp, b, WindowExpressionOperationType.VarS);
				}
				else
				{
					parser.Warning("Variable expression not vec4, float or int '{0}'", token.ToString());
				}

				return 0;
			}
			else
			{
				// ugly but used for post parsing to fixup named vars
				EmitOperation(token.ToString(), -2, WindowExpressionOperationType.Var);
			}

			return 0;
		}
Esempio n. 4
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;
		}
Esempio n. 5
0
		private bool ParseScript(idScriptParser parser, idGuiScriptList list, bool elseBlock = false)
		{
			bool ifElseBlock = false;

			idToken token;

			// scripts start with { ( unless parm is true ) and have ; separated command lists.. commands are command,
			// arg.. basically we want everything between the { } as it will be interpreted at
			// run time
			if(elseBlock == true)
			{
				token = parser.ReadToken();

				if(token.ToString().ToLower() == "if")
				{
					ifElseBlock = true;
				}

				parser.UnreadToken(token);

				if((ifElseBlock == false) && (parser.ExpectTokenString("{") == false))
				{
					return false;
				}
			}
			else if(parser.ExpectTokenString("{") == false)
			{
				return false;
			}

			int nest = 0;
			string tokenLower;

			while(true)
			{
				if((token = parser.ReadToken()) == null)
				{
					parser.Error("Unexpected end of file");
					return false;
				}

				tokenLower = token.ToString().ToLower();

				if(tokenLower == "{")
				{
					nest++;
				}
				else if(tokenLower == "}")
				{
					if(nest-- <= 0)
					{
						return true;
					}
				}

				idGuiScript script = new idGuiScript();

				if(tokenLower == "if")
				{
					script.ConditionRegister = ParseExpression(parser);

					ParseScript(parser, script.IfList);

					if((token = parser.ReadToken()) != null)
					{
						if(token.ToString() == "else")
						{
							// pass true to indicate we are parsing an else condition
							ParseScript(parser, script.ElseList, true);
						}
						else
						{
							parser.UnreadToken(token);
						}
					}

					list.Append(script);

					// if we are parsing an else if then return out so 
					// the initial "if" parser can handle the rest of the tokens
					if(ifElseBlock == true)
					{
						return true;
					}

					continue;
				}
				else
				{
					parser.UnreadToken(token);
				}

				// empty { } is not allowed
				if(token.ToString() == "{")
				{
					parser.Error("Unexpected {");
					return false;
				}

				script.Parse(parser);
				list.Append(script);
			}
		}
Esempio n. 6
0
		private bool ParseScriptEntry(idToken token, idScriptParser parser)
		{
			int count = (int) ScriptName.Count;
			string tokenLower = token.ToString().ToLower();

			for(int i = 0; i < count; i++)
			{
				if(tokenLower == ScriptNames[i].ToLower())
				{
					_scripts[i] = new idGuiScriptList();

					return ParseScript(parser, _scripts[i]);
				}
			}

			return false;
		}
Esempio n. 7
0
		private int ParseExpressionPriority(idScriptParser parser, int priority, idWindowVariable var = null, int component = 0)
		{
			if(priority == 0)
			{
				return ParseTerm(parser, var, component);
			}

			idToken token;
			string tokenValue;
			int a = ParseExpressionPriority(parser, priority - 1, var, component);

			if((token = parser.ReadToken()) == null)
			{
				// we won't get EOF in a real file, but we can when parsing from generated strings
				return a;
			}

			tokenValue = token.ToString();

			if(priority == 1)
			{
				if(tokenValue == "*")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.Multiply, priority);
				}
				else if(tokenValue == "/")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.Divide, priority);
				}
				else if(tokenValue == "%")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.Modulo, priority);
				}
			}
			else if(priority == 2)
			{
				if(tokenValue == "+")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.Add, priority);
				}
				else if(tokenValue == "-")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.Subtract, priority);
				}
			}
			else if(priority == 3)
			{
				if(tokenValue == ">")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.GreaterThan, priority);
				}
				else if(tokenValue == ">=")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.GreaterThanOrEqual, priority);
				}
				else if(tokenValue == "<")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.LessThan, priority);
				}
				else if(tokenValue == "<=")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.LessThanOrEqual, priority);
				}
				else if(tokenValue == "==")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.Equal, priority);
				}
				else if(tokenValue == "!=")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.NotEqual, priority);
				}
			}
			else if(priority == 4)
			{
				if(tokenValue == "&&")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.And, priority);
				}
				else if(tokenValue == "||")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.Or, priority);
				}
				else if(tokenValue == "?")
				{
					WindowExpressionOperation op;
					int o = ParseEmitOperation(parser, a, WindowExpressionOperationType.Conditional, priority, out op);

					if((token = parser.ReadToken()) == null)
					{
						return o;
					}
					else if(token.ToString() == ":")
					{
						a = ParseExpressionPriority(parser, priority - 1, var);
						op.D = a;
					}

					return priority;
				}
			}

			// assume that anything else terminates the expression
			// not too robust error checking...
			parser.UnreadToken(token);

			return a;
		}
Esempio n. 8
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;
		}
Esempio n. 9
0
		private int ParseEmitOperation(idScriptParser parser, int a, WindowExpressionOperationType opType, int priority)
		{
			WindowExpressionOperation op;
			return ParseEmitOperation(parser, a, opType, priority, out op);
		}
Esempio n. 10
0
		private int ParseEmitOperation(idScriptParser parser, int a, WindowExpressionOperationType opType, int priority, out WindowExpressionOperation op)
		{
			int b = ParseExpressionPriority(parser, priority);
			return EmitOperation(a, b, opType, out op);
		}
Esempio n. 11
0
		protected string ParseString(idScriptParser parser)
		{
			if(this.Disposed == true)
			{
				throw new ObjectDisposedException(this.GetType().Name);
			}

			idToken token = parser.ReadToken();

			if(token != null)
			{
				return token.ToString();
			}

			return string.Empty;
		}
Esempio n. 12
0
		protected virtual bool ParseInternalVariable(string name, idScriptParser parser)
		{
			if(this.Disposed == true)
			{
				throw new ObjectDisposedException(this.GetType().Name);
			}

			name = name.ToLower();

			if(name == "bordersize")
			{
				_borderSize = parser.ParseFloat();
			}
			else if(name == "comment")
			{
				_comment = ParseString(parser);
			}
			else if(name == "font")
			{
				string font = ParseString(parser);
				_fontFamily = _context.FindFont(font);
			}
			else if(name == "forceaspectwidth")
			{
				_forceAspectWidth = parser.ParseFloat();
			}
			else if(name == "forceaspectheight")
			{
				_forceAspectHeight = parser.ParseFloat();
			}
			else if(name == "invertrect")
			{
				if(parser.ParseBool() == true)
				{
					_flags |= WindowFlags.InvertRectangle;
				}
			}
			else if(name == "naturalmatscale")
			{
				if(parser.ParseBool() == true)
				{
					_flags |= WindowFlags.NaturalMaterial;
				}
			}
			else if(name == "noclip")
			{
				if(parser.ParseBool() == true)
				{
					_flags |= WindowFlags.NoClip;
				}
			}
			else if(name == "nocursor")
			{
				if(parser.ParseBool() == true)
				{
					_flags |= WindowFlags.NoCursor;
				}
			}
			else if(name == "nowrap")
			{
				if(parser.ParseBool() == true)
				{
					_flags |= WindowFlags.NoWrap;
				}
			}
			else if(name == "matscalex")
			{
				_materialScaleX = parser.ParseFloat();
			}
			else if(name == "matscaley")
			{
				_materialScaleY = parser.ParseFloat();
			}
			else if(name == "menugui")
			{
				if(parser.ParseBool() == true)
				{
					_flags |= WindowFlags.MenuInterface;
				}
			}
			else if(name == "modal")
			{
				if(parser.ParseBool() == true)
				{
					_flags |= WindowFlags.Modal;
				}
			}
			else if(name == "name")
			{
				_name = ParseString(parser);
			}
			else if(name == "play")
			{
				idConsole.Warning("play encountered during gui parse.. see robert");
				string tmp = ParseString(parser);
			}
			else if(name == "shadow")
			{
				_textShadow = parser.ParseInteger();
			}
			else if(name == "shear")
			{
				_shear.X = parser.ParseFloat();

				idToken token = parser.ReadToken();

				if(token.ToString() != ",")
				{
					parser.Error("Expected comma in shear definition");

					return false;
				}

				_shear.Y = parser.ParseFloat();
			}
			else if(name == "showcoords")
			{
				if(parser.ParseBool() == true)
				{
					_flags |= WindowFlags.ShowCoordinates;
				}
			}
			else if(name == "showtime")
			{
				if(parser.ParseBool() == true)
				{
					_flags |= WindowFlags.ShowTime;
				}
			}
			else if(name == "textalign")
			{
				_textAlign = (TextAlign) parser.ParseInteger();
			}
			else if(name == "textalignx")
			{
				_textAlignX = parser.ParseFloat();
			}
			else if(name == "textaligny")
			{
				_textAlignY = parser.ParseFloat();
			}
			else if(name == "wantenter")
			{
				if(parser.ParseBool() == true)
				{
					_flags |= WindowFlags.WantEnter;
				}
			}
			else
			{
				return false;
			}

			return true;
		}
Esempio n. 13
0
		/// <summary>
		/// Returns a register index.
		/// </summary>
		/// <param name="parser"></param>
		/// <param name="var"></param>
		/// <param name="component"></param>
		/// <returns></returns>
		public int ParseExpression(idScriptParser parser, idWindowVariable var, int component)
		{
			if(this.Disposed == true)
			{
				throw new ObjectDisposedException(this.GetType().Name);
			}

			return ParseExpressionPriority(parser, 4 /* TOP_PRIORITY */, var);
		}
Esempio n. 14
0
		/// <summary>
		/// Returns a register index.
		/// </summary>
		/// <param name="parser"></param>
		/// <returns></returns>
		public int ParseExpression(idScriptParser parser)
		{
			if(this.Disposed == true)
			{
				throw new ObjectDisposedException(this.GetType().Name);
			}

			return ParseExpressionPriority(parser, 4 /* TOP_PRIORITY */, null);
		}
Esempio n. 15
0
		public bool Parse(idScriptParser parser, bool rebuild)
		{
			if(this.Disposed == true)
			{
				throw new ObjectDisposedException(this.GetType().Name);
			}

			if(rebuild == true)
			{
				CleanUp();
			}

			_timeLineEvents.Clear();
			_namedEvents.Clear();
			_transitions.Clear();

			idToken token2;
			idToken token = parser.ExpectTokenType(TokenType.Name, 0);
			DrawWindow drawWindow;

			SetInitialState(token.ToString());

			parser.ExpectTokenString("{");
			token = parser.ExpectAnyToken();

			bool ret = true;

			while(token.ToString() != "}")
			{
				string tokenLower = token.ToString().ToLower();

				// track what was parsed so we can maintain it for the guieditor
				parser.SetMarker();

				if((tokenLower == "windowdef") || (tokenLower == "animationdef"))
				{
					if(tokenLower == "animationdef")
					{
						_visible.Set(false);
						_rect.Set(new idRectangle(0, 0, 0, 0));
					}

					token = parser.ExpectTokenType(TokenType.Name, 0);
					token2 = token;

					parser.UnreadToken(token);

					drawWindow = FindChildByName(token2.ToString());

					if((drawWindow != null) && (drawWindow.Window != null))
					{
						SaveExpressionParseState();
						drawWindow.Window.Parse(parser, rebuild);
						RestoreExpressionParseState();
					}
					else
					{
						idWindow window = new idWindow(_gui, _context);

						SaveExpressionParseState();
						window.Parse(parser, rebuild);
						RestoreExpressionParseState();

						window.Parent = this;

						drawWindow = new DrawWindow();

						if(window.IsSimple == true)
						{
							drawWindow.Simple = new idSimpleWindow(window);
							_drawWindows.Add(drawWindow);
						}
						else
						{
							AddChild(window);
							SetFocus(window, false);

							drawWindow.Window = window;
							_drawWindows.Add(drawWindow);
						}
					}
				}
				else if(tokenLower == "editdef")
				{
					SaveExpressionParseState();

					idEditWindow window = new idEditWindow(_context, _gui);
					window.Parse(parser, rebuild);

					RestoreExpressionParseState();

					AddChild(window);

					window.Parent = this;

					drawWindow = new DrawWindow();
					drawWindow.Simple = null;
					drawWindow.Window = window;

					_drawWindows.Add(drawWindow);
				}
				else if(tokenLower == "choicedef")
				{
					SaveExpressionParseState();

					idChoiceWindow window = new idChoiceWindow(_context, _gui);
					window.Parse(parser, rebuild);

					RestoreExpressionParseState();

					AddChild(window);

					window.Parent = this;

					drawWindow = new DrawWindow();
					drawWindow.Simple = null;
					drawWindow.Window = window;

					_drawWindows.Add(drawWindow);
				}
				else if(tokenLower == "sliderdef")
				{
					SaveExpressionParseState();

					idSliderWindow window = new idSliderWindow(_context, _gui);
					window.Parse(parser, rebuild);

					RestoreExpressionParseState();

					AddChild(window);

					window.Parent = this;

					drawWindow = new DrawWindow();
					drawWindow.Simple = null;
					drawWindow.Window = window;

					_drawWindows.Add(drawWindow);
				}
				else if(tokenLower == "markerdef")
				{
					idConsole.Warning("TODO: markerDef");
					/*idMarkerWindow *win = new idMarkerWindow(dc, gui);
					SaveExpressionParseState();
					win->Parse(src, rebuild);	
					RestoreExpressionParseState();
					AddChild(win);
					win->SetParent(this);
					dwt.simp = NULL;
					dwt.win = win;
					drawWindows.Append(dwt);*/
				}
				else if(tokenLower == "binddef")
				{
					SaveExpressionParseState();

					idBindWindow window = new idBindWindow(_context, _gui);
					window.Parse(parser, rebuild);

					RestoreExpressionParseState();

					AddChild(window);

					window.Parent = this;

					drawWindow = new DrawWindow();
					drawWindow.Simple = null;
					drawWindow.Window = window;

					_drawWindows.Add(drawWindow);
				}
				else if(tokenLower == "listdef")
				{
					SaveExpressionParseState();

					idListWindow window = new idListWindow(_context, _gui);
					window.Parse(parser, rebuild);

					RestoreExpressionParseState();

					AddChild(window);

					window.Parent = this;

					drawWindow = new DrawWindow();
					drawWindow.Simple = null;
					drawWindow.Window = window;

					_drawWindows.Add(drawWindow);
				}
				else if(tokenLower == "fielddef")
				{
					idConsole.Warning("TODO: fieldDef");
					/*idFieldWindow *win = new idFieldWindow(dc, gui);
					SaveExpressionParseState();
					win->Parse(src, rebuild);	
					RestoreExpressionParseState();
					AddChild(win);
					win->SetParent(this);
					dwt.simp = NULL;
					dwt.win = win;
					drawWindows.Append(dwt);*/
				}
				else if(tokenLower == "renderdef")
				{					
					SaveExpressionParseState();

					idRenderWindow window = new idRenderWindow(_context, _gui);
					window.Parse(parser, rebuild);

					RestoreExpressionParseState();

					AddChild(window);

					window.Parent = this;

					drawWindow = new DrawWindow();
					drawWindow.Simple = null;
					drawWindow.Window = window;

					_drawWindows.Add(drawWindow);
				}
				else if(tokenLower == "gamessddef")
				{
					idConsole.Warning("TODO: gameSSDDef");
					/*idGameSSDWindow *win = new idGameSSDWindow(dc, gui);
					SaveExpressionParseState();
					win->Parse(src, rebuild);	
					RestoreExpressionParseState();
					AddChild(win);
					win->SetParent(this);
					dwt.simp = NULL;
					dwt.win = win;
					drawWindows.Append(dwt);*/
				}
				else if(tokenLower == "gamebearshootdef")
				{
					idConsole.Warning("TODO: gameBearShootDef");
					/*idGameBearShootWindow *win = new idGameBearShootWindow(dc, gui);
					SaveExpressionParseState();
					win->Parse(src, rebuild);	
					RestoreExpressionParseState();
					AddChild(win);
					win->SetParent(this);
					dwt.simp = NULL;
					dwt.win = win;
					drawWindows.Append(dwt);*/
				}
				else if(tokenLower == "gamebustoutdef")
				{
					idConsole.Warning("TODO: gameBustOutDef");
					/*idGameBustOutWindow *win = new idGameBustOutWindow(dc, gui);
					SaveExpressionParseState();
					win->Parse(src, rebuild);	
					RestoreExpressionParseState();
					AddChild(win);
					win->SetParent(this);
					dwt.simp = NULL;
					dwt.win = win;
					drawWindows.Append(dwt);*/
				}
				// 
				//  added new onEvent
				else if(tokenLower == "onnamedevent")
				{
					// read the event name
					if((token = parser.ReadToken()) == null)
					{
						parser.Error("Expected event name");
						return false;
					}

					idNamedEvent ev = new idNamedEvent(token.ToString());
					parser.SetMarker();

					if(ParseScript(parser, ev.Event) == false)
					{
						ret = false;
						break;
					}

					_namedEvents.Add(ev);
				}
				else if(tokenLower == "ontime")
				{
					idTimeLineEvent ev = new idTimeLineEvent();

					if((token = parser.ReadToken()) == null)
					{
						parser.Error("Unexpected end of file");
						return false;
					}

					int tmp;
					int.TryParse(token.ToString(), out tmp);

					ev.Time = tmp;

					// reset the mark since we dont want it to include the time
					parser.SetMarker();

					if(ParseScript(parser, ev.Event) == false)
					{
						ret = false;
						break;
					}

					// this is a timeline event
					ev.Pending = true;
					_timeLineEvents.Add(ev);
				}
				else if(tokenLower == "definefloat")
				{
					token = parser.ReadToken();
					tokenLower = token.ToString().ToLower();

					idWinFloat var = new idWinFloat(tokenLower);

					_definedVariables.Add(var);

					// add the float to the editors wrapper dict
					// Set the marker after the float name
					parser.SetMarker();

					// Read in the float 
					_regList.AddRegister(tokenLower, RegisterType.Float, parser, this, var);
				}
				else if(tokenLower == "definevec4")
				{
					token = parser.ReadToken();
					tokenLower = token.ToString().ToLower();

					idWinVector4 var = new idWinVector4(tokenLower);

					// set the marker so we can determine what was parsed
					// set the marker after the vec4 name
					parser.SetMarker();

					// FIXME: how about we add the var to the desktop instead of this window so it won't get deleted
					//        when this window is destoyed which even happens during parsing with simple windows ?
					//definedVars.Append(var);
					_gui.Desktop._definedVariables.Add(var);
					_gui.Desktop._regList.AddRegister(tokenLower, RegisterType.Vector4, parser, _gui.Desktop, var);
				}
				else if(tokenLower == "float")
				{
					token = parser.ReadToken();
					tokenLower = token.ToString();

					idWinFloat var = new idWinFloat(tokenLower);
					_definedVariables.Add(var);

					// add the float to the editors wrapper dict
					// set the marker to after the float name
					parser.SetMarker();

					// Parse the float
					_regList.AddRegister(tokenLower, RegisterType.Float, parser, this, var);
				}
				else if(ParseScriptEntry(token, parser) == true)
				{

				}
				else if(ParseInternalVariable(token.ToString(), parser) == true)
				{

				}
				else
				{
					ParseRegisterEntry(token.ToString(), parser);
				}

				if((token = parser.ReadToken()) == null)
				{
					parser.Error("Unexpected end of file");
					ret = false;

					break;
				}
			}

			if(ret == true)
			{
				EvaluateRegisters(-1, true);
			}

			SetupFromState();
			PostParse();

			return ret;
		}