using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; using System.Drawing.Imaging; using System.Drawing.Design; using Microsoft.DirectX; using Microsoft.DirectX.Direct3D; using Microsoft.DirectX.DirectInput; namespace Fusion_Control_Centre_UberMDX { public partial class MainMDX : Form { public void UpdateDaGUI() { try { #region Get MDX Layer Ready For Drawing if (MDX_Graphics_Mode == GraphicsMode.DIRECTX) { if (MDX_Device == null || MDX_Device.Disposed) { return; } } else { if (this == null || this.Size.IsEmpty) { return; } } Application_isBeingScaledBy = new Vector2((float)((float)this.ClientSize.Width/ (float)Application_Original_Width), (float)((float)this.ClientSize.Height / (float)Application_Original_Height)); if (MDX_Graphics_Mode == GraphicsMode.DIRECTX) { MDX_Device.Clear(Microsoft.DirectX.Direct3D.ClearFlags.Target, MDX_ClearColour, 1.0f, 0); MDX_Device.BeginScene(); } else { MDX_GDI_DisplayBitmap = new Bitmap(this.Width, this.Height); MDX_GDI_Graphics = Graphics.FromImage(MDX_GDI_DisplayBitmap); //MDX_GDI_Graphics = this.CreateGraphics(); MDX_GDI_Graphics.Clear(Color.White); } #endregion #region Tally the Votes on Whether or not to Change the Page int[] myVote_Page = { 0, 0, 0 }; int[] myVote_Page_Tally = { 0, 0, 0 }; foreach (LogicalVote individualVote in CanDo_ShouldIChangePage) { myVote_Page[Vote_Priority_To_Integer(individualVote.MyLogicalPriority)]++; myVote_Page_Tally[Vote_Priority_To_Integer(individualVote.MyLogicalPriority)] += (int)individualVote.toWhat; } CanDo_ShouldIChangePage.Clear(); int newPage = CurrentPage; if (myVote_Page[2] != 0) { newPage = myVote_Page_Tally[2]; } else if (myVote_Page[1] != 0) { newPage = myVote_Page_Tally[1]; } else if (myVote_Page[0] != 0) { newPage = myVote_Page_Tally[0]; } if (newPage >= 0 && newPage <= MAX_PAGE) { CurrentPage = newPage; } #endregion #region Change the Background Image foreach (BackgroundImageForDisplay NewBackground in AllBackgroundImages) { if (NewBackground.thePage == CurrentPage) { if (MDX_Graphics_Mode == GraphicsMode.DIRECTX) { //MDX_Sprite_BackgroundImages.Begin(Microsoft.DirectX.Direct3D.SpriteFlags.AlphaBlend); } switch (NewBackground.theImageLayout) { case ImageLayout.Center: int temp_CentreX = 0; int temp_CentreY = 0; temp_CentreX = (Application_Width / 2) - (NewBackground.theImage.MDX_FusionTextureInformation.Width / 2); temp_CentreY = (Application_Height / 2) - (NewBackground.theImage.MDX_FusionTextureInformation.Height / 2); NewBackground.theImage.MDX_Position = new Point(temp_CentreX, temp_CentreY); //NewBackground.theImage.Draw(MDX_Sprite_BackgroundImages, Application_isBeingScaledBy); NewBackground.theImage.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); break; case ImageLayout.Stretch: //float scale_x = 1.0f; //float scale_y = 1.0f; //scale_x = ((float)Application_Width / NewBackground.theImage.MDX_FusionTextureInformation.Width); //scale_y = ((float)Application_Height / NewBackground.theImage.MDX_FusionTextureInformation.Height); int centre_x = 0; //(Application_Width / 2); int centre_y = 0; //(Application_Height / 2); //NewBackground.theImage.MDX_Scale = new Vector2(scale_x, scale_y); NewBackground.theImage.MDX_Position = new Point(centre_x, centre_y); //NewBackground.theImage.Draw(MDX_Sprite_BackgroundImages, Application_isBeingScaledBy); NewBackground.theImage.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); break; case ImageLayout.Tile: int numberOfTilesX = (int)((float)Application_Width / (float)(NewBackground.theImage.MDX_FusionTextureInformation.Width * Application_isBeingScaledBy.X)); int numberOfTilesY = (int)((float)Application_Height / (float)(NewBackground.theImage.MDX_FusionTextureInformation.Height * Application_isBeingScaledBy.Y)); for (int temp_Tile_i = 0; temp_Tile_i <= numberOfTilesX; temp_Tile_i++) { for (int temp_Tile_j = 0; temp_Tile_j <= numberOfTilesY; temp_Tile_j++) { NewBackground.theImage.MDX_Position = new Point((temp_Tile_i * NewBackground.theImage.MDX_FusionTextureInformation.Width), (temp_Tile_j * NewBackground.theImage.MDX_FusionTextureInformation.Height)); //NewBackground.theImage.Draw(MDX_Sprite_BackgroundImages, Application_isBeingScaledBy); NewBackground.theImage.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); } } break; default: NewBackground.theImage.MDX_Position = new Point(0, 0); //NewBackground.theImage.Draw(MDX_Sprite_BackgroundImages, Application_isBeingScaledBy); NewBackground.theImage.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); break; } if (MDX_Graphics_Mode == GraphicsMode.DIRECTX) { //MDX_Sprite_BackgroundImages.End(); } break; } } #endregion #region Normal Layer Open if (MDX_Graphics_Mode == GraphicsMode.DIRECTX) { MDX_Sprite_NormalLayer.Begin(SpriteFlags.AlphaBlend); } #endregion #region Iterate Through All Image Objects { for (int i = 0; i < AllZOrder_QuelleListe.Count; i++) { switch (AllZOrder_QuelleListe[i]._ListReferenceType) { case ZOrderListIndexMatrix.ENUM_DISPLAYBUTTONS: MDX_DrawDisplayButton(AllZOrder_QuelleListe[i]._IndexInList); break; case ZOrderListIndexMatrix.ENUM_MULTIIMAGES: MDX_DrawMultiImage(AllZOrder_QuelleListe[i]._IndexInList); break; case ZOrderListIndexMatrix.ENUM_ROTATEIMAGES: MDX_DrawRotateImage(AllZOrder_QuelleListe[i]._IndexInList); break; case ZOrderListIndexMatrix.ENUM_STATICIMAGES: MDX_DrawStaticImage(AllZOrder_QuelleListe[i]._IndexInList); break; case ZOrderListIndexMatrix.ENUM_VARAIBLELOCATION: MDX_DrawVariableLocationImage(AllZOrder_QuelleListe[i]._IndexInList); break; case ZOrderListIndexMatrix.ENUM_GRAPH: MDX_DrawGraph(AllZOrder_QuelleListe[i]._IndexInList); break; default: //Error or Unknown break; } } } #endregion #region Draw All Label Text foreach (DisplayTextLabelAuto _tempLabel in AllTextLabels) { if (_tempLabel.pageList.Contains(CurrentPage)) { if (_tempLabel.monitor_id != "" && _tempLabel.monitor_type != "") { switch (_tempLabel.monitor_type) { case "variable": foreach (Variable _var in AllVariables) { if (_tempLabel.monitor_id.ToLower() == _var.variableReferenceName.ToLower()) { double _varDbl = 0.0f; if (_var.variableValue != null && double.TryParse(_var.variableValue.ToString(), out _varDbl)) { _tempLabel.FontText = _varDbl.ToString(); if (_tempLabel.FontText.Contains(Regional_NumberStringSeperator)) // && _tempLabel.FontText.Substring(_tempLabel.FontText.IndexOf('.')).Length - 1 > _tempLabel.LabelDecimalPrecision) { _tempLabel.FontText = _varDbl.ToString().Substring(0, _varDbl.ToString().IndexOf('.')); int tttttt = _varDbl.ToString().Substring(_varDbl.ToString().IndexOf('.') + 1).Length; if (_tempLabel.LabelDecimalPrecision > 0 && _varDbl.ToString().Substring(_varDbl.ToString().IndexOf('.') + 1).Length >= _tempLabel.LabelDecimalPrecision) { _tempLabel.FontText += _varDbl.ToString().Substring(_varDbl.ToString().IndexOf('.'), 1 + _tempLabel.LabelDecimalPrecision); } else { if (_tempLabel.LabelDecimalPrecision > 0) { //_tempLabel.FontText += "."; _tempLabel.FontText = _varDbl.ToString(); _tempLabel.FontText += "".PadRight(_tempLabel.LabelDecimalPrecision, '0'); } } } else { if (_tempLabel.LabelDecimalPrecision > 0) { _tempLabel.FontText += Regional_NumberStringSeperator; _tempLabel.FontText += "".PadRight(_tempLabel.LabelDecimalPrecision, '0'); } } } else { _tempLabel.FontText = _var.variableValue.ToString(); } _tempLabel.FontText = _tempLabel.FontText_Original + _tempLabel.FontText; DrawText(_tempLabel.FontName, (DisplayTextLabel)_tempLabel, _tempLabel.LabelLocation, _tempLabel.LabelBounds); break; } } break; case "analogue input": foreach (AnalogueInputChannel _analogue in AllAnalogueInputs) { if (_tempLabel.monitor_id.ToLower() == _analogue.id.ToLower()) { double _ainDbl = 0.0f; if (double.TryParse(_analogue.CurrentValue.ToString(), out _ainDbl)) { _tempLabel.FontText = _ainDbl.ToString(); if (_tempLabel.FontText.Contains(Regional_NumberStringSeperator)) // && _tempLabel.FontText.Substring(_tempLabel.FontText.IndexOf('.')).Length - 1 > _tempLabel.LabelDecimalPrecision) { _tempLabel.FontText = _ainDbl.ToString().Substring(0, _ainDbl.ToString().IndexOf('.')); if (_tempLabel.LabelDecimalPrecision > 0 && _ainDbl.ToString().Substring(_ainDbl.ToString().IndexOf('.') + 1).Length >= _tempLabel.LabelDecimalPrecision) { _tempLabel.FontText += _ainDbl.ToString().Substring(_ainDbl.ToString().IndexOf('.'), 1 + _tempLabel.LabelDecimalPrecision); } else { if (_tempLabel.LabelDecimalPrecision > 0) { //_tempLabel.FontText += "."; _tempLabel.FontText = _ainDbl.ToString(); _tempLabel.FontText += "".PadRight(_tempLabel.LabelDecimalPrecision, '0'); } } } else { if (_tempLabel.LabelDecimalPrecision > 0) { _tempLabel.FontText += Regional_NumberStringSeperator; _tempLabel.FontText += "".PadRight(_tempLabel.LabelDecimalPrecision, '0'); } } } else { _tempLabel.FontText = _analogue.CurrentValue.ToString(); } _tempLabel.FontText = _tempLabel.FontText_Original + _tempLabel.FontText; DrawText(_tempLabel.FontName, (DisplayTextLabel)_tempLabel, _tempLabel.LabelLocation, _tempLabel.LabelBounds); break; } } break; default: break; } } else { DrawText(_tempLabel.FontName, (DisplayTextLabel)_tempLabel, _tempLabel.LabelLocation, _tempLabel.LabelBounds); } if (_tempLabel.FontText == "") { continue; } DrawText(_tempLabel.FontName, (DisplayTextLabel)_tempLabel, _tempLabel.LabelLocation, _tempLabel.LabelBounds); } } #endregion #region Normal Layer Close if (MDX_Graphics_Mode == GraphicsMode.DIRECTX) { MDX_Sprite_NormalLayer.End(); } #endregion #region Finish Changing Pages if (PreviousPage != CurrentPage) { PreviousPage = CurrentPage; } #endregion #region Draw The Double Buffer if (MDX_Graphics_Mode == GraphicsMode.DIRECTX) { MDX_Device.EndScene(); MDX_Device.Present(); } else { MDX_GDI_Graphics.Dispose(); Graphics ggg = this.CreateGraphics(); ggg.DrawImage(MDX_GDI_DisplayBitmap, 0, 0); ggg.Dispose(); //this.BackgroundImage = MDX_GDI_DisplayBitmap; //this.BackgroundImageLayout = ImageLayout.Stretch; //this.Update(); //this.Refresh(); } #endregion } catch (DeviceLostException) { return; #region [DEPRECIATED] -- Iterate Through All Image Objects /* { for (int i = 0; i < AllZOrder_QuelleListe.Count; i++) { switch (AllZOrder_QuelleListe[i]._ListReferenceType) { case ZOrderListIndexMatrix.ENUM_DISPLAYBUTTONS: //AllDisplayButtons[AllZOrder_QuelleListe[i]._IndexInList] break; case ZOrderListIndexMatrix.ENUM_MULTIIMAGES: MDX_DrawMultiImage(AllZOrder_QuelleListe[i]._IndexInList); break; case ZOrderListIndexMatrix.ENUM_ROTATEIMAGES: MDX_DrawRotateImage(AllZOrder_QuelleListe[i]._IndexInList); break; case ZOrderListIndexMatrix.ENUM_STATICIMAGES: MDX_DrawStaticImage(AllZOrder_QuelleListe[i]._IndexInList); break; default: //Error or Unknown break; } } } Sort_AllGUI_by_Z_OrderDepth(); */ #endregion } } #region MDX Draw DisplayButton public void MDX_DrawDisplayButton(int myIndex) { DisplayButton CurrentButton = AllDisplayButtons[myIndex]; CurrentButton.toScale_ApplicationBy = Application_isBeingScaledBy; #region Check Current Page bool isCorrectPage = false; foreach (int PageToCheck in CurrentButton.DisplayPage) { if (PageToCheck == CurrentPage) { isCorrectPage = true; break; } } if (!isCorrectPage) { return; } #endregion #region Tally the Votes on Whether Each Button Should Enable or Disable int[] myVote_Enable = { 0, 0, 0 }; foreach (LogicalVote individualVote in CurrentButton.ShouldIBeEnabled) { myVote_Enable[Vote_Priority_To_Integer(individualVote.MyLogicalPriority)] += Vote_Opinion_To_Integer(individualVote.MyLogicalOpinion); } CurrentButton.ShouldIBeEnabled.Clear(); if (myVote_Enable[2] != 0) { if (myVote_Enable[2] > 0) { CurrentButton.isEnabled = true; } else { CurrentButton.isEnabled = false; } } else if (myVote_Enable[1] != 0) { if (myVote_Enable[1] > 0) { CurrentButton.isEnabled = true; } else { CurrentButton.isEnabled = false; } } else if (myVote_Enable[0] != 0) { if (myVote_Enable[0] > 0) { CurrentButton.isEnabled = true; } else { CurrentButton.isEnabled = false; } } #endregion #region Draw It... switch (CurrentButton.functionString) { case "trigger output": #region Get Current Values bool isEnabled = CurrentButton.isEnabled; bool isOn = false; bool isBeingClicked = CurrentButton.isBeingClicked; foreach (DigitalOutputChannel DOC in AllDigitalOutputs) { if (DOC.id == CurrentButton.functionTarget) { isOn = DOC.CurrentEnabledState; break; } } if (CurrentButton.voteOpinion == "off") { isOn = !isOn; } #endregion #region The Button is Enabled if (isEnabled) { #region The Button is not being Pressed if (!isBeingClicked) { #region The Button follows a Digital Output's State if (CurrentButton.voteType == "attached") { if (isOn) { //CurrentButton.MDX_Primary.MDX_Position = Point.Add(CurrentButton.DeButtonLocation, new Size((CurrentButton.DisplaySize.Width / 2), (CurrentButton.DisplaySize.Height / 2))); CurrentButton.MDX_Primary.MDX_Position = CurrentButton.DeButtonLocation; CurrentButton.MDX_Primary.MDX_Scale = XNA_SizeToRatioVector2(CurrentButton.DisplaySize, CurrentButton.MDX_Primary); CurrentButton.MDX_Primary.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); CurrentButton.UpdateBounds(CurrentButton.MDX_Primary, MDX_Graphics_Mode); if (CurrentButton.TextPrimary != null) { DrawText(CurrentButton.TextPrimary.FontName, CurrentButton.TextPrimary, CurrentButton.DeButtonLocation, new Vector4((float)CurrentButton.DeButtonLocation.X, (float)CurrentButton.DeButtonLocation.Y, (float)(CurrentButton.DeButtonLocation.X + CurrentButton.DisplaySize.Width), (float)(CurrentButton.DeButtonLocation.Y + CurrentButton.DisplaySize.Height))); } } else { //CurrentButton.MDX_Secondary.MDX_Position = Point.Add(CurrentButton.DeButtonLocation, new Size((CurrentButton.DisplaySize.Width / 2), (CurrentButton.DisplaySize.Height / 2))); CurrentButton.MDX_Secondary.MDX_Position = CurrentButton.DeButtonLocation; CurrentButton.MDX_Secondary.MDX_Scale = XNA_SizeToRatioVector2(CurrentButton.DisplaySize, CurrentButton.MDX_Secondary); CurrentButton.MDX_Secondary.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); CurrentButton.UpdateBounds(CurrentButton.MDX_Secondary, MDX_Graphics_Mode); if (CurrentButton.TextSecondary != null) { DrawText(CurrentButton.TextSecondary.FontName, CurrentButton.TextSecondary, CurrentButton.DeButtonLocation, new Vector4((float)CurrentButton.DeButtonLocation.X, (float)CurrentButton.DeButtonLocation.Y, (float)(CurrentButton.DeButtonLocation.X + CurrentButton.DisplaySize.Width), (float)(CurrentButton.DeButtonLocation.Y + CurrentButton.DisplaySize.Height))); } } } #endregion #region The Button is independant of a Digital Output else if (CurrentButton.voteType == "detached") { if (CurrentButton.isPressed) { //CurrentButton.MDX_Primary.MDX_Position = Point.Add(CurrentButton.DeButtonLocation, new Size((CurrentButton.DisplaySize.Width / 2), (CurrentButton.DisplaySize.Height / 2))); CurrentButton.MDX_Primary.MDX_Position = CurrentButton.DeButtonLocation; CurrentButton.MDX_Primary.MDX_Scale = XNA_SizeToRatioVector2(CurrentButton.DisplaySize, CurrentButton.MDX_Primary); CurrentButton.MDX_Primary.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); CurrentButton.UpdateBounds(CurrentButton.MDX_Primary, MDX_Graphics_Mode); if (CurrentButton.TextPrimary != null) { DrawText(CurrentButton.TextPrimary.FontName, CurrentButton.TextPrimary, CurrentButton.DeButtonLocation, new Vector4((float)CurrentButton.DeButtonLocation.X, (float)CurrentButton.DeButtonLocation.Y, (float)(CurrentButton.DeButtonLocation.X + CurrentButton.DisplaySize.Width), (float)(CurrentButton.DeButtonLocation.Y + CurrentButton.DisplaySize.Height))); } } else { //CurrentButton.MDX_Secondary.MDX_Position = Point.Add(CurrentButton.DeButtonLocation, new Size((CurrentButton.DisplaySize.Width / 2), (CurrentButton.DisplaySize.Height / 2))); CurrentButton.MDX_Secondary.MDX_Position = CurrentButton.DeButtonLocation; CurrentButton.MDX_Secondary.MDX_Scale = XNA_SizeToRatioVector2(CurrentButton.DisplaySize, CurrentButton.MDX_Secondary); CurrentButton.MDX_Secondary.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); CurrentButton.UpdateBounds(CurrentButton.MDX_Secondary, MDX_Graphics_Mode); if (CurrentButton.TextSecondary != null) { DrawText(CurrentButton.TextSecondary.FontName, CurrentButton.TextSecondary, CurrentButton.DeButtonLocation, new Vector4((float)CurrentButton.DeButtonLocation.X, (float)CurrentButton.DeButtonLocation.Y, (float)(CurrentButton.DeButtonLocation.X + CurrentButton.DisplaySize.Width), (float)(CurrentButton.DeButtonLocation.Y + CurrentButton.DisplaySize.Height))); } } } else if (CurrentButton.voteType == "absolute") { CurrentButton.MDX_Primary.MDX_Position = CurrentButton.DeButtonLocation; CurrentButton.MDX_Primary.MDX_Scale = XNA_SizeToRatioVector2(CurrentButton.DisplaySize, CurrentButton.MDX_Primary); CurrentButton.MDX_Primary.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); CurrentButton.UpdateBounds(CurrentButton.MDX_Primary, MDX_Graphics_Mode); if (CurrentButton.TextPrimary != null) { DrawText(CurrentButton.TextPrimary.FontName, CurrentButton.TextPrimary, CurrentButton.DeButtonLocation, new Vector4((float)CurrentButton.DeButtonLocation.X, (float)CurrentButton.DeButtonLocation.Y, (float)(CurrentButton.DeButtonLocation.X + CurrentButton.DisplaySize.Width), (float)(CurrentButton.DeButtonLocation.Y + CurrentButton.DisplaySize.Height))); } } else { CurrentButton.MDX_Primary.MDX_Position = CurrentButton.DeButtonLocation; CurrentButton.MDX_Primary.MDX_Scale = XNA_SizeToRatioVector2(CurrentButton.DisplaySize, CurrentButton.MDX_Primary); CurrentButton.MDX_Primary.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); CurrentButton.UpdateBounds(CurrentButton.MDX_Primary, MDX_Graphics_Mode); if (CurrentButton.TextPrimary != null) { DrawText(CurrentButton.TextPrimary.FontName, CurrentButton.TextPrimary, CurrentButton.DeButtonLocation, new Vector4((float)CurrentButton.DeButtonLocation.X, (float)CurrentButton.DeButtonLocation.Y, (float)(CurrentButton.DeButtonLocation.X + CurrentButton.DisplaySize.Width), (float)(CurrentButton.DeButtonLocation.Y + CurrentButton.DisplaySize.Height))); } } #endregion } #endregion #region The Button is being Pressed else { //CurrentButton.MDX_Pushed.MDX_Position = Point.Add(CurrentButton.DeButtonLocation, new Size((CurrentButton.DisplaySize.Width / 2), (CurrentButton.DisplaySize.Height / 2))); CurrentButton.MDX_Pushed.MDX_Position = CurrentButton.DeButtonLocation; CurrentButton.MDX_Pushed.MDX_Scale = XNA_SizeToRatioVector2(CurrentButton.DisplaySize, CurrentButton.MDX_Pushed); CurrentButton.MDX_Pushed.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); CurrentButton.UpdateBounds(CurrentButton.MDX_Pushed, MDX_Graphics_Mode); if (CurrentButton.TextPrimary != null) { DrawText(CurrentButton.TextPrimary.FontName, CurrentButton.TextPrimary, CurrentButton.DeButtonLocation, new Vector4((float)CurrentButton.DeButtonLocation.X, (float)CurrentButton.DeButtonLocation.Y, (float)(CurrentButton.DeButtonLocation.X + CurrentButton.DisplaySize.Width), (float)(CurrentButton.DeButtonLocation.Y + CurrentButton.DisplaySize.Height))); } } #endregion } #endregion #region The Button is Disabled else { //CurrentButton.MDX_Disabled.MDX_Position = Point.Add(CurrentButton.DeButtonLocation, new Size((CurrentButton.DisplaySize.Width / 2), (CurrentButton.DisplaySize.Height / 2))); CurrentButton.MDX_Disabled.MDX_Position = CurrentButton.DeButtonLocation; CurrentButton.MDX_Disabled.MDX_Scale = XNA_SizeToRatioVector2(CurrentButton.DisplaySize, CurrentButton.MDX_Disabled); CurrentButton.MDX_Disabled.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); CurrentButton.UpdateBounds(CurrentButton.MDX_Disabled, MDX_Graphics_Mode); if (CurrentButton.TextDisabled != null) { DrawText(CurrentButton.TextDisabled.FontName, CurrentButton.TextDisabled, CurrentButton.DeButtonLocation, new Vector4((float)CurrentButton.DeButtonLocation.X, (float)CurrentButton.DeButtonLocation.Y, (float)(CurrentButton.DeButtonLocation.X + CurrentButton.DisplaySize.Width), (float)(CurrentButton.DeButtonLocation.Y + CurrentButton.DisplaySize.Height))); } } #endregion break; default: #region Button is Enabled if (CurrentButton.isEnabled) { #region Button is not being Pressed if (!CurrentButton.isBeingClicked) { #region Button is On if (CurrentButton.isPressed) { //CurrentButton.MDX_Primary.MDX_Position = Point.Add(CurrentButton.DeButtonLocation, new Size((CurrentButton.DisplaySize.Width / 2), (CurrentButton.DisplaySize.Height / 2))); CurrentButton.MDX_Primary.MDX_Position = CurrentButton.DeButtonLocation; CurrentButton.MDX_Primary.MDX_Scale = XNA_SizeToRatioVector2(CurrentButton.DisplaySize, CurrentButton.MDX_Primary); CurrentButton.MDX_Primary.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); CurrentButton.UpdateBounds(CurrentButton.MDX_Primary, MDX_Graphics_Mode); if (CurrentButton.TextPrimary != null) { DrawText(CurrentButton.TextPrimary.FontName, CurrentButton.TextPrimary, CurrentButton.DeButtonLocation, new Vector4((float)CurrentButton.DeButtonLocation.X, (float)CurrentButton.DeButtonLocation.Y, (float)(CurrentButton.DeButtonLocation.X + CurrentButton.DisplaySize.Width), (float)(CurrentButton.DeButtonLocation.Y + CurrentButton.DisplaySize.Height))); } } #endregion #region Button is Off else { //CurrentButton.MDX_Secondary.MDX_Position = Point.Add(CurrentButton.DeButtonLocation, new Size((CurrentButton.DisplaySize.Width / 2), (CurrentButton.DisplaySize.Height / 2))); CurrentButton.MDX_Secondary.MDX_Position = CurrentButton.DeButtonLocation; CurrentButton.MDX_Secondary.MDX_Scale = XNA_SizeToRatioVector2(CurrentButton.DisplaySize, CurrentButton.MDX_Secondary); CurrentButton.MDX_Secondary.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); CurrentButton.UpdateBounds(CurrentButton.MDX_Secondary, MDX_Graphics_Mode); if (CurrentButton.TextSecondary != null) { DrawText(CurrentButton.TextSecondary.FontName, CurrentButton.TextSecondary, CurrentButton.DeButtonLocation, new Vector4((float)CurrentButton.DeButtonLocation.X, (float)CurrentButton.DeButtonLocation.Y, (float)(CurrentButton.DeButtonLocation.X + CurrentButton.DisplaySize.Width), (float)(CurrentButton.DeButtonLocation.Y + CurrentButton.DisplaySize.Height))); } } #endregion } #endregion #region Button is being Pressed else { //CurrentButton.MDX_Pushed.MDX_Position = Point.Add(CurrentButton.DeButtonLocation, new Size((CurrentButton.DisplaySize.Width / 2), (CurrentButton.DisplaySize.Height / 2))); CurrentButton.MDX_Pushed.MDX_Position = CurrentButton.DeButtonLocation; CurrentButton.MDX_Pushed.MDX_Scale = XNA_SizeToRatioVector2(CurrentButton.DisplaySize, CurrentButton.MDX_Pushed); CurrentButton.MDX_Pushed.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); CurrentButton.UpdateBounds(CurrentButton.MDX_Pushed, MDX_Graphics_Mode); if (CurrentButton.TextPrimary != null) { DrawText(CurrentButton.TextPrimary.FontName, CurrentButton.TextPrimary, CurrentButton.DeButtonLocation, new Vector4((float)CurrentButton.DeButtonLocation.X, (float)CurrentButton.DeButtonLocation.Y, (float)(CurrentButton.DeButtonLocation.X + CurrentButton.DisplaySize.Width), (float)(CurrentButton.DeButtonLocation.Y + CurrentButton.DisplaySize.Height))); } } #endregion } #endregion #region Button is Disabled else { //CurrentButton.MDX_Disabled.MDX_Position = Point.Add(CurrentButton.DeButtonLocation, new Size((CurrentButton.DisplaySize.Width / 2), (CurrentButton.DisplaySize.Height / 2))); CurrentButton.MDX_Disabled.MDX_Position = CurrentButton.DeButtonLocation; CurrentButton.MDX_Disabled.MDX_Scale = XNA_SizeToRatioVector2(CurrentButton.DisplaySize, CurrentButton.MDX_Disabled); CurrentButton.MDX_Disabled.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); CurrentButton.UpdateBounds(CurrentButton.MDX_Disabled, MDX_Graphics_Mode); if (CurrentButton.TextDisabled != null) { DrawText(CurrentButton.TextDisabled.FontName, CurrentButton.TextDisabled, CurrentButton.DeButtonLocation, new Vector4((float)CurrentButton.DeButtonLocation.X, (float)CurrentButton.DeButtonLocation.Y, (float)(CurrentButton.DeButtonLocation.X + CurrentButton.DisplaySize.Width), (float)(CurrentButton.DeButtonLocation.Y + CurrentButton.DisplaySize.Height))); } } #endregion break; } #endregion } #endregion #region MDX Draw MultiImage public void MDX_DrawMultiImage(int myIndex) { DisplayMultiImage CurrentMultiImage = AllDisplayMultiImages[myIndex]; #region Check Page bool isCorrectPage = false; foreach (int PageToCheck in CurrentMultiImage.DisplayPage) { if (PageToCheck == CurrentPage) { isCorrectPage = true; break; } } if (!isCorrectPage) { return; } #endregion #region Find Selection Basis' Value object SelectionBasis = BaseSelectionOffOf_Function(CurrentMultiImage.toMonitorType, CurrentMultiImage.toMonitor); if (SelectionBasis == null) { //Object to base image selection on was not found so skip item... return; } #endregion #region Select Image to Display int _debugI = -1; bool nadaFound = true; double _veryLOW = double.MaxValue; int _verLOWINT = -1; double _veryHIGH = double.MinValue; int _veryHIGHINT = -1; try { foreach (DisplayButton SubButton in CurrentMultiImage.MultipleImageList) { _debugI++; if (SubButton.threshold_Low < _veryLOW) { _veryLOW = SubButton.threshold_Low; _verLOWINT = _debugI; } if (SubButton.threshold_High > _veryHIGH) { _veryHIGH = SubButton.threshold_High; _veryHIGHINT = _debugI; } if ((double)SelectionBasis >= SubButton.threshold_Low && (double)SelectionBasis < SubButton.threshold_High) { nadaFound = false; if ((SubButton.MDX_Primary.MDX_Image.MDX_FusionTexture != null && MDX_Graphics_Mode == GraphicsMode.DIRECTX) || (SubButton.MDX_Primary.MDX_Image.MDX_FusionBitmap != null && MDX_Graphics_Mode == GraphicsMode.GDI)) { SubButton.MDX_Primary.MDX_Position = CurrentMultiImage.DeButtonLocation; if (MDX_Graphics_Mode == GraphicsMode.GDI) { } SubButton.MDX_Primary.MDX_Scale = XNA_SizeToRatioVector2(CurrentMultiImage.DisplaySize, SubButton.MDX_Primary); SubButton.MDX_Primary.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); } break; } } if (nadaFound) { int toUse = -1; if ((double)SelectionBasis >= _veryHIGH) { toUse = _veryHIGHINT; } else { toUse = _verLOWINT; } if (toUse >= 0) { if ((CurrentMultiImage.MultipleImageList[toUse].MDX_Primary.MDX_Image.MDX_FusionTexture != null && MDX_Graphics_Mode == GraphicsMode.DIRECTX) || (CurrentMultiImage.MultipleImageList[toUse].MDX_Primary.MDX_Image.MDX_FusionBitmap != null && MDX_Graphics_Mode == GraphicsMode.GDI)) { CurrentMultiImage.MultipleImageList[toUse].MDX_Primary.MDX_Position = CurrentMultiImage.DeButtonLocation; if (MDX_Graphics_Mode == GraphicsMode.GDI) { } CurrentMultiImage.MultipleImageList[toUse].MDX_Primary.MDX_Scale = XNA_SizeToRatioVector2(CurrentMultiImage.DisplaySize, CurrentMultiImage.MultipleImageList[toUse].MDX_Primary); CurrentMultiImage.MultipleImageList[toUse].MDX_Primary.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); //CurrentMultiImage.MultipleImageList[toUse].MDX_Primary.Draw(MDX_Graphics_Mode, new Vector2(1.0f, 1.0f), MDX_GDI_Graphics); } } } } catch (Exception e) { } #endregion } #endregion #region MDX Draw RotateImage public void MDX_DrawRotateImage(int myIndex) { DisplayRotateImageCentre CurrentRotateImage = AllDisplayRotateImage[myIndex]; #region Check Page bool isCorrectPage = false; foreach (int PageToCheck in CurrentRotateImage.DisplayPage) { if (PageToCheck == CurrentPage) { isCorrectPage = true; break; } } if (!isCorrectPage) { return; } #endregion #region Find the Basis for Selection double lowest_value = double.MaxValue; double highest_value = double.MinValue; object SelectionBasis = BaseSelectionOffOf_Function(CurrentRotateImage.toMonitorType, CurrentRotateImage.toMonitor); if (SelectionBasis == null) { //Object to base image selection on was not found so skip item... return; } #endregion #region Set the Maximum and Minimum Values foreach (DisplayRotateImageCentre.DisplayRotateImageValues RotateValues in CurrentRotateImage.MultipleAngleList) { if (lowest_value > RotateValues.value_minimum) { lowest_value = RotateValues.value_minimum; } if (highest_value < RotateValues.value_maximum) { highest_value = RotateValues.value_maximum; } } #endregion #region Determine if the Selection Basis is Out of Range if ((double)SelectionBasis >= highest_value) { SelectionBasis = highest_value; } else if ((double)SelectionBasis <= lowest_value) { SelectionBasis = lowest_value; } else { // Within range... } #endregion #region Rotate Image foreach (DisplayRotateImageCentre.DisplayRotateImageValues RotateValues in CurrentRotateImage.MultipleAngleList) { if (RotateValues.value_minimum <= (double)SelectionBasis && (double)SelectionBasis <= RotateValues.value_maximum) { double angletoRotate = (double)RotateValues.angle_minimum; double angleDifference = (double)RotateValues.angle_maximum - (double)RotateValues.angle_minimum; double valueDifference = RotateValues.value_maximum - RotateValues.value_minimum; double valueInside = (double)SelectionBasis - RotateValues.value_minimum; angletoRotate = angletoRotate + angleDifference * ((double)valueInside / (double)valueDifference); if (CurrentRotateImage.smoothRotating) { angleDifference = angletoRotate - CurrentRotateImage.currentAngle; if (Math.Abs(angleDifference) > Math.Abs(CurrentRotateImage.maximumAngleStride)) { if (angleDifference < 0) { angletoRotate = CurrentRotateImage.currentAngle - CurrentRotateImage.maximumAngleStride; } else { angletoRotate = CurrentRotateImage.currentAngle + CurrentRotateImage.maximumAngleStride; } } } CurrentRotateImage.currentAngle = angletoRotate; /* * STREAK IMAGE CODE... WAAAAAAAY TOO CPU INTENSIVE, SO ELIMINATING IT FOR NOW * if (CurrentRotateImage.streakImage) { double streak_minimum = double.MaxValue, streak_maximum = double.MinValue; for (int streak_i = 0; streak_i < CurrentRotateImage.MultipleAngleList.Count; streak_i++) { if (CurrentRotateImage.MultipleAngleList[streak_i].angle_minimum < streak_minimum) { streak_minimum = (double)CurrentRotateImage.MultipleAngleList[streak_i].angle_minimum; } if (CurrentRotateImage.MultipleAngleList[streak_i].angle_maximum > streak_maximum) { streak_maximum = (double)CurrentRotateImage.MultipleAngleList[streak_i].angle_maximum; } } double streak_angleDifference = angletoRotate - streak_minimum; double streak_delangle = 0.0174532925f; // 1 degree converted to radians... double NumberOfStreakDraws = streak_angleDifference / streak_delangle; //Just for debugging for (double streak_curAngle = streak_minimum; streak_curAngle < angletoRotate; streak_curAngle += streak_delangle) { CurrentRotateImage.XNA_Primary.XNA_Rotation = DegreesToRadians(streak_curAngle); CurrentRotateImage.XNA_Primary.MDX_Position = CurrentRotateImage.DeButtonLocation + new Vector2((double)(CurrentRotateImage.DisplaySize.Width / 2), (double)(CurrentRotateImage.DisplaySize.Height / 2)); CurrentRotateImage.XNA_Primary.MDX_Scale = XNA_SizeToRatioVector2(CurrentRotateImage.DisplaySize, CurrentRotateImage.XNA_Primary.XNA_FusionTexture); CurrentRotateImage.XNA_Primary.Draw(MDX_Sprite_NormalLayer, Application_isBeingScaledBy); } } */ CurrentRotateImage.MDX_Primary.MDX_Rotation = float.Parse(DegreesToRadians(angletoRotate).ToString()); CurrentRotateImage.MDX_Primary.MDX_Position = Point.Add(CurrentRotateImage.DeButtonLocation, new Size((CurrentRotateImage.DisplaySize.Width / 2), (CurrentRotateImage.DisplaySize.Height / 2))); CurrentRotateImage.MDX_Primary.MDX_Scale = XNA_SizeToRatioVector2(CurrentRotateImage.DisplaySize, CurrentRotateImage.MDX_Primary); CurrentRotateImage.MDX_Primary.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); break; } } #endregion } #endregion #region MDX Draw Static Image public void MDX_DrawStaticImage(int myIndex) { DisplayStaticImage CurrentStaticImage = AllStaticImages[myIndex]; #region Check The Page bool isThisPage = false; foreach (int CheckMaPage in CurrentStaticImage.DisplayPages) { if (CheckMaPage == CurrentPage) { isThisPage = true; break; } } if (!isThisPage) { return; } #endregion #region Draw the Static Image CurrentStaticImage.MDX_StaticImage.MDX_Position = CurrentStaticImage.DisplayLocation;//, new Size((CurrentStaticImage.DisplaySize.Width / 2), (CurrentStaticImage.DisplaySize.Height / 2))); CurrentStaticImage.MDX_StaticImage.MDX_Scale = XNA_SizeToRatioVector2(CurrentStaticImage.DisplaySize, CurrentStaticImage.MDX_StaticImage); CurrentStaticImage.MDX_StaticImage.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); #endregion } #endregion #region MDX Draw Bitmap Text public void DrawText(string input_name, DisplayTextLabel input_text, Point starting_location, Vector4 HostAreaRectangle) { if (input_text == null || input_text.FontText == "" || input_name == "") { return; } int FontIndex = -1; for (int i = 0; i < AllFusionFonts.Count; i++) { if (AllFusionFonts[i].FusionFontName == input_name) { FontIndex = i; break; } } if (FontIndex < 0) { return; } char[] TextToDisplay = input_text.FontText.ToCharArray(); float ScaleText = (input_text.FontSize / AllFusionFonts[FontIndex].FusionFontOriginalSize); float Seperatorfloat = 0.075f; Point CurrentPosition = starting_location; float TotalWidth = 0; float TotalHeight = 0; FontDisplayReturnValue FDRV = new FontDisplayReturnValue(); Rectangle thisCharRect = new Rectangle(); Vector4 thisCharOffset = new Vector4(0.0f, 0.0f, 0.0f, 0.0f); for (int i = 0; i < TextToDisplay.Length; i++) { FDRV = DrawText_FindCharacterIndexFDRV(TextToDisplay[i], FontIndex); thisCharRect = FDRV._Rectangle; thisCharOffset = FDRV._Offset; if (thisCharRect.Height * ScaleText > TotalHeight * ScaleText) { TotalHeight = thisCharRect.Height * ScaleText; } if (thisCharRect.Width == 0 && thisCharRect.Height == 0) { TotalWidth += thisCharOffset.X; TotalWidth += (Seperatorfloat * AllFusionFonts[FontIndex].FusionFontOriginalSize) * 4; TotalWidth += thisCharOffset.Z; continue; } TotalWidth += (float)((thisCharRect.Width) * ScaleText); if (i != TextToDisplay.Length - 1) { TotalWidth += (Seperatorfloat * AllFusionFonts[FontIndex].FusionFontOriginalSize) * ScaleText; } } float start_x = HostAreaRectangle.X +((HostAreaRectangle.Z - HostAreaRectangle.X) / 2.0f); float start_y = HostAreaRectangle.Y +((HostAreaRectangle.W - HostAreaRectangle.Y) / 2.0f); start_x -= TotalWidth / 2.0f; start_y -= TotalHeight / 2.0f; CurrentPosition = new Point((int)start_x, (int)start_y); FDRV = DrawText_FindCharacterIndexFDRV(TextToDisplay[0], FontIndex); thisCharRect = FDRV._Rectangle; thisCharOffset = FDRV._Offset; if (thisCharRect != Rectangle.Empty) { CurrentPosition.X += (int)thisCharOffset.X; CurrentPosition.Y += (int)thisCharOffset.Y; AllFusionFonts[FontIndex].FusionFontMainImage.DrawPortionAndOrAsFont(MDX_Graphics_Mode, new Vector2(ScaleText, ScaleText), CurrentPosition, thisCharRect, input_text.FontColour, Application_isBeingScaledBy, MDX_GDI_Graphics); CurrentPosition.X += (int)((thisCharRect.Width + (Seperatorfloat * AllFusionFonts[FontIndex].FusionFontOriginalSize)) * ScaleText); CurrentPosition.X += (int)thisCharOffset.Z; CurrentPosition.Y += (int)thisCharOffset.W; } for (int i = 1; i < TextToDisplay.Length; i++) { FDRV = DrawText_FindCharacterIndexFDRV(TextToDisplay[i], FontIndex); thisCharRect = FDRV._Rectangle; thisCharOffset = FDRV._Offset; if (thisCharRect != Rectangle.Empty) { CurrentPosition.X += (int)thisCharOffset.X; CurrentPosition.Y += (int)thisCharOffset.Y; AllFusionFonts[FontIndex].FusionFontMainImage.DrawPortionAndOrAsFont(MDX_Graphics_Mode, new Vector2(ScaleText, ScaleText), CurrentPosition, thisCharRect, input_text.FontColour, Application_isBeingScaledBy, MDX_GDI_Graphics); CurrentPosition.X += (int)((thisCharRect.Width + (Seperatorfloat * AllFusionFonts[FontIndex].FusionFontOriginalSize)) * ScaleText); CurrentPosition.X += (int)thisCharOffset.Z; CurrentPosition.Y += (int)thisCharOffset.W; } else { if (TextToDisplay[i] == ' ') { CurrentPosition.X += (int)((Seperatorfloat * AllFusionFonts[FontIndex].FusionFontOriginalSize) * 4); CurrentPosition.X += (int)thisCharOffset.Z; CurrentPosition.Y += (int)thisCharOffset.W; continue; } } } } public FontDisplayReturnValue DrawText_FindCharacterIndexFDRV(char tofindCharacter, int FusionFontIndex) { for (int i = 0; i < AllFusionFonts[FusionFontIndex].FusionFont_CharDefinitions.Count; i++) { if ((int)tofindCharacter == AllFusionFonts[FusionFontIndex].FusionFont_CharDefinitions[i].CharacterIntCode) { return new FontDisplayReturnValue(AllFusionFonts[FusionFontIndex].FusionFont_CharDefinitions[i].CroppingLocation, AllFusionFonts[FusionFontIndex].FusionFont_CharDefinitions[i].CharacterOffsetVector); } } return new FontDisplayReturnValue(new Rectangle(), new Vector4(0.0f, 0.0f, 0.0f, 0.0f)); } #endregion #region MDX Draw Variable Location Image public void MDX_DrawVariableLocationImage(int myIndex) { DisplayVariableLocationImage CurrentVariableLocationImage = AllStaticVariableLocationImages[myIndex]; #region Check The Page bool isThisPage = false; foreach (int CheckMaPage in CurrentVariableLocationImage.DisplayPages) { if (CheckMaPage == CurrentPage) { isThisPage = true; break; } } if (!isThisPage) { return; } #endregion #region Draw the Variable Location Image double _actualValue = 0.0; try { switch (CurrentVariableLocationImage.target.ToLower()) { case "analogue input": { foreach (AnalogueInputChannel _aic in AllAnalogueInputs) { if (_aic.id.ToLower() == CurrentVariableLocationImage.targetID.ToLower()) { _actualValue = _aic.CurrentValue; break; } } } break; case "variable": { foreach (Variable _var in AllVariables) { if (_var.variableReferenceName.ToLower() == CurrentVariableLocationImage.targetID.ToLower()) { _actualValue = (double)_var.variableValue; } } } break; default: //Unknown or Error break; } } catch (Exception) { } double _newLocation = 0.0; double _deltaLocation = CurrentVariableLocationImage.location_maximum - CurrentVariableLocationImage.location_minimum; double _deltaValue = CurrentVariableLocationImage.value_maximum - CurrentVariableLocationImage.value_minimum; _newLocation = ((_actualValue / _deltaValue) * _deltaLocation) + CurrentVariableLocationImage.location_minimum; switch (CurrentVariableLocationImage.translateAround) { case Axis.HORIZONTAL: CurrentVariableLocationImage.MDX_StaticImage.MDX_Position = new Point((int)_newLocation + CurrentVariableLocationImage.DisplayLocation.X, CurrentVariableLocationImage.DisplayLocation.Y); break; case Axis.VERTICAL: CurrentVariableLocationImage.MDX_StaticImage.MDX_Position = new Point(CurrentVariableLocationImage.DisplayLocation.X, (int)_newLocation + CurrentVariableLocationImage.DisplayLocation.Y); break; default: break; } CurrentVariableLocationImage.MDX_StaticImage.MDX_Scale = XNA_SizeToRatioVector2(CurrentVariableLocationImage.DisplaySize, CurrentVariableLocationImage.MDX_StaticImage); CurrentVariableLocationImage.MDX_StaticImage.Draw(MDX_Graphics_Mode, Application_isBeingScaledBy, MDX_GDI_Graphics); #endregion } #endregion #region MDX Draw Graph public void MDX_DrawGraph(int myIndex) { DisplayFusionGraph CurrentGraph = AllGraphs[myIndex]; #region Check The Page bool isThisPage = false; foreach (int CheckMaPage in CurrentGraph.DisplayPages) { if (CheckMaPage == CurrentPage) { isThisPage = true; break; } } if (!isThisPage) { return; } #endregion #region Draw the Graph { if (CurrentGraph.DataPoints.Count < 2) { return; } CurrentGraph.MDX_StaticImage.MDX_Position = CurrentGraph.DisplayLocation; CustomVertex.PositionColored[] _vx = new CustomVertex.PositionColored[CurrentGraph.DataPoints.Count]; for (int i = 0; i < CurrentGraph.DataPoints.Count; i++) { float _dataPoint = CurrentGraph.DataPoints[i]; _vx[i] = new CustomVertex.PositionColored(); _vx[i].Z = 0.0f; int _col = CurrentGraph.lineColour.ToArgb(); _vx[i].Color = _col; switch (CurrentGraph.graphingAxis) { case Axis.HORIZONTAL: { _vx[i].X = (float)CurrentGraph.DisplayLocation.X + (((float)i / (float)CurrentGraph.DataPoints.Count) * (float)CurrentGraph.DisplaySize.Width); _vx[i].Y = (float)CurrentGraph.DisplayLocation.Y + (float)CurrentGraph.DisplaySize.Height - ((_dataPoint / (float)(CurrentGraph.value_maximum - CurrentGraph.value_minimum)) * (float)CurrentGraph.DisplaySize.Height); } break; case Axis.VERTICAL: { _vx[i].Y = (float)CurrentGraph.DisplayLocation.Y + (((float)i / (float)CurrentGraph.DataPoints.Count) * (float)CurrentGraph.DisplaySize.Height); _vx[i].X = (float)CurrentGraph.DisplayLocation.X + ((_dataPoint / (float)(CurrentGraph.value_maximum - CurrentGraph.value_minimum)) * (float)CurrentGraph.DisplaySize.Width); } break; } _vx[i].X *= Application_isBeingScaledBy.X; _vx[i].Y *= Application_isBeingScaledBy.Y; } CurrentGraph.MDX_StaticImage.DrawGraph(MDX_Graphics_Mode, Application_isBeingScaledBy, new Vector2((float)CurrentGraph.DisplaySize.Width, (float)CurrentGraph.DisplaySize.Height), _vx, CurrentGraph.lineColour, CurrentGraph.lineThickness, MDX_GDI_Graphics); } #endregion } #endregion #region Get the Value of what to base a decision off of public static object BaseSelectionOffOf_Function(string monitorType, string monitorID) { #region What to Base Selection Off Of object SelectionBasis = null; switch (monitorType.ToLower()) { #region Base Selection off of a Variable case "variable": foreach (Variable checkVariable in AllVariables) { if (checkVariable.variableReferenceName == monitorID) { SelectionBasis = checkVariable.variableValue; break; } } break; #endregion #region Base Selection off of an Analogue Input case "analogue": case "analogue input": foreach (AnalogueInputChannel AIC in AllAnalogueInputs) { if (AIC.id == monitorID) { if (AIC.HistoryValues.Count <= 0) { break; } if (AIC.autoAverage) { double tempSelectionBasis = 0.0; foreach (double history_value_dbl in AIC.HistoryValues) { tempSelectionBasis += history_value_dbl; } SelectionBasis = (object)((double)tempSelectionBasis / (double)AIC.HistoryValues.Count); } else { SelectionBasis = (object)AIC.HistoryValues[AIC.HistoryValues.Count - 1]; } break; } } break; #endregion #region Error Or Unknown default: //Error or Unknown break; #endregion } return SelectionBasis; #endregion } #endregion #region Size to Ratio Vector public Vector2 XNA_SizeToRatioVector2(Size input_Size, FusionImage inputImage) { float _origWidth = 1.0f, _origHeight = 1.0f; if (MDX_Graphics_Mode == GraphicsMode.GDI || MDX_Graphics_Mode == GraphicsMode.LITE) { if (inputImage.MDX_Image.MDX_FusionBitmap == null) { return new Vector2(1.0f, 1.0f); } else { _origWidth = (float)inputImage.MDX_Image.MDX_FusionBitmap.Width; _origHeight = (float)inputImage.MDX_Image.MDX_FusionBitmap.Height; } } else { if (inputImage.MDX_Image.MDX_FusionTexture == null) { return new Vector2(1.0f, 1.0f); } else { _origWidth = (float)inputImage.MDX_FusionTextureInformation.Width; _origHeight = (float)inputImage.MDX_FusionTextureInformation.Height; } } float x = (float)((float)input_Size.Width / _origWidth); float y = (float)((float)input_Size.Height /_origHeight ); return new Vector2(x, y); } #endregion #region Mouse Click Events void MDX_Form_MouseClick_DOWN(object sender, MouseEventArgs e) { Console.WriteLine("Mouse Down"); int CurrentMouse_x = e.X; int CurrentMouse_y = e.Y; int BorderWidth = (this.Width - this.ClientSize.Width) / 2; int TitlebarHeight = this.Height - this.ClientSize.Height - 2 * BorderWidth; //CurrentMouse_x += BorderWidth; //CurrentMouse_y += TitlebarHeight + BorderWidth; for(int i = 0; i < AllDisplayButtons.Count; i++) { DisplayButton CurrentDisplayButton = AllDisplayButtons[i]; CurrentDisplayButton.isBeingClicked = false; if (CurrentMouse_x >= CurrentDisplayButton.MDX_x_left && CurrentMouse_x <= CurrentDisplayButton.MDX_x_right) { if (CurrentMouse_y >= CurrentDisplayButton.MDX_y_top && CurrentMouse_y <= CurrentDisplayButton.MDX_y_bottom) { if (CurrentDisplayButton.DisplayPage.Contains(CurrentPage)) { CurrentDisplayButton.isPressed = !CurrentDisplayButton.isPressed; CurrentDisplayButton.isBeingClicked = false; if (DoSomethingWithLogicCommand(CurrentDisplayButton.functionString, CurrentDisplayButton.functionTarget, CurrentDisplayButton.voteOpinion, CurrentDisplayButton.votePriority, CurrentDisplayButton.voteType, (object)CurrentDisplayButton.isPressed, CurrentDisplayButton.Time_lastDownVote, CurrentDisplayButton.Time_MinDeltaDownVote)) { AllDisplayButtons[i].Time_lastDownVote = DateTime.Now; } return; } } } } } void MDX_Form_MouseClick_UP(object sender, MouseEventArgs e) { Console.WriteLine("Mouse Up"); int CurrentMouse_x = e.X; int CurrentMouse_y = e.Y; int BorderWidth = (this.Width - this.ClientSize.Width) / 2; int TitlebarHeight = this.Height - this.ClientSize.Height - 2 * BorderWidth; //CurrentMouse_x += BorderWidth; //CurrentMouse_y += TitlebarHeight + BorderWidth; for (int i = 0; i < AllDisplayButtons.Count; i++) { DisplayButton CurrentDisplayButton = AllDisplayButtons[i]; CurrentDisplayButton.isBeingClicked = false; if (CurrentMouse_x >= CurrentDisplayButton.MDX_x_left && CurrentMouse_x <= CurrentDisplayButton.MDX_x_right) { if (CurrentMouse_y >= CurrentDisplayButton.MDX_y_top && CurrentMouse_y <= CurrentDisplayButton.MDX_y_bottom) { if (CurrentDisplayButton.DisplayPage.Contains(CurrentPage)) { if (CurrentDisplayButton.upClick_Enable) { if (DoSomethingWithLogicCommand(CurrentDisplayButton.upClick_Function, CurrentDisplayButton.upClick_FunctionTargetID, CurrentDisplayButton.upClick_VoteOpinion, CurrentDisplayButton.upClick_VotePriority, CurrentDisplayButton.upClick_VoteType, (object)CurrentDisplayButton.isPressed, CurrentDisplayButton.Time_lastUpVote, CurrentDisplayButton.Time_MinDeltaUpVote)) { AllDisplayButtons[i].Time_lastUpVote = DateTime.Now; } return; } } } } } } #endregion #region DirectX Check Mouse State -- UNSUPPORTED /* public void CheckMouseState() { try { MDX_Mouse.Poll(); MDX_MouseState = MDX_Mouse.CurrentMouseState; } catch (NotAcquiredException) { try { MDX_Mouse.Acquire(); } catch (InputException i) { Console.WriteLine(i.ToString()); } } catch (InputException e) { Console.WriteLine(e.ToString()); } } */ #endregion #region Sort All GUI Objects by Z-Order (0.0f is Front <--> 1.0f is Back) private void Sort_AllGUI_by_Z_OrderDepth() { #region Clear the List to start fresh AllZOrder_QuelleListe.Clear(); MDX_DebugLogging("Sorting Textures."); #endregion #region Add All GUI Lists to reference this as an index marker... { #region All Display Buttons for (int i = 0; i < AllDisplayButtons.Count; i++) { AllZOrder_QuelleListe.Add(new ZOrder_QuelleListeLookupItem(ZOrderListIndexMatrix.ENUM_DISPLAYBUTTONS, i, AllDisplayButtons[i].MDX_DisplayDepth)); } #endregion #region All Display MultiImages for (int i = 0; i < AllDisplayMultiImages.Count; i++) { AllZOrder_QuelleListe.Add(new ZOrder_QuelleListeLookupItem(ZOrderListIndexMatrix.ENUM_MULTIIMAGES, i, AllDisplayMultiImages[i].MDX_DisplayDepth)); } #endregion #region All Display RotateImages for (int i = 0; i < AllDisplayRotateImage.Count; i++) { AllZOrder_QuelleListe.Add(new ZOrder_QuelleListeLookupItem(ZOrderListIndexMatrix.ENUM_ROTATEIMAGES, i, AllDisplayRotateImage[i].MDX_DisplayDepth)); } #endregion #region All Variable Location Images for (int i = 0; i < AllStaticVariableLocationImages.Count; i++) { AllZOrder_QuelleListe.Add(new ZOrder_QuelleListeLookupItem(ZOrderListIndexMatrix.ENUM_VARAIBLELOCATION, i, AllStaticVariableLocationImages[i].MDX_DisplayDepth)); } #endregion #region All Static Images for (int i = 0; i < AllStaticImages.Count; i++) { AllZOrder_QuelleListe.Add(new ZOrder_QuelleListeLookupItem(ZOrderListIndexMatrix.ENUM_STATICIMAGES, i, AllStaticImages[i].MDX_DisplayDepth)); } #endregion #region All Graph Images for (int i = 0; i < AllGraphs.Count; i++) { AllZOrder_QuelleListe.Add(new ZOrder_QuelleListeLookupItem(ZOrderListIndexMatrix.ENUM_GRAPH, i, AllGraphs[i].MDX_DisplayDepth)); } #endregion } #endregion #region Sort Display Lists by MDX_DisplayDepth { if (AllZOrder_QuelleListe.Count != 0) { //MDX_QuickSortAlgorithm(0, AllZOrder_QuelleListe.Count - 1); MDX_BubbleSortAlgorithm(); AllZOrder_QuelleListe.Reverse(); } } #endregion } #endregion #region Bubble Sort Algorithm (For MDX_DisplayDepth) public void MDX_BubbleSortAlgorithm() { for (int i = (AllZOrder_QuelleListe.Count - 1); i >= 0; i--) { for (int j = 1; j <= i; j++) { if (AllZOrder_QuelleListe[j - 1]._ZOrder > AllZOrder_QuelleListe[j]._ZOrder) { ZOrder_QuelleListeLookupItem temp = new ZOrder_QuelleListeLookupItem(AllZOrder_QuelleListe[j - 1]); AllZOrder_QuelleListe[j - 1] = new ZOrder_QuelleListeLookupItem(AllZOrder_QuelleListe[j]); AllZOrder_QuelleListe[j] = new ZOrder_QuelleListeLookupItem(temp); } } } } #endregion #region Quick Sort Algorithm (For MDX_DisplayDepth) public void MDX_QuickSortAlgorithm(int left, int right) { int l_hold, r_hold, pivotINT; ZOrder_QuelleListeLookupItem pivot; l_hold = left; r_hold = right; pivot = new ZOrder_QuelleListeLookupItem(AllZOrder_QuelleListe[left]); while (left < right) { while ((AllZOrder_QuelleListe[right]._ZOrder >= pivot._ZOrder) && (left < right)) { right--; } if (left != right) { AllZOrder_QuelleListe[left].Replace(AllZOrder_QuelleListe[right]); left++; } while ((AllZOrder_QuelleListe[left]._ZOrder <= pivot._ZOrder) && (left < right)) { left++; } if (left != right) { AllZOrder_QuelleListe[right].Replace(AllZOrder_QuelleListe[left]); right--; } } AllZOrder_QuelleListe[left].Replace(pivot); pivotINT = left; left = l_hold; right = r_hold; if (left < pivotINT) { MDX_QuickSortAlgorithm(left, pivotINT - 1); } if (right > pivotINT) { MDX_QuickSortAlgorithm(pivotINT + 1, right); } } #endregion } }