/**************************************************************
 *
 * 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 ---------------------------------------------------------------
#include <cuires.hrc>
#include "cfg.hrc"
#include "helpid.hrc"

TabDialog RID_SVXDLG_CUSTOMIZE
{
	OutputSize = TRUE ;
	Text [ en-US ] = "Customize" ;
	Moveable = TRUE ;
	SvLook = TRUE ;
	TabControl 1
	{
		OutputSize = TRUE ;
		PageList =
		{
			PageItem
			{
				Identifier = RID_SVXPAGE_MENUS ;
				Text [ en-US ] = "Menus" ;
				PageResID = 300 ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_KEYBOARD ;
				Text [ en-US ] = "Keyboard" ;
				PageResID = 301 ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_TOOLBARS ;
				Text [ en-US ] = "Toolbars" ;
				PageResID = 302 ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_EVENTS ;
				Text [ en-US ] = "Events" ;
				PageResID = 303 ;
			};
		};
	};
};

#define TEXT_MENU \
	Text [ en-US ] = "Menu" ; \

#define TEXT_BEGIN_GROUP \
	Text [ en-US ] = "Begin a Group" ; \

#define TEXT_RENAME \
	Text [ en-US ] = "Rename..." ; \

#define TEXT_DELETE \
	Text [ en-US ] = "Delete..." ; \

#define TEXT_DELETE_NODOTS \
	Text [ en-US ] = "Delete" ; \

#define TEXT_MOVE \
	Text [ en-US ] = "Move..." ; \

#define TEXT_DEFAULT_STYLE \
	Text [ en-US ] = "Restore Default Settings" ; \

#define TEXT_DEFAULT_COMMAND \
	Text [ en-US ] = "Restore Default Command" ; \

#define TEXT_TEXT_ONLY \
	Text [ en-US ] = "Text only" ; \

#define TEXT_TOOLBAR_NAME \
	Text [ en-US ] = "Toolbar Name" ; \

#define TEXT_SAVE_IN \
	Text [ en-US ] = "Save In" ; \

TabPage RID_SVXPAGE_MENUS
{
	Hide = TRUE ;
	Size = MAP_APPFONT ( 273, 258 ) ;
	HelpId = HID_SVX_CONFIG_MENU ;
	FixedLine GRP_MENUS
	{
		Pos = MAP_APPFONT ( 6, 11 ) ;
		Size = MAP_APPFONT ( 261, 8 ) ;
		Text [ en-US ] = "%PRODUCTNAME %MODULENAME Menus" ;
	};
	FixedText FT_MENUS
	{
		Pos = MAP_APPFONT ( 9, 24 ) ;
		Size = MAP_APPFONT ( 55, 8 ) ;
		TEXT_MENU
	};
	ListBox LB_MENUS
	{
		HelpID = "cui:ListBox:RID_SVXPAGE_MENUS:LB_MENUS" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 64, 22 ) ;
		Size = MAP_APPFONT ( 108, 108 ) ;
		DropDown = TRUE ;
	};
	PushButton BTN_NEW
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_MENUS:BTN_NEW" ;
		Pos = MAP_APPFONT ( 192, 22 ) ;
		Size = MAP_APPFONT ( 75, 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "New..." ;
	};
	MenuButton BTN_CHANGE
	{
		HelpID = "cui:MenuButton:RID_SVXPAGE_MENUS:BTN_CHANGE" ;
		Pos = MAP_APPFONT ( 192, 39 ) ;
		Size = MAP_APPFONT ( 75, 14 ) ;
		TabStop = TRUE ;
		TEXT_MENU
	};
	FixedLine GRP_MENU_SEPARATOR
	{
		Pos = MAP_APPFONT ( 6, 56 ) ;
		Size = MAP_APPFONT ( 261, 8 ) ;
		Text [ en-US ] = "Menu Content" ;
	};
	FixedText GRP_MENU_ENTRIES
	{
		Pos = MAP_APPFONT ( 9, 67 ) ;
		Size = MAP_APPFONT ( 55, 8 ) ;
		Group = TRUE ;
		Text [ en-US ] = "Entries" ;
	};
	Control BOX_ENTRIES
	{
		Border = TRUE ;
		Pos = MAP_APPFONT ( 64, 67 ) ;
		Size = MAP_APPFONT ( 108, 115 ) ;
		TabStop = TRUE ;
		HelpId = HID_SVX_CONFIG_MENU_CONTENTS ;
	};
	PushButton BTN_ADD_COMMANDS
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_MENUS:BTN_ADD_COMMANDS" ;
		Pos = MAP_APPFONT ( 192, 67 ) ;
		Size = MAP_APPFONT ( 75, 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Add..." ;
	};
	MenuButton BTN_CHANGE_ENTRY
	{
		HelpID = "cui:MenuButton:RID_SVXPAGE_MENUS:BTN_CHANGE_ENTRY" ;
		Pos = MAP_APPFONT ( 192, 84 ) ;
		Size = MAP_APPFONT ( 75, 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Modify" ;
	};
	ImageButton BTN_UP
	{
		HelpID = "cui:ImageButton:RID_SVXPAGE_MENUS:BTN_UP" ;
		Pos = MAP_APPFONT ( 175, 102 ) ;
		Size = MAP_APPFONT ( 14, 14 ) ;
		TabStop = TRUE ;
		Symbol = IMAGEBUTTON_ARROW_UP ;
		Disable = TRUE ;
	};
	ImageButton BTN_DOWN
	{
		HelpID = "cui:ImageButton:RID_SVXPAGE_MENUS:BTN_DOWN" ;
		Pos = MAP_APPFONT ( 175, 119 ) ;
		Size = MAP_APPFONT ( 14, 14 ) ;
		TabStop = TRUE ;
		Symbol = IMAGEBUTTON_ARROW_DOWN ;
		Disable = TRUE ;
	};
	FixedText TXT_SAVEIN
	{
		Pos = MAP_APPFONT ( 9, 190 ) ;
		Size = MAP_APPFONT ( 55, 8 ) ;
		Group = TRUE ;
		TEXT_SAVE_IN
	};
	ListBox LB_SAVEIN
	{
		HelpID = "cui:ListBox:RID_SVXPAGE_MENUS:LB_SAVEIN" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 64, 188 ) ;
		Size = MAP_APPFONT ( 108, 53 ) ;
		DropDown = TRUE ;
	};
	FixedText FT_DESCRIPTION
	{
		Pos = MAP_APPFONT ( 6, 205 ) ;
		Size = MAP_APPFONT ( 261, 8 ) ;
		Text [ en-US ] = "Description" ;
	};
	MultiLineEdit ED_DESCRIPTION
	{
		HelpID = "cui:MultiLineEdit:RID_SVXPAGE_MENUS:ED_DESCRIPTION" ;
		Pos = MAP_APPFONT ( 6, 216 ) ;
		Size = MAP_APPFONT ( 261, 36 ) ;
		Border = TRUE ;
		VScroll = TRUE ;
		IgnoreTab = TRUE ;
		ReadOnly = TRUE ;
	};
};

Menu MODIFY_MENU
{
	ItemList =
	{
		MenuItem
		{
			Identifier = ID_MOVE ;
			TEXT_MOVE
		};
		MenuItem
		{
			Identifier = ID_RENAME ;
			TEXT_RENAME
		};
		MenuItem
		{
			Separator = TRUE ;
		};
		MenuItem
		{
			Identifier = ID_DELETE ;
			TEXT_DELETE
		};
	};
};

Menu MODIFY_ENTRY
{
	ItemList =
	{
		MenuItem
		{
			Identifier = ID_ADD_SUBMENU ;
			Text [ en-US ] = "Add Submenu..." ;
		};
		MenuItem
		{
			Identifier = ID_BEGIN_GROUP ;
			TEXT_BEGIN_GROUP
		};
		MenuItem
		{
			Separator = TRUE ;
		};
		MenuItem
		{
			Identifier = ID_RENAME ;
			TEXT_RENAME
		};
		MenuItem
		{
			Separator = TRUE ;
		};
		MenuItem
		{
			Identifier = ID_DELETE ;
			TEXT_DELETE_NODOTS
		};
	};
};

Menu MODIFY_TOOLBAR
{
	ItemList =
	{
		MenuItem
		{
			Identifier = ID_RENAME ;
			TEXT_RENAME
		};
		MenuItem
		{
			Identifier = ID_DELETE ;
			TEXT_DELETE_NODOTS
		};
		MenuItem
		{
			Separator = TRUE ;
		};
		MenuItem
		{
			Identifier = ID_DEFAULT_STYLE ;
			TEXT_DEFAULT_STYLE
		};
		MenuItem
		{
			Separator = TRUE ;
		};
		MenuItem
		{
			Identifier = ID_ICONS_ONLY ;
			RadioCheck = TRUE ;
			AutoCheck = TRUE ;
			Text [ en-US ] = "Icons Only" ;
		};
		MenuItem
		{
			Identifier = ID_TEXT_ONLY ;
			RadioCheck = TRUE ;
			AutoCheck = TRUE ;
			TEXT_TEXT_ONLY
		};
		MenuItem
		{
			Identifier = ID_ICONS_AND_TEXT ;
			RadioCheck = TRUE ;
			AutoCheck = TRUE ;
			Text [ en-US ] = "Icons & Text" ;
		};
	};
};

Menu MODIFY_TOOLBAR_CONTENT
{
	ItemList =
	{
		MenuItem
		{
			Identifier = ID_RENAME ;
			TEXT_RENAME
		};
		MenuItem
		{
			Identifier = ID_DELETE ;
			TEXT_DELETE_NODOTS
		};
		MenuItem
		{
			Identifier = ID_DEFAULT_COMMAND ;
			TEXT_DEFAULT_COMMAND
		};
		MenuItem
		{
			Separator = TRUE ;
		};
		MenuItem
		{
			Identifier = ID_BEGIN_GROUP ;
			TEXT_BEGIN_GROUP
		};
		MenuItem
		{
			Separator = TRUE ;
		};
		/*
		MenuItem
		{
			Identifier = ID_ICON_ONLY ;
			Text [ en-US ] = "Icon Only" ;
			RadioCheck = TRUE ;
			AutoCheck = TRUE ;
		};
		MenuItem
		{
			Identifier = ID_TEXT_ONLY ;
			Text [ en-US ] = "Text Only" ;
			RadioCheck = TRUE ;
			AutoCheck = TRUE ;
		};
		MenuItem
		{
			Identifier = ID_ICON_AND_TEXT ;
			Text [ en-US ] = "Icon & Text" ;
			RadioCheck = TRUE ;
			AutoCheck = TRUE ;
		};
		MenuItem
		{
			Separator = TRUE ;
		};
		*/
		MenuItem
		{
			Identifier = ID_CHANGE_SYMBOL ;
			Text [ en-US ] = "Change Icon..." ;
		};
		MenuItem
		{
			Identifier = ID_RESET_SYMBOL ;
			Text [ en-US ] = "Reset Icon" ;
		};
	};
};

