/**************************************************************
 *
 * 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/dialogs.hrc>
#include <svx/globlmn.hrc>
#include "cmdid.h"
#include "app.hrc"
#include "globals.hrc"
#include "helpid.h"
#include "popup.hrc"

/* --------------------- F O R M A T --------------------------------- */

#define SEPARATOR		MenuItem { Separator = TRUE; }

//define for ITEM_FORMAT_NUMBERING
#define DEFINE_SLOTID_FOR_NUMBER_BULLETS FN_NUMBER_BULLETS
#define MN_NUMBERING ITEM_FORMAT_NUMBERING

#define MN_TXT\
	MenuItem\
	{\
		ITEM_FORMAT_CHAR_DLG\
	};\
	MenuItem\
	{\
		ITEM_FORMAT_PARA_DLG\
	};\
	MenuItem\
	{\
		Identifier = FN_FORMAT_PAGE_DLG ; \
		HelpId = CMD_FN_FORMAT_PAGE_DLG ; \
		Text [ en-US ] = "Pa~ge..." ; \
	};


#define MN_TEXT_ATTR\
    MenuItem\
    {\
        ITEM_FORMAT_ATTR_CHAR_FONT\
    };\
    MenuItem\
    {\
        ITEM_FORMAT_ATTR_CHAR_FONTHEIGHT\
    };\
    MenuItem\
    {\
        Identifier = MN_FORMAT_STYLE ; \
        Command = ".uno:StyleMenu" ; \
        Text [ en-US ] = "St~yle" ; \
        SubMenu = Menu\
        {\
            ItemList = \
            {\
                MenuItem\
                {\
                    ITEM_FORMAT_ATTR_CHAR_WEIGHT\
                };\
                MenuItem\
                {\
                    ITEM_FORMAT_ATTR_CHAR_POSTURE\
                };\
                MenuItem\
                {\
                    ITEM_FORMAT_ATTR_CHAR_OVERLINE\
                };\
                MenuItem\
                {\
                    ITEM_FORMAT_ATTR_CHAR_UNDERLINE\
                };\
                MenuItem\
                {\
                    ITEM_FORMAT_ATTR_CHAR_STRIKEOUT\
                };\
                MenuItem\
                {\
                    ITEM_FORMAT_ATTR_CHAR_SHADOWED\
                };\
                MenuItem\
                {\
                    ITEM_FORMAT_ATTR_CHAR_CONTOUR\
                };\
                SEPARATOR ; \
                MenuItem\
                {\
                    Identifier = FN_SET_SUPER_SCRIPT ; \
                    HelpId = CMD_FN_SET_SUPER_SCRIPT ; \
                    Text [ en-US ] = "Superscript" ; \
				};\
                MenuItem\
                {\
                    Identifier = FN_SET_SUB_SCRIPT ; \
                    HelpId = CMD_FN_SET_SUB_SCRIPT ; \
                    Text [ en-US ] = "Subscript" ; \
				};\
            };\
        };\
	};\
    MenuItem\
    {\
        Identifier = MN_FORMAT_ALGN ; \
        Command = ".uno:AlignTextMenu" ; \
        Text [ en-US ] = "A~lignment" ; \
        SubMenu = Menu\
        {\
            ItemList = \
            {\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    ITEM_FORMAT_ATTR_PARA_ADJUST_LEFT\
                };\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    ITEM_FORMAT_ATTR_PARA_ADJUST_RIGHT\
                };\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    ITEM_FORMAT_ATTR_PARA_ADJUST_CENTER\
                };\
                MenuItem\
                {\
                    Identifier = SID_ATTR_PARA_ADJUST_BLOCK ; \
                    HelpId = CMD_SID_ATTR_PARA_ADJUST_BLOCK ; \
                    RadioCheck = TRUE ; \
                    Text [ en-US ] = "Justified" ; \
				};\
            };\
        };\
	};\
    MenuItem\
    {\
        Identifier = MN_FORMAT_LINESPACE ; \
        Command = ".uno:LineSpacingMenu" ; \
        Text [ en-US ] = "Line Spacing" ; \
        _MenuItemFlags = MIB_RADIOCHECK ; \
        SubMenu = Menu\
        {\
            ItemList = \
            {\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    ITEM_FORMAT_PARA_LINESPACE_10\
                };\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    ITEM_FORMAT_PARA_LINESPACE_15\
                };\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    ITEM_FORMAT_PARA_LINESPACE_20\
                };\
            };\
        };\
	};

/* --------------------- M E N U --------------------------------- */

/*


The application menu bar resource has become obsolete. You can now find the menu bar at the following
location: <project>/uiconfig/[swriter|sweb|sglobal]/menubar/menubar.xml


*/

/* --------------------- D O C U M E N T -------------------------- */


#define _MN_EDIT_FIELD                                                      \
        MenuItem                                                            \
        {                                                                   \
            Identifier = FN_EDIT_FIELD ;                                    \
            HelpId = CMD_FN_EDIT_FIELD ;                                        \
            Text [ en-US ] = "Fields..." ;                             \
	};
#define _MN_EDIT_FOOTNOTE                                                    \
        MenuItem                                                            \
        {                                                                   \
            Identifier = FN_EDIT_FOOTNOTE ;                                 \
            HelpId = CMD_FN_EDIT_FOOTNOTE ;                                     \
            Text [ en-US ] = "Footnote/Endnote~..." ;                          \
		};
    #define _MN_EDIT_IDX_ENTRY_DLG                                          \
        MenuItem                                                            \
        {                                                                   \
            Identifier = FN_EDIT_IDX_ENTRY_DLG ;                            \
            HelpId = CMD_FN_EDIT_IDX_ENTRY_DLG ;                                \
            Text [ en-US ] = "Inde~x Entry..." ;                       \
	};

