/*
 *  Notepad (notepad.rc)
 *
 *  Copyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>
 *  To be distributed under the Wine License
 */

/* Main Menu */

CONCAT(MENU_, LANGUAGE_ID) MENU
{
 POPUP MENU_FILE {
   MENUITEM MENU_FILE_NEW,              NP_FILE_NEW 
   MENUITEM MENU_FILE_OPEN,             NP_FILE_OPEN
   MENUITEM MENU_FILE_SAVE,             NP_FILE_SAVE
   MENUITEM MENU_FILE_SAVEAS,           NP_FILE_SAVEAS
   MENUITEM MENU_FILE_PRINT,            NP_FILE_PRINT
   MENUITEM MENU_FILE_PAGESETUP,        NP_FILE_PAGESETUP
   MENUITEM MENU_FILE_PRINTSETUP,       NP_FILE_PRINTSETUP
   MENUITEM SEPARATOR   
   MENUITEM MENU_FILE_EXIT,             NP_FILE_EXIT
 }
 POPUP MENU_EDIT {
   MENUITEM MENU_EDIT_UNDO,             NP_EDIT_UNDO
   MENUITEM SEPARATOR
   MENUITEM MENU_EDIT_CUT,              NP_EDIT_CUT
   MENUITEM MENU_EDIT_COPY,             NP_EDIT_COPY
   MENUITEM MENU_EDIT_PASTE,            NP_EDIT_PASTE
   MENUITEM MENU_EDIT_DELETE,           NP_EDIT_DELETE
   MENUITEM SEPARATOR
   MENUITEM MENU_EDIT_SELECTALL,        NP_EDIT_SELECTALL
   MENUITEM MENU_EDIT_TIMEDATE,         NP_EDIT_TIMEDATE
   MENUITEM SEPARATOR
   MENUITEM MENU_EDIT_WRAP,             NP_EDIT_WRAP
 }
 POPUP MENU_SEARCH {
   MENUITEM MENU_SEARCH_SEARCH,         NP_SEARCH_SEARCH
   MENUITEM MENU_SEARCH_NEXT,           NP_SEARCH_NEXT
 }
 POPUP MENU_LANGUAGE {
   /* Dummy item, will be removed */
   MENUITEM SEPARATOR
 }
 POPUP MENU_HELP {
   MENUITEM MENU_HELP_CONTENTS,         NP_HELP_CONTENTS
   MENUITEM MENU_HELP_SEARCH,           NP_HELP_SEARCH
   MENUITEM MENU_HELP_HELP_ON_HELP,     NP_HELP_ON_HELP
   MENUITEM SEPARATOR

    POPUP MENU_INFO {
      MENUITEM MENU_INFO_LICENSE,          NP_HELP_LICENSE
      MENUITEM MENU_INFO_NO_WARRANTY,      NP_HELP_NO_WARRANTY
      MENUITEM MENU_INFO_ABOUT_WINE,       NP_HELP_ABOUT_WINE
    }
 }
 
}

/* Dialog `Page setup' */

CONCAT(DIALOG_PAGESETUP_, LANGUAGE_ID) DIALOG 0, 0, 225, 95
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "Helv"
CAPTION DIALOG_PAGESETUP_CAPTION
{
LTEXT    DIALOG_PAGESETUP_HEAD,  NP_PAGESETUP_HEAD_TXT,   10, 07, 40, 15
EDITTEXT                         NP_PAGESETUP_HEAD,       60, 05,110, 12, WS_BORDER | WS_TABSTOP
LTEXT    DIALOG_PAGESETUP_TAIL,  NP_PAGESETUP_TAIL_TXT,   10, 24, 40, 15
EDITTEXT                         NP_PAGESETUP_TAIL,       60, 22,110, 12, WS_BORDER | WS_TABSTOP

GROUPBOX DIALOG_PAGESETUP_MARGIN,      NP_PAGESETUP_MARGIN,     10, 43,160, 45
LTEXT    DIALOG_PAGESETUP_LEFT,        NP_PAGESETUP_LEFT_TXT,   20, 55, 30, 10, WS_CHILD
EDITTEXT /*STRING_PAGESETUP_LEFTVALUE,*/   NP_PAGESETUP_LEFT,       50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    DIALOG_PAGESETUP_TOP,         NP_PAGESETUP_TOP_TXT,    20, 73, 30, 10, WS_CHILD
EDITTEXT /*STRING_PAGESETUP_TOPVALUE,*/    NP_PAGESETUP_TOP,        50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    DIALOG_PAGESETUP_RIGHT,       NP_PAGESETUP_RIGHT_TXT, 100, 55, 30, 10, WS_CHILD
EDITTEXT /*STRING_PAGESETUP_RIGHTVALUE,*/  NP_PAGESETUP_RIGHT,     130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    DIALOG_PAGESETUP_BOTTOM,      NP_PAGESETUP_BOTTOM_TXT,100, 73, 30, 10, WS_CHILD
EDITTEXT /*STRING_PAGESETUP_BOTTOMVALUE,*/ NP_PAGESETUP_BOTTOM,    130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP


DEFPUSHBUTTON DIALOG_OK,         IDOK,                   180,  3, 40, 15, WS_TABSTOP
PUSHBUTTON    DIALOG_CANCEL,     IDCANCEL,               180, 21, 40, 15, WS_TABSTOP
PUSHBUTTON    DIALOG_HELP,       NP_HELP,                180, 39, 40, 15, WS_TABSTOP
}


