/**************************************************************
 * 
 * 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 "prnsetup.hrc"

String STR_SVT_PRNDLG_READY
{
	Text [ en-US ] = "Ready" ;
};
String STR_SVT_PRNDLG_PAUSED
{
	Text [ en-US ] = "Paused" ;
};
String STR_SVT_PRNDLG_PENDING
{
	Text [ en-US ] = "Pending deletion" ;
};
String STR_SVT_PRNDLG_BUSY
{
	Text [ en-US ] = "Busy" ;
};
String STR_SVT_PRNDLG_INITIALIZING
{
	Text [ en-US ] = "Initializing" ;
};
String STR_SVT_PRNDLG_WAITING
{
	Text [ en-US ] = "Waiting" ;
};
String STR_SVT_PRNDLG_WARMING_UP
{
	Text [ en-US ] = "Warming up" ;
};
String STR_SVT_PRNDLG_PROCESSING
{
	Text [ en-US ] = "Processing" ;
};
String STR_SVT_PRNDLG_PRINTING
{
	Text [ en-US ] = "Printing" ;
};
String STR_SVT_PRNDLG_OFFLINE
{
	Text [ en-US ] = "Offline" ;
};
String STR_SVT_PRNDLG_ERROR
{
	Text [ en-US ] = "Error" ;
};
String STR_SVT_PRNDLG_SERVER_UNKNOWN
{
	Text [ en-US ] = "Unknown Server" ;
};
String STR_SVT_PRNDLG_PAPER_JAM
{
	Text [ en-US ] = "Paper jam" ;
};
String STR_SVT_PRNDLG_PAPER_OUT
{
	Text [ en-US ] = "Not enough paper" ;
};
String STR_SVT_PRNDLG_MANUAL_FEED
{
	Text [ en-US ] = "Manual feed" ;
};
String STR_SVT_PRNDLG_PAPER_PROBLEM
{
	Text [ en-US ] = "Paper problem" ;
};
String STR_SVT_PRNDLG_IO_ACTIVE
{
	Text [ en-US ] = "I/O active" ;
};
String STR_SVT_PRNDLG_OUTPUT_BIN_FULL
{
	Text [ en-US ] = "Output bin full" ;
};
String STR_SVT_PRNDLG_TONER_LOW
{
	Text [ en-US ] = "Toner low" ;
};
String STR_SVT_PRNDLG_NO_TONER
{
	Text [ en-US ] = "No toner" ;
};
String STR_SVT_PRNDLG_PAGE_PUNT
{
	Text [ en-US ] = "Delete Page" ;
};
String STR_SVT_PRNDLG_USER_INTERVENTION
{
	Text [ en-US ] = "User intervention necessary" ;
};
String STR_SVT_PRNDLG_OUT_OF_MEMORY
{
	Text [ en-US ] = "Insufficient memory" ;
};
String STR_SVT_PRNDLG_DOOR_OPEN
{
	Text [ en-US ] = "Cover open" ;
};
String STR_SVT_PRNDLG_POWER_SAVE
{
	Text [ en-US ] = "Power save mode" ;
};
String STR_SVT_PRNDLG_DEFPRINTER
{
	Text [ en-US ] = "Default printer" ;
};
String STR_SVT_PRNDLG_JOBCOUNT
{
	Text [ en-US ] = "%d documents" ;
};

ModalDialog DLG_SVT_PRNDLG_PRNSETUPDLG
{
    HelpID = "svtools:ModalDialog:DLG_SVT_PRNDLG_PRNSETUPDLG";
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Moveable = TRUE ;
	Size = MAP_APPFONT ( 260 , 104 ) ;
	Text [ en-US ] = "Printer Setup" ;
	FixedLine FL_PRINTER
	{
		Pos = MAP_APPFONT ( 6 , 3 ) ;
		Size = MAP_APPFONT ( 248 , 8 ) ;
		Text [ en-US ] = "Printer" ;
	};
	FixedText FT_NAME
	{
		Pos = MAP_APPFONT ( 12 , 14 ) ;
		Size = MAP_APPFONT ( 45 , 10 ) ;
		Text [ en-US ] = "~Name" ;
	};
	ListBox LB_NAMES
	{
	    HelpID = "svtools:ListBox:DLG_SVT_PRNDLG_PRNSETUPDLG:LB_NAMES";
		Border = TRUE ;
		Pos = MAP_APPFONT ( 60 , 12 ) ;
		Size = MAP_APPFONT ( 125 , 80 ) ;
		DropDown = TRUE ;
		Sort = TRUE ;
	};
	PushButton BTN_PROPERTIES
	{
	    HelpID = "svtools:PushButton:DLG_SVT_PRNDLG_PRNSETUPDLG:BTN_PROPERTIES";
		Pos = MAP_APPFONT ( 188 , 12 ) ;
		Size = MAP_APPFONT ( 60 , 14 ) ;
		Text [ en-US ] = "Propert~ies..." ;
	};
	FixedText FT_STATUS
	{
		Pos = MAP_APPFONT ( 12 , 29 ) ;
		Size = MAP_APPFONT ( 45 , 10 ) ;
		Text [ en-US ] = "Status" ;
	};
	FixedText FI_STATUS
	{
		Pos = MAP_APPFONT ( 60 , 29 ) ;
		Size = MAP_APPFONT ( 188 , 10 ) ;
	};
	FixedText FT_TYPE
	{
		Pos = MAP_APPFONT ( 12 , 40 ) ;
		Size = MAP_APPFONT ( 45 , 10 ) ;
		Text [ en-US ] = "Type" ;
	};
	FixedText FI_TYPE
	{
		Pos = MAP_APPFONT ( 60 , 40 ) ;
		Size = MAP_APPFONT ( 188 , 10 ) ;
	};
	FixedText FT_LOCATION
	{
		Pos = MAP_APPFONT ( 12 , 51 ) ;
		Size = MAP_APPFONT ( 45 , 10 ) ;
		Text [ en-US ] = "Location" ;
	};
	FixedText FI_LOCATION
	{
		Pos = MAP_APPFONT ( 60 , 51 ) ;
		Size = MAP_APPFONT ( 188 , 10 ) ;
	};
	FixedText FT_COMMENT
	{
		Pos = MAP_APPFONT ( 12 , 62 ) ;
		Size = MAP_APPFONT ( 45 , 10 ) ;
		Text [ en-US ] = "Comment" ;
	};
	FixedText FI_COMMENT
	{
		Pos = MAP_APPFONT ( 60 , 62 ) ;
		Size = MAP_APPFONT ( 188 , 10 ) ;
	};
    FixedLine FL_SEPBUTTON
    {
        Pos = MAP_APPFONT ( 0, 78 );
        Size = MAP_APPFONT ( 260, 2 );
    };
	PushButton BTN_OPTIONS
	{
	    HelpID = "svtools:PushButton:DLG_SVT_PRNDLG_PRNSETUPDLG:BTN_OPTIONS";
		Pos = MAP_APPFONT ( 5 , 84 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		Text [ en-US ] = "~Options..." ;
	};
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 95 , 84 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		DefButton = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( 148 , 84 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 204 , 84 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
	};
};



