#define _MN_EDIT_REDLINE                                          \
        MenuItem                                                            \
        {                                                                   \
            Identifier = FN_REDLINE_ACCEPT_DIRECT;                            \
            HelpId = CMD_FN_REDLINE_ACCEPT_DIRECT ;                                \
            Text [ en-US ] = "Accept Change" ;                       \
        };\
        MenuItem                                                            \
        {                                                                   \
            Identifier = FN_REDLINE_REJECT_DIRECT ;                            \
            HelpId = CMD_FN_REDLINE_REJECT_DIRECT ;                                \
            Text [ en-US ] = "Reject Change" ;                       \
        };								\
	SEPARATOR ;
#define _MN_EDIT_BIB_ENTRY_DLG                                              \
        MenuItem                                                            \
        {                                                                   \
            Identifier = FN_EDIT_AUTH_ENTRY_DLG ;                           \
            HelpId = CMD_FN_EDIT_AUTH_ENTRY_DLG ;                               \
            Text [ en-US ] = "~Bibliography Entry..." ;                  \
	};                                                                  \
        SEPARATOR ;

#define _MN_EDIT_OPEN_HYPERLINK                                             \
    MenuItem                                                                \
    {                                                                       \
        ITEM_OPEN_HYPERLINK                                                 \
    };\
    MenuItem                                                            \
    {                                                                   \
        Identifier = FN_EDIT_HYPERLINK ;                           \
        HelpId = CMD_FN_EDIT_HYPERLINK ;                               \
        Text [ en-US ] = "Edit Hyperlink..." ;                  \
    };                                                                  \
    MenuItem                                                            \
    {                                                                   \
        Identifier =  FN_COPY_HYPERLINK_LOCATION ;                           \
        HelpId = CMD_FN_COPY_HYPERLINK_LOCATION ;                               \
        Text [ en-US ] = "Copy Hyperlink ~Location" ;                  \
    };                                                                  \
    MenuItem                                                            \
    {                                                                   \
        Identifier = FN_REMOVE_HYPERLINK ;                           \
        HelpId = CMD_FN_REMOVE_HYPERLINK ;                               \
        Text [ en-US ] = "Remo~ve Hyperlink" ;                  \
    };

#define _MN_EDIT_OPEN_SMARTTAGMENU                                          \
    MenuItem                                                                \
    {                                                                       \
        ITEM_OPEN_SMARTTAGMENU                                              \
    };

#define _MN_EDIT__HYPERLINK \
	MenuItem\
	{\
		Identifier = FN_EDIT_HYPERLINK ; \
		HelpId = CMD_FN_EDIT_HYPERLINK ; \
		Text [ en-US ] = "~Edit Hyperlink" ; \
	};

#define _DEFAULT_TEXT_EDIT_ELEMENTS                                         \
    _MN_EDIT_FIELD                                                              \
    _MN_EDIT_FOOTNOTE                                                           \
    _MN_EDIT_IDX_ENTRY_DLG                                                      \
    _MN_EDIT_BIB_ENTRY_DLG                                                      \
    _MN_EDIT_REDLINE                                                            \
    MenuItem                                                            \
    {                                                                   \
        ITEM_POPUP_TEMPLATE_EDIT                                        \
    };                                                                  \
    SEPARATOR ;                                                         \
    _MN_EDIT_OPEN_HYPERLINK                                             \
    _MN_EDIT_OPEN_SMARTTAGMENU


#define MN_RESET\
	MenuItem\
	{\
		Identifier = FN_FORMAT_RESET ; \
		HelpId = CMD_FN_FORMAT_RESET ; \
		Text [ en-US ] = "~Default Formatting" ; \
	};

#define _NUMBERING_RELATED_MENU \
        SEPARATOR ;                                                         \
        MenuItem                                                            \
        {                                                                   \
            Identifier = FN_NUMBER_NEWSTART;                                \
            HelpId = CMD_FN_NUMBER_NEWSTART;                                    \
            Text [ en-US ] = "Restart Numbering" ;                            \
        };                                                                  \
        MenuItem                                                            \
        {                                                                   \
            Identifier = FN_NUM_CONTINUE;                                   \
            HelpId = CMD_FN_NUM_CONTINUE;                                       \
            Text [ en-US ] = "Continue previous numbering" ;                  \
        };                                                                  \
        MenuItem                                                            \
        {                                                                   \
            Identifier = FN_NUM_BULLET_UP;                              \
            HelpId = CMD_FN_NUM_BULLET_UP;                                  \
            Text [ en-US ] = "Up One Level" ;                              \
        };                                                                  \
        MenuItem                                                            \
        {                                                                   \
            Identifier = FN_NUM_BULLET_DOWN;                              \
            HelpId = CMD_FN_NUM_BULLET_DOWN;                                  \
            Text [ en-US ] = "Down One Level" ;                              \
        };

