/**************************************************************
 * 
 * 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 "dbnamdlg.hrc"
ModelessDialog RID_SCDLG_DBNAMES
{
	OutputSize = TRUE ;
	HelpId = CMD_SID_DEFINE_DBNAME ;
	Hide = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 222 , 142 ) ;
	Text [ en-US ] = "Define Database Range" ;
	Moveable = TRUE ;
	 // Closeable = TRUE;	// Dieser Dialog hat einen Cancel-Button !
    FixedLine FL_NAME
	{
		Pos = MAP_APPFONT ( 6 , 3 ) ;
        Size = MAP_APPFONT ( 154 , 8 ) ;
		Text [ en-US ] = "Na~me" ;
	};
	ComboBox ED_NAME
	{
	    HelpID = "sc:ComboBox:RID_SCDLG_DBNAMES:ED_NAME";
		Pos = MAP_APPFONT ( 12 , 14 ) ;
        Size = MAP_APPFONT ( 145 , 92 ) ;
		TabStop = TRUE ;
		VScroll = TRUE ;
	};
    FixedLine FL_ASSIGN
	{
        Pos = MAP_APPFONT ( 6 , 112 ) ;
        Size = MAP_APPFONT ( 154 , 8 ) ;
		Text [ en-US ] = "~Range" ;
	};
	Edit ED_DBAREA
	{
	    HelpID = "sc:Edit:RID_SCDLG_DBNAMES:ED_DBAREA";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 12 , 123 ) ;
        Size = MAP_APPFONT ( 131 , 12 ) ;
		TabStop = TRUE ;
	};
	ImageButton RB_DBAREA
	{
	    HelpID = "sc:ImageButton:RID_SCDLG_DBNAMES:RB_DBAREA";
        Pos = MAP_APPFONT ( 145 , 122 ) ;
		Size = MAP_APPFONT ( 13 , 15 ) ;
		TabStop = FALSE ;
		QuickHelpText [ en-US ] = "Shrink" ;
	};
    FixedLine FL_OPTIONS
	{
		Hide = TRUE ;
		Pos = MAP_APPFONT ( 6 , 142 ) ;
        Size = MAP_APPFONT ( 154 , 8 ) ;
		Text [ en-US ] = "Options" ;
	};
	CheckBox BTN_HEADER
	{
	    HelpID = "sc:CheckBox:RID_SCDLG_DBNAMES:BTN_HEADER";
		Hide = TRUE ;
        Pos = MAP_APPFONT ( 12 , 153 ) ;
        Size = MAP_APPFONT ( 145 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Co~ntains column labels" ;
	};
	CheckBox BTN_SIZE
	{
	    HelpID = "sc:CheckBox:RID_SCDLG_DBNAMES:BTN_SIZE";
		Hide = TRUE ;
		Pos = MAP_APPFONT ( 12 , 167 ) ;
        Size = MAP_APPFONT ( 145 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Insert or delete ~cells" ;
	};
	CheckBox BTN_FORMAT
	{
	    HelpID = "sc:CheckBox:RID_SCDLG_DBNAMES:BTN_FORMAT";
		Hide = TRUE ;
        Pos = MAP_APPFONT ( 12 , 181 ) ;
        Size = MAP_APPFONT ( 145 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Keep ~formatting" ;
	};
	CheckBox BTN_STRIPDATA
	{
	    HelpID = "sc:CheckBox:RID_SCDLG_DBNAMES:BTN_STRIPDATA";
		Hide = TRUE ;
        Pos = MAP_APPFONT ( 12 , 195 ) ;
        Size = MAP_APPFONT ( 145 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Don't save ~imported data" ;
	};
	FixedText FT_SOURCE
	{
		Hide = TRUE ;
        Pos = MAP_APPFONT ( 12 , 209 ) ;
        Size = MAP_APPFONT ( 145 , 8 ) ;
		Text [ en-US ] = "Source:" ;
	};
	FixedText FT_OPERATIONS
	{
		Hide = TRUE ;
        Pos = MAP_APPFONT ( 12 , 221 ) ;
        Size = MAP_APPFONT ( 145 , 8 ) ;
		Text [ en-US ] = "Operations:" ;
	};
	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 ;
	};
	PushButton BTN_ADD
	{
	    HelpID = "sc:PushButton:RID_SCDLG_DBNAMES:BTN_ADD";
        Pos = MAP_APPFONT ( 166 , 74 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		Text [ en-US ] = "~Add" ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	PushButton BTN_REMOVE
	{
	    HelpID = "sc:PushButton:RID_SCDLG_DBNAMES:BTN_REMOVE";
        Pos = MAP_APPFONT ( 166 , 92 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		Text [ en-US ] = "~Delete" ;
		TabStop = TRUE ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 166 , 43 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
	};
	MoreButton BTN_MORE
	{
	    HelpID = "sc:MoreButton:RID_SCDLG_DBNAMES:BTN_MORE";
        Pos = MAP_APPFONT ( 166 , 122 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
		MapUnit = MAP_APPFONT ;
        Delta = 93 ;
	};
	String STR_ADD
	{
		Text [ en-US ] = "~Add" ;
	};
	String STR_MODIFY
	{
		Text [ en-US ] = "M~odify" ;
	};
	String STR_DB_INVALID
	{
		Text [ en-US ] = "Invalid range" ;
	};
};





















