/**************************************************************
 *
 * 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 "zoom.hrc"
#include <svx/dialogs.hrc> // for RID_SVXDLG_ZOOM
#include "helpid.hrc"

// RID_SVXDLG_ZOOM -------------------------------------------------------
ModalDialog RID_SVXDLG_ZOOM
{
	HelpId = CMD_SID_ATTR_ZOOM ;
	OutputSize = TRUE ;
	SvLook = TRUE ;
	Size = MAP_APPFONT ( 242, 112 ) ;
	Moveable = TRUE ;
	Text [ en-US ] = "Zoom & View Layout" ;
	FixedLine FL_ZOOM
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 112, 8 ) ;
		Text [ en-US ] = "Zoom factor" ;
	};
	RadioButton BTN_OPTIMAL
	{
		HelpID = "cui:RadioButton:RID_SVXDLG_ZOOM:BTN_OPTIMAL" ;
		Pos = MAP_APPFONT ( 12, 14 ) ;
		Size = MAP_APPFONT ( 105, 10 ) ;
		Text [ en-US ] = "~Optimal" ;
	};
	RadioButton BTN_WHOLE_PAGE
	{
		HelpID = "cui:RadioButton:RID_SVXDLG_ZOOM:BTN_WHOLE_PAGE" ;
		Pos = MAP_APPFONT ( 12, 27 ) ;
		Size = MAP_APPFONT ( 105, 10 ) ;
		Text [ en-US ] = "~Fit width and height" ;
	};
	RadioButton BTN_PAGE_WIDTH
	{
		HelpID = "cui:RadioButton:RID_SVXDLG_ZOOM:BTN_PAGE_WIDTH" ;
		Pos = MAP_APPFONT ( 12, 40 ) ;
		Size = MAP_APPFONT ( 105, 10 ) ;
		Text [ en-US ] = "Fit ~width" ;
	};
	RadioButton BTN_100
	{
		HelpID = "cui:RadioButton:RID_SVXDLG_ZOOM:BTN_100" ;
		Pos = MAP_APPFONT ( 12, 53 ) ;
		Size = MAP_APPFONT ( 105, 10 ) ;
		Text = "~100 %" ;
	};
	RadioButton BTN_USER
	{
		HelpID = "cui:RadioButton:RID_SVXDLG_ZOOM:BTN_USER" ;
		Pos = MAP_APPFONT ( 12, 67 ) ;
		Size = MAP_APPFONT ( 72, 10 ) ;
		Text [ en-US ] = "~Variable" ;
	};
	MetricField ED_USER
	{
		HelpID = "cui:MetricField:RID_SVXDLG_ZOOM:ED_USER" ;
		Pos = MAP_APPFONT ( 86, 66 ) ;
		Size = MAP_APPFONT ( 32, 12 ) ;
		Border = TRUE ;
		Group = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Unit = FUNIT_PERCENT ;
		SpinSize = 1 ;
	};
	FixedLine FL_VIEWLAYOUT
	{
		Pos = MAP_APPFONT ( 124, 3 ) ;
		Size = MAP_APPFONT ( 112, 8 ) ;
		Text [ en-US ] = "View layout" ;
	};
	RadioButton BTN_AUTOMATIC
	{
		HelpID = "cui:RadioButton:RID_SVXDLG_ZOOM:BTN_AUTOMATIC" ;
		Pos = MAP_APPFONT ( 130, 14 ) ;
		Size = MAP_APPFONT ( 106, 10 ) ;
		Text [ en-US ] = "~Automatic" ;
	};
	RadioButton BTN_SINGLE
	{
		HelpID = "cui:RadioButton:RID_SVXDLG_ZOOM:BTN_SINGLE" ;
		Pos = MAP_APPFONT ( 130, 27 ) ;
		Size = MAP_APPFONT ( 106, 10 ) ;
		Text [ en-US ] = "~Single page" ;
	};
	RadioButton BTN_COLUMNS
	{
		HelpID = "cui:RadioButton:RID_SVXDLG_ZOOM:BTN_COLUMNS" ;
		Pos = MAP_APPFONT ( 130, 41 ) ;
		Size = MAP_APPFONT ( 75, 10 ) ;
		Text [ en-US ] = "~Columns" ;
	};
	MetricField ED_COLUMNS
	{
		HelpID = "cui:MetricField:RID_SVXDLG_ZOOM:ED_COLUMNS" ;
		Pos = MAP_APPFONT ( 209, 40 ) ;
		Size = MAP_APPFONT ( 24, 12 ) ;
		Border = TRUE ;
		Group = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		SpinSize = 1 ;
		Minimum = 1 ;
		Maximum = 999 ;
	};
	CheckBox CHK_BOOK
	{
		HelpID = "cui:CheckBox:RID_SVXDLG_ZOOM:CHK_BOOK" ;
		Pos = MAP_APPFONT ( 136, 55 ) ;
		Size = MAP_APPFONT ( 85, 10 ) ;
		Text [ en-US ] = "~Book mode" ;
	};
	FixedLine FL_BOTTOM
	{
		Pos = MAP_APPFONT ( 6, 81 ) ;
		Size = MAP_APPFONT ( 230, 8 ) ;
	};
	OKButton BTN_ZOOM_OK
	{
		Pos = MAP_APPFONT ( 77, 92 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		DefButton = TRUE ;
	};
	CancelButton BTN_ZOOM_CANCEL
	{
		Pos = MAP_APPFONT ( 130, 92 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
	};
	HelpButton BTN_ZOOM_HELP
	{
		Pos = MAP_APPFONT ( 186, 92 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
	};
};

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