#define BASE_TEXT_POPUPMENU_BEGIN \
{                                                                           \
    ItemList =                                                              \
    {                                                                       \
        MN_RESET                                                            \
        _NUMBERING_RELATED_MENU                                             \
        SEPARATOR ;                                                         \
        MN_TEXT_ATTR                                                        \
        SEPARATOR ;                                                         \
        MN_TXT                                                              \
        MN_NUMBERING                                                        \
        ITEM_TRANSLITERATE_MENU                                             \
        SEPARATOR ;

// not in Writer/Web
#define BASE_TEXT_POPUPMENU_NOWEB \
        MenuItem                                                            \
        {                                                                   \
            Identifier = FN_UPDATE_CUR_TOX ;                                \
            HelpId = CMD_FN_UPDATE_CUR_TOX ;                                    \
            Text [ en-US ] = "~Update Index/Table" ;                         \
        };                                                                  \
        MenuItem                                                            \
        {                                                                   \
            Identifier = FN_EDIT_CURRENT_TOX;                               \
            HelpId = CMD_FN_EDIT_CURRENT_TOX;                                   \
            Text [ en-US ] = "~Edit Index/Table" ;                           \
        };                                                                  \
        MenuItem                                                            \
        {                                                                   \
            Identifier = FN_REMOVE_CUR_TOX;                                 \
            HelpId = CMD_FN_REMOVE_CUR_TOX;                                     \
            Text [ en-US ] = "Delete Index/Table" ;                          \
        };                                                                  \
        SEPARATOR ;

#define BASE_TEXT_POPUPMENU_END \
        _DEFAULT_TEXT_EDIT_ELEMENTS                                         \
    };                                                                      \
};

/*------------------------------------------------------------------------
 Description: Menu Window
------------------------------------------------------------------------*/

#define MN_FRM_CAPTION_ITEM \
        MenuItem\
        {\
            Identifier = FN_INSERT_CAPTION ;\
            HelpId = CMD_FN_INSERT_CAPTION ;\
            Text [ en-US ] = "~Caption..." ;\
    };

#define MN_TAB1 \
    MenuItem\
    {\
        Identifier = FN_FORMAT_TABLE_DLG ; \
        HelpId = CMD_FN_FORMAT_TABLE_DLG ; \
        Text [ en-US ] = "~Table..." ; \
    };\
    MenuItem\
    {\
        Identifier = FN_TABLE_MERGE_TABLE ; \
        HelpId = CMD_FN_TABLE_MERGE_TABLE ; \
        Text [ en-US ] = "Merge Tables" ;\
    };\
    MenuItem\
    {\
        Identifier = FN_TABLE_SPLIT_TABLE ; \
        HelpId = CMD_FN_TABLE_SPLIT_TABLE ; \
        Text [ en-US ] = "~Split Table" ; \
    };\
    MenuItem\
    {\
        Identifier = FN_NUM_FORMAT_TABLE_DLG ; \
        HelpId = CMD_FN_NUM_FORMAT_TABLE_DLG ; \
        Text [ en-US ] = "N~umber Format..." ; \
    };\
    MenuItem\
    {\
        Identifier = MN_CELL ; \
        Command = ".uno:CellMenu" ; \
        Text [ en-US ] = "~Cell" ; \
        SubMenu = Menu\
        {\
            ItemList = \
            {\
                MenuItem\
                {\
                    Identifier = FN_TABLE_MERGE_CELLS ; \
                    HelpId = CMD_FN_TABLE_MERGE_CELLS ; \
                    Text [ en-US ] = "~Merge" ; \
                };\
                MenuItem\
                {\
                    Identifier = FN_TABLE_SPLIT_CELLS ; \
                    HelpId = CMD_FN_TABLE_SPLIT_CELLS ; \
                    Text [ en-US ] = "~Split..." ; \
                };\
                SEPARATOR ; \
                MenuItem\
                {\
                    Identifier = SID_TABLE_VERT_NONE ; \
                    HelpId = CMD_SID_TABLE_VERT_NONE ; \
                    Text [ en-US ] = "~Top" ; \
                };\
                MenuItem\
                {\
                    Identifier = SID_TABLE_VERT_CENTER ; \
                    HelpId = CMD_SID_TABLE_VERT_CENTER ; \
                    Text [ en-US ] = "C~enter" ; \
                };\
                MenuItem\
                {\
                    Identifier = SID_TABLE_VERT_BOTTOM ; \
                    HelpId = CMD_SID_TABLE_VERT_BOTTOM ; \
                    Text [ en-US ] = "~Bottom" ; \
                };\
                SEPARATOR ; \
                MenuItem\
                {\
                    Identifier = FN_TABLE_SET_READ_ONLY_CELLS ; \
                    HelpId = CMD_FN_TABLE_SET_READ_ONLY_CELLS ; \
                    Text [ en-US ] = "~Protect" ; \
                };\
                MenuItem\
                {\
                    Identifier = FN_TABLE_UNSET_READ_ONLY_CELLS ; \
                    HelpId = CMD_FN_TABLE_UNSET_READ_ONLY_CELLS ; \
                    Text [ en-US ] = "~Unprotect" ; \
                };\
            };\
        };\
    };