/* Strings */

#define STRING_LANGUAGE_ID        STRINGIFY(LANGUAGE_ID)
#define STRING_LANGUAGE_MENU_ITEM LANGUAGE_MENU_ITEM

STRINGTABLE
{
ADDSTRING(LANGUAGE_ID)
ADDSTRING(LANGUAGE_MENU_ITEM)
ADDSTRING(NOTEPAD)
ADDSTRING(TEXT_FILES_TXT)
ADDSTRING(ALL_FILES)
ADDSTRING(ERROR)
ADDSTRING(WARNING)
ADDSTRING(INFO)
ADDSTRING(TOOLARGE)
ADDSTRING(NOTEXT)
ADDSTRING(NOTSAVED)
ADDSTRING(NOTFOUND)
ADDSTRING(OUT_OF_MEMORY)
ADDSTRING(UNTITLED)
ADDSTRING(PAGESETUP_HEADERVALUE)
ADDSTRING(PAGESETUP_FOOTERVALUE)
ADDSTRING(PAGESETUP_LEFTVALUE)
ADDSTRING(PAGESETUP_RIGHTVALUE)
ADDSTRING(PAGESETUP_TOPVALUE)
ADDSTRING(PAGESETUP_BOTTOMVALUE)
}


/* Undefine all language-specific strings */

#undef LANGUAGE_ID
#undef LANGUAGE_NUMBER
#undef LANGUAGE_MENU_ITEM

#undef MENU_FILE
#undef MENU_FILE_NEW
#undef MENU_FILE_OPEN
#undef MENU_FILE_SAVE
#undef MENU_FILE_SAVEAS
#undef MENU_FILE_PRINT
#undef MENU_FILE_PAGESETUP
#undef MENU_FILE_PRINTSETUP
#undef MENU_FILE_EXIT
#undef MENU_EDIT
#undef MENU_EDIT_UNDO
#undef MENU_EDIT_CUT
#undef MENU_EDIT_COPY
#undef MENU_EDIT_PASTE
#undef MENU_EDIT_DELETE
#undef MENU_EDIT_SELECTALL
#undef MENU_EDIT_TIMEDATE
#undef MENU_EDIT_WRAP
#undef MENU_SEARCH
#undef MENU_SEARCH_SEARCH
#undef MENU_SEARCH_NEXT
#undef MENU_LANGUAGE
#undef MENU_HELP
#undef MENU_HELP_CONTENTS
#undef MENU_HELP_SEARCH
#undef MENU_HELP_HELP_ON_HELP
#undef MENU_INFO
#undef MENU_INFO_LICENSE
#undef MENU_INFO_NO_WARRANTY
#undef MENU_INFO_ABOUT_WINE

#undef DIALOG_OK
#undef DIALOG_CANCEL
#undef DIALOG_BROWSE
#undef DIALOG_HELP
#undef DIALOG_PAGESETUP_CAPTION
#undef DIALOG_PAGESETUP_HEAD
#undef DIALOG_PAGESETUP_TAIL
#undef DIALOG_PAGESETUP_MARGIN
#undef DIALOG_PAGESETUP_LEFT
#undef DIALOG_PAGESETUP_RIGHT
#undef DIALOG_PAGESETUP_TOP
#undef DIALOG_PAGESETUP_BOTTOM

#undef STRING_LANGUAGE_ID
#undef STRING_LANGUAGE_MENU_ITEM
#undef STRING_PAGESETUP_HEADERVALUE
#undef STRING_PAGESETUP_FOOTERVALUE
#undef STRING_PAGESETUP_LEFTVALUE
#undef STRING_PAGESETUP_RIGHTVALUE
#undef STRING_PAGESETUP_TOPVALUE
#undef STRING_PAGESETUP_BOTTOMVALUE
#undef STRING_NOTEPAD
#undef STRING_ERROR
#undef STRING_WARNING
#undef STRING_INFO
#undef STRING_UNTITLED
#undef STRING_ALL_FILES
#undef STRING_TEXT_FILES_TXT
#undef STRING_TOOLARGE
#undef STRING_NOTEXT
#undef STRING_NOTSAVED
#undef STRING_NOTFOUND
#undef STRING_OUT_OF_MEMORY

