/**************************************************************
 * 
 * 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 "tp_DataSource.hrc"
#include "HelpIds.hrc"

TabPage TP_DATA_SOURCE
{
    HelpID = "chart2:TabPage:TP_DATA_SOURCE";
    Hide = TRUE;
    Size = MAP_APPFONT ( 248, 140 );
    SVLook = TRUE ;

    // ----------------------------------------

    FixedText FT_CAPTION_FOR_WIZARD
    {
        Pos = MAP_APPFONT ( 5 , 8  ) ;
        Size = MAP_APPFONT ( 238 , 10 ) ;
        Text [ en-US ] = "Customize data ranges for individual data series" ;
    };

    FixedText FT_SERIES
    {
        Pos  = MAP_APPFONT ( 6 , 22  );
        Size = MAP_APPFONT ( 72 , 8 );

        Text [ en-US ] = "Data ~series";
    };
    Control LB_SERIES
    {
        HelpID = HID_SCH_SERIES_LIST ;
        Border = TRUE;
        TabStop = TRUE;
        // DropDown = FALSE;
        Pos  = MAP_APPFONT ( 6 , 32  );
        Size = MAP_APPFONT ( 72 , 69 );
    };

    FixedText FT_ROLE
    {
        Pos  = MAP_APPFONT ( 82 , 22  );
        Size = MAP_APPFONT ( 160 , 8 );

        Text [ en-US ] = "~Data ranges";
    };
    Control LB_ROLE
    {
        HelpID = HID_SCH_DATA_RANGES_LIST ;
        Border = TRUE;
        TabStop = TRUE;
        Pos  = MAP_APPFONT ( 82 , 32  );
        Size = MAP_APPFONT ( 160 , 43 );
    };

    // ----------------------------------------

    FixedText FT_RANGE
    {
        Pos  = MAP_APPFONT ( 82 , 79  );
        Size = MAP_APPFONT ( 160 , 8 );

        Text [ en-US ] = "Ran~ge for %VALUETYPE";
    };
    Edit EDT_RANGE
    {
        HelpID = "chart2:Edit:TP_DATA_SOURCE:EDT_RANGE";
        Border = TRUE;
        TabStop = TRUE;
        Pos  = MAP_APPFONT ( 82 , 89  );
        Size = MAP_APPFONT ( 144 , 12 );
    };
    ImageButton IMB_RANGE_MAIN
    {
        HelpID = "chart2:ImageButton:TP_DATA_SOURCE:IMB_RANGE_MAIN";
        TabStop = TRUE;
        Pos  = MAP_APPFONT ( 228 , 88  );
        Size = MAP_APPFONT ( 14 , 14 );
    };

    // ----------------------------------------

    FixedText FT_CATEGORIES
    {
        Pos  = MAP_APPFONT ( 82 , 107  );
        Size = MAP_APPFONT ( 160 , 8 );

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

    FixedText FT_DATALABELS
    {
        Pos  = MAP_APPFONT ( 82 , 107  );
        Size = MAP_APPFONT ( 160 , 8 );

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

    Edit EDT_CATEGORIES
    {
        HelpID = "chart2:Edit:TP_DATA_SOURCE:EDT_CATEGORIES";
        Border = TRUE;
        TabStop = TRUE;
        Pos  = MAP_APPFONT ( 82 , 117  );
        Size = MAP_APPFONT ( 144 , 12 );
    };
    ImageButton IMB_RANGE_CAT
    {
        HelpID = "chart2:ImageButton:TP_DATA_SOURCE:IMB_RANGE_CAT";
        TabStop = TRUE;
        Pos  = MAP_APPFONT ( 228 , 116  );
        Size = MAP_APPFONT ( 14 , 14 );
    };

    // ----------------------------------------

    PushButton BTN_ADD
    {
        HelpID = "chart2:PushButton:TP_DATA_SOURCE:BTN_ADD";
        TabStop = TRUE;
        Disable = FALSE;
        Pos  = MAP_APPFONT ( 6 , 105  );
        Size = MAP_APPFONT ( 54 , 14 );

        Text [ en-US ] = "~Add";
    };
    PushButton BTN_REMOVE
    {
        HelpID = "chart2:PushButton:TP_DATA_SOURCE:BTN_REMOVE";
        TabStop = TRUE;
        Disable = TRUE;
        Pos  = MAP_APPFONT ( 6 , 121  );
        Size = MAP_APPFONT ( 54 , 14 );

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

    // Note: Text is only a black triangle symbol
    PushButton BTN_UP
    {
        HelpID = "chart2:PushButton:TP_DATA_SOURCE:BTN_UP";
        TabStop = TRUE;
        Disable = TRUE;
        Pos  = MAP_APPFONT ( 64 , 105  );
        Size = MAP_APPFONT ( 14 , 14 );
    };

    // Note: Text is only a black triangle symbol
    PushButton BTN_DOWN
    {
        HelpID = "chart2:PushButton:TP_DATA_SOURCE:BTN_DOWN";
        TabStop = TRUE;
        Disable = TRUE;
        Pos  = MAP_APPFONT ( 64 , 121  );
        Size = MAP_APPFONT ( 14 , 14 );
    };
};