/* %n will be replaced at runtime by a number starting with 1 and increasing as necessary */
String RID_SVXSTR_NEW_MENU
{
	Text [ en-US ] = "New Menu %n" ;
};

/* %n will be replaced at runtime by a number starting with 1 and increasing as necessary */
String RID_SVXSTR_NEW_TOOLBAR
{
	Text [ en-US ] = "New Toolbar %n" ;
};

String RID_SVXSTR_MOVE_MENU
{
	Text [ en-US ] = "Move Menu" ;
};

String RID_SVXSTR_ADD_SUBMENU
{
	Text [ en-US ] = "Add Submenu" ;
};

String RID_SVXSTR_SUBMENU_NAME
{
	Text [ en-US ] = "Submenu name" ;
};

String RID_SVXSTR_MENU_ADDCOMMANDS_DESCRIPTION
{
	Text [ en-US ] = "To add a command to a menu, select the category and then the command. You can also drag the command to the Commands list of the Menus tab page in the Customize dialog." ;
};

ModalDialog MD_MENU_ORGANISER
{
	OutputSize = TRUE ;
	Size = MAP_APPFONT ( 172, 154 ) ;
	Text [ en-US ] = "New Menu" ;
	SvLook = TRUE ;
	Moveable = TRUE ;
	HelpId = HID_SVX_CONFIG_MENU_ORGANIZER ;
	FixedText TXT_MENU_NAME
	{
		Pos = MAP_APPFONT ( 6, 8 ) ;
		Size = MAP_APPFONT ( 93, 8 ) ;
		Group = TRUE ;
		Left = TRUE ;
		Text [ en-US ] = "Menu name" ;
	};
	Edit EDIT_MENU_NAME
	{
		HelpID = "cui:Edit:MD_MENU_ORGANISER:EDIT_MENU_NAME" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6, 19 ) ;
		Size = MAP_APPFONT ( 93, 12 ) ;
		TabStop = TRUE ;
	};
	FixedText TXT_MENU
	{
		Pos = MAP_APPFONT ( 6, 37 ) ;
		Size = MAP_APPFONT ( 93, 8 ) ;
		Group = TRUE ;
		Left = TRUE ;
		Text [ en-US ] = "Menu position" ;
	};
	Control BOX_MAIN_MENUS
	{
		HelpId = HID_SVX_CONFIG_MENU_LISTBOX ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6, 48 ) ;
		Size = MAP_APPFONT ( 93, 100 ) ;
		TabStop = TRUE ;
	};
	ImageButton BTN_MENU_UP
	{
		HelpID = "cui:ImageButton:MD_MENU_ORGANISER:BTN_MENU_UP" ;
		Pos = MAP_APPFONT ( 102, 80 ) ;
		Size = MAP_APPFONT ( 14, 14 ) ;
		TabStop = TRUE ;
		Symbol = IMAGEBUTTON_ARROW_UP ;
	};
	ImageButton BTN_MENU_DOWN
	{
		HelpID = "cui:ImageButton:MD_MENU_ORGANISER:BTN_MENU_DOWN" ;
		Pos = MAP_APPFONT ( 102, 97 ) ;
		Size = MAP_APPFONT ( 14, 14 ) ;
		TabStop = TRUE ;
		Symbol = IMAGEBUTTON_ARROW_DOWN ;
	};
	OKButton BTN_MENU_ADD
	{
		DefButton = TRUE ;
		Pos = MAP_APPFONT ( 119, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
	};
	CancelButton BTN_MENU_CLOSE
	{
		Pos = MAP_APPFONT ( 119, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
	};
	HelpButton BTN_MENU_HELP
	{
		Pos = MAP_APPFONT ( 119, 40 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
	};
};

// MD_NEW_TOOLBAR -------------------------------------------------
ModalDialog MD_NEW_TOOLBAR
{
	HelpID = "cui:ModalDialog:MD_NEW_TOOLBAR" ;
	OutputSize = TRUE ;
	SvLook = TRUE ;
	Size = MAP_APPFONT ( 165, 63 ) ;
	Text [ en-US ] = "Name" ;
	Moveable = TRUE ;
	FixedText FT_NAME
	{
		Pos = MAP_APPFONT ( 6, 6 ) ;
		Size = MAP_APPFONT ( 98, 8 ) ;
		TEXT_TOOLBAR_NAME
		WordBreak = TRUE ;
	};
	Edit EDT_STRING
	{
		HelpID = "cui:Edit:MD_NEW_TOOLBAR:EDT_STRING" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6, 17 ) ;
		Size = MAP_APPFONT ( 97, 12 ) ;
		TabStop = TRUE ;
	};
	FixedText TXT_SAVEIN
	{
		Pos = MAP_APPFONT ( 6, 35 ) ;
		Size = MAP_APPFONT ( 98, 8 ) ;
		Group = TRUE ;
		TEXT_SAVE_IN
	};
	ListBox LB_SAVEIN
	{
		HelpID = "cui:ListBox:MD_NEW_TOOLBAR:LB_SAVEIN" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6, 43 ) ;
		Size = MAP_APPFONT ( 97, 53 ) ;
		DropDown = TRUE ;
	};
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 109, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( 109, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 109, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
};

ModalDialog MD_ICONSELECTOR
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 240, 152 ) ;
	Text [ en-US ] = "Change Icon" ;
	Moveable = TRUE ;
	HelpId = HID_SVX_CONFIG_ICON_SELECTOR ;
	FixedText FT_SYMBOLS
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 172, 8 ) ;
		Text [ en-US ] = "Icons" ;
	};
	ToolBox TB_SYMBOLS
	{
		Pos = MAP_APPFONT ( 12, 14 ) ;
		Size = MAP_APPFONT ( 160, 80 ) ;
		Scroll = TRUE ;
		LineSpacing = TRUE ;
		Customize = FALSE ;
	};
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 60, 130 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( 120, 130 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 180, 130 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	PushButton BTN_IMPORT
	{
		HelpID = "cui:PushButton:MD_ICONSELECTOR:BTN_IMPORT" ;
		Pos = MAP_APPFONT ( 184, 7 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Import..." ;
	};
	PushButton BTN_DELETE
	{
		HelpID = "cui:PushButton:MD_ICONSELECTOR:BTN_DELETE" ;
		Pos = MAP_APPFONT ( 184, 24 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Delete..." ;
	};
	FixedText FT_NOTE
	{
		Pos = MAP_APPFONT ( 12, 95 ) ;
		Size = MAP_APPFONT ( 200, 24 ) ;
		Text [ en-US ] = "Note:\nThe size of an icon should be 16x16 pixel to achieve best quality. Different sized icons will be scaled automatically." ;
		Left = TRUE ;
		WordBreak = TRUE ;
	};
	FixedLine FL_SEPARATOR
	{
		Pos = MAP_APPFONT ( 0, 120 ) ;
		Size = MAP_APPFONT ( 240, 8 ) ;
	};
	Color IMAGE_BTN_COLOR
	{
		Red = 0xC000 ;
		Green = 0xC000 ;
		Blue = 0xC000 ;
	};
};
// added for issue83555
ModalDialog MD_ICONCHANGE
{
	HelpID = "cui:ModalDialog:MD_ICONCHANGE" ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 240, 150 ) ;
	Text [ en-US ] = "%PRODUCTNAME %PRODUCTVERSION" ;
	Moveable = TRUE ;
	FixedImage FI_INFO
	{
		Pos = MAP_APPFONT ( 6, 6 ) ;
		Size = MAP_APPFONT ( 24, 24 ) ;
		Fixed = Image
		{

		};
	};
	FixedText FTCHGE_DESCRIPTION
	{
		Pos = MAP_APPFONT ( 30, 15 ) ;
		Size = MAP_APPFONT ( 200, 50 ) ;
		Text [ en-US ] = "The files listed below could not be imported.\nThe file format could not be interpreted." ;
	};

	MultiLineEdit EDT_ADDR
	{
		HelpID = "cui:MultiLineEdit:MD_ICONCHANGE:EDT_ADDR" ;
		Pos = MAP_APPFONT ( 30, 38) ;
		Size = MAP_APPFONT ( 180, 86 ) ;
		Border = TRUE ;
		//VScroll = TRUE ;
		IgnoreTab = TRUE ;
		ReadOnly = TRUE ;
	};
	OKButton MD_BTN_OK
	{
		Pos = MAP_APPFONT ( 95, 130 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};

};

// Strings ---------------------------------------------------------------
String RID_SVXSTR_IMPORT_ICON_ERROR
{
	Text [ en-US ] = "The files listed below could not be imported. The file format could not be interpreted." ;
};

String RID_SVXSTR_DELETE_ICON_CONFIRM // added for issue73355
{
	Text [ en-US ] = "Are you sure to delete the image?" ;
};

String RID_SVXSTR_REPLACE_ICON_WARNING // added for issue73355
{
	Text [ en-US ] = "The icon %ICONNAME is already contained in the image list.\nWould you like to replace the existing icon?" ;
};

String RID_SVXSTR_REPLACE_ICON_CONFIRM // added for issue73355
{
	Text [ en-US ] = "Confirm Icon Replacement" ;
};

String RID_SVXSTR_YESTOALL // added for issue73355
{
	Text [ en-US ] = "Yes to All" ;
};

String RID_SVXSTR_PRODUCTNAME_TOOLBARS
{
	Text [ en-US ] = "%PRODUCTNAME %MODULENAME Toolbars" ;
};

String RID_SVXSTR_TOOLBAR
{
	Text [ en-US ] = "Toolbar" ;
};

String RID_SVXSTR_TOOLBAR_CONTENT
{
	Text [ en-US ] = "Toolbar Content" ;
};

String RID_SVXSTR_COMMANDS
{
	Text [ en-US ] = "Commands" ;
};

String RID_SVXSTR_COMMAND
{
	Text [ en-US ] = "Command" ;
};

String RID_SVXSTR_TOOLBAR_NAME
{
	TEXT_TOOLBAR_NAME
};

/* %MENUNAME will be replaced at runtime by the name of the selected menu. */
QueryBox QBX_CONFIRM_DELETE_MENU
{
	Message [ en-US ] = "Are you sure you want to delete the '%MENUNAME' menu?" ;
	BUTTONS = WB_YES_NO ;
	DEFBUTTON = WB_DEF_NO ;
};

QueryBox QBX_CONFIRM_DELETE_TOOLBAR
{
	Message [ en-US ] = "There are no more commands on the toolbar. Do you want to delete the toolbar?" ;
	BUTTONS = WB_YES_NO ;
	DEFBUTTON = WB_DEF_NO ;
};

/* Translators: Do not translate %SAVE IN SELECTION% It is a placeholder and will be
   replaced at runtime by the name of the selected application or document.
*/
QueryBox QBX_CONFIRM_RESET
{
	Message [ en-US ] = "The menu configuration for %SAVE IN SELECTION% will be reset to the default settings. Do you want to continue?" ;
	BUTTONS = WB_YES_NO ;
	DEFBUTTON = WB_DEF_NO ;
};

/* Translators: Do not translate %SAVE IN SELECTION%. It is a placeholder and will be
   replaced at runtime by the name of the selected application or document.
*/
String RID_SVXSTR_CONFIRM_MENU_RESET
{
	Text [ en-US ] = "The menu configuration for %SAVE IN SELECTION% will be reset to the default settings. Do you want to continue?" ;
};

String RID_SVXSTR_CONFIRM_TOOLBAR_RESET
{
	Text [ en-US ] = "The toolbar configuration for %SAVE IN SELECTION% will be reset to the default settings. Do you want to continue?" ;
};

QueryBox QBX_CONFIRM_RESTORE_DEFAULT
{
	Message [ en-US ] = "This will delete all changes previously made to this toolbar. Do you really want to reset the toolbar?" ;
	BUTTONS = WB_YES_NO ;
	DEFBUTTON = WB_DEF_NO ;
};

InfoBox IBX_MNUCFG_ALREADY_INCLUDED
{
	Message [ en-US ] = "Function is already included in this popup." ;
};

String RID_SVXSTR_LABEL_NEW_NAME
{
	Text [ en-US ] = "~New name" ;
};

String RID_SVXSTR_RENAME_MENU
{
	Text [ en-US ] = "Rename Menu" ;
};

String RID_SVXSTR_RENAME_TOOLBAR
{
	Text [ en-US ] = "Rename Toolbar" ;
};
String BUTTON_STR_UP
{
	Text [ en-US ] = "Up" ;
};
String BUTTON_STR_DOWN
{
	Text [ en-US ] = "Down" ;
};

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