#define MN_TAB2 \
    MenuItem\
    {\
        Identifier = MN_SUB_TBLROW ; \
        HelpID = HID_MN_SUB_TBLROW ; \
        Command = ".uno:RowMenu" ; \
        Text [ en-US ] = "~Row" ; \
        SubMenu = Menu\
        {\
            ItemList = \
            {\
                MenuItem\
                {\
                    Identifier = FN_TABLE_SET_ROW_HEIGHT ; \
                    HelpId = CMD_FN_TABLE_SET_ROW_HEIGHT ; \
                    Text [ en-US ] = "~Height..." ; \
                };\
                MenuItem\
                {\
                    Identifier = FN_TABLE_ROW_SPLIT;\
                    HelpId = CMD_FN_TABLE_ROW_SPLIT ; \
                    Text [ en-US ] = "Allow Row to Break A~cross Pages and Columns" ; \
                };\
                MenuItem\
                {\
                    Identifier = FN_TABLE_OPTIMAL_HEIGHT ; \
                    HelpId = CMD_FN_TABLE_OPTIMAL_HEIGHT ; \
                    Text [ en-US ] = "~Optimal Height" ; \
                };\
                MenuItem\
                {\
                    Identifier = FN_TABLE_BALANCE_ROWS ; \
                    HelpId = CMD_FN_TABLE_BALANCE_ROWS ; \
                    Text [ en-US ] = "Space ~Equally" ; \
                };\
                SEPARATOR ; \
                MenuItem\
                {\
                    Identifier = FN_TABLE_SELECT_ROW ; \
                    HelpId = CMD_FN_TABLE_SELECT_ROW ; \
                    Text [ en-US ] = "~Select" ; \
                };\
                MenuItem\
                {\
                    Identifier = FN_TABLE_INSERT_ROW_DLG ; \
                    HelpId = CMD_FN_TABLE_INSERT_ROW_DLG ; \
                    Text [ en-US ] = "~Insert..." ; \
                };\
                MenuItem\
                {\
                    Identifier = FN_TABLE_DELETE_ROW ; \
                    HelpId = CMD_FN_TABLE_DELETE_ROW ; \
                    Text [ en-US ] = "~Delete" ; \
                };\
            };\
    };\
    };\
    MenuItem\
    {\
        Identifier = MN_SUB_TBLCOL ; \
        HelpID = HID_MN_SUB_TBLCOL ; \
        Command = ".uno:ColumnMenu" ; \
        Text [ en-US ] = "Colu~mn" ; \
        SubMenu = Menu\
        {\
            ItemList = \
            {\
                MenuItem\
                {\
                    Identifier = FN_TABLE_SET_COL_WIDTH ; \
                    HelpId = CMD_FN_TABLE_SET_COL_WIDTH ; \
                    Text [ en-US ] = "~Width..." ; \
                };\
                MenuItem\
                {\
                    Identifier = FN_TABLE_ADJUST_CELLS ; \
                    HelpId = CMD_FN_TABLE_ADJUST_CELLS ; \
                    Text [ en-US ] = "~Optimal Width " ; \
                };\
                MenuItem\
                {\
                    Identifier = FN_TABLE_BALANCE_CELLS ; \
                    HelpId = CMD_FN_TABLE_BALANCE_CELLS ; \
                    Text [ en-US ] = "Space ~Equally" ; \
                };\
                SEPARATOR ; \
                MenuItem\
                {\
                    Identifier = FN_TABLE_SELECT_COL ; \
                    HelpId = CMD_FN_TABLE_SELECT_COL ; \
                    Text [ en-US ] = "~Select" ; \
                };\
                MenuItem\
                {\
                    Identifier = FN_TABLE_INSERT_COL_DLG ; \
                    HelpId = CMD_FN_TABLE_INSERT_COL_DLG ; \
                    Text [ en-US ] = "~Insert..." ; \
                };\
                MenuItem\
                {\
                    Identifier = FN_TABLE_DELETE_COL ; \
                    HelpId = CMD_FN_TABLE_DELETE_COL ; \
                    Text [ en-US ] = "~Delete" ; \
                };\
            };\
};\
	};

#define MN_DRWTXT \
    MenuItem\
    {\
        ITEM_FORMAT_CHAR_DLG\
    };\
    MenuItem\
    {\
        ITEM_FORMAT_PARA_DLG\
    };\

#define MN_DRWTXTATTR \
    MenuItem\
    {\
        Identifier = FN_DRAWTEXT_ATTR_DLG ; \
        HelpId = CMD_FN_DRAWTEXT_ATTR_DLG ; \
        Text [ en-US ] = "Te~xt..." ; \
    };

#define MN_NAME_SHAPE \
    MenuItem\
    {\
        Identifier = FN_NAME_SHAPE ; \
        HelpId = CMD_FN_NAME_SHAPE ; \
        Text [ en-US ] = "Name..." ; \
    };

// #i68101#
#define MN_TITLE_DESCRIPTION_SHAPE\
    MenuItem\
    {\
        Identifier = FN_TITLE_DESCRIPTION_SHAPE; \
        HelpId = CMD_FN_TITLE_DESCRIPTION_SHAPE; \
        Text [ en-US ] = "Description..." ; \
    };

#define MN_FRM \
    MenuItem\
    {\
        Identifier = FN_FORMAT_FRAME_DLG ; \
        HelpId = CMD_FN_FORMAT_FRAME_DLG ; \
        Text [ en-US ] = "~Frame..." ; \
    };

#define MN_DRAW1 \
    MenuItem\
    {\
        ITEM_FORMAT_ATTRIBUTES_LINE\
    };\
    MenuItem\
    {\
        ITEM_FORMAT_ATTRIBUTES_AREA\
    };

#define MN_ALIGN \
    MenuItem\
    {\
        ITEM_FORMAT_OBJECT_ALIGN\
        SubMenu = Menu\
        {\
            ItemList = \
            {\
                MenuItem\
                {\
                    ITEM_FORMAT_OBJECT_ALIGN_LEFT\
                };\
                MenuItem\
                {\
                    ITEM_FORMAT_OBJECT_ALIGN_CENTER\
                };\
                MenuItem\
                {\
                    ITEM_FORMAT_OBJECT_ALIGN_RIGHT\
                };\
                SEPARATOR ; \
                MenuItem\
                {\
                    ITEM_FORMAT_OBJECT_ALIGN_UP\
                };\
                MenuItem\
                {\
                    ITEM_FORMAT_OBJECT_ALIGN_MIDDLE\
                };\
                MenuItem\
                {\
                    ITEM_FORMAT_OBJECT_ALIGN_DOWN\
                };\
            };\
        };\
    };

