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

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."

}
