/**************************************************************
 *
 * 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 "CustomAnimation.hrc"
#include "SlideTransitionPane.hrc"
#include "helpids.h"

#ifndef _SVT_CONTROLDIMS_HRC_
#include <svtools/controldims.hrc>
#endif

// Note: Sizes of 1 usually means they are auto-calculated

Control DLG_SLIDE_TRANSITION_PANE
{
	OutputSize = TRUE ;
	DialogControl = TRUE ;
	Size = MAP_APPFONT ( 1, 1 ) ;

	Text [ en-US ] = "Slide Transition" ;

	FixedLine FL_APPLY_TRANSITION
	{
		Size = MAP_APPFONT ( 1, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Apply to selected slides" ;
	};

	ListBox LB_SLIDE_TRANSITIONS
	{
		HelpId = HID_SD_SLIDETRANSITIONPANE_LB_SLIDE_TRANSITIONS ;
		Border = TRUE ;
		TabStop = TRUE ;
		AutoHScroll = TRUE ;

		Size = MAP_APPFONT ( 1, 1 ) ;
	};

	Fixedline FL_MODIFY_TRANSITION
	{
		Size = MAP_APPFONT ( 1, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Modify transition" ;
	};

	FixedText FT_SPEED
	{
		Size = MAP_APPFONT ( 1, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Speed" ;
	};

	ListBox LB_SPEED
	{
		HelpId = HID_SD_SLIDETRANSITIONPANE_LB_SPEED ;
		Border = TRUE ;
		DropDown = TRUE ;
		TabStop = TRUE ;

		Size = MAP_APPFONT ( 1, RSC_CD_DROPDOWN_HEIGHT ) ;
		StringList [ en-US ] =
		{
			< "Slow" ;		> ;
			< "Medium" ;	> ;
			< "Fast" ;		> ;
		};
	};

	FixedText FT_SOUND
	{
		Size = MAP_APPFONT ( 1, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Sound" ;
	};

	ListBox LB_SOUND
	{
		HelpId = HID_SD_SLIDETRANSITIONPANE_LB_SOUND ;
		Border = TRUE ;
		DropDown = TRUE ;
		TabStop = TRUE ;

		Size = MAP_APPFONT ( 1, RSC_CD_DROPDOWN_HEIGHT ) ;

		StringList [ en-US ] =
		{
			< "<No Sound>" ;			> ;
			< "<Stop Previous Sound>" ;	> ;
			< "Other Sound..." ;		> ;
		};
	};

	Checkbox CB_LOOP_SOUND
	{
		HelpId = HID_SD_SLIDETRANSITIONPANE_CB_LOOP_SOUND ;
		Size = MAP_APPFONT ( 1, RSC_CD_CHECKBOX_HEIGHT ) ;
		TabStop = TRUE ;

		Text [ en-US ] = "Loop until next sound" ;
	};

	Fixedline FL_ADVANCE_SLIDE
	{
		Size = MAP_APPFONT ( 1, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Advance slide" ;
	};

	RadioButton RB_ADVANCE_ON_MOUSE
	{
		HelpId = HID_SD_SLIDETRANSITIONPANE_RB_ADVANCE_ON_MOUSE ;
		Size = MAP_APPFONT ( 1, RSC_CD_RADIOBUTTON_HEIGHT ) ;
		TabStop = TRUE ;

		Text [ en-US ] = "On mouse click" ;
	};

	RadioButton RB_ADVANCE_AUTO
	{
		HelpId = HID_SD_SLIDETRANSITIONPANE_RB_ADVANCE_AUTO ;
		Size = MAP_APPFONT ( 1, RSC_CD_RADIOBUTTON_HEIGHT ) ;
		TabStop = TRUE ;

		Text [ en-US ] = "Automatically after" ;
	};

	MetricField MF_ADVANCE_AUTO_AFTER
	{
		HelpId = HID_SD_SLIDETRANSITIONPANE_MF_ADVANCE_AUTO_AFTER ;
		Size = MAP_APPFONT ( 1, RSC_CD_TEXTBOX_HEIGHT ) ;

		Border = TRUE ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		Maximum = 999 ;
		// decimal digits should be 1, but for now the model only supports whole seconds
		DecimalDigits = 0 ;
		// spin size (increment value) should be 5 if digits are 1
		SpinSize = 1 ;

		Unit = FUNIT_CUSTOM ;
		CustomUnitText [ en-US ] = " sec" ;
	};

	FixedLine FL_EMPTY1
	{
		Size = MAP_APPFONT ( 1, RSC_CD_FIXEDLINE_HEIGHT ) ;
	};

	PushButton PB_APPLY_TO_ALL
	{
		HelpId = HID_SD_SLIDETRANSITIONPANE_PB_APPLY_TO_ALL ;
		Size = MAP_APPFONT ( 1, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		TabStop = TRUE ;

		Text [ en-US ] = "Apply to All Slides" ;
	};


	PushButton PB_PLAY
	{
		HelpId = HID_SD_SLIDETRANSITIONPANE_PB_PLAY ;
		Size = MAP_APPFONT ( 1, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		TabStop = TRUE ;

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

	PushButton PB_SLIDE_SHOW
	{
		HelpId = HID_SD_SLIDETRANSITIONPANE_PB_SLIDE_SHOW ;
		Size = MAP_APPFONT ( 1, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		TabStop = TRUE ;

		Text [ en-US ] = "Slide Show" ;
	};

	FixedLine FL_EMPTY2
	{
		Size = MAP_APPFONT ( 1, RSC_CD_FIXEDLINE_HEIGHT ) ;
	};

	Checkbox CB_AUTO_PREVIEW
	{
		HelpId = HID_SD_SLIDETRANSITIONPANE_CB_AUTO_PREVIEW ;
		Size = MAP_APPFONT ( 1, RSC_CD_CHECKBOX_HEIGHT ) ;
		TabStop = TRUE ;

		Text [ en-US ] = "Automatic preview" ;
	};

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

	String STR_NO_TRANSITION
	{
		Text [ en-US ] = "No Transition" ;
	};
};

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