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

// RID_SVXDLG_MULTIPATH --------------------------------------------------

ModalDialog RID_SVXDLG_MULTIPATH
{
	HelpId = HID_MULTIPATH ;
	OutputSize = TRUE ;
	Size = MAP_APPFONT ( 260 , 120 ) ;
	Text [ en-US ] = "Select Paths" ;
	Moveable = TRUE ;
	Closeable = TRUE ;
    FixedLine FL_MULTIPATH
    {
        Pos = MAP_APPFONT ( 6 , 3 ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
        Text [ en-US ] = "Paths" ;
    };
    ListBox LB_MULTIPATH
    {
        HelpID = "cui:ListBox:RID_SVXDLG_MULTIPATH:LB_MULTIPATH";
        Border = TRUE ;
        Pos = MAP_APPFONT ( 12 , 14 ) ;
        Size = MAP_APPFONT ( 189 , 80 ) ;
        AutoHScroll = TRUE ;
    };
    Control LB_RADIOBUTTON
    {
        HelpId = HID_OPTIONS_MULTIPATH_LIST ;
        Hide = TRUE ;
        Border = TRUE ;
        Pos = MAP_APPFONT ( 6 , 6 ) ;
        Size = MAP_APPFONT ( 195 , 77 ) ;
    };
    FixedText FT_RADIOBUTTON
    {
        Hide = TRUE ;
        NoLabel = TRUE ;
        Pos = MAP_APPFONT ( 6 , 86 );
        Size = MAP_APPFONT ( 195 , 8 );
        Text [ en-US ] = "Mark the default path for new files.";
    };
    PushButton BTN_ADD_MULTIPATH
	{
        HelpID = "cui:PushButton:RID_SVXDLG_MULTIPATH:BTN_ADD_MULTIPATH";
		Pos = MAP_APPFONT ( 204 , 14 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		Text [ en-US ] = "~Add..." ;
	};
	PushButton BTN_DEL_MULTIPATH
	{
	    HelpID = "cui:PushButton:RID_SVXDLG_MULTIPATH:BTN_DEL_MULTIPATH";
		Pos = MAP_APPFONT ( 204 , 31 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		Text [ en-US ] = "~Delete" ;
	};
	OKButton BTN_MULTIPATH_OK
	{
		Pos = MAP_APPFONT ( 95 , 100 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		DefButton = TRUE;
	};
	CancelButton BTN_MULTIPATH_CANCEL
	{
		Pos = MAP_APPFONT ( 148 , 100 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
	};
	HelpButton BTN_MULTIPATH_HELP
	{
		Pos = MAP_APPFONT (  204 , 100 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
	};
    String STR_HEADER_PATHS
    {
        Text [ en-US ] = "Path list" ;
    };
};
String RID_MULTIPATH_DBL_ERR
{
	Text [ en-US ] = "The path %1 already exists." ;
};
String RID_SVXSTR_FILE_TITLE
{
	Text [ en-US ] = "Select files" ;
};
String RID_SVXSTR_FILE_HEADLINE
{
	Text [ en-US ] = "Files" ;
};
String RID_SVXSTR_ARCHIVE_TITLE
{
	Text [ en-US ] = "Select Archives" ;
};
String RID_SVXSTR_ARCHIVE_HEADLINE
{
	Text [ en-US ] = "Archives" ;
};
String RID_SVXSTR_MULTIFILE_DBL_ERR
{
	Text [ en-US ] = "The file %1 already exists." ;
};























