/*
 *  Copyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>
 *  Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
 *
 * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "notepad_res.h"

#pragma makedep po

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

MAIN_MENU MENU
{
 POPUP "&File" {
  MENUITEM "&New\tCtrl+N",      CMD_NEW
  MENUITEM "&Open...\tCtrl+O",  CMD_OPEN
  MENUITEM "&Save\tCtrl+S",     CMD_SAVE
  MENUITEM "Save &as...",       CMD_SAVE_AS
  MENUITEM SEPARATOR
  MENUITEM "&Print...\tCtrl+P",            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
  MENUITEM "&Replace...\tCtrl+H", CMD_REPLACE
 }
POPUP "&Help" {
  MENUITEM "&Contents\tF1",     CMD_HELP_CONTENTS
  MENUITEM "&About Notepad",    CMD_HELP_ABOUT_NOTEPAD
 }
}

STRINGTABLE
{
STRING_PAGESETUP_HEADERVALUE,   "#msgctxt#do not translate#&f"
STRING_PAGESETUP_FOOTERVALUE,   "Page &p"

STRING_NOTEPAD,                                 "Notepad"
STRING_ERROR,                                   "ERROR"

STRING_UNTITLED,                                "Untitled"

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

STRING_DOESNOTEXIST,                            "File '%s' does not exist.\n\n\
Do you want to create a new file?"
STRING_NOTSAVED,                                "File '%s' has been modified.\n\n\
Would you like to save the changes?"
STRING_NOTFOUND,                                        "'%s' could not be found."

STRING_UNICODE_LE,     "Unicode (UTF-16)"
STRING_UNICODE_BE,     "Unicode (UTF-16 big-endian)"
STRING_UTF8,           "Unicode (UTF-8)"

STRING_LOSS_OF_UNICODE_CHARACTERS,         "%1\n\
This file contains Unicode characters which will be lost if\n\
you save this file in the %2 encoding.\n\
To keep these characters, click Cancel, and then select\n\
one of the Unicode options in the Encoding drop down list.\n\
Continue?"
}

DIALOG_PAGESETUP DIALOG 0, 0, 240, 95
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Page Setup"
{
LTEXT    "&Header:",  0x140,  10, 07, 68, 15
EDITTEXT IDC_PAGESETUP_HEADERVALUE,   78,  5,110, 12, WS_BORDER | WS_TABSTOP
LTEXT    "&Footer:",  0x142,   10, 24, 68, 15
EDITTEXT IDC_PAGESETUP_FOOTERVALUE,   78, 22,110, 12, WS_BORDER | WS_TABSTOP

GROUPBOX "Margins (millimeters)",      0x144,     10, 43,178, 45
LTEXT    "&Left:",        0x145,   20, 55, 39, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_LEFTVALUE,     59, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Top:",         0x148,    20, 73, 39, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_TOPVALUE,      59, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Right:",       0x14B, 107, 55, 39, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_RIGHTVALUE,   148, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Bottom:",      0x14E, 107, 73, 39, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_BOTTOMVALUE,  148, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP

DEFPUSHBUTTON "OK",         IDOK,                   195,  3, 40, 15, WS_TABSTOP
PUSHBUTTON    "Cancel",     IDCANCEL,               195, 21, 40, 15, WS_TABSTOP
PUSHBUTTON    "&Help",       IDHELP,                195, 39, 40, 15, WS_TABSTOP
}

IDD_OFN_TEMPLATE  DIALOG 50,50,300,15
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER
FONT 8, "MS Shell Dlg"
BEGIN
  LTEXT "Encoding:", -1, 5,0, 60,12
  COMBOBOX IDC_OFN_ENCCOMBO, 63,0, 150,48, WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST
END

ID_ACCEL ACCELERATORS
{
    "#msgctxt#accelerator Select All#A", CMD_SELECT_ALL, VIRTKEY, CONTROL
    "#msgctxt#accelerator Copy#C", CMD_COPY, VIRTKEY, CONTROL
    "#msgctxt#accelerator Find#F", CMD_SEARCH, VIRTKEY, CONTROL
    "#msgctxt#accelerator Replace#H", CMD_REPLACE, VIRTKEY, CONTROL
    "#msgctxt#accelerator New#N", CMD_NEW, VIRTKEY, CONTROL
    "#msgctxt#accelerator Open#O", CMD_OPEN, VIRTKEY, CONTROL
    "#msgctxt#accelerator Print#P", CMD_PRINT, VIRTKEY, CONTROL
    "#msgctxt#accelerator Save#S", CMD_SAVE, VIRTKEY, CONTROL
    "#msgctxt#accelerator Paste#V", CMD_PASTE, VIRTKEY, CONTROL
    "#msgctxt#accelerator Cut#X", CMD_CUT, VIRTKEY, CONTROL
    "#msgctxt#accelerator Undo#Z", CMD_UNDO, VIRTKEY, CONTROL
    VK_BACK, CMD_UNDO, VIRTKEY, ALT
    VK_F1, CMD_HELP_CONTENTS, VIRTKEY
    VK_F3, CMD_SEARCH_NEXT, VIRTKEY
    VK_F5, CMD_TIME_DATE, VIRTKEY
    VK_INSERT, CMD_COPY, VIRTKEY, CONTROL
    VK_INSERT, CMD_PASTE, VIRTKEY, SHIFT
}

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

/* @makedep: notepad.ico */
IDI_NOTEPAD ICON "notepad.ico"
