/**************************************************************
 *
 * 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 <sfx2/sfx.hrc>
#include "doc.hrc"
#include "new.hrc"
#include <sfx2/sfxcommands.h>

// pragma ----------------------------------------------------------------

// DLG_NEW_FILE ----------------------------------------------------------
ModalDialog DLG_NEW_FILE
{
	HelpId = CMD_SID_NEWDOC ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 336, 96 ) ;
	Text [ en-US ] = "New" ;
	Moveable = TRUE ;
	OKButton BT_OK
	{
		Pos = MAP_APPFONT ( 274, 6 ) ;
		Size = MAP_APPFONT ( 56, 14 ) ;
		DefButton = TRUE ;
	};
	CancelButton BT_CANCEL
	{
		Pos = MAP_APPFONT ( 274, 23 ) ;
		Size = MAP_APPFONT ( 56, 14 ) ;
	};
	HelpButton BT_HELP
	{
		Pos = MAP_APPFONT ( 274, 43 ) ;
		Size = MAP_APPFONT ( 56, 14 ) ;
	};
	ListBox LB_REGION
	{
		HelpID = "sfx2:ListBox:DLG_NEW_FILE:LB_REGION" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6, 18 ) ;
		Size = MAP_APPFONT ( 127, 72 ) ;
		CurPos = 0 ;
	};
	FixedText FT_REGION
	{
		Pos = MAP_APPFONT ( 6, 6 ) ;
		Size = MAP_APPFONT ( 97, 10 ) ;
		Text [ en-US ] = "~Categories" ;
		Left = TRUE ;
	};
	FixedText FT_TEMPLATE
	{
		Pos = MAP_APPFONT ( 139, 6 ) ;
		Size = MAP_APPFONT ( 97, 10 ) ;
		Text [ en-US ] = "T~emplates" ;
		Left = TRUE ;
	};
	ListBox LB_TEMPLATE
	{
		HelpID = "sfx2:ListBox:DLG_NEW_FILE:LB_TEMPLATE" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 139, 18 ) ;
		Size = MAP_APPFONT ( 127, 72 ) ;
		CurPos = 0 ;
	};
	MoreButton BT_MORE
	{
		HelpID = "sfx2:MoreButton:DLG_NEW_FILE:BT_MORE" ;
		Pos = MAP_APPFONT ( 274, 70 ) ;
		Size = MAP_APPFONT ( 56, 14 ) ;
		Text [ en-US ] = "~More" ;
		Delta = 148 ;
		MapUnit = MAP_APPFONT ;
	};
	Window WIN_PREVIEW
	{
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6, 110 ) ;
		Size = MAP_APPFONT ( 127, 129 ) ;
		Hide = TRUE ;
		SVLook = FALSE ;
	};
	CheckBox BTN_PREVIEW
	{
		HelpID = "sfx2:CheckBox:DLG_NEW_FILE:BTN_PREVIEW" ;
		Pos = MAP_APPFONT ( 6, 96 ) ;
		Size = MAP_APPFONT ( 97, 10 ) ;
		Text [ en-US ] = "Pre~view" ;
		Hide = TRUE ;
	};
	FixedLine GB_DOCINFO
	{
		Pos = MAP_APPFONT ( 139, 97 ) ;
		Size = MAP_APPFONT ( 186, 8 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Description" ;
	};
	CheckBox CB_TEXT_STYLE
	{
		HelpID = "sfx2:CheckBox:DLG_NEW_FILE:CB_TEXT_STYLE" ;
		Pos = MAP_APPFONT ( 6, 94 ) ;
		Size = MAP_APPFONT ( 50, 10 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Te~xt" ;
	};
	CheckBox CB_FRAME_STYLE
	{
		HelpID = "sfx2:CheckBox:DLG_NEW_FILE:CB_FRAME_STYLE" ;
		Pos = MAP_APPFONT ( 60, 94 ) ;
		Size = MAP_APPFONT ( 50, 10 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "~Frame" ;
	};
	CheckBox CB_PAGE_STYLE
	{
		HelpID = "sfx2:CheckBox:DLG_NEW_FILE:CB_PAGE_STYLE" ;
		Pos = MAP_APPFONT ( 114, 94 ) ;
		Size = MAP_APPFONT ( 50, 10 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "~Pages" ;
	};
	CheckBox CB_NUM_STYLE
	{
		HelpID = "sfx2:CheckBox:DLG_NEW_FILE:CB_NUM_STYLE" ;
		Pos = MAP_APPFONT ( 168, 94 ) ;
		Size = MAP_APPFONT ( 50, 10 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "N~umbering" ;
	};
	CheckBox CB_MERGE_STYLE
	{
		HelpID = "sfx2:CheckBox:DLG_NEW_FILE:CB_MERGE_STYLE" ;
		Pos = MAP_APPFONT ( 222, 94 ) ;
		Size = MAP_APPFONT ( 50, 10 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "~Overwrite" ;
	};
	PushButton PB_LOAD_FILE
	{
		HelpID = "sfx2:PushButton:DLG_NEW_FILE:PB_LOAD_FILE" ;
		Pos = MAP_APPFONT ( 274, 92 ) ;
		Size = MAP_APPFONT ( 56, 14 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "From File..." ;
	};
	String STR_LOAD_TEMPLATE
	{
		Text [ en-US ] = "Load Styles" ;
	};
	FixedText FT_TITLE
	{
		Pos = MAP_APPFONT ( 145, 108 ) ;
		Size = MAP_APPFONT ( 175, 10 ) ;
		Text [ en-US ] = "~Title" ;
		Hide = TRUE ;
	};
	Edit ED_TITLE
	{
		HelpID = "sfx2:Edit:DLG_NEW_FILE:ED_TITLE" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 145, 121 ) ;
		Size = MAP_APPFONT ( 175, 12 ) ;
		ReadOnly = TRUE ;
		Hide = TRUE ;
	};
	FixedText FT_THEMA
	{
		Pos = MAP_APPFONT ( 145, 135 ) ;
		Size = MAP_APPFONT ( 175, 10 ) ;
		Text [ en-US ] = "Subject" ;
		Hide = TRUE ;
	};
	Edit ED_THEMA
	{
		HelpID = "sfx2:Edit:DLG_NEW_FILE:ED_THEMA" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 145, 148 ) ;
		Size = MAP_APPFONT ( 175, 12 ) ;
		ReadOnly = TRUE ;
		Hide = TRUE ;
	};
	FixedText FT_KEYWORDS
	{
		Pos = MAP_APPFONT ( 145, 162 ) ;
		Size = MAP_APPFONT ( 175, 10 ) ;
		Text [ en-US ] = "~Key words" ;
		Hide = TRUE ;
	};
	Edit ED_KEYWORDS
	{
		HelpID = "sfx2:Edit:DLG_NEW_FILE:ED_KEYWORDS" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 145, 175 ) ;
		Size = MAP_APPFONT ( 175, 12 ) ;
		ReadOnly = TRUE ;
		Hide = TRUE ;
	};
	FixedText FT_DESC
	{
		Pos = MAP_APPFONT ( 145, 189 ) ;
		Size = MAP_APPFONT ( 175, 10 ) ;
		Text [ en-US ] = "~Description" ;
		Hide = TRUE ;
	};
	MultiLineEdit ED_DESC
	{
		HelpID = "sfx2:MultiLineEdit:DLG_NEW_FILE:ED_DESC" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 144, 202 ) ;
		Size = MAP_APPFONT ( 175, 32 ) ;
		IgnoreTab = TRUE ;
		ReadOnly = TRUE ;
		Hide = TRUE ;
	};
	ExtraData =
	{
	103;
	44;
	};
};

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