/**************************************************************
 *
 * 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_TABPAGES_HRC
#define CHART_TABPAGES_HRC

#include "ResourceIds.hrc"

//see attrib.hrc in old chart

//#define TP_LEGEND_POS 900
#define GRP_LEGEND                  1
#define FL_LEGEND_TEXTORIENT        2
#define FT_LEGEND_TEXTDIR           3
#define LB_LEGEND_TEXTDIR           4

//#define TP_DATA_DESCR 901

//#define TP_ALIGNMENT 902
////#define FL_ORDER 2
////#define RBT_SIDEBYSIDE 1
////#define RBT_UPDOWN 2
////#define RBT_DOWNUP 3
////#define RBT_AUTOORDER 4

#define FL_TEXTBREAK                3
#define CBX_TEXTBREAK               2
#define CBX_TEXTOVERLAP             4

//Seit 4/1998 koennen Texte frei gedreht werden: SCHATTR_TEXT_DEGREES
// ID's for title rotation tabpage
#define CTR_DIAL				6030
#define BTN_TXTSTACKED			6031
#define FT_DEGREES				6032
#define NF_ORIENT				6033
#define CTR_DUMMY				6034
#define FT_DUMMY				6035
#define FL_ALIGN				6037
#define FT_TEXTDIR              6038
#define LB_TEXTDIR              6039

/*
//Symbol-Tabpage (zum Teil sehr Aehnlich der SVX_AREA_TABPAGE) (obsolete)
//#define TP_SYMBOL                 906
#define RBT_COLOR                   1
#define RBT_GRADIENT                2
#define RBT_HATCHING                3
#define RBT_BITMAP                  4
#define RBT_INVISIBLE               5
#define LB_COLOR                    1
#define LB_GRADIENT                 2
#define LB_HATCHING                 3
#define LB_BITMAP                   4

#define GRP_FILL                    1
#define CTL_BITMAP_PREVIEW          6
*/

//------------
//from old chart tplabel.hrc

//#define TP_AXIS_LABEL					920

#define CB_AXIS_LABEL_SCHOW_DESCR		1

//#define FL_AXIS_LABEL_FORMATTING		2

#define FL_AXIS_LABEL_ORIENTATION		3
#define CT_AXIS_LABEL_DIAL				4
#define PB_AXIS_LABEL_TEXTSTACKED		5
#define FT_AXIS_LABEL_DEGREES			6
#define NF_AXIS_LABEL_ORIENT			7
#define FT_UNUSED						8
#define CT_UNUSED						9

#define FL_AXIS_LABEL_TEXTFLOW			10
#define CB_AXIS_LABEL_TEXTOVERLAP		11
#define CB_AXIS_LABEL_TEXTBREAK			12

#define FL_AXIS_LABEL_ORDER				13
#define RB_AXIS_LABEL_SIDEBYSIDE		14
#define RB_AXIS_LABEL_UPDOWN			15
#define RB_AXIS_LABEL_DOWNUP			16
#define RB_AXIS_LABEL_AUTOORDER			17

#define FL_SEPARATOR					18

#define FT_AXIS_TEXTDIR                 19
#define LB_AXIS_TEXTDIR                 20

//#define TP_AXIS_POSITIONS   904

#define FL_AXIS_LINE        1
#define FL_LABELS           2
#define FL_TICKS            3
#define FL_VERTICAL         4
#define FL_GRIDS            5

#define FT_CROSSES_OTHER_AXIS_AT        1
#define FT_AXIS_LABEL_DISTANCE			2
#define FT_PLACE_LABELS      			3
#define FT_MAJOR            			4
#define FT_MINOR            			5
#define FT_PLACE_TICKS                  6

#define LB_CROSSES_OTHER_AXIS_AT    1
#define LB_PLACE_LABELS             2
#define EDT_CROSSES_OTHER_AXIS_AT           3
#define EDT_CROSSES_OTHER_AXIS_AT_CATEGORY  4
#define EDT_AXIS_LABEL_DISTANCE			    5
#define LB_PLACE_TICKS              6

#define CB_AXIS_BETWEEN_CATEGORIES 1
#define CB_TICKS_INNER	2
#define CB_TICKS_OUTER	3
#define CB_MINOR_INNER	4
#define CB_MINOR_OUTER	5
#define CB_MAJOR_GRID   6
#define CB_MINOR_GRID   7

#define PB_MAJOR_GRID   1
#define PB_MINOR_GRID   2

#endif
