/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 *************************************************************/


#ifndef CHART_BITMAPS_HRC
#define CHART_BITMAPS_HRC

#ifndef _SOLAR_HRC
#include <svl/solar.hrc>
#endif

#ifndef STD_MASKCOLOR
#define STD_MASKCOLOR Color { Red = 0xFF00; Green = 0x0000; Blue = 0xFF00; }
#endif

//-----------------------------------------------------------------------------
// chart types
// Images:

#define IMG_TYPE_COLUMN (RID_APP_START + 1)
#define IMG_TYPE_BAR    (RID_APP_START + 2)
#define IMG_TYPE_PIE    (RID_APP_START + 3)
#define IMG_TYPE_AREA   (RID_APP_START + 4)
#define IMG_TYPE_LINE   (RID_APP_START + 5)
#define IMG_TYPE_XY     (RID_APP_START + 6)
#define IMG_TYPE_BUBBLE (RID_APP_START + 7)
#define IMG_TYPE_NET    (RID_APP_START + 8)
#define IMG_TYPE_STOCK  (RID_APP_START + 9)
#define IMG_TYPE_COLUMN_LINE  (RID_APP_START + 10)

//-----------------------------------------------------------------------------
//Chart Subtypes
// Bitmaps:

//----------------------
// Column Chart Subtypes
#define BMP_COLUMNS_2D_1 (RID_APP_START + 1)
#define BMP_COLUMNS_2D_2 (RID_APP_START + 2)
#define BMP_COLUMNS_2D_3 (RID_APP_START + 3)

#define BMP_COLUMNS_3D (RID_APP_START + 4)
#define BMP_COLUMNS_3D_1 (RID_APP_START + 5)
#define BMP_COLUMNS_3D_2 (RID_APP_START + 6)
#define BMP_COLUMNS_3D_3 (RID_APP_START + 7)

#define BMP_SAEULE_3D_1 (RID_APP_START + 8)
#define BMP_SAEULE_3D_2 (RID_APP_START + 9)
#define BMP_SAEULE_3D_3 (RID_APP_START + 10)
#define BMP_SAEULE_3D_4 (RID_APP_START + 11)

#define BMP_KEGEL_3D_1 (RID_APP_START + 12)
#define BMP_KEGEL_3D_2 (RID_APP_START + 13)
#define BMP_KEGEL_3D_3 (RID_APP_START + 14)
#define BMP_KEGEL_3D_4 (RID_APP_START + 15)

#define BMP_PYRAMID_3D_1 (RID_APP_START + 16)
#define BMP_PYRAMID_3D_2 (RID_APP_START + 17)
#define BMP_PYRAMID_3D_3 (RID_APP_START + 18)
#define BMP_PYRAMID_3D_4 (RID_APP_START + 19)

//----------------------
// Bar Chart Subtypes

#define BMP_BARS_2D_1 (RID_APP_START + 20)
#define BMP_BARS_2D_2 (RID_APP_START + 21)
#define BMP_BARS_2D_3 (RID_APP_START + 22)

#define BMP_BARS_3D (RID_APP_START + 23)
#define BMP_BARS_3D_1 (RID_APP_START + 24)
#define BMP_BARS_3D_2 (RID_APP_START + 25)
#define BMP_BARS_3D_3 (RID_APP_START + 26)

#define BMP_ROEHRE_3D_1 (RID_APP_START + 27)
#define BMP_ROEHRE_3D_2 (RID_APP_START + 28)
#define BMP_ROEHRE_3D_3 (RID_APP_START + 29)
#define BMP_ROEHRE_3D_4 (RID_APP_START + 30)

#define BMP_KEGELQ_3D_1 (RID_APP_START + 31)
#define BMP_KEGELQ_3D_2 (RID_APP_START + 32)
#define BMP_KEGELQ_3D_3 (RID_APP_START + 33)
#define BMP_KEGELQ_3D_4 (RID_APP_START + 34)

#define BMP_PYRAMIDQ_3D_1 (RID_APP_START + 35)
#define BMP_PYRAMIDQ_3D_2 (RID_APP_START + 36)
#define BMP_PYRAMIDQ_3D_3 (RID_APP_START + 37)
#define BMP_PYRAMIDQ_3D_4 (RID_APP_START + 38)

//----------------------
// Pie and Donut Chart Subtypes

#define BMP_CIRCLES_2D (RID_APP_START + 39)
#define BMP_CIRCLES_2D_EXPLODED (RID_APP_START + 40)
#define BMP_CIRCLES_3D (RID_APP_START + 41)
#define BMP_CIRCLES_3D_EXPLODED (RID_APP_START + 42)
#define BMP_DONUT_2D (RID_APP_START + 43)
#define BMP_DONUT_2D_EXPLODED (RID_APP_START + 44)
#define BMP_DONUT_3D (RID_APP_START + 45)
#define BMP_DONUT_3D_EXPLODED (RID_APP_START + 46)

