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

#define X0 6
#define X1 6
#define X2 73
#define W0 268
#define W1 67
#define W2 100
#define WIDTH 260

TabDialog DLG_CUSTOMANIMATION
{
	Size = MAP_APPFONT ( WIDTH + 6, 200 ) ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	Text [ en-US ] = "Effect Options" ;

	TabControl 1
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( 3, 3 ) ;
		Size = MAP_APPFONT ( 240, 159 ) ;
		PageList =
		{
			PageItem
			{
				PageResID = RID_TP_CUSTOMANIMATION_EFFECT ;
				Identifier = RID_TP_CUSTOMANIMATION_EFFECT ;
				Text [ en-US ] = "Effect" ;
			};

			PageItem
			{
				PageResID = RID_TP_CUSTOMANIMATION_DURATION ;
				Identifier = RID_TP_CUSTOMANIMATION_DURATION ;
				Text [ en-US ] = "Timing" ;
			};

			PageItem
			{
				PageResID = RID_TP_CUSTOMANIMATION_TEXT ;
				Identifier = RID_TP_CUSTOMANIMATION_TEXT ;
				Text [ en-US ] = "Text Animation" ;
			};
		};
	};
	OKButton 1
	{
		Pos = MAP_APPFONT ( 10, 175 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	CancelButton 1
	{
		Pos = MAP_APPFONT ( 64, 175 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton 1
	{
		Pos = MAP_APPFONT ( 119, 175 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
};

TabPage RID_TP_CUSTOMANIMATION_EFFECT
{
	HelpID = "sd:TabPage:RID_TP_CUSTOMANIMATION_EFFECT" ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( WIDTH, 159 ) ;
	Text [ en-US ] = "Effect" ;

	FixedLine FL_SETTINGS
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X0, 3 ) ;
		Size = MAP_APPFONT ( W0, 8 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Settings" ;
	};

	FixedText FT_PROPERTY_1
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X1 + 6, 16 ) ;
		Size = MAP_APPFONT ( W1, 8 ) ;
		Hide = TRUE ;
	};

	ListBox LB_PROPERTY_1
	{
		HelpID = "sd:ListBox:RID_TP_CUSTOMANIMATION_EFFECT:LB_PROPERTY_1" ;
		Pos = MAP_APPFONT ( X2 + 6, 14 ) ;
		Size = MAP_APPFONT ( W2, 100 ) ;
		Hide = TRUE ;
		TabStop = TRUE ;
		Border = TRUE ;
		DropDown = TRUE ;
		ClipChildren = TRUE ;
	};

	FixedText FT_PROPERTY_2
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X1 + 6, 16 ) ;
		Size = MAP_APPFONT ( W1, 8 ) ;
		Hide = TRUE ;
	};

	ListBox LB_PROPERTY_2
	{
		HelpID = "sd:ListBox:RID_TP_CUSTOMANIMATION_EFFECT:LB_PROPERTY_2" ;
		Pos = MAP_APPFONT ( X2 + 6, 14 ) ;
		Size = MAP_APPFONT ( W2, 100 ) ;
		Hide = TRUE ;
		TabStop = TRUE ;
		Border = TRUE ;
		DropDown = TRUE ;
	};

	CheckBox CB_SMOOTH_START
	{
		HelpID = "sd:CheckBox:RID_TP_CUSTOMANIMATION_EFFECT:CB_SMOOTH_START" ;
		Pos = MAP_APPFONT ( X1 + 6, 14 ) ;
		Size = MAP_APPFONT ( (W0 / 2), 10 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Accelerated start" ;
	};

	CheckBox CB_SMOOTH_END
	{
		HelpID = "sd:CheckBox:RID_TP_CUSTOMANIMATION_EFFECT:CB_SMOOTH_END" ;
		Pos = MAP_APPFONT ( X1 + (W0 / 2) + 3, 14 ) ;
		Size = MAP_APPFONT ( (W0 / 2), 10 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Decelerated end" ;
	};

	CheckBox CB_AUTORESTART
	{
		HelpID = "sd:CheckBox:RID_TP_CUSTOMANIMATION_EFFECT:CB_AUTORESTART" ;
		Pos = MAP_APPFONT ( X1 + 6, 14 ) ;
		Size = MAP_APPFONT ( W0, 10 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Reverse automatically" ;
	};

//
// controls for playback command
//
/*
	FixedLine FL_PLAY
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X0, 3 ) ;
		Size = MAP_APPFONT ( W0, 8 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Play" ;
	};

	RadioButton RB_FROM_START
	{
		HelpID = "sd:RadioButton:RID_TP_CUSTOMANIMATION_EFFECT:RB_FROM_START" ;
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X1, 16 ) ;
		Size = MAP_APPFONT ( W0, 10 ) ;
		TabStop = TRUE ;
		Hide = TRUE ;
		Text [ en-US ] = "From start" ;
	};

	RadioButton RB_FROM_LAST
	{
		HelpID = "sd:RadioButton:RID_TP_CUSTOMANIMATION_EFFECT:RB_FROM_LAST" ;
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X1, 29 ) ;
		Size = MAP_APPFONT ( W0, 10 ) ;
		TabStop = TRUE ;
		Hide = TRUE ;
		Text [en-US ] = "From last" ;
	};

	RadioButton RB_FROM_TIME
	{
		HelpID = "sd:RadioButton:RID_TP_CUSTOMANIMATION_EFFECT:RB_FROM_TIME" ;
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X1, 42 ) ;
		Size = MAP_APPFONT ( W0, 10 ) ;
		TabStop = TRUE ;
		Hide = TRUE ;
		Text [ en-US ] = "From time:" ;
	};

	MetricField MF_START_TIME
	{
		HelpID = "sd:MetricField:RID_TP_CUSTOMANIMATION_EFFECT:MF_START_TIME" ;
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X1, 55 ) ;
		Size = MAP_APPFONT ( W1, 12 ) ;
		OutputSize = TRUE ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		Maximum = 9999 ;
		DecimalDigits = 1 ;
		Unit = FUNIT_CUSTOM ;
		CustomUnitText [ en-US ] = " sec" ;
		SpinSize = 5 ;
		Hide = TRUE ;
	};

	FixedLine FL_STOP
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X0, 70 ) ;
		Size = MAP_APPFONT ( W0, 8 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Stop playback" ;
	};

	RadioButton RB_STOP_ON_CLICK
	{
		HelpID = "sd:RadioButton:RID_TP_CUSTOMANIMATION_EFFECT:RB_STOP_ON_CLICK" ;
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X1, 81 ) ;
		Size = MAP_APPFONT ( W0, 10 ) ;
		TabStop = TRUE ;
		Hide = TRUE ;
		Text [ en-US ] = "On click" ;
	};

	RadioButton RB_STOP_ON_NEXT_SLIDE
	{
		HelpID = "sd:RadioButton:RID_TP_CUSTOMANIMATION_EFFECT:RB_STOP_ON_NEXT_SLIDE" ;
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X1, 94 ) ;
		Size = MAP_APPFONT ( W0, 10 ) ;
		TabStop = TRUE ;
		Hide = TRUE ;
		Text [ en-US ] = "After current slide" ;
	};

	RadioButton RB_STOP_AFTER_N_SLIDES
	{
		HelpID = "sd:RadioButton:RID_TP_CUSTOMANIMATION_EFFECT:RB_STOP_AFTER_N_SLIDES" ;
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X1, 107 ) ;
		Size = MAP_APPFONT ( W0, 10 ) ;
		TabStop = TRUE ;
		Hide = TRUE ;
		Text [ en-US ] = "After" ;
	};

	MetricField MF_STOP_AFTER_SLIDES
	{
		HelpID = "sd:MetricField:RID_TP_CUSTOMANIMATION_EFFECT:MF_STOP_AFTER_SLIDES" ;
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X1, 55 ) ;
		Size = MAP_APPFONT ( W1, 12 ) ;
		OutputSize = TRUE ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		Maximum = 9999 ;
		DecimalDigits = 0 ;
		Unit = FUNIT_CUSTOM ;
		CustomUnitText [ en-US ] = "Slides" ;
		SpinSize = 1 ;
		Hide = TRUE ;
	};
*/
	//
	// common settings
	//

	FixedLine FL_ENHANCEMENTS
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X0, 3 ) ;
		Size = MAP_APPFONT ( W0, 8 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Enhancement" ;
	};

	FixedText FT_SOUND
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X1, 5 ) ;
		Size = MAP_APPFONT ( W1, 8 ) ;
		Text [ en-US ] = "Sound" ;
	};

	ListBox LB_SOUND
	{
		HelpID = "sd:ListBox:RID_TP_CUSTOMANIMATION_EFFECT:LB_SOUND" ;
		Pos = MAP_APPFONT ( X2, 3 ) ;
		Size = MAP_APPFONT ( W2 - 19, 100 ) ;
		TabStop = TRUE ;
		Border = TRUE ;
		DropDown = TRUE ;
	};

	PushButton PB_SOUND_PREVIEW
	{
		HelpID = "sd:PushButton:RID_TP_CUSTOMANIMATION_EFFECT:PB_SOUND_PREVIEW" ;
		Pos = MAP_APPFONT ( X2 + W2 - 16, 2 ) ;
		Size = MAP_APPFONT ( 16, 14 ) ;
		OutputSize = TRUE ;
		TabStop = TRUE ;
	};

	FixedText FT_AFTER_EFFECT
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X1, 20 ) ;
		Size = MAP_APPFONT ( W1, 8 ) ;
		Text [ en-US ] = "After animation " ;
	};

	ListBox LB_AFTER_EFFECT
	{
		HelpID = "sd:ListBox:RID_TP_CUSTOMANIMATION_EFFECT:LB_AFTER_EFFECT" ;
		Pos = MAP_APPFONT ( X2, 18 ) ;
		Size = MAP_APPFONT ( W2, 100 ) ;
		TabStop = TRUE ;
		Border = TRUE ;
		DropDown = TRUE ;

		StringList [ en-US ] =
		{
			< "Don't dim" ;					> ;
			< "Dim with color" ;			> ;
			< "Hide after animation" ;		> ;
			< "Hide on next animation" ;	> ;
		};
	};

	FixedText FT_DIMCOLOR
	{
		Pos = MAP_APPFONT ( X1, 35 ) ;
		Size = MAP_APPFONT ( W1, 8 ) ;
		Text [ en-US ] = "Dim Color" ;
	};

	ListBox CLB_DIMCOLOR
	{
		HelpID = "sd:ListBox:RID_TP_CUSTOMANIMATION_EFFECT:CLB_DIMCOLOR" ;
		Pos = MAP_APPFONT ( X2, 33 ) ;
		Size = MAP_APPFONT ( W2, 100 ) ;
		TabStop = TRUE ;
		Border = TRUE ;
		DropDown = TRUE ;
	};

	FixedText FT_TEXT_ANIM
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X1, 50 ) ;
		Size = MAP_APPFONT ( W1, 8 ) ;
		Text [ en-US ] = "Text animation" ;
	};

	ListBox LB_TEXT_ANIM
	{
		HelpID = "sd:ListBox:RID_TP_CUSTOMANIMATION_EFFECT:LB_TEXT_ANIM" ;
		Pos = MAP_APPFONT ( X2, 48 ) ;
		Size = MAP_APPFONT ( W2, 100 ) ;
		TabStop = TRUE ;
		Border = TRUE ;
		DropDown = TRUE ;

		StringList [ en-US ] =
		{
			< "All at once" ;		> ;
			< "Word by word" ;		> ;
			< "Letter by letter" ;	> ;
		};
	};

	FixedText FT_TEXT_DELAY
	{
		OutputSize = TRUE;
		Pos = MAP_APPFONT ( X2 + 45, 66 ) ;
		Size = MAP_APPFONT ( W0 - X2 - 45, 8 ) ;
		Text [ en-US ] = "delay between characters" ;
	};

	MetricField MF_TEXT_DELAY
	{
		HelpID = "sd:MetricField:RID_TP_CUSTOMANIMATION_EFFECT:MF_TEXT_DELAY" ;
		Pos = MAP_APPFONT ( X2, 64 ) ;
		Size = MAP_APPFONT ( 42, 12 ) ;
		TabStop = TRUE ;
		Border = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		Maximum = 1024 ;
		DecimalDigits = 1 ;
		Unit = FUNIT_PERCENT ;
		SpinSize = 1 ;

	};
};

