/**************************************************************
 *
 * 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_BRW_HRC_
#include "dbu_brw.hrc"
#endif

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

Menu RID_SBA_GRID_COLCTXMENU
{
	ItemList =
	{
		MenuItem
		{
			Identifier = ID_BROWSER_COLATTRSET ;
			HelpID = HID_BROWSER_COLUMNFORMAT ;
			Text [ en-US ] = "Column ~Format..." ;
		};
		MenuItem
		{
			MID_COLUMN_WIDTH
			HelpID = HID_BROWSER_COLUMNWIDTH;
		};
		MenuItem
		{
			Identifier = ID_BROWSER_COLUMNINFO ;
			HelpID = HID_BROWSER_COLUMNINFO ;
			Text [ en-US ] = "Copy Column D~escription";
		};
	};
};

Menu RID_SBA_GRID_ROWCTXMENU
{
	ItemList =
	{
		MenuItem
		{
			Identifier = ID_BROWSER_TABLEATTR ;
			HelpID = HID_BROWSER_TABLEFORMAT ;
			Text [ en-US ] = "Table Format..." ;
		};
		MenuItem
		{
			Identifier = ID_BROWSER_ROWHEIGHT ;
			HelpID = HID_BROWSER_ROWHEIGHT ;
			Text [ en-US ] = "Row Height..." ;
		};
        MenuItem
		{
		    ITEM_EDIT_COPY
		};
	};
};

String RID_STR_UNDO_MODIFY_RECORD
{
	Text [ en-US ] = "Undo: Data Input";
};

String RID_STR_SAVE_CURRENT_RECORD
{
	Text [ en-US ] = "Save current record";
};

String STR_QRY_TITLE
{
	Text [ en-US ] = "Query #" ;
};
String STR_TBL_TITLE
{
	Text [ en-US ] = "Table #" ;
};
String STR_VIEW_TITLE
{
	Text [ en-US ] = "View #" ;
};

String STR_NAME_ALREADY_EXISTS
{
	Text [ en-US ] = "The name \"#\" already exists.";
};


String STR_NO_COLUMNNAME_MATCHING
{
	Text [ en-US ] = "No matching column names were found.";
};

String STR_ERROR_OCCURED_WHILE_COPYING
{
	Text [ en-US ] = "An error occurred. Do you want to continue copying?";
};

String STR_DATASOURCE_GRIDCONTROL_NAME
{
	Text [ en-US ] = "Data source table view";
};

String STR_DATASOURCE_GRIDCONTROL_DESC
{
	Text [ en-US ] = "Shows the selected table or query.";
};
