#region << Using Directives >>
using System;
#endregion

namespace Volpe.Cafe.EspressoUI.Charts
{
    /// <summary>
    /// Specifies the chart style.
    /// </summary>
    [Serializable]
    enum ChartStyle
    {
        /// <summary>Specifies a default chart style, where data series layout and painting is auto-detected based on the type of
        ///   chart and data series style.</summary>
        /// <remarks>
        ///   When the <see cref="Chart.ChartStyle"/> is set to default (from an inheriting class), the <see cref="Chart"/> will
        ///   first attempt to use the series' <see cref="DataSeries.Style"/> property for painting the series. If the
        ///   <see cref="DataSeries.Style"/> property is also set to default, the <see cref="Chart"/> will paint the series as a
        ///   <see cref="ChartStyle.ScatterPlot"/>.
        ///   <br/>
        ///   When the <see cref="DataSeries.Style"/> is set to default, the data series will be painted based on the chart's
        ///   <see cref="Chart.ChartStyle"/> property.
        /// </remarks>
        Default = 0,

        /// <summary>Specifies a Scatter Plot Chart with filled plot points.</summary>
        ScatterPlot = 0,
        /// <summary>Specifies a Scatter Plot Chart with hollow plot points.</summary>
        ScatterPlotAlt = 1,
        /// <summary>Specifies a Line Chart.</summary>
        Line = 2,
        ///// <summary>Specifies a Stacked Bar Chart (may be Horizontal or Vertical depending on grid orientation).</summary>
        //StackedLine = 3,
        /// <summary>Specifies a Bar Chart (may be Horizontal or Vertical depending on grid orientation).</summary>
        Bar = 4,
        /// <summary>Specifies a Stacked Bar Chart (may be Horizontal or Vertical depending on grid orientation).</summary>
        StackedBar = 5,