TabPage RID_TP_CUSTOMANIMATION_DURATION
{
	HelpID = "sd:TabPage:RID_TP_CUSTOMANIMATION_DURATION" ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( WIDTH, 159 ) ;
	Text [ en-US ] = "Timing" ;

	FixedText FT_START
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X0, 5 ) ;
		Size = MAP_APPFONT ( W1, 8 ) ;
		Text [ en-US ] = "Start" ;
	};

	ListBox LB_START
	{
		HelpID = "sd:ListBox:RID_TP_CUSTOMANIMATION_DURATION:LB_START" ;
		Pos = MAP_APPFONT ( X2, 3 ) ;
		Size = MAP_APPFONT ( W2, 48 ) ;
		TabStop = TRUE ;
		Border = TRUE ;
		DropDown = TRUE ;

		StringList [ en-US ] =
		{
			< "On click" ;			> ;
			< "With previous" ;		> ;
			< "After previous" ;	> ;
		};
	};

	FixedText FT_START_DELAY
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X0, 20 ) ;
		Size = MAP_APPFONT ( W1, 8 ) ;
		Text [ en-US ] = "Delay" ;
	};

	MetricField MF_START_DELAY
	{
		HelpID = "sd:MetricField:RID_TP_CUSTOMANIMATION_DURATION:MF_START_DELAY" ;
		Pos = MAP_APPFONT ( X2, 18 ) ;
		Size = MAP_APPFONT ( W2, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		Maximum = 9999 ;
		DecimalDigits = 1 ;
		Unit = FUNIT_CUSTOM ;
		CustomUnitText [ en-US ] = " sec" ;
		SpinSize = 5 ;
	};

	FixedText FT_DURATION
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X0, 35 ) ;
		Size = MAP_APPFONT ( W1, 8 ) ;
		Text [ en-US ] = "Speed" ;
	};

	ComboBox CB_DURATION
	{
		HelpID = "sd:ComboBox:RID_TP_CUSTOMANIMATION_DURATION:CB_DURATION" ;
		Pos = MAP_APPFONT ( X2, 33 ) ;
		Size = MAP_APPFONT ( W2, 48 ) ;
		TabStop = TRUE ;
		Border = TRUE ;
		DropDown = TRUE ;
	};

	FixedText FT_REPEAT
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X0, 50 ) ;
		Size = MAP_APPFONT ( W1, 8 ) ;
		Text [ en-US ] = "Repeat" ;
	};

	ComboBox CB_REPEAT
	{
		HelpID = "sd:ComboBox:RID_TP_CUSTOMANIMATION_DURATION:CB_REPEAT" ;
		Pos = MAP_APPFONT ( X2, 48 ) ;
		Size = MAP_APPFONT ( W2, 48 ) ;
		TabStop = TRUE ;
		Border = TRUE ;
		DropDown = TRUE ;
	};

	CheckBox CBX_REWIND
	{
		HelpID = "sd:CheckBox:RID_TP_CUSTOMANIMATION_DURATION:CBX_REWIND" ;
		Pos = MAP_APPFONT ( X0, 66 ) ;
		Size = MAP_APPFONT ( W0, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Rewind when done playing" ;
	};

	FixedLine FL_TRIGGER
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X0, 79 ) ;
		Size = MAP_APPFONT ( W0, 8 ) ;
		Text [ en-US ] = "Trigger" ;
	};

	RadioButton RB_CLICKSEQUENCE
	{
		HelpID = "sd:RadioButton:RID_TP_CUSTOMANIMATION_DURATION:RB_CLICKSEQUENCE" ;
		Pos = MAP_APPFONT ( X1 + 6, 92 ) ;
		Size = MAP_APPFONT ( W0, 10 ) ;
		Text [ en-US ] = "Animate as part of click sequence" ;
		TabStop = TRUE ;
	};

	RadioButton RB_INTERACTIVE
	{
		HelpID = "sd:RadioButton:RID_TP_CUSTOMANIMATION_DURATION:RB_INTERACTIVE" ;
		Pos = MAP_APPFONT ( X1 + 6, 105 ) ;
		Size = MAP_APPFONT ( W0, 10 ) ;
		Text [ en-US ] = "Start effect on click of" ;
		TabStop = TRUE ;
	};

	ListBox LB_TRIGGER
	{
		HelpID = "sd:ListBox:RID_TP_CUSTOMANIMATION_DURATION:LB_TRIGGER" ;
		Pos = MAP_APPFONT ( X1 + 18, 118 ) ;
		Size = MAP_APPFONT ( W2, 80 ) ;
		TabStop = TRUE ;
		Border = TRUE ;
		DropDown = TRUE ;
	};
};