#define MN_ONE_STEP \
    MenuItem\
    {\
        Identifier = FN_FRAME_UP ; \
        HelpId = CMD_FN_FRAME_UP ; \
        Text [ en-US ] = "Bring ~Forward" ; \
    };\
    MenuItem\
    {\
        Identifier = FN_FRAME_DOWN ; \
        HelpId = CMD_FN_FRAME_DOWN ; \
        Text [ en-US ] = "Send Back~ward" ; \
    };

#define MN_TOP \
	MenuItem\
	{\
		ITEM_FORMAT_FRAME_TO_TOP\
	};\


#define MN_DRAW5 \
    MenuItem\
    {\
        Identifier = MN_SUB_ARRANGE ; \
        HelpID = HID_MN_SUB_ARRANGE ; \
        Command = ".uno:ArrangeMenu" ; \
        Text [ en-US ] = "~Arrange" ; \
        SubMenu = Menu\
        {\
            ItemList = \
            {\
                MN_TOP\
                MN_ONE_STEP\
                MN_BOTTOM\
                SEPARATOR ; \
                MenuItem\
                {\
                    ITEM_FORMAT_OBJECT_HEAVEN\
                };\
                MenuItem\
                {\
                    ITEM_FORMAT_OBJECT_HELL\
                };\
            };\
        };\
    };\
    MN_ALIGN\

#define MN_DRAW6 \
    MenuItem\
    {\
        Identifier = MN_SUB_ARRANGE ; \
        HelpID = HID_MN_SUB_ARRANGE ; \
        Command = ".uno:ArrangeMenu" ; \
        Text [ en-US ] = "~Arrange" ; \
        SubMenu = Menu\
        {\
            ItemList = \
            {\
                MN_TOP\
                MN_ONE_STEP\
                MN_BOTTOM\
            };\
        };\
    };\
    MN_ALIGN\

#define MN_DRAW3 \
	ITEM_GROUP_MENU

#define MN_FORM \
	MenuItem\
	{\
		ITEM_FORM_CONTROL_PROPERTIES\
	};\
	MenuItem\
	{\
		ITEM_FORM_PROPERTIES\
	};\
	MenuItem\
	{\
		ITEM_REPLACE_CONTROL\
	};\


#define MN_ANNOTATIONS \
	MenuItem\
    {\
        Identifier = FN_REPLY ;\
        HelpID = CMD_FN_REPLY ;\
        Text [ en-US ] = "Reply" ;\
    };\
    SEPARATOR ; \
    MenuItem\
    {\
        Identifier = FN_DELETE_COMMENT ;\
        HelpID = CMD_FN_DELETE_COMMENT ;\
        Text [ en-US ] = "Delete ~Comment" ;\
    };\
    MenuItem\
    {\
        Identifier = FN_DELETE_NOTE_AUTHOR ;\
        HelpId = CMD_FN_DELETE_NOTE_AUTHOR ;\
        Text [ en-US ] = "Delete ~All Comments by $1" ;\
    };\
    MenuItem\
    {\
        Identifier = FN_DELETE_ALL_NOTES ;\
        HelpId = CMD_FN_DELETE_ALL_NOTES ;\
        Text [ en-US ] = "~Delete All Comments" ;\
    };\
    /*
    MenuItem\
    {\
        Identifier = FN_HIDE_NOTE ;\
        HelpId = CMD_FN_HIDE_NOTE ;\
        Text [ en-US ] = "~Hide comment" ;\
    };\
    MenuItem\
    {\
        Identifier = FN_HIDE_NOTE_AUTHOR	 ;\
        HelpId = CMD_FN_HIDE_NOTE_AUTHOR ;\
        Text [ en-US ] = "Hide ~author" ;\
    };\
    MenuItem\
    {\
        Identifier = FN_HIDE_ALL_NOTES ;\
        HelpId = CMD_FN_HIDE_ALL_NOTES ;\
        Text [ en-US ] = "Hide all ~comments" ;\
    };
    */

/*--Popups---------------------------------------------------------------*/

String MN_TEXT_POPUPMENU
{
	Text [ en-US ] = "Text" ;
};


String MN_TAB_POPUPMENU
{
	Text [ en-US ] = "Table" ;
};

Menu MN_TAB_POPUPMENU
{
	ItemList =
	{
		MN_RESET
		_NUMBERING_RELATED_MENU
		SEPARATOR ;
		MN_TEXT_ATTR
		SEPARATOR ;
		MenuItem
		{
			ITEM_FORMAT_CHAR_DLG
		};
		MenuItem
		{
			ITEM_FORMAT_PARA_DLG
		};
		ITEM_TRANSLITERATE_MENU
		//		MN_BB
		SEPARATOR ;
		MN_TAB1
		MN_TAB2
		MN_FRM_CAPTION_ITEM
		 //		SEPARATOR;
		MenuItem
		{
			Identifier = FN_VIEW_TABLEGRID ;
			HelpId = CMD_FN_VIEW_TABLEGRID ;
			Text [ en-US ] = "Table Boundaries" ;
		};
		MenuItem
		{
			Identifier = FN_SET_MODOPT_TBLNUMFMT ;
			HelpId = CMD_FN_SET_MODOPT_TBLNUMFMT ;
			Text [ en-US ] = "~Number Recognition" ;
		};
		SEPARATOR ;
		_DEFAULT_TEXT_EDIT_ELEMENTS
	};
};

#define MN_WRAP_CONTOUR \
	MenuItem\
	{\
		Identifier = FN_FRAME_WRAP_CONTOUR ; \
		HelpId = CMD_FN_FRAME_WRAP_CONTOUR ; \
		Text [ en-US ] = "~Contour" ; \
	};

