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

ModalDialog RID_DLG_ALIEN_WARNING
{
	HelpId = HID_WARNING_ALIENFORMAT ;
	Size = MAP_APPFONT ( DIALOG_WIDTH, DIALOG_HEIGHT ) ;
	OutputSize = TRUE ;
	Closeable = FALSE ;
	Moveable = TRUE ;
	SVLook = TRUE ;

	Text = "%PRODUCTNAME %PRODUCTVERSION %PRODUCTEXTENSION" ;

	FixedImage FI_QUERY
	{
		Pos = MAP_APPFONT ( AW_COL_1, AW_ROW_1 ) ;
		Size = MAP_APPFONT ( SYMBOL_EDGE, SYMBOL_EDGE ) ;
	};
	FixedText FT_INFOTEXT
	{
		Pos = MAP_APPFONT ( AW_COL_2, AW_ROW_1 ) ;
		Size = MAP_APPFONT ( DIALOG_WIDTH-AW_COL_2-RSC_SP_DLG_INNERBORDER_RIGHT, INFO_TEXT_LINES*RSC_CD_FIXEDTEXT_HEIGHT ) ;
		NoLabel = TRUE ;
		Wordbreak = TRUE ;
		Text [ en-US ] = "This document may contain formatting or content that cannot be saved in the %FORMATNAME file format. Do you want to save the document in this format anyway?\n\nUse the latest ODF file format and be sure all formatting and content is saved correctly." ;
	};
	OKButton PB_NO
	{
		Pos = MAP_APPFONT ( AW_COL_2, AW_ROW_2 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		DefButton = TRUE ;
		Text [ en-US ] = "~Keep Current Format" ;
	};
	CancelButton PB_YES
	{
		Pos = MAP_APPFONT ( AW_COL_3, AW_ROW_2 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		Text [ en-US ] = "~Save in ODF Format" ;
	};
	HelpButton PB_MOREINFO
	{
		Pos = MAP_APPFONT ( AW_COL_4, AW_ROW_2 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		Hide = TRUE ;
		Text [ en-US ] = "~More Information..." ;
	};
	FixedLine FL_OPTION
	{
		Pos = MAP_APPFONT ( 0, AW_ROW_3 ) ;
		Size = MAP_APPFONT ( DIALOG_WIDTH, RSC_CD_FIXEDLINE_HEIGHT ) ;
	};
	CheckBox CB_WARNING_OFF
	{
		HelpID = "sfx2:CheckBox:RID_DLG_ALIEN_WARNING:CB_WARNING_OFF" ;
		Pos = MAP_APPFONT ( AW_COL_2, AW_ROW_4 ) ;
		Size = MAP_APPFONT ( DIALOG_WIDTH-AW_COL_2-RSC_SP_DLG_INNERBORDER_RIGHT, RSC_CD_CHECKBOX_HEIGHT ) ;
		WordBreak = TRUE ;
		Text [ en-US ] = "~Ask when not saving in ODF format" ;
	};
};

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