/**************************************************************
 *
 * 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.h"
#include <svx/svxids.hrc>
#include "present.hrc"

#define DISTANCE	23
#define DISTANCE2	((DISTANCE) + 81)

ModalDialog DLG_START_PRESENTATION
{
	HelpID = CMD_SID_PRESENTATION ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 256, 205 ) ;
	Text [ en-US ] = "Slide Show" ;
	Moveable = TRUE ;

	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 200, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( 200, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 200, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};

	FixedLine GRP_RANGE
	{
		Pos = MAP_APPFONT ( 6 , 3 ) ;
		Size = MAP_APPFONT ( 187, 8 ) ;
		Text [ en-US ] = "Range" ;
	};
	RadioButton RBT_ALL
	{
		HelpID = "sd:RadioButton:DLG_START_PRESENTATION:RBT_ALL" ;
		Pos = MAP_APPFONT ( 12 , 14 ) ;
		Size = MAP_APPFONT ( 80 , 12 ) ;
		Text [ en-US ] = "All ~slides" ;
		TabStop = TRUE ;
	};
	RadioButton RBT_AT_DIA
	{
		HelpID = "sd:RadioButton:DLG_START_PRESENTATION:RBT_AT_DIA" ;
		Pos = MAP_APPFONT ( 12 , 26 ) ;
		Size = MAP_APPFONT ( 60 , 12 ) ;
		Text [ en-US ] = "~From:" ;
		TabStop = TRUE ;
	};
	ListBox LB_DIAS
	{
		HelpID = "sd:ListBox:DLG_START_PRESENTATION:LB_DIAS" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 82, 24 ) ;
		Size = MAP_APPFONT ( 111, 80 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		 //DDExtraWidth = TRUE ;
	};
	RadioButton RBT_CUSTOMSHOW
	{
		HelpID = "sd:RadioButton:DLG_START_PRESENTATION:RBT_CUSTOMSHOW" ;
		Pos = MAP_APPFONT ( 12 , 38 ) ;
		Size = MAP_APPFONT ( 130 , 12 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Custom Slide Show" ;
	};
	ListBox LB_CUSTOMSHOW
	{
		HelpID = "sd:ListBox:DLG_START_PRESENTATION:LB_CUSTOMSHOW" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 32, 53 ) ;
		Size = MAP_APPFONT ( 161, 80 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};

	FixedLine GRP_KIND
	{
		Pos = MAP_APPFONT ( 6, 73 ) ;
		Size = MAP_APPFONT ( 90, 8 ) ;
		Text [ en-US ] = "Type" ;
	};
	RadioButton RBT_STANDARD
	{
		HelpID = "sd:RadioButton:DLG_START_PRESENTATION:RBT_STANDARD" ;
		Pos = MAP_APPFONT ( 12, 84 ) ;
		Size = MAP_APPFONT ( 81, 12 ) ;
		Text [ en-US ] = "~Default" ;
		TabStop = TRUE ;
	};
	RadioButton RBT_WINDOW
	{
		HelpID = "sd:RadioButton:DLG_START_PRESENTATION:RBT_WINDOW" ;
		Pos = MAP_APPFONT ( 12 , 96 ) ;
		Size = MAP_APPFONT ( 81 , 12 ) ;
		Text [ en-US ] = "~Window" ;
		TabStop = TRUE ;
	};
	RadioButton RBT_AUTO
	{
		HelpID = "sd:RadioButton:DLG_START_PRESENTATION:RBT_AUTO" ;
		Pos = MAP_APPFONT ( 12 , 108 ) ;
		Size = MAP_APPFONT ( 81 , 12 ) ;
		Text [ en-US ] = "A~uto" ;
		TabStop = TRUE ;
	};
/*
	FixedText FT_PAUSE
	{
		Pos = MAP_APPFONT ( 32, 124 ) ;
		Size = MAP_APPFONT ( 25, 12 ) ;
		Text [ en-US ] = "Pause:" ;
	};
*/
	TimeField TMF_PAUSE
	{
		HelpID = "sd:TimeField:DLG_START_PRESENTATION:TMF_PAUSE" ;
		Pos = MAP_APPFONT ( 32, 120 ) ;
		Size = MAP_APPFONT ( 50, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Duration = TRUE ;
		StrictFormat = TRUE ;
		Maximum = Time
		{
			Hour = 23 ;
			Minute = 59 ;
			Second = 59 ;
		};
		Last = Time
		{
			Hour = 23 ;
			Minute = 59 ;
			Second = 59 ;
		};
		QuickHelpText [ en-US ] = "Duration of pause" ;
	};
	CheckBox CBX_AUTOLOGO
	{
		HelpID = "sd:CheckBox:DLG_START_PRESENTATION:CBX_AUTOLOGO" ;
		Pos = MAP_APPFONT ( 32 , 138 ) ;
		Size = MAP_APPFONT ( 61 , 12 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Show ~logo" ;
	};

	FixedLine GRP_OPTIONS
	{
		Pos = MAP_APPFONT ( 102 , 73 ) ;
		Size = MAP_APPFONT ( 148, 8 ) ;
		Text [ en-US ] = "Options" ;
	};
	CheckBox CBX_MANUEL
	{
		HelpID = "sd:CheckBox:DLG_START_PRESENTATION:CBX_MANUEL" ;
		Pos = MAP_APPFONT ( 108 , 84 ) ;
		Size = MAP_APPFONT ( 139 , 12 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Change slides ~manually" ;
	};
	CheckBox CBX_MOUSEPOINTER
	{
		HelpID = "sd:CheckBox:DLG_START_PRESENTATION:CBX_MOUSEPOINTER" ;
		Pos = MAP_APPFONT ( 108, 96 ) ;
		Size = MAP_APPFONT ( 139, 12 ) ;
		Text [ en-US ] = "Mouse pointer ~visible" ;
		TabStop = TRUE ;
	};
	CheckBox CBX_PEN
	{
		HelpID = "sd:CheckBox:DLG_START_PRESENTATION:CBX_PEN" ;
		Pos = MAP_APPFONT ( 108, 108 ) ;
		Size = MAP_APPFONT ( 139, 12 ) ;
		Text [ en-US ] = "Mouse pointer as ~pen" ;
		TabStop = TRUE ;
	};
	CheckBox CBX_NAVIGATOR
	{
		HelpID = "sd:CheckBox:DLG_START_PRESENTATION:CBX_NAVIGATOR" ;
		Pos = MAP_APPFONT ( 108, 120 ) ;
		Size = MAP_APPFONT ( 139, 12 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Navigator visible" ;
	};
	CheckBox CBX_ANIMATION_ALLOWED
	{
		HelpID = "sd:CheckBox:DLG_START_PRESENTATION:CBX_ANIMATION_ALLOWED" ;
		Pos = MAP_APPFONT ( 108, 132 ) ;
		Size = MAP_APPFONT ( 139, 12 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Animations allowed" ;
	};
	CheckBox CBX_CHANGE_PAGE
	{
		HelpID = "sd:CheckBox:DLG_START_PRESENTATION:CBX_CHANGE_PAGE" ;
		Pos = MAP_APPFONT ( 108, 144 ) ;
		Size = MAP_APPFONT ( 139, 12 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Change slides by clic~king on background" ;
	};
	CheckBox CBX_ALWAYS_ON_TOP
	{
		HelpID = "sd:CheckBox:DLG_START_PRESENTATION:CBX_ALWAYS_ON_TOP" ;
		Pos = MAP_APPFONT ( 108, 156 ) ;
		Size = MAP_APPFONT ( 145, 12 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Presentation always ~on top" ;
	};

	FixedLine GRP_MONITOR
	{
		Pos = MAP_APPFONT ( 6, 174 ) ;
		Size = MAP_APPFONT ( 244, 8 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Multiple displays" ;
	};

	FixedText FT_MONITOR
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( 12 , 185 + 2 ) ;
		Size = MAP_APPFONT ( 70, 8 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "P~resentation display" ;
	};

	ListBox LB_MONITOR
	{
		Pos = MAP_APPFONT ( 82 , 185 ) ;
		Size = MAP_APPFONT ( 111, 100 ) ;
		HelpId = HID_SD_SLIDESHOW_DISPLAY ;
		Hide = TRUE ;
		TabStop = TRUE ;
		Border = TRUE ;
		DropDown = TRUE ;
		ClipChildren = TRUE ;
	};

	String STR_PRIMARY_MONITOR
	{
		Text [ en-US ] = "Display %1 (primary)" ;
	};

	String STR_MONITOR
	{
		Text [ en-US ] = "Display %1" ;
	};

	String STR_ALL_MONITORS
	{
		Text [ en-US ] = "All displays" ;
	};
};

// ********************************************************************** EOF
