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

#ifndef _DBU_TBL_HRC_
#include "dbu_tbl.hrc"
#endif
#ifndef _DBA_DBACCESS_HELPID_HRC_
#include "dbaccess_helpid.hrc"
#endif
#ifndef _DBACCESS_SLOTID_HRC_
#include "dbaccess_slotid.hrc"
#endif
#ifndef DBACCESS_UI_BROWSER_ID_HXX
#include "browserids.hxx"
#endif
#ifndef _GLOBLMN_HRC
#include <svx/globlmn.hrc>
#endif
#ifndef DBAUI_TOOLBOX_HXX
#include "toolbox.hrc"
#endif

#define MN_EDIT		20
#define MN_VIEW		21
#define MN_EXTRA	22
#define MN_INDEX	23
#define MN_WIN		30
#define MN_HELP		31

String STR_TABLEDESIGN_DBFIELDTYPES
{
	Text [ en-US ] = "Unknown;Text;Number;Date/Time;Date;Time;Yes/No;Currency;Memo;Counter;Image;Text (fix);Decimal;Binary (fix);Binary;BigInt;Double;Float;Real;Integer;Small Integer;Tiny Integer;SQL Null;Object;Distinct;Structure;Field;BLOB;CLOB;REF;OTHER;Bit (fix)" ;
};

String STR_TABLEDESIGN_UNDO_PRIMKEY
{
	Text [ en-US ] = "Insert/remove primary key" ;
};

String STR_VALUE_YES
{
	Text [ en-US ] = "Yes" ;
};
String STR_VALUE_NO
{
	Text [ en-US ] = "No" ;
};
String STR_VALUE_ASC
{
	Text [ en-US ] = "Ascending" ;
};
String STR_VALUE_DESC
{
	Text [ en-US ] = "Descending" ;
};
String STR_VALUE_NONE
{
	// Bemerkung : sollte auch in anderen Sprachen irgendwie zum Wort 'Wert' passen : Wert - keiner ....
	Text [ en-US ] = "<none>" ;
};

String STR_TAB_FIELD_NAME
{
	Text [ en-US ] = "Field name" ;
};
String STR_TAB_FIELD_COLUMN_NAME
{
	Text [ en-US ] = "Field Name" ;
};
String STR_TAB_FIELD_DATATYPE
{
	Text [ en-US ] = "Field ~type" ;
};
String STR_TAB_FIELD_COLUMN_DATATYPE
{
	Text [ en-US ] = "Field Type" ;
};
String STR_TAB_FIELD_LENGTH
{
	Text [ en-US ] = "Field length" ;
};
String STR_TAB_HELP_TEXT
{
	Text [ en-US ] = "Description" ;
};
String STR_COLUMN_DESCRIPTION
{
	Text [ en-US ] = "Column Description" ;
};
String STR_TAB_FIELD_NULLABLE
{
	Text [ en-US ] = "Input required" ;
};
String STR_FIELD_AUTOINCREMENT
{
	Text [ en-US ] = "~AutoValue" ;
};
String STR_TAB_PROPERTIES
{
	Text [ en-US ] = "Field Properties" ;
};
String STR_TABPAGE_GENERAL
{
	Text [ en-US ] = "General" ;
};
String STR_TAB_TABLE_DESCRIPTION
{
	Text [ en-US ] = "Description:" ;
};

String STR_TAB_TABLE_PROPERTIES
{
	Text [ en-US ] = "Table properties" ;
};

Control RID_DB_TAB_EDITOR
{
	Pos = MAP_APPFONT ( 0 , 0 ) ;
	Size = MAP_APPFONT ( 40 , 12 ) ;
	TabStop = TRUE ;
	SvLook = TRUE ;
	Hide = TRUE ;
	HelpId = HID_TABDESIGN_BACKGROUND ;
};

ErrorBox ERR_INVALID_LISTBOX_ENTRY
{
	Message [ en-US ] = "The text you entered is not a list element. " ;
};

