/**************************************************************
 * 
 * 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 "svx/fmresids.hrc"
#include <svx/svxids.hrc>
#include "globlmn.hrc"
#include "fmhelp.hrc"
#include <svx/svxcommands.h>

Menu RID_SVXMNU_ROWS
{
	ItemList =
	{
		MenuItem
		{
			Identifier = SID_FM_DELETEROWS ;
			HelpId = HID_FM_DELETEROWS ;
			Text [ en-US ] = "Delete Rows" ;
		};
		MenuItem
		{
			Identifier = SID_FM_RECORD_SAVE ;
			HelpId = CMD_SID_FM_RECORD_SAVE ;
			Text [ en-US ] = "Save Record" ;
		};
		MenuItem
		{
			Identifier = SID_FM_RECORD_UNDO ;
			HelpId = CMD_SID_FM_RECORD_UNDO ;
			Text [ en-US ] = "Undo: Data entry" ;
		};
	};
};
Menu RID_SVXMNU_COLS
{
	ItemList =
	{
		MenuItem
		{
			Identifier = SID_FM_INSERTCOL ;
			HelpId = HID_FM_INSERTCOL ;
			Text [ en-US ] = "Insert ~Column" ;
			SubMenu = Menu
			{
				ItemList =
				{
					MenuItem
					{
						Identifier = SID_FM_EDIT ;
						HelpId = CMD_SID_FM_EDIT ;
						Text [ en-US ] = "Text Box" ;
					};
					MenuItem
					{
						Identifier = SID_FM_CHECKBOX ;
						HelpId = CMD_SID_FM_CHECKBOX ;
						Text [ en-US ] = "Check Box" ;
					};
					MenuItem
					{
						Identifier = SID_FM_COMBOBOX ;
						HelpId = CMD_SID_FM_COMBOBOX ;
						Text [ en-US ] = "Combo Box" ;
					};
					MenuItem
					{
						Identifier = SID_FM_LISTBOX ;
						HelpId = CMD_SID_FM_LISTBOX ;
						Text [ en-US ] = "List Box" ;
					};
					MenuItem
					{
						Identifier = SID_FM_DATEFIELD ;
						HelpId = CMD_SID_FM_DATEFIELD ;
						Text [ en-US ] = "Date Field" ;
					};
					MenuItem
					{
						Identifier = SID_FM_TIMEFIELD ;
						HelpId = CMD_SID_FM_TIMEFIELD ;
						Text [ en-US ] = "Time Field" ;
					};
					MenuItem
					{
						Identifier = SID_FM_NUMERICFIELD ;
						HelpId = CMD_SID_FM_NUMERICFIELD ;
						Text [ en-US ] = "Numeric Field" ;
					};
					MenuItem
					{
						Identifier = SID_FM_CURRENCYFIELD ;
						HelpId = CMD_SID_FM_CURRENCYFIELD ;
						Text [ en-US ] = "Currency Field" ;
					};
					MenuItem
					{
						Identifier = SID_FM_PATTERNFIELD ;
						HelpId = CMD_SID_FM_PATTERNFIELD ;
						Text [ en-US ] = "Pattern Field" ;
					};
					MenuItem
					{
						Identifier = SID_FM_FORMATTEDFIELD ;
						HelpId = CMD_SID_FM_FORMATTEDFIELD ;
						Text [ en-US ] = "Formatted Field" ;
					};
					MenuItem
					{
						// this is a dummy which is never used herein but for copy to newly built menus
						Identifier = SID_FM_TWOFIELDS_DATE_N_TIME;
						HelpId = HID_CONTROLS_DATE_N_TIME;
						Text [ en-US ] = "Date and Time Field" ;
						Disable = True;
					};
				};
			};
		};
		MenuItem
		{
			Identifier = SID_FM_CHANGECOL ;
			HelpId = HID_FM_CHANGECOL ;
			Text [ en-US ] = "~Replace with" ;
		};
		MenuItem
		{
			Identifier = SID_FM_DELETECOL ;
			HelpId = HID_FM_DELETECOL ;
			Text [ en-US ] = "Delete Column" ;
		};
		MenuItem
		{
			Identifier = SID_FM_HIDECOL ;
			HelpId = HID_FM_HIDECOL ;
			Text [ en-US ] = "~Hide Column";
		};
		MenuItem
		{
			Identifier = SID_FM_SHOWCOLS ;
			HelpId = HID_FM_SHOWCOLS ;
			SubMenu = Menu
			{
				ItemList =
				{
					MenuItem
					{
						Identifier = SID_FM_SHOWCOLS_MORE ;
						HelpId = HID_FM_SHOWCOLS_MORE ;
						Text [ en-US ] = "~More...";
					};
					MenuItem
					{
						Separator = TRUE ;
					};
					MenuItem
					{
						Identifier = SID_FM_SHOWALLCOLS ;
						HelpId = HID_FM_SHOWALLCOLS ;
						Text [ en-US ] = "~All";
					};
				};
			};
			Text [ en-US ] = "~Show Columns";
		};
		MenuItem
		{
			Identifier = SID_FM_SHOW_PROPERTY_BROWSER ;
			HelpId = CMD_SID_FM_SHOW_PROPERTY_BROWSER ;
			Text [ en-US ] = "Column..." ;
		};
	};
};

Menu RID_SVXMNU_CELL
{
	ItemList =
	{
		MenuItem
		{
			ITEM_EDIT_COPY
		};
	};
};





















































