/**************************************************************
 * 
 * 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.
 * 
 *************************************************************/


 // #pragma ******************************************************************

 // #include *****************************************************************
#include "labfmt.hrc"
#include "helpid.h"
 // TP_LAB_FMT ---------------------------------------------------------------
TabPage TP_LAB_FMT
{
	HelpID = HID_LAB_FMT ;
	Size = MAP_APPFONT ( 260 , 185 ) ;
	Hide = TRUE ;
	FixedText FI_MAKE
	{
		Pos = MAP_APPFONT ( 108 , 6 ) ;
		Size = MAP_APPFONT ( 50 , 8 ) ;
	};
	FixedText FI_TYPE
	{
		Pos = MAP_APPFONT ( 162 , 6 ) ;
		Size = MAP_APPFONT ( 92 , 8 ) ;
	};
	Window WIN_PREVIEW
	{
		Border = TRUE ;
        Pos = MAP_APPFONT ( 108 , 17 ) ;
		Size = MAP_APPFONT ( 146 , 161 ) ;
	};
	FixedText TXT_HDIST
	{
        Pos = MAP_APPFONT ( 6 , 19 ) ;
		Size = MAP_APPFONT ( 50 , 8 ) ;
		Text [ en-US ] = "Hori~zontal pitch" ;
		Group = TRUE ;
		Left = TRUE ;
	};
	MetricField FLD_HDIST
	{
	    HelpID = "sw:MetricField:TP_LAB_FMT:FLD_HDIST";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 60 , 17 ) ;
		Size = MAP_APPFONT ( 40 , 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Spin = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_CM ;
		Repeat = TRUE ;
		SpinSize = 10 ;
	};
	FixedText TXT_VDIST
	{
        Pos = MAP_APPFONT ( 6 , 35 ) ;
		Size = MAP_APPFONT ( 50 , 8 ) ;
		Text [ en-US ] = "~Vertical pitch" ;
		Left = TRUE ;
	};
	MetricField FLD_VDIST
	{
	    HelpID = "sw:MetricField:TP_LAB_FMT:FLD_VDIST";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 60 , 33 ) ;
		Size = MAP_APPFONT ( 40 , 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Spin = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_CM ;
		Repeat = TRUE ;
		SpinSize = 10 ;
	};
	FixedText TXT_WIDTH
	{
        Pos = MAP_APPFONT ( 6 , 51 ) ;
		Size = MAP_APPFONT ( 50 , 8 ) ;
		Text [ en-US ] = "~Width" ;
		Left = TRUE ;
	};
	MetricField FLD_WIDTH
	{
	    HelpID = "sw:MetricField:TP_LAB_FMT:FLD_WIDTH";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 60 , 49 ) ;
		Size = MAP_APPFONT ( 40 , 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Spin = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_CM ;
		Repeat = TRUE ;
		SpinSize = 10 ;
	};
	FixedText TXT_HEIGHT
	{
        Pos = MAP_APPFONT ( 6 , 67 ) ;
		Size = MAP_APPFONT ( 50 , 8 ) ;
		Text [ en-US ] = "~Height" ;
		Left = TRUE ;
	};
	MetricField FLD_HEIGHT
	{
	    HelpID = "sw:MetricField:TP_LAB_FMT:FLD_HEIGHT";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 60 , 65 ) ;
		Size = MAP_APPFONT ( 40 , 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Spin = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_CM ;
		Repeat = TRUE ;
		SpinSize = 10 ;
	};
	FixedText TXT_LEFT
	{
        Pos = MAP_APPFONT ( 6 , 83 ) ;
		Size = MAP_APPFONT ( 50 , 8 ) ;
		Text [ en-US ] = "~Left margin" ;
		Left = TRUE ;
	};
	MetricField FLD_LEFT
	{
	    HelpID = "sw:MetricField:TP_LAB_FMT:FLD_LEFT";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 60 , 81 ) ;
		Size = MAP_APPFONT ( 40 , 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Spin = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_CM ;
		Repeat = TRUE ;
		Minimum = 0 ;
		First = 0 ;
		SpinSize = 10 ;
	};
	FixedText TXT_UPPER
	{
        Pos = MAP_APPFONT ( 6 , 99 ) ;
		Size = MAP_APPFONT ( 50 , 8 ) ;
		Text [ en-US ] = "~Top margin" ;
		Left = TRUE ;
	};
	MetricField FLD_UPPER
	{
	    HelpID = "sw:MetricField:TP_LAB_FMT:FLD_UPPER";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 60 , 97 ) ;
		Size = MAP_APPFONT ( 40 , 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Spin = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_CM ;
		Repeat = TRUE ;
		Minimum = 0 ;
		First = 0 ;
		SpinSize = 10 ;
	};
	FixedText TXT_COLUMNS
	{
        Pos = MAP_APPFONT ( 6 , 115 ) ;
		Size = MAP_APPFONT ( 50 , 8 ) ;
		Text [ en-US ] = "~Columns" ;
		Left = TRUE ;
	};
	NumericField FLD_COLUMNS
	{
	    HelpID = "sw:NumericField:TP_LAB_FMT:FLD_COLUMNS";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 60 , 113 ) ;
		Size = MAP_APPFONT ( 40 , 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		First = 1 ;
	};
	FixedText TXT_ROWS
	{
        Pos = MAP_APPFONT ( 6 , 131 ) ;
		Size = MAP_APPFONT ( 50 , 8 ) ;
		Text [ en-US ] = "R~ows" ;
		Left = TRUE ;
	};
	NumericField FLD_ROWS
	{
	    HelpID = "sw:NumericField:TP_LAB_FMT:FLD_ROWS";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 60 , 129 ) ;
		Size = MAP_APPFONT ( 40 , 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		First = 1 ;
	};
	PushButton	PB_SAVE
	{
	    HelpID = "sw:PushButton:TP_LAB_FMT:PB_SAVE";
        Pos = MAP_APPFONT ( 50 , 148 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		Text [ en-US ] = "~Save...";
	};
};
 // String *******************************************************************
String STR_HDIST
{
	Text [ en-US ] = "H. Pitch" ;
};
String STR_VDIST
{
	Text [ en-US ] = "V. Pitch" ;
};
String STR_WIDTH
{
	Text [ en-US ] = "Width" ;
};
String STR_HEIGHT
{
	Text [ en-US ] = "Height" ;
};
String STR_LEFT
{
	Text [ en-US ] = "Left margin" ;
};
String STR_UPPER
{
	Text [ en-US ] = "Top margin" ;
};
String STR_COLS
{
	Text [ en-US ] = "Columns" ;
};
String STR_ROWS
{
	Text [ en-US ] = "Rows" ;
};
ModalDialog DLG_SAVE_LABEL
{
	HelpID = HID_SAVE_LABEL_DLG ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 230 , 60 ) ;
	Moveable = TRUE ;
	FixedText FT_MAKE
	{
		Pos = MAP_APPFONT ( 12 , 16 ) ;
		Size = MAP_APPFONT ( 50 , 10 ) ;
		Text [ en-US ] = "Brand" ;
		Left = TRUE ;
	};
	ComboBox CB_MAKE
	{
	    HelpID = "sw:ComboBox:DLG_SAVE_LABEL:CB_MAKE";
		Pos = MAP_APPFONT ( 65 , 15 ) ;
		Size = MAP_APPFONT ( 100 , 50 ) ;
		Border = TRUE;
		DropDown = TRUE;
	};
	FixedText FT_TYPE
	{
		Pos = MAP_APPFONT ( 12 , 31 ) ;
		Size = MAP_APPFONT ( 50 , 10 ) ;
		Text [ en-US ] = "T~ype" ;
		Left = TRUE ;
	};
	Edit ED_TYPE
	{
	    HelpID = "sw:Edit:DLG_SAVE_LABEL:ED_TYPE";
		Pos = MAP_APPFONT ( 65 , 30 ) ;
		Size = MAP_APPFONT ( 100 , 12 ) ;
		Border = TRUE;
	};
    FixedLine FL_OPTIONS
	{
		Pos = MAP_APPFONT ( 6 , 3 ) ;
        Size = MAP_APPFONT ( 165 , 8 ) ;
		Text [ en-US ] = "Options";
	};
	OKButton PB_OK
	{
		Pos = MAP_APPFONT ( 174 , 6 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton PB_CANCEL
	{
		Pos = MAP_APPFONT ( 174 , 23 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
	};
	HelpButton PB_HELP
	{
		Pos = MAP_APPFONT ( 174 , 43 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
	};
	QueryBox MB_QUERY
	{
		Buttons = WB_YES_NO ;
		DefButton = WB_DEF_CANCEL ;
		Message [ en-US ] = "The label \"%1 / %2\" already exists.\nDo you want to overwrite it?";
	};
	Text [ en-US ] = "Save Label Format";
};

































