/*
 * Program Manager
 *
 * Copyright 1996 Ulrich Schmid
 * Copyright 2002 Sylvain Petreolle
 *
 * 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 "winuser.h"
#include "progman.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

MAIN_MENU MENU
{
 POPUP "&File" {
   MENUITEM "&New...",              PM_NEW
   MENUITEM "O&pen\tEnter",             PM_OPEN
   MENUITEM "&Move...\tF7",             PM_MOVE,      GRAYED
   MENUITEM "&Copy...\tF8",             PM_COPY,      GRAYED
   MENUITEM "&Delete\tEntf",           PM_DELETE
   MENUITEM "&Attributes...\tAlt+Enter",       PM_ATTRIBUTES
   MENUITEM SEPARATOR
   MENUITEM "&Execute...",          PM_EXECUTE
   MENUITEM SEPARATOR
   MENUITEM "E&xit Windows...",             PM_EXIT
 }
 POPUP "&Options" {
   MENUITEM "&Arrange automatically",  PM_AUTO_ARRANGE
   MENUITEM "&Minimize on run",    PM_MIN_ON_RUN
   MENUITEM "&Save settings on exit", PM_SAVE_SETTINGS
 }
 POPUP "&Windows" {
   MENUITEM "&Overlapped\tShift+F5",       PM_OVERLAP
   MENUITEM "&Side by side\tShift+F4",  PM_SIDE_BY_SIDE
   MENUITEM "&Arrange Icons",       PM_ARRANGE
 }
 
POPUP "&Help" {
   MENUITEM "&Contents",         PM_CONTENTS
   MENUITEM "&Search...",           PM_SEARCH
   MENUITEM SEPARATOR
   MENUITEM "&Help on Help",     PM_HELPONHELP
   MENUITEM "&Tutorial",         PM_TUTORIAL
   MENUITEM SEPARATOR
   MENUITEM "&About Wine",     PM_ABOUT_WINE
 }
}

STRINGTABLE
{
IDS_PROGRAM_MANAGER,		"Program Manager"
IDS_ERROR,			"ERROR"
IDS_WARNING,			"WARNING"
IDS_INFO,			"Information"
IDS_DELETE,			"Delete"
IDS_DELETE_GROUP_s,		"Delete group `%s' ?"
IDS_DELETE_PROGRAM_s,		"Delete program `%s' ?"
IDS_NOT_IMPLEMENTED,		"Not implemented"
IDS_FILE_READ_ERROR_s,		"Error reading `%s'."
IDS_FILE_WRITE_ERROR_s,		"Error writing `%s'."
IDS_GRPFILE_READ_ERROR_s,	"\
The group file `%s' cannot be opened.\n\
Should it be tried further on?"
IDS_OUT_OF_MEMORY,		"Out of memory."
IDS_WINHELP_ERROR,		"Help not available."
IDS_UNKNOWN_FEATURE_s,		"Unknown feature in %s"
IDS_FILE_NOT_OVERWRITTEN_s,	"File `%s' exists. Not overwritten."
IDS_SAVE_GROUP_AS_s,		"Save group as `%s to prevent overwriting original files."
IDS_NO_HOT_KEY,			"None"
IDS_ALL_FILES,			"All files (*.*)"
IDS_PROGRAMS,			"Programs"
IDS_LIBRARIES_DLL,		"Libraries (*.dll)"
IDS_SYMBOL_FILES,		"Icon files"
IDS_SYMBOLS_ICO,		"Icons (*.ico)"
}

ACCEL ACCELERATORS
{
VK_RETURN, PM_EXECUTE, VIRTKEY, ALT
}
