/**************************************************************
 * 
 * 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 <dialogs.hrc>
#include <masterlayoutdlg.hrc>
#include <strings.hrc>

ModalDialog RID_SD_DLG_MASTER_LAYOUT
{
    HelpID = "sd:ModalDialog:RID_SD_DLG_MASTER_LAYOUT";
	Size = MAP_APPFONT( 89 , 92 );
	OutputSize = TRUE;
	SVLook   = TRUE;
	Moveable = TRUE;
	CloseAble = TRUE;
	FixedLine FL_PLACEHOLDERS
	{
		Pos = MAP_APPFONT( 3, 3 );
		Size = MAP_APPFONT( 83, 10 );

		Text [ en-US ] = "Placeholders";
	};

	CheckBox CB_HEADER
	{
	    HelpID = "sd:CheckBox:RID_SD_DLG_MASTER_LAYOUT:CB_HEADER";
		Pos = MAP_APPFONT( 6, 16 );
		Size = MAP_APPFONT( 134 , 10 );
		TabStop = TRUE;

		Text [ en-US ] = "Header";
	};		
	
	CheckBox CB_DATE
	{
	    HelpID = "sd:CheckBox:RID_SD_DLG_MASTER_LAYOUT:CB_DATE";
		Pos = MAP_APPFONT( 6, 29 );
		Size = MAP_APPFONT( 134 , 10 );
		TabStop = TRUE;

		Text [ en-US ] = "Date/time";
	};
	
	CheckBox CB_FOOTER
	{
	    HelpID = "sd:CheckBox:RID_SD_DLG_MASTER_LAYOUT:CB_FOOTER";
		Pos = MAP_APPFONT( 6, 42 );
		Size = MAP_APPFONT( 134 , 10 );
		TabStop = TRUE;

		Text [ en-US ] = "Footer";
	};		

	CheckBox CB_PAGE_NUMBER
	{
	    HelpID = "sd:CheckBox:RID_SD_DLG_MASTER_LAYOUT:CB_PAGE_NUMBER";
		Pos = MAP_APPFONT( 6, 55 );
		Size = MAP_APPFONT( 134 , 10 );
		TabStop = TRUE;

		Text [ en-US ] = "Page number";
	};

	OKButton BT_OK
	{
		Pos = MAP_APPFONT( 3, 71 );
		Size = MAP_APPFONT( 40 , 14 );
		TabStop = TRUE;
	};

	CancelButton BT_CANCEL
	{
		Pos = MAP_APPFONT( 46, 71 );
		Size = MAP_APPFONT( 40 , 14 );
		TabStop = TRUE;
	};
	
	String STR_SLIDE_NUMBER
	{
		Text [ en-US ] = "Slide number";
	};

	String STR_MASTER_LAYOUT_TITLE
	{
		Text [ en-US ] = "Master Elements";
	};
};




