/Scenes/UserInterfaces/Designs/SliderDesign.cs
C# | 247 lines | 158 code | 21 blank | 68 comment | 17 complexity | 1ddba9be48118f241c361b74a4f8cac8 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 the slider control.
- /// </summary>
- public class SliderDesign : TextControlDesign
- {
- #region Constants
- /// <summary>
- /// The current version of the implementation of this class.
- /// </summary>
- private const int VersionNumber = 1;
- #endregion
-
- #region Tracker (Public)
- /// <summary>
- /// The "knob" of the slider which visualize the current value
- /// (in enabled-state).
- /// </summary>
- /// <value>
- /// The tracker.
- /// </value>
- public Material2DColored Tracker
- {
- get;
- set;
- }
- #endregion
-
- #region DisabledTracker (Public)
- /// <summary>
- /// The "knob" of the slider which visualize the current value
- /// (in disabled-state).
- /// </summary>
- /// <value>
- /// The disabled tracker.
- /// </value>
- public Material2DColored DisabledTracker
- {
- get;
- set;
- }
- #endregion
-
- #region Trackerbar (Public)
- /// <summary>
- /// The visual design of the tracker-bar (in enabled-state).
- /// </summary>
- /// <value>
- /// The trackerbar.
- /// </value>
- public Material2DColored Trackerbar
- {
- get;
- set;
- }
- #endregion
-
- #region DisabledTrackerbar (Public)
- /// <summary>
- /// The visual design of the tracker-bar (in disabled-state).
- /// </summary>
- /// <value>
- /// The disabled trackerbar.
- /// </value>
- public Material2DColored DisabledTrackerbar
- {
- 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 Slider)
- {
- Slider slider = (Slider)control;
- switch (slider.State)
- {
- case ElementState.Disabled:
- // Draw the tracker-bar
- DrawStyle(slider, DisabledTrackerbar, slider.TrackbarDrawArea);
-
- // and the tracker-knob in "disabled" designs
- DrawStyle(slider, DisabledTracker, slider.MarkerDrawArea);
- break;
-
- case ElementState.Enabled:
- case ElementState.Hovered:
- case ElementState.Pressed:
- // Draw the tracker-bar
- DrawStyle(slider, Trackerbar, slider.TrackbarDrawArea);
-
- // and display the tracker "knob" too
- // but at first we have to check if the control is in "hover mode"
- bool isInHoverMode = Hover != null &&
- slider.State == ElementState.Hovered;
- // before we can draw the style
- DrawStyle(slider, isInHoverMode
- ? Hover
- : Tracker,
- slider.MarkerDrawArea);
- break;
- } // switch
- } // if
- else
- {
- throw new InvalidOperationException("The given control '" + control +
- "' is no 'Slider'.");
- } // 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
- // Tracker style
- bool hasTrackerDesign = Tracker != null;
- dataWriter.Write(hasTrackerDesign);
- if (hasTrackerDesign)
- {
- SaveMaterial(dataWriter, Tracker);
- } // if
-
- // DisabledTracker style
- bool hasDisabledTrackerDesign = DisabledTracker != null;
- dataWriter.Write(hasDisabledTrackerDesign);
- if (hasDisabledTrackerDesign)
- {
- SaveMaterial(dataWriter, DisabledTracker);
- } // if
-
- // Trackerbar style
- bool hasTrackerbarDesign = Trackerbar != null;
- dataWriter.Write(hasTrackerbarDesign);
- if (hasTrackerbarDesign)
- {
- SaveMaterial(dataWriter, Trackerbar);
- } // if
-
- // DisabledTrackerbar style
- bool hasDisabledTrackerbarDesign = DisabledTrackerbar != null;
- dataWriter.Write(hasDisabledTrackerbarDesign);
- if (hasDisabledTrackerbarDesign)
- {
- SaveMaterial(dataWriter, DisabledTrackerbar);
- } // 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:
- // Tracker style
- bool hasTrackerDesign = dataReader.ReadBoolean();
- if (hasTrackerDesign)
- {
- Tracker = LoadMaterial(dataReader);
- } // if
- else
- {
- Tracker = null;
- } // else
-
- // DisabledTracker style
- bool hasDisabledTrackerDesign = dataReader.ReadBoolean();
- if (hasDisabledTrackerDesign)
- {
- DisabledTracker = LoadMaterial(dataReader);
- } // if
- else
- {
- DisabledTracker = null;
- } // else
-
- // Trackerbar style
- bool hasTrackerbarDesign = dataReader.ReadBoolean();
- if (hasTrackerbarDesign)
- {
- Trackerbar = LoadMaterial(dataReader);
- } // if
- else
- {
- Trackerbar = null;
- } // else
-
- // DisabledTrackerbar style
- bool hasDisabledTrackerbarDesign = dataReader.ReadBoolean();
- if (hasDisabledTrackerbarDesign)
- {
- DisabledTrackerbar = LoadMaterial(dataReader);
- } // if
- else
- {
- DisabledTrackerbar = null;
- } // else
- break;
-
- default:
- Log.InvalidVersionWarning(GetType().Name, version, VersionNumber);
- break;
- } // switch
- }
- #endregion
- }
- }