From: <at...@us...> - 2010-01-16 18:51:44
|
Revision: 483 http://babbot.svn.sourceforge.net/babbot/?rev=483&view=rev Author: attn99 Date: 2010-01-16 18:51:37 +0000 (Sat, 16 Jan 2010) Log Message: ----------- Added event on state change and display last state on main form Modified Paths: -------------- trunk/BabBot/BabBot/Forms/MainForm.Designer.cs trunk/BabBot/BabBot/Forms/MainForm.cs trunk/BabBot/BabBot/Manager/ProcessManager.cs trunk/BabBot/BabBot/States/State.cs trunk/BabBot/BabBot/States/StateMachine.cs Modified: trunk/BabBot/BabBot/Forms/MainForm.Designer.cs =================================================================== --- trunk/BabBot/BabBot/Forms/MainForm.Designer.cs 2010-01-16 01:53:47 UTC (rev 482) +++ trunk/BabBot/BabBot/Forms/MainForm.Designer.cs 2010-01-16 18:51:37 UTC (rev 483) @@ -102,17 +102,22 @@ this.tabObjectsNear = new System.Windows.Forms.TabPage(); this.tbPlayerNearObjects = new System.Windows.Forms.TextBox(); this.tabRadar = new System.Windows.Forms.TabPage(); + this.gbControls = new System.Windows.Forms.GroupBox(); + this.btnJmpTrnRight = new System.Windows.Forms.Button(); + this.btnJmpTurnLeft = new System.Windows.Forms.Button(); + this.btnUp = new System.Windows.Forms.Button(); + this.btnLeft = new System.Windows.Forms.Button(); + this.btnRight = new System.Windows.Forms.Button(); this.btnE = new System.Windows.Forms.Button(); + this.btnDown = new System.Windows.Forms.Button(); this.btnQ = new System.Windows.Forms.Button(); this.btnSpace = new System.Windows.Forms.Button(); + this.gbPathId = new System.Windows.Forms.GroupBox(); this.cblPathList = new System.Windows.Forms.CheckedListBox(); - this.label38 = new System.Windows.Forms.Label(); + this.gbZoom = new System.Windows.Forms.GroupBox(); this.tbZoom = new System.Windows.Forms.TrackBar(); this.label37 = new System.Windows.Forms.Label(); - this.btnDown = new System.Windows.Forms.Button(); - this.btnRight = new System.Windows.Forms.Button(); - this.btnLeft = new System.Windows.Forms.Button(); - this.btnUp = new System.Windows.Forms.Button(); + this.label38 = new System.Windows.Forms.Label(); this.imgRadar = new System.Windows.Forms.PictureBox(); this.label33 = new System.Windows.Forms.Label(); this.label30 = new System.Windows.Forms.Label(); @@ -232,11 +237,6 @@ this.slBotStatus = new System.Windows.Forms.ToolStripStatusLabel(); this.pbBotProgress = new System.Windows.Forms.ToolStripProgressBar(); this.ttStateMachineInfo = new System.Windows.Forms.ToolTip(this.components); - this.gbZoom = new System.Windows.Forms.GroupBox(); - this.gbPathId = new System.Windows.Forms.GroupBox(); - this.gbControls = new System.Windows.Forms.GroupBox(); - this.btnJmpTurnLeft = new System.Windows.Forms.Button(); - this.btnJmpTrnRight = new System.Windows.Forms.Button(); this.msMain.SuspendLayout(); this.tabControlMain.SuspendLayout(); this.tabPageMain.SuspendLayout(); @@ -254,6 +254,9 @@ this.tabControlPlayer.SuspendLayout(); this.tabObjectsNear.SuspendLayout(); this.tabRadar.SuspendLayout(); + this.gbControls.SuspendLayout(); + this.gbPathId.SuspendLayout(); + this.gbZoom.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.tbZoom)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.imgRadar)).BeginInit(); this.tabPageEnemies.SuspendLayout(); @@ -267,9 +270,6 @@ this.tabLua.SuspendLayout(); this.tabPageF1.SuspendLayout(); this.statusStrip1.SuspendLayout(); - this.gbZoom.SuspendLayout(); - this.gbPathId.SuspendLayout(); - this.gbControls.SuspendLayout(); this.SuspendLayout(); // // msMain @@ -1026,6 +1026,77 @@ this.tabRadar.Text = "Radar"; this.tabRadar.UseVisualStyleBackColor = true; // + // gbControls + // + this.gbControls.Controls.Add(this.btnJmpTrnRight); + this.gbControls.Controls.Add(this.btnJmpTurnLeft); + this.gbControls.Controls.Add(this.btnUp); + this.gbControls.Controls.Add(this.btnLeft); + this.gbControls.Controls.Add(this.btnRight); + this.gbControls.Controls.Add(this.btnE); + this.gbControls.Controls.Add(this.btnDown); + this.gbControls.Controls.Add(this.btnQ); + this.gbControls.Controls.Add(this.btnSpace); + this.gbControls.Location = new System.Drawing.Point(273, 6); + this.gbControls.Name = "gbControls"; + this.gbControls.Size = new System.Drawing.Size(285, 100); + this.gbControls.TabIndex = 250; + this.gbControls.TabStop = false; + this.gbControls.Text = "Controls"; + // + // btnJmpTrnRight + // + this.btnJmpTrnRight.Location = new System.Drawing.Point(201, 15); + this.btnJmpTrnRight.Name = "btnJmpTrnRight"; + this.btnJmpTrnRight.Size = new System.Drawing.Size(54, 50); + this.btnJmpTrnRight.TabIndex = 249; + this.btnJmpTrnRight.Text = "JMP\r\nTURN\r\nRIGHT"; + this.btnJmpTrnRight.UseVisualStyleBackColor = true; + this.btnJmpTrnRight.Click += new System.EventHandler(this.btnJmpTrnRight_Click); + // + // btnJmpTurnLeft + // + this.btnJmpTurnLeft.Location = new System.Drawing.Point(30, 15); + this.btnJmpTurnLeft.Name = "btnJmpTurnLeft"; + this.btnJmpTurnLeft.Size = new System.Drawing.Size(54, 50); + this.btnJmpTurnLeft.TabIndex = 248; + this.btnJmpTurnLeft.Text = "JMP\r\nTURN\r\nLEFT"; + this.btnJmpTurnLeft.UseVisualStyleBackColor = true; + this.btnJmpTurnLeft.Click += new System.EventHandler(this.btnJmpTurnLeft_Click); + // + // btnUp + // + this.btnUp.Location = new System.Drawing.Point(127, 15); + this.btnUp.Name = "btnUp"; + this.btnUp.Size = new System.Drawing.Size(31, 23); + this.btnUp.TabIndex = 65; + this.btnUp.Text = "UP"; + this.btnUp.UseVisualStyleBackColor = true; + this.btnUp.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnUp_MouseDown); + this.btnUp.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btnUp_MouseUp); + // + // btnLeft + // + this.btnLeft.Location = new System.Drawing.Point(90, 42); + this.btnLeft.Name = "btnLeft"; + this.btnLeft.Size = new System.Drawing.Size(31, 23); + this.btnLeft.TabIndex = 66; + this.btnLeft.Text = "L"; + this.btnLeft.UseVisualStyleBackColor = true; + this.btnLeft.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnLeft_MouseDown); + this.btnLeft.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btnLeft_MouseUp); + // + // btnRight + // + this.btnRight.Location = new System.Drawing.Point(164, 42); + this.btnRight.Name = "btnRight"; + this.btnRight.Size = new System.Drawing.Size(31, 23); + this.btnRight.TabIndex = 68; + this.btnRight.Text = "R"; + this.btnRight.UseVisualStyleBackColor = true; + this.btnRight.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnRight_MouseDown); + this.btnRight.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btnRight_MouseUp); + // // btnE // this.btnE.Location = new System.Drawing.Point(164, 15); @@ -1037,6 +1108,17 @@ this.btnE.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnE_MouseDown); this.btnE.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btnE_MouseUp); // + // btnDown + // + this.btnDown.Location = new System.Drawing.Point(127, 42); + this.btnDown.Name = "btnDown"; + this.btnDown.Size = new System.Drawing.Size(31, 23); + this.btnDown.TabIndex = 69; + this.btnDown.Text = "DN"; + this.btnDown.UseVisualStyleBackColor = true; + this.btnDown.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnDown_MouseDown); + this.btnDown.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btnDown_MouseUp); + // // btnQ // this.btnQ.Location = new System.Drawing.Point(90, 15); @@ -1058,6 +1140,16 @@ this.btnSpace.UseVisualStyleBackColor = true; this.btnSpace.Click += new System.EventHandler(this.btnSpace_Click); // + // gbPathId + // + this.gbPathId.Controls.Add(this.cblPathList); + this.gbPathId.Location = new System.Drawing.Point(423, 112); + this.gbPathId.Name = "gbPathId"; + this.gbPathId.Size = new System.Drawing.Size(135, 88); + this.gbPathId.TabIndex = 249; + this.gbPathId.TabStop = false; + this.gbPathId.Text = "Path Id"; + // // cblPathList // this.cblPathList.CheckOnClick = true; @@ -1070,14 +1162,17 @@ this.cblPathList.Size = new System.Drawing.Size(129, 64); this.cblPathList.TabIndex = 243; // - // label38 + // gbZoom // - this.label38.AutoSize = true; - this.label38.Location = new System.Drawing.Point(111, 67); - this.label38.Name = "label38"; - this.label38.Size = new System.Drawing.Size(24, 13); - this.label38.TabIndex = 242; - this.label38.Text = "10x"; + this.gbZoom.Controls.Add(this.tbZoom); + this.gbZoom.Controls.Add(this.label37); + this.gbZoom.Controls.Add(this.label38); + this.gbZoom.Location = new System.Drawing.Point(273, 112); + this.gbZoom.Name = "gbZoom"; + this.gbZoom.Size = new System.Drawing.Size(144, 88); + this.gbZoom.TabIndex = 248; + this.gbZoom.TabStop = false; + this.gbZoom.Text = "Zoom"; // // tbZoom // @@ -1099,50 +1194,15 @@ this.label37.TabIndex = 240; this.label37.Text = "1x"; // - // btnDown + // label38 // - this.btnDown.Location = new System.Drawing.Point(127, 42); - this.btnDown.Name = "btnDown"; - this.btnDown.Size = new System.Drawing.Size(31, 23); - this.btnDown.TabIndex = 69; - this.btnDown.Text = "DN"; - this.btnDown.UseVisualStyleBackColor = true; - this.btnDown.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnDown_MouseDown); - this.btnDown.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btnDown_MouseUp); + this.label38.AutoSize = true; + this.label38.Location = new System.Drawing.Point(111, 67); + this.label38.Name = "label38"; + this.label38.Size = new System.Drawing.Size(24, 13); + this.label38.TabIndex = 242; + this.label38.Text = "10x"; // - // btnRight - // - this.btnRight.Location = new System.Drawing.Point(164, 42); - this.btnRight.Name = "btnRight"; - this.btnRight.Size = new System.Drawing.Size(31, 23); - this.btnRight.TabIndex = 68; - this.btnRight.Text = "R"; - this.btnRight.UseVisualStyleBackColor = true; - this.btnRight.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnRight_MouseDown); - this.btnRight.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btnRight_MouseUp); - // - // btnLeft - // - this.btnLeft.Location = new System.Drawing.Point(90, 42); - this.btnLeft.Name = "btnLeft"; - this.btnLeft.Size = new System.Drawing.Size(31, 23); - this.btnLeft.TabIndex = 66; - this.btnLeft.Text = "L"; - this.btnLeft.UseVisualStyleBackColor = true; - this.btnLeft.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnLeft_MouseDown); - this.btnLeft.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btnLeft_MouseUp); - // - // btnUp - // - this.btnUp.Location = new System.Drawing.Point(127, 15); - this.btnUp.Name = "btnUp"; - this.btnUp.Size = new System.Drawing.Size(31, 23); - this.btnUp.TabIndex = 65; - this.btnUp.Text = "UP"; - this.btnUp.UseVisualStyleBackColor = true; - this.btnUp.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnUp_MouseDown); - this.btnUp.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btnUp_MouseUp); - // // imgRadar // this.imgRadar.Location = new System.Drawing.Point(0, 0); @@ -2275,7 +2335,6 @@ this.slBotStatus.Name = "slBotStatus"; this.slBotStatus.Size = new System.Drawing.Size(59, 17); this.slBotStatus.Text = "UNKNOWN"; - this.slBotStatus.ToolTipText = "TEST\r\nTEST\r\n"; // // pbBotProgress // @@ -2290,66 +2349,6 @@ this.ttStateMachineInfo.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info; this.ttStateMachineInfo.ToolTipTitle = "StateMachine Info:"; // - // gbZoom - // - this.gbZoom.Controls.Add(this.tbZoom); - this.gbZoom.Controls.Add(this.label37); - this.gbZoom.Controls.Add(this.label38); - this.gbZoom.Location = new System.Drawing.Point(273, 112); - this.gbZoom.Name = "gbZoom"; - this.gbZoom.Size = new System.Drawing.Size(144, 88); - this.gbZoom.TabIndex = 248; - this.gbZoom.TabStop = false; - this.gbZoom.Text = "Zoom"; - // - // gbPathId - // - this.gbPathId.Controls.Add(this.cblPathList); - this.gbPathId.Location = new System.Drawing.Point(423, 112); - this.gbPathId.Name = "gbPathId"; - this.gbPathId.Size = new System.Drawing.Size(135, 88); - this.gbPathId.TabIndex = 249; - this.gbPathId.TabStop = false; - this.gbPathId.Text = "Path Id"; - // - // gbControls - // - this.gbControls.Controls.Add(this.btnJmpTrnRight); - this.gbControls.Controls.Add(this.btnJmpTurnLeft); - this.gbControls.Controls.Add(this.btnUp); - this.gbControls.Controls.Add(this.btnLeft); - this.gbControls.Controls.Add(this.btnRight); - this.gbControls.Controls.Add(this.btnE); - this.gbControls.Controls.Add(this.btnDown); - this.gbControls.Controls.Add(this.btnQ); - this.gbControls.Controls.Add(this.btnSpace); - this.gbControls.Location = new System.Drawing.Point(273, 6); - this.gbControls.Name = "gbControls"; - this.gbControls.Size = new System.Drawing.Size(285, 100); - this.gbControls.TabIndex = 250; - this.gbControls.TabStop = false; - this.gbControls.Text = "Controls"; - // - // btnJmpTurnLeft - // - this.btnJmpTurnLeft.Location = new System.Drawing.Point(30, 15); - this.btnJmpTurnLeft.Name = "btnJmpTurnLeft"; - this.btnJmpTurnLeft.Size = new System.Drawing.Size(54, 50); - this.btnJmpTurnLeft.TabIndex = 248; - this.btnJmpTurnLeft.Text = "JMP\r\nTURN\r\nLEFT"; - this.btnJmpTurnLeft.UseVisualStyleBackColor = true; - this.btnJmpTurnLeft.Click += new System.EventHandler(this.btnJmpTurnLeft_Click); - // - // btnJmpTrnRight - // - this.btnJmpTrnRight.Location = new System.Drawing.Point(201, 15); - this.btnJmpTrnRight.Name = "btnJmpTrnRight"; - this.btnJmpTrnRight.Size = new System.Drawing.Size(54, 50); - this.btnJmpTrnRight.TabIndex = 249; - this.btnJmpTrnRight.Text = "JMP\r\nTURN\r\nRIGHT"; - this.btnJmpTrnRight.UseVisualStyleBackColor = true; - this.btnJmpTrnRight.Click += new System.EventHandler(this.btnJmpTrnRight_Click); - // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -2394,6 +2393,10 @@ this.tabObjectsNear.ResumeLayout(false); this.tabObjectsNear.PerformLayout(); this.tabRadar.ResumeLayout(false); + this.gbControls.ResumeLayout(false); + this.gbPathId.ResumeLayout(false); + this.gbZoom.ResumeLayout(false); + this.gbZoom.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.tbZoom)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.imgRadar)).EndInit(); this.tabPageEnemies.ResumeLayout(false); @@ -2414,10 +2417,6 @@ this.tabPageF1.ResumeLayout(false); this.statusStrip1.ResumeLayout(false); this.statusStrip1.PerformLayout(); - this.gbZoom.ResumeLayout(false); - this.gbZoom.PerformLayout(); - this.gbPathId.ResumeLayout(false); - this.gbControls.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); Modified: trunk/BabBot/BabBot/Forms/MainForm.cs =================================================================== --- trunk/BabBot/BabBot/Forms/MainForm.cs 2010-01-16 01:53:47 UTC (rev 482) +++ trunk/BabBot/BabBot/Forms/MainForm.cs 2010-01-16 18:51:37 UTC (rev 483) @@ -97,6 +97,7 @@ ProcessManager.PlayerWayPoint += PlayerWayPoint; ProcessManager.UpdateAppStatus += UpdateAppStatus; ProcessManager.UpdateGameStatus += UpdateGameStatus; + ProcessManager.UpdateBotStatus += UpdateBotStatus; // Initialize DataSet DataManager.Initialize(); @@ -122,6 +123,7 @@ #endregion + /* Not used [System.Security.Permissions.PermissionSet( System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] protected override void WndProc(ref Message m) @@ -135,7 +137,8 @@ base.WndProc(ref m); } - + */ + private void Initialize() { // Set a default value for waypoint type combo @@ -504,17 +507,20 @@ slGameStatus.Text = status; } - private void UpdateBotStatus(string status) + private void UpdateBotStatus(string status, string tooltip) { // Cross thread calls if (InvokeRequired) { - StatusUpdateDelegate del = UpdateBotStatus; - object[] parameters = { status }; - Invoke(del, parameters); + ProcessManager.UpdateStatusTooltipDelegate del = + UpdateBotStatus; + Invoke(del, new object[] { status, tooltip }); } else - labelBotStatus.Text = status; + { + slBotStatus.Text = status; + slBotStatus.ToolTipText = tooltip; + } } private void ActivateDebugMode() Modified: trunk/BabBot/BabBot/Manager/ProcessManager.cs =================================================================== --- trunk/BabBot/BabBot/Manager/ProcessManager.cs 2010-01-16 01:53:47 UTC (rev 482) +++ trunk/BabBot/BabBot/Manager/ProcessManager.cs 2010-01-16 18:51:37 UTC (rev 483) @@ -92,12 +92,19 @@ public delegate void WoWProcessStartedEventHandler(int process); /// <summary> - /// Updates the status bar + /// Updates the status bar element /// </summary> - /// <param name="iStatus">what to write in the statusbar</param> - public delegate void UpdateStatusEventHandler(string iStatus); + /// <param name="iStatus">Information for status bar label</param> + public delegate void UpdateStatusEventHandler(string status); /// <summary> + /// Delegate method to update status bar together with tooltip + /// </summary> + /// <param name="status">Information for status bar label</param> + /// <param name="tooltip">Tooltip for status bar label</param> + public delegate void UpdateStatusTooltipDelegate(string status, string tooltip); + + /// <summary> /// First time run event /// </summary> public delegate void FirstTimeRunHandler(); @@ -174,6 +181,7 @@ public static event UpdateStatusEventHandler UpdateGameStatus; public static event UpdateStatusEventHandler UpdateAppStatus; + public static event UpdateStatusTooltipDelegate UpdateBotStatus; public static event FirstTimeRunHandler FirstTimeRun; public static event ConfigFileChangedHandler ConfigFileChanged; @@ -1257,6 +1265,12 @@ UpdateGameStatus(new_status); } + public static void OnUpdateBotStatus(string new_status, string queue) + { + if (UpdateBotStatus != null) + UpdateBotStatus(new_status, queue); + } + public static void OnBotProgressStart(int max, string tooltip) { if (BotProgressStart != null) Modified: trunk/BabBot/BabBot/States/State.cs =================================================================== --- trunk/BabBot/BabBot/States/State.cs 2010-01-16 01:53:47 UTC (rev 482) +++ trunk/BabBot/BabBot/States/State.cs 2010-01-16 18:51:37 UTC (rev 483) @@ -67,6 +67,15 @@ } } + public virtual string Name + { + get + { + string s = ToString(); + return s.Substring(s.LastIndexOf(".") + 1).ToUpper(); + } + } + /// <summary>Event fires before Enter code runs</summary> public event EventHandler<StateEventArgs<T>> Entering; Modified: trunk/BabBot/BabBot/States/StateMachine.cs =================================================================== --- trunk/BabBot/BabBot/States/StateMachine.cs 2010-01-16 01:53:47 UTC (rev 482) +++ trunk/BabBot/BabBot/States/StateMachine.cs 2010-01-16 18:51:37 UTC (rev 483) @@ -22,6 +22,13 @@ { public sealed class StateMachine<T> { + /// <summary> + /// Delegate method to update bot state + /// </summary> + /// <param name="new_status">New bot status</param> + /// <param name="queue">Current queue</param> + public delegate void StateChangeDelegate(string new_status, string queue); + /// <summary>Create a new state machine for the given entity.</summary> /// <param name="Entity">The entity that this state machine belongs too</param> public StateMachine(T Entity) @@ -44,6 +51,11 @@ public T Entity { get; private set; } /// <summary> + /// State change event + /// </summary> + public event StateChangeDelegate StateChangedEvent; + + /// <summary> /// The overal "goal" state (what this state machine is ultimately trying to accomplish. /// This will also manage what the current state is by changing states as needed /// </summary> @@ -59,8 +71,23 @@ /// <summary>Date/Time when last update was executed</summary> public DateTime LastUpdated { get; private set; } + private bool _running; + /// <summary>Set, Get the state machine running state</summary> - public bool IsRunning { get; set; } + public bool IsRunning + { + get { return _running; } + set + { + _running = value; + if (!_running) + { + GlobalState = null; + CurrentState = null; + OnStateChangedUnknown(); + } + } + } private object obj = new object(); private State<T> _init_state; @@ -101,6 +128,9 @@ //set new global state GlobalState = NewGlobalState; + // Update GUI + OnGlobalStateChanged(GlobalState); + //connect up to the global states change state request GlobalState.ChangeStateRequest += CurrentState_ChangeStateRequest; @@ -112,7 +142,7 @@ public void Update() { //if state machine is not active, then skip - if (!IsRunning) + if (!_running) { // Initialize and start state machine // If global state assigned by external thread @@ -121,7 +151,7 @@ SetGlobalState(InitState); InitState = null; - IsRunning = true; + _running = true; } else return; } @@ -137,9 +167,7 @@ { // Global state doesn't have track // So if it completed stop state machine as well - IsRunning = false; - GlobalState = null; - CurrentState = null; + _running = false; } } @@ -155,9 +183,14 @@ // if current state has track of previous state // than auto-revert, otherwise set it null if (CurrentState.PreviousState != null) + { RevertToPreviousState(); + } else + { CurrentState = null; + OnStateChangedUnknown(); + } } } @@ -178,7 +211,7 @@ /// Change the current state to the new specified state. /// </summary> /// <param name="NewState">New State</param> - /// <param name="TrackPrevious">Track & Return to current state</param> + /// <param name="TrackPrevious">Track and Return to current state</param> /// <param name="ExitPrevious">Exit current state or keep it pending</param> public void ChangeState(State<T> NewState, bool TrackPrevious, bool ExitPrevious) { @@ -208,6 +241,9 @@ //capture new current state CurrentState = NewState; + // Update GUI + OnStateChanged(CurrentState); + //hook up to the new states "State Change Request" event // if it is not already hooked up if (!CurrentState.HasChangeStateEventHookup) @@ -249,5 +285,64 @@ CurrentState.GetType() == State && CurrentState.ExitTime == DateTime.MinValue); } + + /// <summary> + /// Send update event to GUI when global state changed + /// </summary> + /// <param name="state">New state</param> + /// <param name="global">Is State Global</param> + private void OnGlobalStateChanged(State<T> state) + { + OnStateChanged(null, state, true); + } + + /// <summary> + /// Send update event to GUI when global state changed + /// </summary> + /// <param name="state">New state</param> + /// <param name="global">Is State Global</param> + private void OnStateChanged(State<T> state) + { + OnStateChanged("", state, false); + } + + /// <summary> + /// Send update event to GUI when global or local state changed + /// </summary> + /// <param name="state">Update text</param> + /// <param name="global">Is State Global</param> + private void OnStateChanged(string state_str, State<T> state, bool global) + { + if (StateChangedEvent == null) + return; + + string queue = ""; + if (!global) + { + State<T> prev_state = state.PreviousState; + while (prev_state != null) + { + queue += prev_state.Name + Environment.NewLine; + prev_state = prev_state.PreviousState; + } + + // Last always global state + queue += GlobalState.Name; + } + + StateChangedEvent(state_str, queue); + + if (string.IsNullOrEmpty(state_str)) + // Make state from class name + state_str = state.Name; + + StateChangedEvent(state_str, queue); + } + + private void OnStateChangedUnknown() + { + if (StateChangedEvent != null) + StateChangedEvent("UNKNOWN", ""); + } } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |