/**************************************************************
 *
 * 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 "sc.hrc"


#define PART1 \
	MenuItem\
	{\
		Identifier = FID_CELL_FORMAT ; \
		HelpId = CMD_FID_CELL_FORMAT ; \
		Text [ en-US ] = "~Format Cells..." ; \
	};


#define PART2 \
	MenuItem\
	{\
		Identifier = SID_CUT ; \
		HelpId = CMD_SID_CUT ; \
		Text [ en-US ] = "Cu~t" ; \
	};\
	MenuItem\
	{\
		Identifier = SID_COPY ; \
		HelpId = CMD_SID_COPY ; \
		Text [ en-US ] = "~Copy" ; \
	};\
	MenuItem\
	{\
		Identifier = SID_PASTE ; \
		HelpId = CMD_SID_PASTE ; \
		Text [ en-US ] = "~Paste" ; \
	};

//-------------------------------------------------------------------------------

Menu RID_POPUP_ROWHEADER
{
	ItemList =
	{
		PART1
		//------------------------------
		MenuItem { Separator = TRUE ; };
		//------------------------------
		MenuItem
		{
			Identifier = FID_ROW_HEIGHT ;
			HelpId = CMD_FID_ROW_HEIGHT ;
			Text [ en-US ] = "Row Hei~ght..." ;
		};
		MenuItem
		{
			Identifier = FID_ROW_OPT_HEIGHT ;
			HelpId = CMD_FID_ROW_OPT_HEIGHT ;
			Text [ en-US ] = "Optimal ~Row Height..." ;
		};
		//------------------------------
		MenuItem { Separator = TRUE ; };
		//------------------------------
		MenuItem
		{
			Identifier = FID_INS_ROW ;
			HelpId = CMD_FID_INS_ROW ;
			Text [ en-US ] = "~Insert Rows" ;
		};
		MenuItem
		{
			Identifier = SID_DEL_ROWS ;
			HelpId = CMD_SID_DEL_ROWS ;
			Text [ en-US ] = "~Delete Rows" ;
		};
		MenuItem
		{
			Identifier = SID_DELETE ;
			HelpId = CMD_SID_DELETE ;
			Text [ en-US ] = "De~lete Contents..." ;
		};
		//------------------------------
		MenuItem { Separator = TRUE ; };
		//------------------------------
		MenuItem
		{
			Identifier = FID_ROW_HIDE ;
			HelpId = CMD_FID_ROW_HIDE ;
			Text [ en-US ] = "~Hide" ;
		};
		MenuItem
		{
			Identifier = FID_ROW_SHOW ;
			HelpId = CMD_FID_ROW_SHOW ;
			Text [ en-US ] = "~Show" ;
		};
		//------------------------------
		MenuItem { Separator = TRUE ; };
		//------------------------------
		PART2
		MenuItem
		{
			Identifier = SID_PASTE_SPECIAL ;
			HelpId = CMD_SID_PASTE_SPECIAL ;
			Text [ en-US ] = "P~aste Special..." ;
		};
	};
};

//-------------------------------------------------------------------

Menu RID_POPUP_COLHEADER
{
	ItemList =
	{
		PART1
		//------------------------------
		MenuItem { Separator = TRUE ; };
		//------------------------------
		MenuItem
		{
			Identifier = FID_COL_WIDTH ;
			HelpId = CMD_FID_COL_WIDTH ;
			Text [ en-US ] = "Col~umn Width..." ;
		};
		MenuItem
		{
			Identifier = FID_COL_OPT_WIDTH ;
			HelpId = CMD_FID_COL_OPT_WIDTH ;
			Text [ en-US ] = "O~ptimal Column Width..." ;
		};
		//------------------------------
		MenuItem { Separator = TRUE ; };
		//------------------------------
		MenuItem
		{
			Identifier = FID_INS_COLUMN ;
			HelpId = CMD_FID_INS_COLUMN ;
			Text [ en-US ] = "~Insert Columns" ;
		};
		MenuItem
		{
			Identifier = SID_DEL_COLS ;
			HelpId = CMD_SID_DEL_COLS ;
			Text [ en-US ] = "~Delete Columns" ;
		};
		MenuItem
		{
			Identifier = SID_DELETE ;
			HelpId = CMD_SID_DELETE ;
			Text [ en-US ] = "D~elete Contents..." ;
		};
		//------------------------------
		MenuItem { Separator = TRUE ; };
		//------------------------------
		MenuItem
		{
			Identifier = FID_COL_HIDE ;
			HelpId = CMD_FID_COL_HIDE ;
			Text [ en-US ] = "~Hide" ;
		};
		MenuItem
		{
			Identifier = FID_COL_SHOW ;
			HelpId = CMD_FID_COL_SHOW ;
			Text [ en-US ] = "~Show" ;
		};
		//------------------------------
		MenuItem { Separator = TRUE ; };
		//------------------------------
		PART2
		MenuItem
		{
			Identifier = SID_PASTE_SPECIAL ;
			HelpId = CMD_SID_PASTE_SPECIAL ;
			Text [ en-US ] = "Paste ~Special..." ;
		};
	};
};

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