#define MN_EDIT_CONTOUR \
	MenuItem\
	{\
		Identifier = SID_CONTOUR_DLG ; \
		HelpId = CMD_SID_CONTOUR_DLG ; \
		Text [ en-US ] = "~Edit Contour..." ; \
	};

#define MN_WRAP_CONTOUR_1 MN_WRAP_CONTOUR
#define MN_EDIT_CONTOUR_1 MN_EDIT_CONTOUR

#define MN_MOUSE_FRAME_BEGIN \
    MenuItem\
    {\
        Identifier = MN_WRAP ; \
        Command = ".uno:WrapMenu" ; \
        Text [ en-US ] = "~Wrap" ; \
        SubMenu = Menu\
        {\
            ItemList = \
            {\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    Identifier = FN_FRAME_NOWRAP ; \
                    HelpId = CMD_FN_FRAME_NOWRAP ; \
                    Text [ en-US ] = "~No Wrap" ; \
                };\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    Identifier = FN_FRAME_WRAP ; \
                    HelpId = CMD_FN_FRAME_WRAP ; \
                    Text [ en-US ] = "~Page Wrap" ; \
                };\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    Identifier = FN_FRAME_WRAP_IDEAL ; \
                    HelpId = CMD_FN_FRAME_WRAP_IDEAL ; \
                    Text [ en-US ] = "~Optimal Page Wrap" ; \
                };\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    Identifier = FN_FRAME_WRAPTHRU ; \
                    HelpId = CMD_FN_FRAME_WRAPTHRU ; \
                    Text [ en-US ] = "~Wrap Through" ; \
                };\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    Identifier = FN_FRAME_WRAPTHRU_TRANSP ; \
                    HelpId = CMD_FN_FRAME_WRAPTHRU_TRANSP ; \
                    Text [ en-US ] = "In ~Background" ; \
                };\
                SEPARATOR ; \
                MN_WRAP_CONTOUR_1\
                MN_EDIT_CONTOUR\
                MenuItem\
                {\
                    Checkable = TRUE ; \
                    Identifier = FN_WRAP_ANCHOR_ONLY ; \
                    HelpId = CMD_FN_WRAP_ANCHOR_ONLY ; \
                    Text [ en-US ] = "~First Paragraph" ; \
                    };\
            };\
        };\
    };


#define MN_MOUSE_FRAME_WITH_CONTOUR MN_MOUSE_FRAME_BEGIN

String MN_DRAW_POPUPMENU
{
	Text [ en-US ] = "Graphic" ;
};
#define MN_WRAP_DRAW \
    MenuItem\
    {\
        Identifier = MN_WRAP ; \
        Command = ".uno:WrapMenu" ; \
        SubMenu = Menu\
        {\
            ItemList = \
            {\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    Identifier = FN_FRAME_NOWRAP ; \
                    HelpId = CMD_FN_FRAME_NOWRAP ; \
                    Text [ en-US ] = "~No Wrap" ; \
                };\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    Identifier = FN_FRAME_WRAP ; \
                    HelpId = CMD_FN_FRAME_WRAP ; \
                    Text [ en-US ] = "~Page Wrap" ; \
                };\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    Identifier = FN_FRAME_WRAP_IDEAL ; \
                    HelpId = CMD_FN_FRAME_WRAP_IDEAL ; \
                    Text [ en-US ] = "~Optimal Page Wrap" ; \
                };\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    Identifier = FN_FRAME_WRAPTHRU ; \
                    HelpId = CMD_FN_FRAME_WRAPTHRU ; \
                    Text [ en-US ] = "~Wrap Through" ; \
                };\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    Identifier = FN_FRAME_WRAPTHRU_TRANSP ; \
                    HelpId = CMD_FN_FRAME_WRAPTHRU_TRANSP ; \
                    Text [ en-US ] = "In ~Background" ; \
                };\
                SEPARATOR ; \
                MN_WRAP_CONTOUR_1\
                MenuItem\
                {\
                    Checkable = TRUE ; \
                    Identifier = FN_WRAP_ANCHOR_ONLY ; \
                    HelpId = CMD_FN_WRAP_ANCHOR_ONLY ; \
                    Text [ en-US ] = "~First Paragraph" ; \
                };\
                SEPARATOR ; \
                MenuItem\
                {\
                    Identifier = FN_DRAW_WRAP_DLG ; \
                    HelpId = CMD_FN_DRAW_WRAP_DLG ; \
                    Text [ en-US ] = "~Edit..." ; \
                };\
            };\
        };\
        Text [ en-US ] = "~Wrap" ; \
    };

#define MN_BOTTOM \
	MenuItem\
	{\
		ITEM_FORMAT_FRAME_TO_BOTTOM\
	};\

#define MN_AT_FRAME \
	MenuItem\
	{\
		RadioCheck = TRUE ; \
		Identifier = FN_TOOL_ANCHOR_FRAME ; \
		HelpId = CMD_FN_TOOL_ANCHOR_FRAME ; \
		Text [ en-US ] = "To ~Frame" ; \
	};

