/**************************************************************
 *
 * 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 "helpid.hrc"

#ifndef __FRAMEWORK_CLASSES_RESOURCE_HRC_
#include <classes/resource.hrc>
#endif

String STR_MENU_ADDONS
{
	Text [ en-US ] = "Add-Ons" ;
};

String STR_MENU_ADDONHELP
{
	Text [ en-US ] = "Add-~On Help" ;
};

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

String STR_UPDATEDOC
{
	Text [ en-US ] = "~Update" ;
};

String STR_CLOSEDOC_ANDRETURN
{
	Text [ en-US ] = "~Close & Return to " ;
};

Menu POPUPMENU_TOOLBAR_QUICKCUSTOMIZATION
{
	ItemList =
	{
		MenuItem
		{
			Identifier = MENUITEM_TOOLBAR_VISIBLEBUTTON ;
			SubMenu = Menu
			{
			};
			Text [ en-US ] = "Visible ~Buttons" ;
		};
		MenuItem
		{
			Identifier = MENUITEM_TOOLBAR_CUSTOMIZETOOLBAR ;
			Command = ".uno:ConfigureToolboxVisible" ;
			Text [ en-US ] = "~Customize Toolbar..." ;
		};
		MenuItem
		{
			Separator = TRUE ;
		};
		MenuItem
		{
			Identifier = MENUITEM_TOOLBAR_DOCKTOOLBAR ;
			Text [ en-US ] = "~Dock Toolbar" ;
		};
		MenuItem
		{
			Identifier = MENUITEM_TOOLBAR_DOCKALLTOOLBAR ;
			Text [ en-US ] = "Dock ~All Toolbars" ;
		};
		MenuItem
		{
			Separator = TRUE ;
		};
		MenuItem
		{
			Identifier = MENUITEM_TOOLBAR_LOCKTOOLBARPOSITION ;
			Text [ en-US ] = "~Lock Toolbar Position" ;
		};
		MenuItem
		{
			Identifier = MENUITEM_TOOLBAR_CLOSE ;
			Text [ en-US ] = "Close ~Toolbar" ;
		};
	};
};

String STR_SAVECOPYDOC
{
	Text [ en-US ] = "Save Copy ~as..." ;
};

String STR_NODOCUMENT
{
	Text [ en-US ] = "No Documents" ;
};

String STR_CLEAR_RECENT_FILES
{
	Text [ en-US ] = "Clear List" ;
};

String STR_CLEAR_RECENT_FILES_HELP
{
	Text [ en-US ] = "Clears the list with the most recently opened files. This action can not be undone." ;
};

String STR_TOOLBAR_TITLE_ADDON
{
	Text [ en-US ] = "Add-On %num%" ;
};

// ***********************************************************************
// License Dialog
// ***********************************************************************
#define LICENSE_DIALOG_WIDTH    260
//#define LICENSE_DIALOG_HEIGTH 185
//#define LICENSE_DIALOG_HEIGTH 190
#define LICENSE_RIGHT_BORDER    7
#define LICENSE_BOTTOM_BORDER   0
#define LICENSE_ROW_1 (7)
#define LICENSE_COL_1 (7)

#define OFFSET      2
#define COL2_WIDTH  10
#define OFFSET_IMG  10
#define FT_HEIGHT   8
#define PB_HEIGHT   14
#define PD_WIDTH    40

#define LICENSE_HEIGHT 102
#define LICENSE_ROW_2 (LICENSE_ROW_1 + OFFSET + LICENSE_HEIGHT)
#define LICENSE_ROW_3 (LICENSE_ROW_2 + OFFSET + FT_HEIGHT)
#define LICENSE_ROW_4 (LICENSE_ROW_3 + OFFSET + 3*FT_HEIGHT )
#define LICENSE_ROW_5 (LICENSE_ROW_4 + FT_HEIGHT+ OFFSET )
#define LICENSE_ROW_6 (LICENSE_ROW_5 + 2*OFFSET )

#define LICENSE_DIALOG_HEIGTH (LICENSE_ROW_6 + + PB_HEIGHT + 7)

#define LICENSE_COL_2 (LICENSE_COL_1 + OFFSET_IMG)
#define LICENSE_COL_3 (LICENSE_COL_2 + COL2_WIDTH +1)
#define LICENSE_COL_4 (LICENSE_DIALOG_WIDTH - LICENSE_RIGHT_BORDER - PD_WIDTH)

#define LICENSE_WIDTH (LICENSE_DIALOG_WIDTH - LICENSE_RIGHT_BORDER - LICENSE_ROW_1)
#define COL3_WIDTH    (LICENSE_COL_4 - LICENSE_COL_3)


ModalDialog DLG_LICENSE
{
	HelpId = HID_LICENSEDIALOG ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( LICENSE_DIALOG_WIDTH, LICENSE_DIALOG_HEIGTH ) ;
	Text [ en-US ] = "License Agreement" ;

	MultiLineEdit ML_LICENSE
	{
		HelpID = "framework:MultiLineEdit:DLG_LICENSE:ML_LICENSE" ;
		PosSize = MAP_APPFONT ( LICENSE_COL_1, LICENSE_ROW_1, LICENSE_WIDTH, LICENSE_HEIGHT ) ;
		Border = TRUE ;
		VScroll = TRUE ;
		ReadOnly = TRUE ;
	};

	FixedText FT_INFO1
	{
		WordBreak = TRUE ;
		Pos = MAP_APPFONT ( LICENSE_COL_1, LICENSE_ROW_2 ) ;
		Size = MAP_APPFONT ( LICENSE_WIDTH, FT_HEIGHT ) ;
		Text [ en-US ] = "Please follow these steps to proceed with the installation:" ;
	};

	FixedImage IMG_ARROW
	{
		Pos = MAP_APPFONT ( LICENSE_COL_1, LICENSE_ROW_3 ) ;
		Size = MAP_PIXEL ( 16, 16 ) ;
		Fixed = Image
		{
			ImageBitmap = Bitmap
			{
				File = "arrow.png" ;
			};
		};
	};

	FixedText FT_INFO2_1
	{
		WordBreak = TRUE ;
		Pos = MAP_APPFONT ( LICENSE_COL_2, LICENSE_ROW_3 ) ;
		Size = MAP_APPFONT ( COL2_WIDTH, FT_HEIGHT ) ;
		Text [ en-US ] = "1." ;
	};

	FixedText FT_INFO2
	{
		WordBreak = TRUE ;
		Pos = MAP_APPFONT ( LICENSE_COL_3, LICENSE_ROW_3 ) ;
		Size = MAP_APPFONT ( COL3_WIDTH, 3 * FT_HEIGHT ) ;
		Text [ en-US ] = "View the complete License Agreement. Please use the scroll bar or the '%PAGEDOWN' button in this dialog to view the entire license text." ;
	};

	PushButton PB_PAGEDOWN
	{
		HelpID = "framework:PushButton:DLG_LICENSE:PB_PAGEDOWN" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( LICENSE_COL_4, LICENSE_ROW_3 ) ;
		Size = MAP_APPFONT ( PD_WIDTH, PB_HEIGHT ) ;
		Text [ en-US ] = "Scroll Down" ;
	};

	FixedText FT_INFO3_1
	{
		WordBreak = TRUE ;
		Pos = MAP_APPFONT ( LICENSE_COL_2, LICENSE_ROW_4 ) ;
		Size = MAP_APPFONT ( COL2_WIDTH, FT_HEIGHT ) ;
		Text [ en-US ] = "2." ;
	};

	FixedText FT_INFO3
	{
		WordBreak = TRUE ;
		Pos = MAP_APPFONT ( LICENSE_COL_3, LICENSE_ROW_4 ) ;
		Size = MAP_APPFONT ( COL3_WIDTH, FT_HEIGHT ) ;
		Text [ en-US ] = "Accept the License Agreement." ;
	};

	String LICENSE_ACCEPT
	{
		Text [ en-US ] = "~Accept" ;
	};

	String LICENSE_NOTACCEPT
	{
		Text [ en-US ] = "Decline" ;
	};

	FixedLine FL_DIVIDE
	{
		Pos = MAP_APPFONT ( LICENSE_COL_1, LICENSE_ROW_5 ) ;
		Size = MAP_APPFONT ( LICENSE_WIDTH, 1 ) ;
	};

	PushButton PB_ACCEPT
	{
		HelpID = "framework:PushButton:DLG_LICENSE:PB_ACCEPT" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( LICENSE_COL_4 - PD_WIDTH - OFFSET_IMG, LICENSE_ROW_6 ) ;
		Size = MAP_APPFONT ( PD_WIDTH, PB_HEIGHT ) ;
	};

	PushButton PB_DECLINE
	{
		HelpID = "framework:PushButton:DLG_LICENSE:PB_DECLINE" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( LICENSE_COL_4, LICENSE_ROW_6 ) ;
		Size = MAP_APPFONT ( PD_WIDTH, PB_HEIGHT ) ;
	};

};

String STR_FULL_DISC_RETRY_BUTTON
{
	Text [ en-US ] = "Retry" ;
};

String STR_FULL_DISC_MSG
{
	Text [ en-US ] = "%PRODUCTNAME could not save important internal information due to insufficient free disk space at the following location:\n%PATH\n\nYou will not be able to continue working with %PRODUCTNAME without allocating more free disk space at that location.\n\nPress the 'Retry' button after you have allocated more free disk space to retry saving the data.\n\n" ;
};

String STR_RESTORE_TOOLBARS
{
	Text [ en-US ] = "~Reset" ;
};

String STR_CORRUPT_UICFG_SHARE
{
	Text [ en-US ] = "An error occurred while loading the user interface configuration data. The application will be terminated now.\nPlease try to reinstall the application." ;
};

String STR_CORRUPT_UICFG_USER
{
	Text [ en-US ] = "An error occurred while loading the user interface configuration data. The application will be terminated now.\nPlease try to remove your user profile for the application." ;
};

String STR_CORRUPT_UICFG_GENERAL
{
	Text [ en-US ] = "An error occurred while loading the user interface configuration data. The application will be terminated now.\nPlease try to remove your user profile for the application first or try to reinstall the application." ;
};

String STR_UNTITLED_DOCUMENT
{
	Text [ en-US ] = "Untitled" ;
};

// for displaying 'Multiple Languages' in the language statusbar control
String STR_LANGSTATUS_MULTIPLE_LANGUAGES
{
	Text [ en-US ] = "Multiple Languages" ;
};
String STR_LANGSTATUS_NONE
{
	Text [ en-US ] = "None (Do not check spelling)" ;
};
String STR_RESET_TO_DEFAULT_LANGUAGE
{
	Text [ en-US ] = "Reset to Default Language" ;
};
String STR_LANGSTATUS_MORE
{
	Text [ en-US ] = "More..." ;
};
String STR_SET_LANGUAGE_FOR_SELECTION
{
	Text [ en-US ] = "Set Language for Selection" ;
};
String STR_SET_LANGUAGE_FOR_PARAGRAPH
{
	Text [ en-US ] = "Set Language for Paragraph" ;
};
String STR_SET_LANGUAGE_FOR_ALL_TEXT
{
	Text [ en-US ] = "Set Language for all Text" ;
};

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