/**************************************************************
 * 
 * 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 _SOLAR_HRC
#include <svl/solar.hrc>
#endif

// RID_SCH_START is 30512 (see svl/solar.hrc)

// next free: 100

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

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

#define IMG_TYPE_COLUMN_HC (RID_SCH_START + 1)
#define IMG_TYPE_BAR_HC    (RID_SCH_START + 2)
#define IMG_TYPE_PIE_HC    (RID_SCH_START + 3)
#define IMG_TYPE_AREA_HC   (RID_SCH_START + 4)
#define IMG_TYPE_LINE_HC   (RID_SCH_START + 5)
#define IMG_TYPE_XY_HC     (RID_SCH_START + 6)
#define IMG_TYPE_BUBBLE_HC (RID_SCH_START + 7)
#define IMG_TYPE_NET_HC    (RID_SCH_START + 8)
#define IMG_TYPE_STOCK_HC  (RID_SCH_START + 9)
#define IMG_TYPE_COLUMN_LINE_HC  (RID_SCH_START + 10)

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

//----------------------
// Column Chart Subtypes
#define BMP_COLUMNS_2D_1_HC (RID_SCH_START + 1)
#define BMP_COLUMNS_2D_2_HC (RID_SCH_START + 2)
#define BMP_COLUMNS_2D_3_HC (RID_SCH_START + 3)

#define BMP_COLUMNS_3D_HC (RID_SCH_START + 4)
#define BMP_COLUMNS_3D_1_HC (RID_SCH_START + 5)
#define BMP_COLUMNS_3D_2_HC (RID_SCH_START + 6)
#define BMP_COLUMNS_3D_3_HC (RID_SCH_START + 7)

#define BMP_SAEULE_3D_1_HC (RID_SCH_START + 8)
#define BMP_SAEULE_3D_2_HC (RID_SCH_START + 9)
#define BMP_SAEULE_3D_3_HC (RID_SCH_START + 10)
#define BMP_SAEULE_3D_4_HC (RID_SCH_START + 11)

#define BMP_KEGEL_3D_1_HC (RID_SCH_START + 12)
#define BMP_KEGEL_3D_2_HC (RID_SCH_START + 13)
#define BMP_KEGEL_3D_3_HC (RID_SCH_START + 14)
#define BMP_KEGEL_3D_4_HC (RID_SCH_START + 15)

#define BMP_PYRAMID_3D_1_HC (RID_SCH_START + 16)
#define BMP_PYRAMID_3D_2_HC (RID_SCH_START + 17)
#define BMP_PYRAMID_3D_3_HC (RID_SCH_START + 18)
#define BMP_PYRAMID_3D_4_HC (RID_SCH_START + 19)

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

#define BMP_BARS_2D_1_HC (RID_SCH_START + 20)
#define BMP_BARS_2D_2_HC (RID_SCH_START + 21)
#define BMP_BARS_2D_3_HC (RID_SCH_START + 22)

#define BMP_BARS_3D_HC (RID_SCH_START + 23)
#define BMP_BARS_3D_1_HC (RID_SCH_START + 24)
#define BMP_BARS_3D_2_HC (RID_SCH_START + 25)
#define BMP_BARS_3D_3_HC (RID_SCH_START + 26)

#define BMP_ROEHRE_3D_1_HC (RID_SCH_START + 27)
#define BMP_ROEHRE_3D_2_HC (RID_SCH_START + 28)
#define BMP_ROEHRE_3D_3_HC (RID_SCH_START + 29)
#define BMP_ROEHRE_3D_4_HC (RID_SCH_START + 30)

#define BMP_KEGELQ_3D_1_HC (RID_SCH_START + 31)
#define BMP_KEGELQ_3D_2_HC (RID_SCH_START + 32)
#define BMP_KEGELQ_3D_3_HC (RID_SCH_START + 33)
#define BMP_KEGELQ_3D_4_HC (RID_SCH_START + 34)

#define BMP_PYRAMIDQ_3D_1_HC (RID_SCH_START + 35)
#define BMP_PYRAMIDQ_3D_2_HC (RID_SCH_START + 36)
#define BMP_PYRAMIDQ_3D_3_HC (RID_SCH_START + 37)
#define BMP_PYRAMIDQ_3D_4_HC (RID_SCH_START + 38)

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

#define BMP_CIRCLES_2D_HC (RID_SCH_START + 39)
#define BMP_CIRCLES_2D_EXPLODED_HC (RID_SCH_START + 40)
#define BMP_CIRCLES_3D_HC (RID_SCH_START + 41)
#define BMP_CIRCLES_3D_EXPLODED_HC (RID_SCH_START + 42)
#define BMP_DONUT_2D_HC (RID_SCH_START + 43)
#define BMP_DONUT_2D_EXPLODED_HC (RID_SCH_START + 44)
#define BMP_DONUT_3D_HC (RID_SCH_START + 45)
#define BMP_DONUT_3D_EXPLODED_HC (RID_SCH_START + 46)

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

#define BMP_POINTS_XVALUES_HC (RID_SCH_START + 47)
#define BMP_POINTS_XCATEGORY_HC (RID_SCH_START + 48)
#define BMP_POINTS_STACKED_HC (RID_SCH_START + 49)

#define BMP_LINE_P_XVALUES_HC (RID_SCH_START + 50)
#define BMP_LINE_O_XVALUES_HC (RID_SCH_START + 51)
#define BMP_LINE3D_XVALUES_HC (RID_SCH_START + 52)

#define BMP_LINE_P_XCATEGORY_HC (RID_SCH_START + 53)
#define BMP_LINE_O_XCATEGORY_HC (RID_SCH_START + 54)
#define BMP_LINE3D_XCATEGORY_HC (RID_SCH_START + 55)

#define BMP_LINE_P_STACKED_HC (RID_SCH_START + 56)
#define BMP_LINE_O_STACKED_HC (RID_SCH_START + 57)
#define BMP_LINE3D_STACKED_HC (RID_SCH_START + 58)

#define BMP_LINE_P_XVALUES_SMOOTH_HC (RID_SCH_START + 59)
#define BMP_LINE_O_XVALUES_SMOOTH_HC (RID_SCH_START + 60)
#define BMP_LINE3D_XVALUES_SMOOTH_HC (RID_SCH_START + 61)

#define BMP_LINE_P_XCATEGORY_SMOOTH_HC (RID_SCH_START + 62)
#define BMP_LINE_O_XCATEGORY_SMOOTH_HC (RID_SCH_START + 63)
#define BMP_LINE3D_XCATEGORY_SMOOTH_HC (RID_SCH_START + 64)

#define BMP_LINE_P_STACKED_SMOOTH_HC (RID_SCH_START + 65)
#define BMP_LINE_O_STACKED_SMOOTH_HC (RID_SCH_START + 66)
#define BMP_LINE3D_STACKED_SMOOTH_HC (RID_SCH_START + 67)

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

#define BMP_AREAS_2D_HC (RID_SCH_START + 68)
#define BMP_AREAS_2D_1_HC (RID_SCH_START + 69)
#define BMP_AREAS_2D_3_HC (RID_SCH_START + 70)
#define BMP_AREAS_3D_HC (RID_SCH_START + 71)
#define BMP_AREAS_3D_1_HC (RID_SCH_START + 72)
#define BMP_AREAS_3D_2_HC (RID_SCH_START + 73)

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

#define BMP_NET_HC (RID_SCH_START + 74)
#define BMP_NET_STACK_HC (RID_SCH_START + 75)
#define BMP_NET_SYMB_HC (RID_SCH_START + 76)
#define BMP_NET_SYMB_STACK_HC (RID_SCH_START + 77)
#define BMP_NET_LINESYMB_HC (RID_SCH_START + 78)
#define BMP_NET_LINESYMB_STACK_HC (RID_SCH_START + 79)
#define BMP_NET_FILL_HC (RID_SCH_START + 80)
#define BMP_NET_FILL_STACK_HC (RID_SCH_START + 81)

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

#define BMP_STOCK_1_HC (RID_SCH_START + 82)
#define BMP_STOCK_2_HC (RID_SCH_START + 83)
#define BMP_STOCK_3_HC (RID_SCH_START + 84)
#define BMP_STOCK_4_HC (RID_SCH_START + 85)

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

#define BMP_COLUMN_LINE_HC (RID_SCH_START + 86)
#define BMP_COLUMN_LINE_STACKED_HC (RID_SCH_START + 87)

//----------------------
// Bubble Chart Subtypes
#define BMP_BUBBLE_1_HC (RID_SCH_START + 88)

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

//SchStatisticTabPage and SchDataStatisticsDlg part 1
#define BMP_INDICATE_BOTH_VERTI_HC (RID_SCH_START + 89)
#define BMP_INDICATE_UP_HC (RID_SCH_START + 90)
#define BMP_INDICATE_DOWN_HC (RID_SCH_START + 91)
#define BMP_INDICATE_BOTH_HORI_HC (RID_SCH_START + 97)
#define BMP_INDICATE_RIGHT_HC (RID_SCH_START + 98)
#define BMP_INDICATE_LEFT_HC (RID_SCH_START + 99)

//SchStatisticTabPage and SchDataStatisticsDlg part 2
#define BMP_REGRESSION_NONE_HC (RID_SCH_START + 92)
#define BMP_REGRESSION_LINEAR_HC (RID_SCH_START + 93)
#define BMP_REGRESSION_LOG_HC (RID_SCH_START + 94)
#define BMP_REGRESSION_EXP_HC (RID_SCH_START + 95)
#define BMP_REGRESSION_POWER_HC (RID_SCH_START + 96)

// hide-button for range-choosing
#define IMG_SELECTRANGE_HC (RID_SCH_START + 100)