#define MN_ANCHOR \
    MenuItem\
    {\
        Identifier = FN_TOOL_ANCHOR ; \
        HelpId = CMD_FN_TOOL_ANCHOR ; \
        Command = ".uno:AnchorMenu" ; \
        Text [ en-US ] = "An~chor" ; \
        SubMenu = Menu\
        {\
            ItemList = \
            {\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    Identifier = FN_TOOL_ANCHOR_PAGE ; \
                    HelpId = CMD_FN_TOOL_ANCHOR_PAGE ; \
                    Text [ en-US ] = "To P~age" ; \
                };\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    Identifier = FN_TOOL_ANCHOR_PARAGRAPH ; \
                    HelpId = CMD_FN_TOOL_ANCHOR_PARAGRAPH ; \
                    Text [ en-US ] = "To ~Paragraph" ; \
                };\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    Identifier = FN_TOOL_ANCHOR_AT_CHAR ; \
                    HelpId = CMD_FN_TOOL_ANCHOR_AT_CHAR ; \
                    Text [ en-US ] = "To ~Character" ; \
                };\
                MenuItem\
                {\
                    RadioCheck = TRUE ; \
                    Identifier = FN_TOOL_ANCHOR_CHAR ; \
                    HelpId = CMD_FN_TOOL_ANCHOR_CHAR ; \
                    Text [ en-US ] = "As C~haracter" ; \
                };\
                MN_AT_FRAME\
            };\
        };\
    };

Menu MN_DRAW_POPUPMENU
{
	ItemList =
	{
		MN_DRAW1
		MN_DRWTXTATTR
		MenuItem
		{
			ITEM_FORMAT_ATTR_TRANSFORM
		};

		//-#i68101#----------------------
		SEPARATOR ;
		MN_TITLE_DESCRIPTION_SHAPE
		MN_NAME_SHAPE
		//-#i68101#----------------------

		SEPARATOR ;
		MN_DRAW5
		MN_WRAP_DRAW
		MN_ANCHOR
		MN_FRM_CAPTION_ITEM
		SEPARATOR ;
		MN_DRAW3
	};
};

String MN_DRAWFORM_POPUPMENU
{
	Text [ en-US ] = "Control" ;
};

Menu MN_DRAWFORM_POPUPMENU
{
	ItemList =
	{
		MenuItem
		{
			ITEM_FORMAT_ATTR_TRANSFORM
		};

		//-#i68101#----------------------
		SEPARATOR ;
		MN_TITLE_DESCRIPTION_SHAPE
		MN_NAME_SHAPE
		//-#i68101#----------------------

		SEPARATOR ;
		MN_FORM
		SEPARATOR ;
		MN_DRAW6
		MN_WRAP_DRAW
		MN_ANCHOR
		SEPARATOR ;
		MN_DRAW3
	};
};

String MN_DRWTXT_POPUPMENU
{
	Text [ en-US ] = "Draw Object text" ;
};

Menu MN_DRWTXT_POPUPMENU
{
	ItemList =
	{
		MN_RESET
		SEPARATOR ;
		MN_TEXT_ATTR
		SEPARATOR ;
		ITEM_TRANSLITERATE_MENU
		SEPARATOR ;
		MN_DRWTXT
		MN_FRM_CAPTION_ITEM
	};
};

#define MN_REDCOMMENT \
	MenuItem\
	{\
		Identifier = FN_DELETE_COMMENT ;\
		HelpId = CMD_FN_DELETE_COMMENT ;\
		Text [ en-US ] = "Delete ~Changes Note" ;\
	};\

Menu MN_ANNOTATION_POPUPMENU
{
	ItemList =
	{
		//MN_RESET
		//SEPARATOR ;
		//MN_TEXT_ATTR
		MenuItem\
                {\
                    ITEM_FORMAT_ATTR_CHAR_WEIGHT\
                };\
                MenuItem\
                {\
                    ITEM_FORMAT_ATTR_CHAR_POSTURE\
                };\
                MenuItem\
                {\
                    ITEM_FORMAT_ATTR_CHAR_UNDERLINE\
                };\
                MenuItem\
                {\
                    ITEM_FORMAT_ATTR_CHAR_STRIKEOUT\
                };\
		SEPARATOR ;
		//ITEM_TRANSLITERATE_MENU
		//SEPARATOR ;
		//MN_DRWTXT
		//MN_FRM_CAPTION_ITEM
		SEPARATOR ;
		MN_ANNOTATIONS
		//MN_REDCOMMENT
	};
};

Menu MN_ANNOTATION_BUTTON
{
	ItemList =
	{
		MN_ANNOTATIONS
	};
};

Menu MN_REDCOMMENT_BUTTON
{
	ItemList =
	{
		MN_REDCOMMENT
	};
};

String MN_GRF_POPUPMENU
{
	Text [ en-US ] = "Graphic" ;
};

#define MN_ALIGN_FRAME \
    MenuItem\
    {\
        Identifier = MN_SUB_ALIGN ; \
        HelpID = HID_MN_SUB_ALIGN ; \
        Command = ".uno:ArrangeFrameMenu" ; \
        Text [ en-US ] = "~Arrange" ; \
        SubMenu = Menu\
        {\
            ItemList = \
            {\
                MenuItem\
                {\
                    ITEM_FORMAT_FRAME_TO_TOP\
                };\
                MN_ONE_STEP\
                MenuItem\
                {\
                    ITEM_FORMAT_FRAME_TO_BOTTOM\
                };\
            };\
        };\
        };\
    MenuItem\
    {\
        Identifier = MN_FORMAT_FRM_HORZ ; \
        Command = ".uno:AlignFrameMenu" ; \
        SubMenu = Menu\
        {\
            ItemList = \
            {\
                MenuItem\
                {\
                    Identifier = FN_FRAME_ALIGN_HORZ_LEFT ; \
                    HelpId = CMD_FN_FRAME_ALIGN_HORZ_LEFT ; \
                    Text [ en-US ] = "~Left" ; \
                    };\
                MenuItem\
                {\
                    Identifier = FN_FRAME_ALIGN_HORZ_CENTER ; \
                    HelpId = CMD_FN_FRAME_ALIGN_HORZ_CENTER ; \
                    Text [ en-US ] = "~Centered" ; \
                    };\
                MenuItem\
                {\
                    Identifier = FN_FRAME_ALIGN_HORZ_RIGHT ; \
                    HelpId = CMD_FN_FRAME_ALIGN_HORZ_RIGHT ; \
                    Text [ en-US ] = "~Right" ; \
                    };\
                SEPARATOR ; \
                MenuItem\
                {\
                    Identifier = FN_FRAME_ALIGN_VERT_TOP ; \
                    HelpId = CMD_FN_FRAME_ALIGN_VERT_TOP ; \
                    Text [ en-US ] = "Base at ~Top" ; \
                    };\
                MenuItem\
                {\
                    Identifier = FN_FRAME_ALIGN_VERT_CENTER ; \
                    HelpId = CMD_FN_FRAME_ALIGN_VERT_CENTER ; \
                    Text [ en-US ] = "Base in ~Middle" ; \
                    };\
                MenuItem\
                {\
                    Identifier = FN_FRAME_ALIGN_VERT_BOTTOM ; \
                    HelpId = CMD_FN_FRAME_ALIGN_VERT_BOTTOM ; \
                    Text [ en-US ] = "Base at ~Bottom" ; \
                    };\
            };\
        };\
        Text [ en-US ] = "A~lignment" ; \
        };\
    MN_ANCHOR

