/**************************************************************
 *
 * 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 "simpref.hrc"
ModelessDialog RID_SCDLG_SIMPLEREF
{
	OutputSize = TRUE ;
	//HelpId = SID_DEFINE_DBNAME ;
	Hide = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 222 , 60 ) ;
	Text = "Bereich festlegen" ;
	Moveable = TRUE ;
	// Closeable = TRUE;	// This dialog has a Cancel button!
	FixedText FT_ASSIGN
	{
		Pos = MAP_APPFONT ( 6 , 6 ) ;
		Size = MAP_APPFONT ( 40 , 12 ) ;
		Text [ en-US ] = "Area" ;
	};
	Edit ED_ASSIGN
	{
	    HelpID = "sc:Edit:RID_SCDLG_SIMPLEREF:ED_ASSIGN";
		Border = TRUE ;
		Pos = MAP_APPFONT ( 48 , 6 ) ;
		Size = MAP_APPFONT ( 90 , 12 ) ;
		TabStop = TRUE ;
		 //		Text = "<Tabellenbereich>" ;
	};
	ImageButton RB_ASSIGN
	{
	    HelpID = "sc:ImageButton:RID_SCDLG_SIMPLEREF:RB_ASSIGN";
		Pos = MAP_APPFONT ( 142 , 5 ) ;
		Size = MAP_APPFONT ( 13 , 15 ) ;
		TabStop = FALSE ;
		QuickHelpText [ en-US ] = "Shrink" ;
	};
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 166 , 6 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( 166 , 23 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 166 , 43 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
	};
};

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