/**************************************************************
 * 
 * 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_3D_SceneAppearance.hrc"
#include "dlg_View3D.hrc"
#include "SchSlotIds.hxx"

#define WIDTH_FL 108
#define WIDTH_LB 57
#define WIDTH_FT 41

#define HEIGHT_FL 8
#define HEIGHT_LB 12
#define HEIGHT_FT 10

#define POS_X_0 6
#define POS_X_1 6 
#define POS_X_2 POS_X_1+WIDTH_FT+4

#define POS_Y_SCHEME 8
#define POS_Y_SEPERATOR (POS_Y_SCHEME+13)

#define POS_Y_SHADING       (POS_Y_SEPERATOR+16)
#define POS_Y_OBJECTLINES   (POS_Y_SHADING+16)
#define POS_Y_ROUNDEDEDGE   (POS_Y_OBJECTLINES+16)


TabPage TP_3D_SCENEAPPEARANCE
{
    HelpID = "chart2:TabPage:TP_3D_SCENEAPPEARANCE";
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( VIEW3D_PAGE_WIDTH , VIEW3D_PAGE_HEIGHT ) ;

    FixedText FT_SCHEME
	{
	    Pos = MAP_APPFONT ( POS_X_1 , POS_Y_SCHEME  ) ;
		Size = MAP_APPFONT ( WIDTH_FT , HEIGHT_FT ) ;
	    Text [ en-US ] = "Sche~me" ;
    };
    ListBox LB_SCHEME
    {
        HelpID = "chart2:ListBox:TP_3D_SCENEAPPEARANCE:LB_SCHEME";
        Border = TRUE;
        TabStop = TRUE;
        DropDown = TRUE;
        Pos = MAP_APPFONT ( POS_X_2 , POS_Y_SCHEME-2  ) ;
		Size = MAP_APPFONT ( WIDTH_LB , HEIGHT_LB ) ;
    };
    FixedLine FL_SEPERATOR
	{
		Pos = MAP_APPFONT ( POS_X_0 , POS_Y_SEPERATOR  ) ;
		Size = MAP_APPFONT ( WIDTH_FL , HEIGHT_FL ) ;
    };    
	
    CheckBox CB_SHADING
    {
        HelpID = "chart2:CheckBox:TP_3D_SCENEAPPEARANCE:CB_SHADING";
        Pos = MAP_APPFONT ( POS_X_1 , POS_Y_SHADING ) ;
		Size = MAP_APPFONT ( WIDTH_FL , HEIGHT_LB ) ;
		Text [ en-US ] = "~Shading" ;
    };
    CheckBox CB_OBJECTLINES
	{
        HelpID = "chart2:CheckBox:TP_3D_SCENEAPPEARANCE:CB_OBJECTLINES";
		Pos = MAP_APPFONT ( POS_X_1 , POS_Y_OBJECTLINES ) ;
		Size = MAP_APPFONT ( WIDTH_FL , HEIGHT_LB ) ;
	    Text [ en-US ] = "~Object borders" ;
	};
    Checkbox CB_ROUNDEDEDGE
    {
		Pos = MAP_APPFONT ( POS_X_1 , POS_Y_ROUNDEDEDGE  ) ;
		Size = MAP_APPFONT ( WIDTH_FL , HEIGHT_LB ) ;
		Text [ en-US ] = "~Rounded edges" ;
	};
};