Menu MN_GRF_POPUPMENU
{
	ItemList =
	{
		MN_ALIGN_FRAME
		MN_MOUSE_FRAME_WITH_CONTOUR
		// --> OD 2009-07-14 #i73249#
		SEPARATOR ;
		MN_TITLE_DESCRIPTION_SHAPE
		// <--
		SEPARATOR ;
		MenuItem
		{
			Identifier = FN_FORMAT_GRAFIC_DLG ;
			HelpId = CMD_FN_FORMAT_GRAFIC_DLG ;
			Text [ en-US ] = "~Picture..." ;
		};
		MenuItem
		{
			Identifier = FN_SAVE_GRAPHIC;
			HelpId = CMD_FN_SAVE_GRAPHIC;
			Text [ en-US ] = "Save Graphics..." ;
		};
		MN_FRM_CAPTION_ITEM
		MenuItem
		{
			ITEM_EDIT_IMAP
		};
	};
};

String MN_OLE_POPUPMENU
{
	Text [ en-US ] = "Object" ;
};


Menu MN_OLE_POPUPMENU
{
	ItemList =
	{
		MN_ALIGN_FRAME
		MN_MOUSE_FRAME_WITH_CONTOUR
		// --> OD 2009-07-14 #i73249#
		SEPARATOR ;
		MN_TITLE_DESCRIPTION_SHAPE
		// <--
		SEPARATOR ;
		MenuItem
		{
			Identifier = FN_FORMAT_FRAME_DLG ;
			HelpId = CMD_FN_FORMAT_FRAME_DLG ;
			Text [ en-US ] = "Object..." ;
		};
		MN_FRM_CAPTION_ITEM
	};
};

#define MN_MOUSE_FRAME_WITHOUT_CONTOUR MN_MOUSE_FRAME_BEGIN

String MN_FRM_POPUPMENU
{
	Text [ en-US ] = "Frame" ;
};

Menu MN_FRM_POPUPMENU
{
	ItemList =
	{
		MN_ALIGN_FRAME
		MN_MOUSE_FRAME_WITHOUT_CONTOUR
		// --> OD 2009-07-07 #i73249#
		SEPARATOR ;
		MN_TITLE_DESCRIPTION_SHAPE
		// <--
		SEPARATOR ;
		MN_FRM
		MN_FRM_CAPTION_ITEM
	};
};

String MN_PPREVIEW_POPUPMENU
{
	Text [ en-US ] = "Draw Object text" ;
};

Menu MN_PPREVIEW_POPUPMENU
{
	ItemList =
	{
		MenuItem
		{
			Identifier = FN_PAGEUP ;
			HelpId = CMD_FN_PAGEUP ;
			Text [ en-US ] = "Previous Page" ;
		};
		MenuItem
		{
			Identifier = FN_PAGEDOWN ;
			HelpId = CMD_FN_PAGEDOWN ;
			Text [ en-US ] = "Next Page" ;
		};
		MenuItem
		{
			ITEM_VIEW_ATTR_ZOOM
		};
		SEPARATOR ;
		MenuItem
		{
			Identifier = FN_PRINT_PAGEPREVIEW ;
			HelpId = CMD_FN_PRINT_PAGEPREVIEW ;
			Text [ en-US ] = "Print" ;
		};
		SEPARATOR ;
		MenuItem
		{
			Identifier = SID_PRINTPREVIEW ;
			HelpId = CMD_SID_PRINTPREVIEW ;
			Text [ en-US ] = "Close Preview" ;
		};
	};
};

String MN_MEDIA_POPUPMENU
{
	Text [ en-US ] = "Media object" ;
};

Menu MN_MEDIA_POPUPMENU
{
	ItemList =
	{
		MenuItem
		{
			ITEM_FORMAT_ATTR_TRANSFORM
		};

		//-#i68101#----------------------
		SEPARATOR ;
		MN_TITLE_DESCRIPTION_SHAPE
		MN_NAME_SHAPE
		//-#i68101#----------------------

		SEPARATOR ;
		MN_DRAW6
		MN_WRAP_DRAW
		MN_ANCHOR
		SEPARATOR ;
		MN_DRAW3
	};
};

Menu MN_TEXT_POPUPMENU
	BASE_TEXT_POPUPMENU_BEGIN
	BASE_TEXT_POPUPMENU_NOWEB
	BASE_TEXT_POPUPMENU_END

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