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

/* Menu */

MAIN_MENU MENU LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
{
 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

   POPUP "&Info..." {
     MENUITEM "&License",        PM_LICENSE
     MENUITEM "&NO WARRANTY",    PM_NO_WARRANTY
     MENUITEM "&About WINE",     PM_ABOUT_WINE
   }
 }
}

/* Dialog `New' */

DIALOG_NEW DIALOG 0, 0, 170, 65
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "New"
{
RADIOBUTTON   "",                 PM_NEW_GROUP,    10, 15,  10, 15
LTEXT         "Program &group",   -1,    20, 18,  80, 15
RADIOBUTTON   "",                 PM_NEW_PROGRAM,  10, 35,  10, 15
LTEXT         "&Program", -1,  20, 38,  80, 15
DEFPUSHBUTTON "OK",          IDOK,           105,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancel",      IDCANCEL,       105, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Help",        PM_HELP,        105, 45,  60, 15, WS_TABSTOP
}

/* Dialog `Move' */

DIALOG_MOVE DIALOG 0, 0, 250, 65
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Move Program"
{
LTEXT         "Move program:",    -1,            5,  5,  90, 15
LTEXT         "",                     PM_PROGRAM,         95,  5,  90, 15
LTEXT         "From group:", -1,            5, 13,  90, 15
LTEXT         "",                     PM_FROM_GROUP,      95, 13,  90, 15
LTEXT         "&To group:",   PM_TO_GROUP_TXT,     5, 28, 140, 15
COMBOBOX                              PM_TO_GROUP,         5, 38, 140, 50, WS_TABSTOP | CBS_DROPDOWNLIST
DEFPUSHBUTTON "OK",              IDOK,              185,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancel",          IDCANCEL,          185, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Help",            PM_HELP,           185, 45,  60, 15, WS_TABSTOP
}

/* Dialog `Copy' */

DIALOG_COPY DIALOG 0, 0, 250, 65
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Copy Program"
{
LTEXT         "Copy program:",    -1,            5,  5,  90, 15
LTEXT         "",                     PM_PROGRAM,         95,  5,  90, 15
LTEXT         "From group:", -1,            5, 13,  90, 15
LTEXT         "",                     PM_FROM_GROUP,      95, 13,  90, 15
LTEXT         "&To group:",   PM_TO_GROUP_TXT,     5, 28, 140, 15
COMBOBOX                              PM_TO_GROUP,         5, 38, 140, 50, WS_TABSTOP | CBS_DROPDOWNLIST
DEFPUSHBUTTON "OK",              IDOK,              185,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancel",          IDCANCEL,          185, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Help",            PM_HELP,           185, 45,  60, 15, WS_TABSTOP
}

/* Dialog `Group attributes' */

DIALOG_GROUP DIALOG 0, 0, 230, 65
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Program Group Attributes"
{
LTEXT     "&Description:", PM_DESCRIPTION_TXT,   05, 18,  50, 10
EDITTEXT                            PM_DESCRIPTION,       60, 18,  90, 15, WS_TABSTOP
LTEXT     "&Group file:",        PM_FILE_TXT,          05, 38,  50, 10
EDITTEXT                            PM_FILE,              60, 38,  90, 15, WS_TABSTOP
DEFPUSHBUTTON "OK",            IDOK,                155,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancel",        IDCANCEL,            155, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Help",          PM_HELP,             155, 45,  60, 15, WS_TABSTOP
}

/* Dialog `Program attributes' */

DIALOG_PROGRAM DIALOG 0, 0, 250, 105
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Program Attributes"
{
LTEXT         "&Description:",  PM_DESCRIPTION_TXT,   05, 10,  60, 10
EDITTEXT                                   PM_DESCRIPTION,       80, 10,  90, 15, WS_TABSTOP
LTEXT         "&Command line:", PM_COMMAND_LINE_TXT,  05, 25,  60, 10
EDITTEXT                                   PM_COMMAND_LINE,      80, 25,  90, 15, WS_TABSTOP
LTEXT         "&Working directory:",    PM_DIRECTORY_TXT,     05, 40,  60, 10
EDITTEXT                                   PM_DIRECTORY,         80, 40,  90, 15, WS_TABSTOP
LTEXT         "&Key combination:",      PM_HOT_KEY_TXT,       05, 55,  60, 10
EDITTEXT                                   PM_HOT_KEY,           80, 55,  90, 15, WS_TABSTOP
ICON          "",                          PM_ICON,              20, 70
CHECKBOX      "",                          PM_SYMBOL,            80, 75,  10, 10, WS_TABSTOP
LTEXT         "&Minimize at launch",       -1,             95, 75,  75, 10
DEFPUSHBUTTON "OK",                   IDOK,                185,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancel",               IDCANCEL,            185, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Browse...",               PM_BROWSE,           185, 45,  60, 15, WS_TABSTOP
PUSHBUTTON    "Change &icon...", PM_OTHER_SYMBOL,     185, 65,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Help",                 PM_HELP,             185, 85,  60, 15, WS_TABSTOP
}

/* Dialog `Symbol' */

DIALOG_SYMBOL DIALOG 0, 0, 200, 85
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Change Icon"
{
LTEXT     "&Filename:",    PM_ICON_FILE_TXT,    5, 15,  40, 10
EDITTEXT                         PM_ICON_FILE,       45, 15,  85, 15, WS_TABSTOP
LTEXT     "Current &icon:", PM_SYMBOL_LIST_TXT,  5, 30, 125, 10
COMBOBOX                         PM_SYMBOL_LIST,      5, 40, 125, 50,
   CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_OWNERDRAWFIXED | WS_TABSTOP
DEFPUSHBUTTON "OK",         IDOK,              135,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancel",     IDCANCEL,          135, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Browse...",    PM_BROWSE,         135, 45,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Help",       PM_HELP,           135, 65,  60, 15, WS_TABSTOP
}

/* Dialog `Execute' */

DIALOG_EXECUTE DIALOG 0, 0, 200, 85
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Execute Program"
{
LTEXT     "&Command line:", -1,   05, 15, 120, 10
EDITTEXT                               PM_COMMAND, 05, 25, 120, 15, WS_TABSTOP
CHECKBOX      "",                      PM_SYMBOL,  05, 45,  10, 10, WS_TABSTOP
LTEXT         "&Minimize at launch",   -1,   20, 45, 120, 10
DEFPUSHBUTTON "OK",               IDOK,      135,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancel",           IDCANCEL,  135, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Browse...",          PM_BROWSE, 135, 45,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Help",             PM_HELP,   135, 65,  60, 15, WS_TABSTOP
}

/* Strings */

STRINGTABLE DISCARDABLE LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
{
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)"
}

STRINGTABLE DISCARDABLE LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
{
IDS_LICENSE_CAPTION,            "LICENSE"
IDS_LICENSE,
"This program 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.\n\
This program 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.\n\
You should have received a copy of the GNU Lesser General Public \
License along with this program; if not, write to the Free Software \
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA"

IDS_WARRANTY_CAPTION, "NO WARRANTY"
IDS_WARRANTY,
"This program 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."
}