        // not-implemented
        /// <summary>Specifies a Pie Chart.</summary>
        Pie = 6,
    }
    /// <summary>
    /// Specifies the painting style of a bar chart.
    /// </summary>
    [Serializable]
    enum BarChartPaintStyle
    {
        /// <summary>The Bar Chart's values are painted as continuous bars, starting at the X-axis and up to the value, crossing
        ///   the Y-axis' "zero" point (if present).</summary>
        StartAtXAxis = 0,
        /// <summary>The Bar Chart's values are painted starting at Y-axis' "zero" point and up to the value, in the positive or
        ///   negative direction.</summary>
        AwayFromZero = 1
    }
    /// <summary>
    /// Specifies the chart's grid and axis orientation.
    /// </summary>
    [Serializable]
    enum GridOrientation
    {
        /// <summary>Specifies default grid orientation with the (0,0) point located at the bottom-left corner of the grid.</summary>
        Default = 0,
        /// <summary>Specifies flipped grid orientation with the (0,0) point located at the top-left corner of the grid.</summary>
        Flipped = 1,
        /// <summary>Specifies a grid orientation with the Category and Values axis swapped and the (0,0) point located at the
        ///   bottom-left corner of the grid.</summary>
        Swapped = 2,
        /// <summary>Specifies a grid orientation with the Category and Values axis swapped and the (0,0) point located at the
        ///   top-left corner of the grid.</summary>
        SwappedAndFlipped = 3
    }
    /// <summary>
    /// Specifies the dock location of the legend in the chart area.
    /// </summary>
    [Serializable]
    enum LegendDockStyle
    {
        /// <summary>The legend is docked at the top-center of the chart area.</summary>
        Top = 0,
        /// <summary>The legend is docked at the top-right edge of the chart area.</summary>
        Right = 1,
        /// <summary>The legend is docked at the bottom-center of the chart area.</summary>
        Bottom = 2,
        /// <summary>The legend is docked at the top-left edge of the chart area.</summary>
        Left = 3
    }
    /// <summary>
    /// Specifies the type of axis, whether the chart's axis is category axis, primary values, or secondary values. When binding
    /// data series to a chart, specifies whether the series uses primary or secondary values axis on a chart.
    /// </summary>
    [Serializable]
    enum AxisType
    {
        /// <summary>Specifies the chart's category axis.</summary>
        Category = 0,
        /// <summary>Specifies the chart's primary axis.</summary>
        Primary = 1,
        /// <summary>Specifies the chart's secondary axis.</summary>
        Secondary = 2
    }
    /// <summary>
    /// Specifies the flow direction of the chart's axis.
    /// </summary>
    [Serializable]
    enum AxisDirection
    {
        /// <summary>The chart's axis flows from left-to-right.</summary>
        LeftToRight = 0,
        /// <summary>The chart's axis flows from bottom-to-top.</summary>
        BottomToTop = 1,
        /// <summary>The chart's axis flows from top-to-bottom.</summary>
        TopToBottom = 2
    }
    /// <summary>
    /// Specifies the dock location of the chart's axis.
    /// </summary>
    [Serializable]
    enum AxisDockStyle
    {
        /// <summary>The chart's axis is docked at the top edge of the grid.</summary>
        Top = 0,
        /// <summary>The chart's axis is docked at the right edge of the grid.</summary>
        Right = 1,
        /// <summary>The chart's axis is docked at the bottom edge of the grid.</summary>
        Bottom = 2,
        /// <summary>The chart's axis is docked at the left edge of the grid.</summary>
        Left = 3
    }
    /// <summary>
    /// Specifies which of the grid elements should be automatically painted on the chart.
    /// </summary>
    [Flags]
    [Serializable]
    enum PaintedGridElements : uint
    {
        /// <summary>Specifies that the chart will not automatically paint any of the grid elements. All grid elements should be user-painted.</summary>
        None        = 0,
        /// <summary>The chart's grid will be painted on the chart.</summary>
        PaintGrid   = 1U << 0,
        /// <summary>The chart's legend will be painted on the chart.</summary>
        PaintLegend = 1U << 1,
        /// <summary>The chart's axes will be painted on the chart.</summary>
        PaintAxes   = 1U << 2,
        /// <summary>The data series will be painted on the chart.</summary>
        PaintSeries = 1U << 3,
        /// <summary>Specifies that the chart will automatically paint all of the grid elements.</summary>
        All         = PaintGrid | PaintLegend | PaintAxes | PaintSeries
    }
    /// <summary>
    /// Specifies the animation effect to display on the chart when a mouse is dragged accross the chart's grid while a mouse
    /// button is in a pressed down state.
    /// </summary>
    [Serializable]
    enum AnimationEffect
    {
        /// <summary>Specifies that no animation effect is defined.</summary>
        None = 0,
        /// <summary>Specifies a swipe animation effect.</summary>
        Swipe = 1,
        /// <summary>Specifies a slide animation effect.</summary>
        Slide = 2,
        /// <summary>Specifies a fade animation effect.</summary>
        Fade = 3,
        /// <summary>Specifies a rotation animation effect.</summary>
        Rotate = 4,
        /// <summary>Specifies a 3D rotation animation effect around the X-, Y-, or Z-axis. 3D rotation around the Z-axis produces a similar animation effect as the <see cref="AnimationEffect.Rotate"/>.</summary>
        Rotate3D = 5
    }
    /// <summary>
    /// Specifies the axis around which to rotate the chart when the <see cref="AnimationEffect.Rotate3D"/> animation effect is used.
    /// </summary>
    [Serializable]
    enum RotationAxis
    {
        /// <summary>Specifies a rotation around the X-axis.</summary>
        X = 0,
        /// <summary>Specifies a rotation around the Y-axis.</summary>
        Y = 1,
        /// <summary>Specifies a rotation around the Z-axis. 3D rotation around the Z-axis produces a similar animation effect as the <see cref="AnimationEffect.Rotate"/>.</summary>
        Z = 2
    }

    /// <summary>
    /// Specifies the user action that triggered the <see cref="Chart.ChangeView"/> event.
    /// </summary>
    [Serializable]
    enum ChangeViewTrigger
    {
        /// <summary>Specifies that the <see cref="Chart.ChangeView"/> event was triggered from any user input or from code.</summary>
        Any = 0,
        /// <summary>Specifies that a mouse input initiated a chart's <see cref="Chart.ChangeView"/> event.</summary>
        Mouse = 1,
        /// <summary>Specifies that a keyboard input initiated a chart's <see cref="Chart.ChangeView"/> event.</summary>
        Keyboard = 2,
        /// <summary>Specifies that a context menu selection initiated a chart's <see cref="Chart.ChangeView"/> event.</summary>
        ContextMenu = 3
    }
}
