/**************************************************************
 * 
 * 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 "tp_SeriesToAxis.hrc"

TabPage TP_OPTIONS
{
    HelpID = "chart2:TabPage:TP_OPTIONS";
	Hide = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 260 , 185 ) ;
	FixedLine 1
	{
		Pos = MAP_APPFONT ( 6 , 6  ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
		Text [ en-US ] = "Align data series to";
	};
	RadioButton RBT_OPT_AXIS_1
	{
	    HelpID = "chart2:RadioButton:TP_OPTIONS:RBT_OPT_AXIS_1";
		Pos = MAP_APPFONT ( 12 , 20  ) ;
		Size = MAP_APPFONT ( 80 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Primary Y axis";
	};
	RadioButton RBT_OPT_AXIS_2
	{
	    HelpID = "chart2:RadioButton:TP_OPTIONS:RBT_OPT_AXIS_2";
		Pos = MAP_APPFONT ( 12 , 34  ) ;
		Size = MAP_APPFONT ( 80 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Secondary Y axis";
	};

	FixedLine GB_BAR
	{
		Pos = MAP_APPFONT ( 6 , 50  ) ;
		Size = MAP_APPFONT ( 248 , 8 ) ;
		Text [ en-US ] = "Settings";
	};
	FixedText FT_OVERLAP
	{
        Pos = MAP_APPFONT ( 12 , 80 ) ;
		Size = MAP_APPFONT ( 47 , 8 ) ;
		Text [ en-US ] = "~Overlap";
	};

	MetricField MT_OVERLAP
	{
	    HelpID = "chart2:MetricField:TP_OPTIONS:MT_OVERLAP";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 63 , 78 ) ;
		Size = MAP_APPFONT ( 40 , 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = -100 ;
		Maximum = 100 ;
		StrictFormat = TRUE ;
		Unit = FUNIT_CUSTOM ;
		CustomUnitText  = " %" ;
		First = 1 ;
		Last = 100 ;
		SpinSize = 1 ;
		DecimalDigits = 0 ;
	};

	FixedText FT_GAP
	{
        Pos = MAP_APPFONT ( 12 , 64 ) ;
		Size = MAP_APPFONT ( 47 , 8 ) ;
		Text [ en-US ] = "~Spacing";
	};

	MetricField MT_GAP
	{
	    HelpID = "chart2:MetricField:TP_OPTIONS:MT_GAP";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 63 , 62 ) ;
		Size = MAP_APPFONT ( 40 , 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		Maximum = 600 ;
		StrictFormat = TRUE ;
		Unit = FUNIT_CUSTOM ;
		CustomUnitText  = " %" ;
		First = 1 ;
		Last = 100 ;
		SpinSize = 1 ;
		DecimalDigits = 0 ;
	};

	CheckBox CB_CONNECTOR
	{
	    HelpID = "chart2:CheckBox:TP_OPTIONS:CB_CONNECTOR";
        Pos = MAP_APPFONT ( 12 , 97 ) ;
		Size = MAP_APPFONT ( 200 , 10 ) ;
		TabStop = TRUE ;
        Text [ en-US ] = "Connection lines";
	};

    CheckBox CB_BARS_SIDE_BY_SIDE
    {
        HelpID = "chart2:CheckBox:TP_OPTIONS:CB_BARS_SIDE_BY_SIDE";
        Pos = MAP_APPFONT ( 12 , 97 ) ;
        Size = MAP_APPFONT ( 200 , 10 ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "Show ~bars side by side";
    };
    
    FixedLine FL_PLOT_OPTIONS
    {
        Pos = MAP_APPFONT ( 6 , 113  ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
        Text [ en-US ] = "Plot options";
    };

    FixedText FT_MISSING_VALUES
    {
        Pos = MAP_APPFONT ( 12 , 127  ) ;
        Size = MAP_APPFONT ( 80 , 8 ) ;
        Text [ en-US ] = "Plot missing values";
    };
    
    RadioButton RB_DONT_PAINT
    {
        HelpID = "chart2:RadioButton:TP_OPTIONS:RB_DONT_PAINT";
        Pos = MAP_APPFONT ( 82 , 127  ) ;
        Size = MAP_APPFONT ( 80 , 10 ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "~Leave gap";  
    };
    
    RadioButton RB_ASSUME_ZERO
    {
        HelpID = "chart2:RadioButton:TP_OPTIONS:RB_ASSUME_ZERO";
        Pos = MAP_APPFONT ( 82 , 141  ) ;
        Size = MAP_APPFONT ( 80 , 10 ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "~Assume zero";  
    };
    
    RadioButton RB_CONTINUE_LINE
    {
        HelpID = "chart2:RadioButton:TP_OPTIONS:RB_CONTINUE_LINE";
        Pos = MAP_APPFONT ( 82 , 155  ) ;
        Size = MAP_APPFONT ( 80 , 10 ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "~Continue line";  
    };
      
    CheckBox CB_INCLUDE_HIDDEN_CELLS
    {
        HelpID = "chart2:CheckBox:TP_OPTIONS:CB_INCLUDE_HIDDEN_CELLS";
        Pos = MAP_APPFONT ( 12 , 172 ) ;
        Size = MAP_APPFONT ( 200 , 10 ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "Include ~values from hidden cells";
    };
};