Menu RID_TABLEDESIGNROWPOPUPMENU
{
	ItemList =
	{
	MenuItem
	{
		ITEM_EDIT_CUT
	};
	MenuItem
	{
		ITEM_EDIT_COPY
	};
	MenuItem
	{
		ITEM_EDIT_PASTE
	};
	MenuItem
	{
		ITEM_EDIT_DELETE
	};
	MenuItem
	{
		Identifier = SID_TABLEDESIGN_INSERTROWS ;
		HelpID = HID_TABLEDESIGN_INSERTROWS ;
		Text [ en-US ] = "Insert Rows" ;
		};
	MenuItem
	{
		Separator = TRUE ;
	};
	MenuItem
	{
		Identifier = SID_TABLEDESIGN_TABED_PRIMARYKEY ;
		HelpID = HID_TABLEDESIGN_TABED_PRIMARYKEY ;
		Checkable = TRUE ;
		Text [ en-US ] = "Primary Key" ;
		};
	};
};
String STR_TABED_UNDO_CELLMODIFIED
{
	Text [ en-US ] = "Modify cell" ;
};
String STR_TABED_UNDO_ROWDELETED
{
	Text [ en-US ] = "Delete row" ;
};
String STR_TABED_UNDO_TYPE_CHANGED
{
	Text [ en-US ] = "Modify field type" ;
};
String STR_TABED_UNDO_ROWINSERTED
{
	Text [ en-US ] = "Insert row" ;
};
String STR_TABED_UNDO_NEWROWINSERTED
{
	Text [ en-US ] = "Insert new row" ;
};
String STR_TABED_UNDO_PRIMKEY
{
	Text [ en-US ] = "Insert/remove primary key" ;
};

String STR_DEFAULT_VALUE
{
	Text [ en-US ] = "~Default value" ;
};
String STR_FIELD_REQUIRED
{
	Text [ en-US ] = "~Entry required" ;
};
String STR_TEXT_LENGTH
{
	Text [ en-US ] = "~Length" ;
};
String STR_NUMERIC_TYPE
{
	Text [ en-US ] = "~Type" ;
};
String STR_LENGTH
{
	Text [ en-US ] = "~Length" ;
};
String STR_SCALE
{
	Text [ en-US ] = "Decimal ~places" ;
};
String STR_FORMAT
{
	Text [ en-US ] = "Format example" ;
};
String STR_HELP_BOOL_DEFAULT
{
	Text [ en-US ] = "Select a value that is to appear in all new records as default.\nIf the field is not to have a default value, select the empty string." ;
};
String STR_HELP_DEFAULT_VALUE
{
	Text [ en-US ] = "Enter a default value for this field.\n\nWhen you later enter data in the table, this string will be used in each new record for the field selected. It should, therefore, correspond to the cell format that needs to be entered below." ;
};
String STR_HELP_FIELD_REQUIRED
{
	Text [ en-US ] = "Activate this option if this field cannot contain NULL values, i.e. the user must always enter data." ;
};
String STR_HELP_TEXT_LENGTH
{
	Text [ en-US ] = "Enter the maximum text length permitted." ;
};
String STR_HELP_NUMERIC_TYPE
{
	Text [ en-US ] = "Enter the number format." ;
};
String STR_HELP_LENGTH
{
	Text [ en-US ] = "Determine the length data can have in this field.\n\nIf decimal fields, then the maximum length of the number to be entered, if binary fields, then the length of the data block.\nThe value will be corrected accordingly when it exceeds the maximum for this database." ;
};
String STR_HELP_SCALE
{
	Text [ en-US ] = "Specify the number of decimal places permitted in this field." ;
};
String STR_HELP_FORMAT_CODE
{
	Text [ en-US ] = "This is where you see how the data would be displayed in the current format (use the button on the right to modify the format)." ;
};
String STR_HELP_FORMAT_BUTTON
{
	Text [ en-US ] = "This is where you determine the output format of the data." ;
};
String STR_HELP_AUTOINCREMENT
{
	Text [ en-US ] = "Choose if this field should contain AutoIncrement values.\n\nYou can not enter data in fields of this type. An intrinsic value will be assigned to each new record automatically (resulting from the increment of the previous record)." ;
};
PushButton PB_FORMAT
{
	TabStop = TRUE ;
	Text = "~..." ;
};
String STR_TABLEDESIGN_DUPLICATE_NAME
{
	Text [ en-US ] = "The table cannot be saved because column name \"$column$\" was assigned twice." ;
};
String STR_TBL_COLUMN_IS_KEYCOLUMN
{
	Text [ en-US ] = "The column \"$column$\" belongs to the primary key. If the column is deleted, the primary key will also be deleted. Do you really want to continue?" ;
};
String STR_TBL_COLUMN_IS_KEYCOLUMN_TITLE
{
	Text [ en-US ] = "Primary Key Affected" ;
};
String STR_COLUMN_NAME
{
	Text [ en-US ] = "Column" ;
};
String STR_QRY_CONTINUE
{
	Text [ en-US ] = "Continue anyway?" ;
};
String STR_STAT_WARNING
{
	Text [ en-US ] = "Warning!" ;
};
QueryBox TABLE_DESIGN_SAVEMODIFIED
{
	Buttons = WB_YES_NO_CANCEL ;
	DefButton = WB_DEF_YES ;
	Message [ en-US ] = "The table has been changed.\nDo you want to save the changes?" ;
};
QueryBox TABLE_QUERY_CONNECTION_LOST
{
	Buttons = WB_YES_NO ;
	Message [ en-US ] = "The connection to the database was lost! The table design can only be used with limited functionality without a connection.\nReconnect?" ;
};
String STR_TABLEDESIGN_CONNECTION_MISSING
{
	Text [ en-US ] = "The table could not be saved due to problems connecting to the database." ;
};
String STR_TABLEDESIGN_DATASOURCE_DELETED
{
	Text [ en-US ] = "The table filter could not be adjusted because the data source has been deleted." ;
};

