/*
 *  Notepad (Slovak 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>
 *
 * 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
 */

LANGUAGE LANG_SLOVAK, 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 "&Print...\tCtrl+P",		CMD_PRINT
  MENUITEM "Page Se&tup...",	CMD_PAGE_SETUP
  MENUITEM "P&rinter Setup...", CMD_PRINTER_SETUP
  MENUITEM SEPARATOR
  MENUITEM "&Exit",		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",	CMD_SELECT_ALL
  MENUITEM "&Time/Date\tF5",	CMD_TIME_DATE
  MENUITEM SEPARATOR
  MENUITEM "&Wrap long lines",	CMD_WRAP
 }
POPUP "&Search" {
  MENUITEM "&Search...", 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
  MENUITEM "&About Notepad...", CMD_HELP_ABOUT_NOTEPAD
 }
}

/* Dialog `Page setup' */

DIALOG_PAGESETUP DIALOG 0, 0, 225, 95
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Page Setup"
{
LTEXT    "&Header:",  0x140,   10, 07, 40, 15
EDITTEXT IDC_PAGESETUP_HEADERVALUE,   60, 05,110, 12, WS_BORDER | WS_TABSTOP
LTEXT    "&Footer:",  0x142,   10, 24, 40, 15
EDITTEXT IDC_PAGESETUP_FOOTERVALUE,   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 IDC_PAGESETUP_LEFTVALUE,     50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Top:",         0x148,    20, 73, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_TOPVALUE,      50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Right:",       0x14B, 100, 55, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_RIGHTVALUE,   130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Bottom:",      0x14E,100, 73, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_BOTTOMVALUE,  130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP

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

STRINGTABLE DISCARDABLE
{
STRING_PAGESETUP_HEADERVALUE,	"&f"
STRING_PAGESETUP_FOOTERVALUE,	"Page &p"

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

}
