/**************************************************************
 *
 * 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 "optpath.hrc"
#include <cuires.hrc>
#ifndef _SFX_HRC
#include <sfx2/sfx.hrc>
#endif
#include "helpid.hrc"

// RID_SFXPAGE_PATH -----------------------------------------------------
TabPage RID_SFXPAGE_PATH
{
	HelpId = HID_OPTIONS_PATH ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	Text [ en-US ] = "Paths" ;
	FixedText FT_TYPE
	{
		Hide = TRUE ;
		Pos = MAP_APPFONT ( 12, 14 ) ;
		Size = MAP_APPFONT ( 40, 10 ) ;
		Text [ en-US ] = "Type" ;
	};
	FixedText FT_PATH
	{
		Hide = TRUE ;
		Pos = MAP_APPFONT ( 110, 14 ) ;
		Size = MAP_APPFONT ( 40, 10 ) ;
		Text [ en-US ] = "Path" ;
	};
	Control LB_PATH
	{
		Pos = MAP_APPFONT ( 12, 14 ) ;
		Size = MAP_APPFONT ( 236, 147 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
	};
	PushButton BTN_PATH
	{
		HelpID = "cui:PushButton:RID_SFXPAGE_PATH:BTN_PATH" ;
		Pos = MAP_APPFONT ( 183, 165 ) ;
		Size = MAP_APPFONT ( 65, 14 ) ;
		Text [ en-US ] = "~Edit..." ;
	};
	PushButton BTN_STANDARD
	{
		HelpID = "cui:PushButton:RID_SFXPAGE_PATH:BTN_STANDARD" ;
		Pos = MAP_APPFONT ( 115, 165 ) ;
		Size = MAP_APPFONT ( 65, 14 ) ;
		Text [ en-US ] = "~Default" ;
	};
	FixedLine GB_STD
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Paths used by %PRODUCTNAME" ;
	};
	Image IMG_LOCK
	{
		ImageBitmap = Bitmap { File = "lock.png" ; } ;
	};
	Image IMG_LOCK_HC
	{
		ImageBitmap = Bitmap { File = "lock_hc.png" ; } ;
	};
	String STR_MULTIPATHDLG
	{
		Text [ en-US ] = "Edit Paths: %1" ;
	};
};
ErrorBox RID_SVXERR_OPT_DOUBLEPATHS
{
	BUTTONS = WB_OK ;
	DEFBUTTON = WB_DEF_OK ;
	Message [ en-US ] = "The configuration and mail directories must be specified as separate directories.\nPlease choose a new path." ;
};
 // ******************************************************************* EOF
String RID_SVXSTR_KEY_CONFIG_DIR
{
	Text [ en-US ] = "Configuration" ;
};
String RID_SVXSTR_KEY_WORK_PATH
{
	Text [ en-US ] = "My Documents" ;
};
String RID_SVXSTR_KEY_GRAPHICS_PATH
{
	Text [ en-US ] = "Graphics" ;
};
String RID_SVXSTR_KEY_BASIC_PATH
{
	Text = "BASIC" ;
};

String RID_SVXSTR_KEY_PALETTE_PATH
{
	Text [ en-US ] = "Palettes" ;
};
String RID_SVXSTR_KEY_BACKUP_PATH
{
	Text [ en-US ] = "Backups" ;
};
String RID_SVXSTR_KEY_MODULES_PATH
{
	Text [ en-US ] = "Modules" ;
};
String RID_SVXSTR_KEY_TEMPLATE_PATH
{
	Text [ en-US ] = "Templates" ;
};
String RID_SVXSTR_KEY_GLOSSARY_PATH
{
	Text [ en-US ] = "AutoText" ;
};
String RID_SVXSTR_KEY_DICTIONARY_PATH
{
	Text [ en-US ] = "Dictionaries" ;
};
String RID_SVXSTR_KEY_HELP_DIR
{
	Text [ en-US ] = "Help" ;
};
String RID_SVXSTR_KEY_GALLERY_DIR
{
	Text [ en-US ] = "Gallery" ;
};

String RID_SVXSTR_KEY_STORAGE_DIR
{
	Text [ en-US ] = "Message Storage" ;
};
String RID_SVXSTR_KEY_TEMP_PATH
{
	Text [ en-US ] = "Temporary files" ;
};
String RID_SVXSTR_KEY_PLUGINS_PATH
{
	Text [ en-US ] = "Plug-ins" ;
};
String RID_SVXSTR_KEY_FAVORITES_DIR
{
	Text [ en-US ] = "Folder Bookmarks" ;
};
String RID_SVXSTR_KEY_FILTER_PATH
{
	Text [ en-US ] = "Filters" ;
};
String RID_SVXSTR_KEY_ADDINS_PATH
{
	Text [ en-US ] = "Add-ins" ;
};
String RID_SVXSTR_KEY_USERCONFIG_PATH
{
	Text [ en-US ] = "User Configuration" ;
};
String RID_SVXSTR_KEY_USERDICTIONARY_DIR
{
	Text [ en-US ] = "User-defined dictionaries" ;
};
String RID_SVXSTR_KEY_AUTOCORRECT_DIR
{
	Text [ en-US ] = "AutoCorrect" ;
};
String RID_SVXSTR_KEY_LINGUISTIC_DIR
{
	Text [ en-US ] = "Writing aids" ;
};

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