/**************************************************************
 * 
 * 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" ;
	};
};
