/**************************************************************
 * 
 * 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" ;
};