QueryBox QUERY_SAVE_TABLE_EDIT_INDEXES
{
	Message [ en-US ] = "Before you can edit the indexes of a table, you have to save it.\nDo you want to save the changes now?" ;

	Buttons = WB_YES_NO ;
};
String STR_TABLEDESIGN_NO_PRIM_KEY_HEAD
{
	Text [ en-US ] = "No primary key" ;
};
String STR_TABLEDESIGN_NO_PRIM_KEY
{
	Text [ en-US ] = "A unique index or primary key is required for data record identification in this database.\nYou can only enter data into this table when one of these two structural conditions has been met.\n\nShould a primary key be created now?" ;
};
String STR_TABLEDESIGN_TITLE
{
	Text [ en-US ] = " - %PRODUCTNAME Base: Table Design" ;
};

/*
 The menubar resource has become obsolete - you can now find the menubar definition at: <project>/uiconfig/dbtable/menubar/menubar.xml
*/

String STR_TABLEDESIGN_ALTER_ERROR
{
	Text [ en-US ] = "The column \"$column$\" could not be changed. Should the column instead be deleted and the new format appended?" ;
};

String STR_TABLEDESIGN_SAVE_ERROR
{
	Text [ en-US ] = "Error while saving the table design" ;
};

String STR_TABLEDESIGN_COULD_NOT_DROP_COL
{
	Text [ en-US ] = "The column $column$ could not be deleted." ;
};

QueryBox TABLE_DESIGN_ALL_ROWS_DELETED
{
	Buttons = WB_YES_NO_CANCEL ;
	DefButton = WB_DEF_YES ;
	Message [ en-US ] = "You are trying to delete all the columns in the table. A table cannot exist without columns. Should the table be deleted from the database? If not, the table will remain unchanged." ;
};

String STR_AUTOINCREMENT_VALUE
{
	Text [ en-US ] = "A~uto-increment statement" ;
};
String STR_HELP_AUTOINCREMENT_VALUE
{
	Text [ en-US ] = "Enter an SQL statement for the auto-increment field.\n\nThis statement will be directly transferred to the database when the table is created." ;
};

String STR_NO_TYPE_INFO_AVAILABLE
{
	Text [ en-US ] = "No type information could be retrieved from the database.\nThe table design mode is not available for this data source." ;
};

String STR_CHANGE_COLUMN_NAME
{
	Text [ en-US ] = "change field name" ;
};

String STR_CHANGE_COLUMN_TYPE
{
	Text [ en-US ] = "change field type" ;
};

String STR_CHANGE_COLUMN_DESCRIPTION
{
	Text [ en-US ] = "change field description" ;
};

String STR_CHANGE_COLUMN_ATTRIBUTE
{
	Text [ en-US ] = "change field attribute" ;
};

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