/*
 *  Notepad (English resources)
 *
 *  Copyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>
 *  Proofread 1998 by David Lee Lambert <lamber45@egr.msu.edu>
 *  Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
 *  Copyright 2003 Marcelo Duarte
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

MAIN_MENU MENU
{
 POPUP "&File" {
  MENUITEM "&New...",           CMD_NEW
  MENUITEM "&Open\tCtrl+O",     CMD_OPEN
  MENUITEM "&Save\tCtrl+S",     CMD_SAVE
  MENUITEM "Save &as...",       CMD_SAVE_AS
  MENUITEM SEPARATOR
  MENUITEM "&Print",            CMD_PRINT
  MENUITEM "Page Se&tup...",    CMD_PAGE_SETUP
  MENUITEM "P&rinter Setup...", CMD_PRINTER_SETUP
  MENUITEM SEPARATOR
  MENUITEM "E&xit",             CMD_EXIT
 }
POPUP "&Edit" {
  MENUITEM "&Undo\tCtrl+Z",     CMD_UNDO
  MENUITEM SEPARATOR
  MENUITEM "Cu&t\tCtrl+X",      CMD_CUT
  MENUITEM "&Copy\tCtrl+C",     CMD_COPY
  MENUITEM "&Paste\tCtrl+V",    CMD_PASTE
  MENUITEM "&Delete\tDel",      CMD_DELETE
  MENUITEM SEPARATOR
  MENUITEM "Select &all\tCtrl+A",       CMD_SELECT_ALL
  MENUITEM "&Time/Date\tF5",    CMD_TIME_DATE
  MENUITEM SEPARATOR
  MENUITEM "&Wrap long lines",  CMD_WRAP
  MENUITEM "&Font...",          CMD_FONT
 }
POPUP "&Search" {
  MENUITEM "&Search\tCtrl+F",   CMD_SEARCH
  MENUITEM "&Search next\tF3",  CMD_SEARCH_NEXT
 }
POPUP "&Help" {
  MENUITEM "&Contents",         CMD_HELP_CONTENTS
  MENUITEM "&Search...",        CMD_HELP_SEARCH
  MENUITEM "&Help on help",     CMD_HELP_ON_HELP
  MENUITEM SEPARATOR
  POPUP "Inf&o..." {
   MENUITEM "&License",         CMD_LICENSE
   MENUITEM "&NO WARRANTY",     CMD_NO_WARRANTY
   MENUITEM "&About Wine",      CMD_ABOUT_WINE
  }
 }
}

/* Dialog `Page setup' */

DIALOG_PAGESETUP DIALOG 0, 0, 225, 95
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "Helv"
CAPTION "Page Setup"
{
LTEXT    "&Header:",  0x140,   10, 07, 40, 15
EDITTEXT                         0x141,       60, 05,110, 12, WS_BORDER | WS_TABSTOP
LTEXT    "&Footer:",  0x142,   10, 24, 40, 15
EDITTEXT                         0x143,       60, 22,110, 12, WS_BORDER | WS_TABSTOP

GROUPBOX "&Margins:",      0x144,     10, 43,160, 45
LTEXT    "&Left:",        0x145,   20, 55, 30, 10, WS_CHILD
EDITTEXT /*STRING_PAGESETUP_LEFTVALUE,*/   0x147,       50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Top:",         0x148,    20, 73, 30, 10, WS_CHILD
EDITTEXT /*STRING_PAGESETUP_TOPVALUE,*/    0x14A,        50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Right:",       0x14B, 100, 55, 30, 10, WS_CHILD
EDITTEXT /*STRING_PAGESETUP_RIGHTVALUE,*/  0x14D,     130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Bottom:",      0x14E,100, 73, 30, 10, WS_CHILD
EDITTEXT /*STRING_PAGESETUP_BOTTOMVALUE,*/ 0x150,    130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP

DEFPUSHBUTTON "OK",         0x151,                   180,  3, 40, 15, WS_TABSTOP
PUSHBUTTON    "Cancel",     0x152,               180, 21, 40, 15, WS_TABSTOP
PUSHBUTTON    "&Help",       0x153,                180, 39, 40, 15, WS_TABSTOP
}

ID_ACCEL ACCELERATORS
{
    "^A",       CMD_SELECT_ALL
    "^F",       CMD_SEARCH
    "^O",       CMD_OPEN
    "^S",       CMD_SAVE
    VK_F3,      CMD_SEARCH_NEXT,  VIRTKEY
    VK_F5,      CMD_TIME_DATE,  VIRTKEY
}

STRINGTABLE DISCARDABLE
{
STRING_PAGESETUP_HEADERVALUE,   "&n"        /* FIXME */
STRING_PAGESETUP_FOOTERVALUE,   "Page &s"   /* FIXME */
STRING_PAGESETUP_LEFTVALUE,             "20 mm"     /* FIXME */
STRING_PAGESETUP_RIGHTVALUE,    "20 mm"     /* FIXME */
STRING_PAGESETUP_TOPVALUE,              "25 mm"     /* FIXME */
STRING_PAGESETUP_BOTTOMVALUE,   "25 mm"     /* FIXME */

STRING_NOTEPAD,                                 "Notepad"
STRING_ERROR,                                   "ERROR"
STRING_WARNING,                                 "WARNING"
STRING_INFO,                                    "Information"

STRING_UNTITLED,                                "(untitled)"

STRING_ALL_FILES,                               "All files (*.*)"
STRING_TEXT_FILES_TXT,                  "Text files (*.txt)"

STRING_TOOLARGE,                                "File '%s' is too large for notepad.\n \
Please use a different editor."
STRING_NOTEXT,                                  "You didn't enter any text. \
\nPlease type something and try again"
STRING_DOESNOTEXIST,                            "File '%s'\ndoes not exist\n\n \
Do you want to create a new file ?"
STRING_NOTSAVED,                                "File '%s'\nhas been modified\n\n \
Would you like to save the changes ?"
STRING_NOTFOUND,                                        "'%s' can not be found."
STRING_OUT_OF_MEMORY,                   "Not enough memory to complete this \
task. \nClose one or more applications to increase the amount of \nfree \
memory."

}
