/Scenes/UserInterfaces/Designs/CheckboxDesign.cs
C# | 370 lines | 263 code | 32 blank | 75 comment | 37 complexity | ff75d05d92fab8b002ccc7c9a4d1d18d MD5 | raw file
Possible License(s): Apache-2.0
- using System;
- using System.IO;
- using Delta.Rendering.Basics.Materials;
- using Delta.Scenes.Enums;
- using Delta.Scenes.UserInterfaces.Controls;
- using Delta.Utilities;
- using Delta.Utilities.Datatypes;
-
- namespace Delta.Scenes.UserInterfaces.Designs
- {
- /// <summary>
- /// The design for a Checkbox or RadioButton control.
- /// </summary>
- public class CheckboxDesign : TextControlDesign
- {
- #region Constants
- /// <summary>
- /// The current version of the implementation of this class.
- /// </summary>
- private const int VersionNumber = 1;
- #endregion
-
- #region CheckedSymbol (Public)
- /// <summary>
- /// Represents the design if the "Checked" property is enabled
- /// (control enabled state).
- /// </summary>
- public Material2DColored CheckedSymbol
- {
- get;
- set;
- }
- #endregion
-
- #region CheckedSymbolHover (Public)
- /// <summary>
- /// Represents the design if the "Checked" property is enabled and the
- /// control is hovered.
- /// </summary>
- public Material2DColored CheckedSymbolHover
- {
- get;
- set;
- }
- #endregion
-
- #region DisabledCheckedSymbol (Public)
- /// <summary>
- /// Represents the design if the "Checked" property is enabled
- /// (control disabled state).
- /// </summary>
- public Material2DColored DisabledCheckedSymbol
- {
- get;
- set;
- }
- #endregion
-
- #region UncheckedSymbol (Public)
- /// <summary>
- /// Represents the design if the "Checked" property is not enabled
- /// (control enabled state).
- /// </summary>
- public Material2DColored UncheckedSymbol
- {
- get;
- set;
- }
- #endregion
-
- #region UncheckedSymbolHover (Public)
- /// <summary>
- /// Represents the design if the "Checked" property is not enabled and the
- /// control is hovered.
- /// </summary>
- public Material2DColored UncheckedSymbolHover
- {
- get;
- set;
- }
- #endregion
-
- #region DisabledUncheckedSymbol (Public)
- /// <summary>
- /// Represents the design if the "Checked" property is not enabled
- /// (control disabled state).
- /// </summary>
- public Material2DColored DisabledUncheckedSymbol
- {
- get;
- set;
- }
- #endregion
-
- #region DrawControl (Public)
- /// <summary>
- /// Draw control
- /// </summary>
- /// <param name="control">Control</param>
- /// <param name="drawArea">Draw area</param>
- public override void DrawControl(BaseControl control, Rectangle drawArea)
- {
- if (control is Checkbox)
- {
- Checkbox checkbox = (Checkbox)control;
- switch (checkbox.State)
- {
- case ElementState.Disabled:
- // At first we have to draw the text background (if is set)
- if (DisabledTextBackground != null)
- {
- DrawStyle(checkbox, DisabledTextBackground,
- checkbox.TextDrawArea);
- } // if
-
- Material2DColored disabledCheckboxSymbol = (checkbox.IsChecked)
- ? DisabledCheckedSymbol
- : DisabledUncheckedSymbol;
- DrawStyle(checkbox, disabledCheckboxSymbol,
- checkbox.CheckedSymbolArea.DrawArea);
- break;
-
- case ElementState.Enabled:
- case ElementState.Hovered:
- case ElementState.Pressed:
- // At first we have to draw the text background (if is set)
- if (TextBackground != null)
- {
- DrawStyle(checkbox, TextBackground, checkbox.TextDrawArea);
- }
-
- // Special drawing code for the hovered state
- if (checkbox.State == ElementState.Hovered)
- {
- // Figure out if we have to show the checked or the unchecked
- // symbol
- // Note: We only can draw a hover symbol if there is one,
- // otherwise we just draw the normal one
- Material2DColored hoveredCheckboxSymbol;
- if (checkbox.IsChecked)
- {
- hoveredCheckboxSymbol = (CheckedSymbolHover != null)
- ? CheckedSymbolHover
- : CheckedSymbol;
- } // if
- else
- {
- hoveredCheckboxSymbol = (UncheckedSymbolHover != null)
- ? UncheckedSymbolHover
- : UncheckedSymbol;
- } // else
-
- DrawStyle(checkbox, hoveredCheckboxSymbol,
- checkbox.CheckedSymbolArea.DrawArea);
- } // if
- else // Enabled or Pressed state
- {
- Material2DColored checkboxSymbol = (checkbox.IsChecked)
- ? CheckedSymbol
- : UncheckedSymbol;
- DrawStyle(checkbox, checkboxSymbol,
- checkbox.CheckedSymbolArea.DrawArea);
- } // else
- break;
- } // switch
- } // if
- else
- {
- throw new InvalidOperationException("The given control '" + control +
- "' is no 'Checkbox'.");
- } // else
- }
- #endregion
-
- #region Save (Public)
- /// <summary>
- /// Saves all data which are necessary to restore the object again.
- /// </summary>
- /// <param name="dataWriter">The writer which contains the stream where the data should be saved
- /// into now.</param>
- public override void Save(BinaryWriter dataWriter)
- {
- // At first we write the data of the base class
- base.Save(dataWriter);
-
- // and then save the version of the current data format
- dataWriter.Write(VersionNumber);
-
- // before we can finally save the properties
- // UncheckedSymbol style
- bool hasUncheckedSymbol = UncheckedSymbol != null;
- dataWriter.Write(hasUncheckedSymbol);
- if (hasUncheckedSymbol)
- {
- SaveMaterial(dataWriter, UncheckedSymbol);
- } // if
-
- // UncheckedSymbolHover style
- bool hasUncheckedSymbolHover = UncheckedSymbolHover != null;
- dataWriter.Write(hasUncheckedSymbolHover);
- if (hasUncheckedSymbolHover)
- {
- SaveMaterial(dataWriter, UncheckedSymbolHover);
- } // if
-
- // DisabledUncheckedSymbol style
- bool hasDisabledUncheckedSymbol = DisabledUncheckedSymbol != null;
- dataWriter.Write(hasDisabledUncheckedSymbol);
- if (hasDisabledUncheckedSymbol)
- {
- SaveMaterial(dataWriter, DisabledUncheckedSymbol);
- } // if
-
- // Checked style
- bool hasCheckedDesign = CheckedSymbol != null;
- dataWriter.Write(hasCheckedDesign);
- if (hasCheckedDesign)
- {
- SaveMaterial(dataWriter, CheckedSymbol);
- } // if
-
- // CheckedHover style
- bool hasCheckedHoverDesign = CheckedSymbolHover != null;
- dataWriter.Write(hasCheckedHoverDesign);
- if (hasCheckedHoverDesign)
- {
- SaveMaterial(dataWriter, CheckedSymbolHover);
- } // if
-
- // DisabledChecked style
- bool hasDisabledCheckedDesign = DisabledCheckedSymbol != null;
- dataWriter.Write(hasDisabledCheckedDesign);
- if (hasDisabledCheckedDesign)
- {
- SaveMaterial(dataWriter, DisabledCheckedSymbol);
- } // if
-
- // TextBackground style
- bool hasTextBackgroundDesign = TextBackground != null;
- dataWriter.Write(hasTextBackgroundDesign);
- if (hasTextBackgroundDesign)
- {
- SaveMaterial(dataWriter, TextBackground);
- } // if
-
- // DisabledTextBackground style
- bool hasDisabledTextBackgroundDesign = DisabledTextBackground != null;
- dataWriter.Write(hasDisabledTextBackgroundDesign);
- if (hasDisabledTextBackgroundDesign)
- {
- SaveMaterial(dataWriter, DisabledTextBackground);
- } // if
- }
- #endregion
-
- #region Load (Public)
- /// <summary>
- /// Loads and restores all previously saved values that belongs to this
- /// class only from the given data reader.
- /// </summary>
- /// <param name="dataReader">The reader which contains the stream with the saved data which needs to
- /// be loaded now.</param>
- public override void Load(BinaryReader dataReader)
- {
- // At first we need to load all data of the base class
- base.Load(dataReader);
-
- // and then check which version of the data need to load now
- int version = dataReader.ReadInt32();
- switch (version)
- {
- // Version 1
- case VersionNumber:
- // UncheckedSymbol style
- bool hasUncheckedSymbol = dataReader.ReadBoolean();
- if (hasUncheckedSymbol)
- {
- UncheckedSymbol = LoadMaterial(dataReader);
- } // if
- else
- {
- UncheckedSymbol = null;
- } // else
-
- // UncheckedSymbolHover style
- bool hasUncheckedSymbolHover = dataReader.ReadBoolean();
- if (hasUncheckedSymbolHover)
- {
- UncheckedSymbolHover = LoadMaterial(dataReader);
- } // if
- else
- {
- UncheckedSymbolHover = null;
- } // else
-
- // DisabledUncheckedSymbol style
- bool hasDisabledUncheckedSymbol = dataReader.ReadBoolean();
- if (hasDisabledUncheckedSymbol)
- {
- DisabledUncheckedSymbol = LoadMaterial(dataReader);
- } // if
- else
- {
- DisabledUncheckedSymbol = null;
- } // else
-
- // Checked style
- bool hasCheckedDesign = dataReader.ReadBoolean();
- if (hasCheckedDesign)
- {
- CheckedSymbol = LoadMaterial(dataReader);
- } // if
- else
- {
- CheckedSymbol = null;
- } // else
-
- // CheckedHover style
- bool hasCheckedHoverDesign = dataReader.ReadBoolean();
- if (hasCheckedHoverDesign)
- {
- CheckedSymbolHover = LoadMaterial(dataReader);
- } // if
- else
- {
- CheckedSymbolHover = null;
- } // else
-
- // DisabledChecked style
- bool hasDisabledCheckedDesign = dataReader.ReadBoolean();
- if (hasDisabledCheckedDesign)
- {
- DisabledCheckedSymbol = LoadMaterial(dataReader);
- } // if
- else
- {
- DisabledCheckedSymbol = null;
- } // else
-
- // TextBackground style
- bool hasTextBackgroundDesign = dataReader.ReadBoolean();
- if (hasTextBackgroundDesign)
- {
- TextBackground = LoadMaterial(dataReader);
- } // if
- else
- {
- TextBackground = null;
- } // else
-
- // DisabledTextBackground style
- bool hasDisabledTextBackgroundDesign = dataReader.ReadBoolean();
- if (hasDisabledTextBackgroundDesign)
- {
- DisabledTextBackground = LoadMaterial(dataReader);
- } // if
- else
- {
- DisabledTextBackground = null;
- } // else
- break;
-
- default:
- Log.InvalidVersionWarning(GetType().Name, version, VersionNumber);
- break;
- } // switch
- }
- #endregion
- }
- }