/**************************************************************
 *
 * 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 "annotations.hrc"
#include "glob.hrc"
#include <svx/svxids.hrc>
#include "helpids.h"

Menu RID_ANNOTATION_CONTEXTMENU
{
	ItemList =
	{
		MenuItem
		{
			Identifier = SID_REPLYTO_POSTIT ;
			HelpId = CMD_SID_REPLYTO_POSTIT ;
			Text [ en-US ] = "~Reply" ;
		};
		MenuItem
		{
			Separator = TRUE ;
		};
		MenuItem
		{
			Identifier = SID_ATTR_CHAR_WEIGHT ;
			HelpId = CMD_SID_ATTR_CHAR_WEIGHT ;
			Text [ en-US ] = "~Bold" ;
		};
		MenuItem
		{
			Identifier = SID_ATTR_CHAR_POSTURE ;
			HelpId = CMD_SID_ATTR_CHAR_POSTURE ;
			Text [ en-US ] = "~Italic" ;
		};
		MenuItem
		{
			Identifier = SID_ATTR_CHAR_UNDERLINE ;
			HelpId = CMD_SID_ATTR_CHAR_UNDERLINE ;
			Text [ en-US ] = "~Underline" ;
		};
		MenuItem
		{
			Identifier = SID_ATTR_CHAR_STRIKEOUT ;
			HelpId = CMD_SID_ATTR_CHAR_STRIKEOUT ;
			Text [ en-US ] = "~Strikethrough" ;
		};
		MenuItem
		{
			Separator = TRUE ;
		};
		MenuItem
		{
			Identifier = SID_COPY ;
			HelpId = CMD_SID_COPY ;
			Text [ en-US ] = "~Copy" ;
		};
		MenuItem
		{
			Identifier = SID_PASTE ;
			HelpId = CMD_SID_PASTE ;
			Text [ en-US ] = "~Paste" ;
		};
		MenuItem
		{
			Separator = TRUE ;
		};
		MenuItem
		{
			Identifier = SID_DELETE_POSTIT ;
			HelpId = CMD_SID_DELETE_POSTIT ;
			Text [ en-US ] = "~Delete Comment" ;
		};
		MenuItem
		{
			Identifier = SID_DELETEALLBYAUTHOR_POSTIT ;
			HelpId = CMD_SID_DELETEALLBYAUTHOR_POSTIT ;
			Text [ en-US ] = "Delete All Comments b~y %1" ;
		};
		MenuItem
		{
			Identifier = SID_DELETEALL_POSTIT ;
			HelpId = CMD_SID_DELETEALL_POSTIT ;
			Text [ en-US ] = "Delete ~All Comments" ;
		};
	};
};

Menu RID_ANNOTATION_TAG_CONTEXTMENU
{
	ItemList =
	{
		MenuItem
		{
			Identifier = SID_REPLYTO_POSTIT ;
			HelpId = CMD_SID_REPLYTO_POSTIT ;
			Text [ en-US ] = "~Reply" ;
		};
		MenuItem
		{
			Separator = TRUE;
		};
		MenuItem
		{
			Identifier = SID_DELETE_POSTIT ;
			HelpId = CMD_SID_DELETE_POSTIT ;
			Text [ en-US ] = "~Delete Comment" ;
		};
		MenuItem
		{
			Identifier = SID_DELETEALLBYAUTHOR_POSTIT ;
			HelpId = CMD_SID_DELETEALLBYAUTHOR_POSTIT ;
			Text [ en-US ] = "Delete All Comments ~by %1" ;
		};
		MenuItem
		{
			Identifier = SID_DELETEALL_POSTIT ;
			HelpId = CMD_SID_DELETEALL_POSTIT ;
			Text [ en-US ] = "Delete ~All Comments" ;
		};
	};
};

String STR_ANNOTATION_TODAY
{
	Text [ en-US ] = "Today," ;
};

String STR_ANNOTATION_YESTERDAY
{
	Text [ en-US ] = "Yesterday," ;
};

String STR_ANNOTATION_NOAUTHOR
{
	Text [ en-US ] = "(no author)" ;
};

String STR_ANNOTATION_WRAP_FORWARD
{
	Text [ en-US ] = "%PRODUCTNAME Impress reached the end of the presentation. Do you want to continue at the beginning?" ;
};

String STR_ANNOTATION_WRAP_BACKWARD
{
	Text [ en-US ] = "%PRODUCTNAME Impress reached the beginning of the presentation. Do you want to continue at the end?" ;
};

String STR_ANNOTATION_WRAP_FORWARD_DRAW
{
	Text [ en-US ] = "%PRODUCTNAME Draw reached the end of the document. Do you want to continue at the beginning?" ;
};

String STR_ANNOTATION_WRAP_BACKWARD_DRAW
{
	Text [ en-US ] = "%PRODUCTNAME Draw reached the beginning of the document. Do you want to continue at the end?" ;
};

String STR_ANNOTATION_UNDO_INSERT
{
	Text [ en-US ] = "Insert Comment" ;
};

String STR_ANNOTATION_UNDO_DELETE
{
	Text [ en-US ] = "Delete Comment(s)" ;
};

String STR_ANNOTATION_UNDO_MOVE
{
	Text [ en-US ] = "Move Comment" ;
};

String STR_ANNOTATION_UNDO_EDIT
{
	Text [ en-US ] = "Edit Comment" ;
};

String STR_ANNOTATION_UNDO_REPLY
{
	Text [ en-US ] = "Reply to Comment" ;
};

String STR_ANNOTATION_REPLY
{
	Text [ en-US ] = "Reply to %1" ;
};

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