/**************************************************************
 * 
 * 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.
 * 
 *************************************************************/


#include "HelpIds.hrc"
#include "TabPages.hrc"

TabPage TP_AXIS_LABEL
{
	HelpID	= HID_SCH_TP_AXIS_LABEL;
	Size	= MAP_APPFONT ( 260 , 185 ) ;
	Hide	= TRUE;

	CheckBox CB_AXIS_LABEL_SCHOW_DESCR
	{
	    HelpID = "chart2:CheckBox:TP_AXIS_LABEL:CB_AXIS_LABEL_SCHOW_DESCR";
		Pos	= MAP_APPFONT ( 6 , 6  ) ;
		Size	= MAP_APPFONT ( 248 , 12 ) ;

		Text [ en-US ] = "Sho~w labels";
	};

	FixedLine FL_AXIS_LABEL_ORIENTATION
	{
		Pos = MAP_APPFONT ( 6 , 91  ) ;
		Size = MAP_APPFONT ( 248 , 8 ) ;

		Text [ en-US ] = "Text orientation" ;
	};
		Control CT_AXIS_LABEL_DIAL
		{
			HelpId	= HID_SCH_ALIGNMENT_CTR_DIAL ;
            Pos     = MAP_APPFONT ( 12 , 105  ) ;
            Size    = MAP_APPFONT ( 43 , 43 ) ;
			Text    = "ABCD" ;
		};
        TriStateBox PB_AXIS_LABEL_TEXTSTACKED
        {
            HelpId  = HID_SCH_ALIGNMENT_STACKED ;
            Pos     = MAP_APPFONT ( 139 , 105  ) ;
            Size    = MAP_APPFONT ( 115 , 10 ) ;
            TabStop = TRUE ;
            Text [ en-US ] = "Ve~rtically stacked";
        };
		FixedText FT_AXIS_LABEL_DEGREES
		{
            Pos = MAP_APPFONT ( 93 , 122  ) ;
            Size = MAP_APPFONT ( 60 , 8 ) ;
			Text [ en-US ] = "~Degrees" ;
	};
	NumericField NF_AXIS_LABEL_ORIENT
	{
		HelpId = HID_SCH_ALIGNMENT_DEGREES ;
		Border = TRUE ;
        Pos = MAP_APPFONT ( 61 , 120  ) ;
		Size = MAP_APPFONT ( 28 , 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		StrictFormat = TRUE ;
        SpinSize = 5 ;
        Minimum = 0 ;
        Maximum = 359 ;
	};
	FixedText FT_UNUSED
	{
	    //only necessary for constructor of SvxWinOrientation
		Hide = TRUE ;
		Pos = MAP_APPFONT ( 204 , 117  ) ;
		Size = MAP_APPFONT ( 50 , 10 ) ;
    };
	Control CT_UNUSED
	{
	    //only necessary for constructor of SvxWinOrientation
		Hide	= TRUE ;
		Pos	= MAP_APPFONT ( 204 , 133  ) ;
		Size	= MAP_APPFONT ( 50 , 15 ) ;
	};
	FixedLine FL_SEPARATOR
	{
		Pos = MAP_APPFONT ( 128 , 33  ) ;
		Size = MAP_APPFONT ( 4 , 52 ) ;
    };

	FixedLine FL_AXIS_LABEL_TEXTFLOW
	{
		Pos	= MAP_APPFONT ( 133 , 22  ) ;
		Size	= MAP_APPFONT ( 121 , 8 ) ;

		Text [ en-US ] = "Text flow" ;
	};
		CheckBox CB_AXIS_LABEL_TEXTOVERLAP
		{
		    HelpID = "chart2:CheckBox:TP_AXIS_LABEL:CB_AXIS_LABEL_TEXTOVERLAP";
			Pos = MAP_APPFONT ( 139 , 33  ) ;
			Size = MAP_APPFONT ( 115 , 10 ) ;
			TabStop	= TRUE ;

			Text [ en-US ] = "O~verlap" ;
	};
		CheckBox CB_AXIS_LABEL_TEXTBREAK
		{
		    HelpID = "chart2:CheckBox:TP_AXIS_LABEL:CB_AXIS_LABEL_TEXTBREAK";
			Pos = MAP_APPFONT ( 139 , 47  ) ;
			Size = MAP_APPFONT ( 115 , 10 ) ;
			TabStop	= TRUE ;

			Text [ en-US ] = "~Break" ;
	};


	FixedLine FL_AXIS_LABEL_ORDER
	{
		Pos = MAP_APPFONT ( 6 , 22  ) ;
		Size = MAP_APPFONT ( 121 , 8 ) ;

		Text [ en-US ] = "Order" ;
	};
		RadioButton RB_AXIS_LABEL_SIDEBYSIDE
		{
		    HelpID = "chart2:RadioButton:TP_AXIS_LABEL:RB_AXIS_LABEL_SIDEBYSIDE";
			Pos = MAP_APPFONT ( 12 , 33  ) ;
			Size = MAP_APPFONT ( 112 , 10 ) ;
			TabStop = TRUE ;

			Text [ en-US ] = "~Tile" ;
	};
		RadioButton RB_AXIS_LABEL_UPDOWN
		{
		    HelpID = "chart2:RadioButton:TP_AXIS_LABEL:RB_AXIS_LABEL_UPDOWN";
			Pos = MAP_APPFONT ( 12 , 47  ) ;
			Size = MAP_APPFONT ( 112 , 10 ) ;
			TabStop = TRUE ;

			Text [ en-US ] = "St~agger odd" ;
	};
		RadioButton RB_AXIS_LABEL_DOWNUP
		{
		    HelpID = "chart2:RadioButton:TP_AXIS_LABEL:RB_AXIS_LABEL_DOWNUP";
			Pos = MAP_APPFONT ( 12 , 61  ) ;
			Size = MAP_APPFONT ( 112 , 10 ) ;
			TabStop = TRUE ;

			Text [ en-US ] = "Stagger ~even" ;
	};
		RadioButton RB_AXIS_LABEL_AUTOORDER
		{
		    HelpID = "chart2:RadioButton:TP_AXIS_LABEL:RB_AXIS_LABEL_AUTOORDER";
			Pos = MAP_APPFONT ( 12 , 75  ) ;
			Size = MAP_APPFONT ( 112 , 10 ) ;
			TabStop = TRUE ;

			Text [ en-US ] = "A~utomatic" ;
	};

    FixedText FT_AXIS_TEXTDIR
    {
        Pos = MAP_APPFONT ( 12 , 156 ) ;
        Size = MAP_APPFONT ( 64 , 8 ) ;
        Text [ en-US ] = "Te~xt direction" ;
    };
    ListBox LB_AXIS_TEXTDIR
    {
        HelpID = "chart2:ListBox:TP_AXIS_LABEL:LB_AXIS_TEXTDIR";
        Pos = MAP_APPFONT ( 78 , 154 ) ;
        Size = MAP_APPFONT ( 170 , 100 ) ;
        Border = TRUE;
        TabStop = TRUE;
        DropDown = TRUE;
    };
};