TabPage RID_TP_CUSTOMANIMATION_TEXT
{
	HelpID = "sd:TabPage:RID_TP_CUSTOMANIMATION_TEXT" ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( WIDTH, 159 ) ;
	Text [ en-US ] = "Text Animation" ;

	FixedText FT_GROUP_TEXT
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( X0, 5 ) ;
		Size = MAP_APPFONT ( W1, 8 ) ;
		Text [ en-US ] = "Group text" ;
	};

	ListBox LB_GROUP_TEXT
	{
		HelpID = "sd:ListBox:RID_TP_CUSTOMANIMATION_TEXT:LB_GROUP_TEXT" ;
		Pos = MAP_APPFONT ( X2, 3 ) ;
		Size = MAP_APPFONT ( W2, 48 ) ;
		TabStop = TRUE ;
		Border = TRUE ;
		DropDown = TRUE ;

		StringList [ en-US ] =
		{
			< "As one object" ;				> ;
			< "All paragraphs at once" ;	> ;
			< "By 1st level paragraphs" ;	> ;
			< "By 2nd level paragraphs" ;	> ;
			< "By 3rd level paragraphs" ;	> ;
			< "By 4th level paragraphs" ;	> ;
			< "By 5th level paragraphs" ;	> ;
		};
	};

	CheckBox CBX_GROUP_AUTO
	{
		HelpID = "sd:CheckBox:RID_TP_CUSTOMANIMATION_TEXT:CBX_GROUP_AUTO" ;
		Pos = MAP_APPFONT ( X0, 20  ) ;
		Size = MAP_APPFONT ( W0, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Automatically after" ;
	};

	MetricField MF_GROUP_AUTO
	{
		HelpID = "sd:MetricField:RID_TP_CUSTOMANIMATION_TEXT:MF_GROUP_AUTO" ;
		Pos = MAP_APPFONT ( X2, 18 ) ;
		Size = MAP_APPFONT ( W2, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		Maximum = 9999 ;
		DecimalDigits = 1 ;
		Unit = FUNIT_CUSTOM ;
		CustomUnitText [ en-US ] = " sec" ;
		SpinSize = 5 ;
	};

	CheckBox CBX_ANIMATE_FORM
	{
		HelpID = "sd:CheckBox:RID_TP_CUSTOMANIMATION_TEXT:CBX_ANIMATE_FORM" ;
		Pos = MAP_APPFONT ( X0, 33  ) ;
		Size = MAP_APPFONT ( W0, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Animate attached shape" ;
	};

	CheckBox CBX_REVERSE
	{
		HelpID = "sd:CheckBox:RID_TP_CUSTOMANIMATION_TEXT:CBX_REVERSE" ;
		Pos = MAP_APPFONT ( X0, 46  ) ;
		Size = MAP_APPFONT ( W0, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "In reverse order" ;
	};
};

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