//----------------------
// Points and Lines Chart Subtypes

#define BMP_POINTS_XVALUES (RID_APP_START + 47)
#define BMP_POINTS_XCATEGORY (RID_APP_START + 48)
#define BMP_POINTS_STACKED (RID_APP_START + 49)


#define BMP_LINE_P_XVALUES (RID_APP_START + 50)
#define BMP_LINE_O_XVALUES (RID_APP_START + 51)
#define BMP_LINE3D_XVALUES (RID_APP_START + 52)

#define BMP_LINE_P_XCATEGORY (RID_APP_START + 53)
#define BMP_LINE_O_XCATEGORY (RID_APP_START + 54)
#define BMP_LINE3D_XCATEGORY (RID_APP_START + 55)

#define BMP_LINE_P_STACKED (RID_APP_START + 56)
#define BMP_LINE_O_STACKED (RID_APP_START + 57)
#define BMP_LINE3D_STACKED (RID_APP_START + 58)

#define BMP_LINE_P_XVALUES_SMOOTH (RID_APP_START + 59)
#define BMP_LINE_O_XVALUES_SMOOTH (RID_APP_START + 60)
#define BMP_LINE3D_XVALUES_SMOOTH (RID_APP_START + 61)

#define BMP_LINE_P_XCATEGORY_SMOOTH (RID_APP_START + 62)
#define BMP_LINE_O_XCATEGORY_SMOOTH (RID_APP_START + 63)
#define BMP_LINE3D_XCATEGORY_SMOOTH (RID_APP_START + 64)

#define BMP_LINE_P_STACKED_SMOOTH (RID_APP_START + 65)
#define BMP_LINE_O_STACKED_SMOOTH (RID_APP_START + 66)
#define BMP_LINE3D_STACKED_SMOOTH (RID_APP_START + 67)

//----------------------
// Area Chart Subtypes

#define BMP_AREAS_2D (RID_APP_START + 68)
#define BMP_AREAS_2D_1 (RID_APP_START + 69)
#define BMP_AREAS_2D_3 (RID_APP_START + 70)
#define BMP_AREAS_3D (RID_APP_START + 71)
#define BMP_AREAS_3D_1 (RID_APP_START + 72)
#define BMP_AREAS_3D_2 (RID_APP_START + 73)

//----------------------
// Net Chart Subtypes

#define BMP_NET (RID_APP_START + 74)
#define BMP_NET_STACK (RID_APP_START + 75)
#define BMP_NET_SYMB (RID_APP_START + 76)
#define BMP_NET_SYMB_STACK (RID_APP_START + 77)
#define BMP_NET_LINESYMB (RID_APP_START + 78)
#define BMP_NET_LINESYMB_STACK (RID_APP_START + 79)
#define BMP_NET_FILL (RID_APP_START + 80)
#define BMP_NET_FILL_STACK (RID_APP_START + 81)

//----------------------
// Stock Chart Subtypes

#define BMP_STOCK_1 (RID_APP_START + 82)
#define BMP_STOCK_2 (RID_APP_START + 83)
#define BMP_STOCK_3 (RID_APP_START + 84)
#define BMP_STOCK_4 (RID_APP_START + 85)

//----------------------
// Column + Line Chart Subtypes

#define BMP_COLUMN_LINE         (RID_APP_START + 86)
#define BMP_COLUMN_LINE_STACKED (RID_APP_START + 87)

//----------------------
// Bubble Chart Subtypes
#define BMP_BUBBLE_1            (RID_APP_START + 88)

//-----------------------------------------------------------------------------
//further Images:

//SchStatisticTabPage and SchDataStatisticsDlg part 1
#define BMP_INDICATE_BOTH_VERTI (RID_APP_START + 89)
#define BMP_INDICATE_UP (RID_APP_START + 90)
#define BMP_INDICATE_DOWN (RID_APP_START + 91)
#define BMP_INDICATE_BOTH_HORI (RID_APP_START + 97)
#define BMP_INDICATE_RIGHT (RID_APP_START + 98)
#define BMP_INDICATE_LEFT (RID_APP_START + 99)

//SchStatisticTabPage and SchDataStatisticsDlg part 2
#define BMP_REGRESSION_NONE (RID_APP_START + 92)
#define BMP_REGRESSION_LINEAR (RID_APP_START + 93)
#define BMP_REGRESSION_LOG (RID_APP_START + 94)
#define BMP_REGRESSION_EXP (RID_APP_START + 95)
#define BMP_REGRESSION_POWER (RID_APP_START + 96)

// hide-button for range-choosing
#define IMG_SELECTRANGE (RID_APP_START + 100)

// CHART_BITMAPS_HRC
#endif
