/*
 * Program Manager
 *
 * Copyright 1996 Ulrich Schmid
 */

#include "progman.h"

/* Menu */

MENU_Xx MENU
{
 POPUP MENU_FILE {
   MENUITEM MENU_FILE_NEW,              PM_NEW 
   MENUITEM MENU_FILE_OPEN,             PM_OPEN
   MENUITEM MENU_FILE_MOVE,             PM_MOVE,      GRAYED
   MENUITEM MENU_FILE_COPY,             PM_COPY,      GRAYED
   MENUITEM MENU_FILE_DELETE,           PM_DELETE
   MENUITEM MENU_FILE_ATTRIBUTES,       PM_ATTRIBUTES
   MENUITEM SEPARATOR   
   MENUITEM MENU_FILE_EXECUTE,          PM_EXECUTE
   MENUITEM SEPARATOR   
   MENUITEM MENU_FILE_EXIT,             PM_EXIT
 }
 POPUP MENU_OPTIONS {
   MENUITEM MENU_OPTIONS_AUTO_ARRANGE,  PM_AUTO_ARRANGE
   MENUITEM MENU_OPTIONS_MIN_ON_RUN,    PM_MIN_ON_RUN
   MENUITEM MENU_OPTIONS_SAVE_SETTINGS, PM_SAVE_SETTINGS
 }
 POPUP MENU_WINDOWS {
   MENUITEM MENU_WINDOWS_OVERLAP,       PM_OVERLAP
   MENUITEM MENU_WINDOWS_SIDE_BY_SIDE,  PM_SIDE_BY_SIDE
   MENUITEM MENU_WINDOWS_ARRANGE,       PM_ARRANGE
 }
 POPUP MENU_LANGUAGE {
   MENUITEM "&English",                 PM_En
   MENUITEM "&Deutsch",                 PM_De
 }
 POPUP MENU_HELP {
   MENUITEM MENU_HELP_CONTENTS,         PM_CONTENTS
   MENUITEM MENU_HELP_SEARCH,           PM_SEARCH
   MENUITEM SEPARATOR   
   MENUITEM MENU_HELP_HELP_ON_HELP,     PM_HELPONHELP
   MENUITEM MENU_HELP_TUTORIAL,         PM_TUTORIAL
   MENUITEM SEPARATOR   

   POPUP MENU_INFO {
     MENUITEM MENU_INFO_LICENSE,        PM_LICENSE
     MENUITEM MENU_INFO_NO_WARRANTY,    PM_NO_WARRANTY
     MENUITEM MENU_INFO_ABOUT_WINE,     PM_ABOUT_WINE
   }
 }
}

/* Dialog `New' */

DIALOG_NEW_Xx DIALOG 0, 0, 170, 65
STYLE DS_MODALFRAME
CAPTION DIALOG_NEW_CAPTION
{
RADIOBUTTON   "",                 PM_NEW_GROUP,    10, 15,  10, 15
LTEXT         DIALOG_NEW_GROUP,   PM_NEW_GROUP,    20, 18,  80, 15
RADIOBUTTON   "",                 PM_NEW_PROGRAM,  10, 35,  10, 15
LTEXT         DIALOG_NEW_PROGRAM, PM_NEW_PROGRAM,  20, 38,  80, 15
DEFPUSHBUTTON DIALOG_OK,          IDOK,           105,  5,  60, 15
PUSHBUTTON    DIALOG_CANCEL,      IDCANCEL,       105, 25,  60, 15
PUSHBUTTON    DIALOG_HELP,        PM_HELP,        105, 45,  60, 15
}

/* Dialog `Move' */

DIALOG_MOVE_Xx DIALOG 0, 0, 250, 65
STYLE DS_MODALFRAME
CAPTION DIALOG_MOVE_CAPTION
{
LTEXT         DIALOG_MOVE_PROGRAM,    IDIGNORE,            5,  5,  90, 15
LTEXT         "",                     PM_PROGRAM,         95,  5,  90, 15
LTEXT         DIALOG_MOVE_FROM_GROUP, IDIGNORE,            5, 13,  90, 15
LTEXT         "",                     PM_FROM_GROUP,      95, 13,  90, 15
LTEXT         DIALOG_MOVE_TO_GROUP,   PM_TO_GROUP_TXT,     5, 28, 140, 15
COMBOBOX                              PM_TO_GROUP,         5, 38, 140, 50, CBS_DROPDOWNLIST
DEFPUSHBUTTON DIALOG_OK,              IDOK,              185,  5,  60, 15
PUSHBUTTON    DIALOG_CANCEL,          IDCANCEL,          185, 25,  60, 15
PUSHBUTTON    DIALOG_HELP,            PM_HELP,           185, 45,  60, 15
}

/* Dialog `Copy' */

DIALOG_COPY_Xx DIALOG 0, 0, 250, 65
STYLE DS_MODALFRAME
CAPTION DIALOG_COPY_CAPTION
{
LTEXT         DIALOG_COPY_PROGRAM,    IDIGNORE,            5,  5,  90, 15
LTEXT         "",                     PM_PROGRAM,         95,  5,  90, 15
LTEXT         DIALOG_COPY_FROM_GROUP, IDIGNORE,            5, 13,  90, 15
LTEXT         "",                     PM_FROM_GROUP,      95, 13,  90, 15
LTEXT         DIALOG_COPY_TO_GROUP,   PM_TO_GROUP_TXT,     5, 28, 140, 15
COMBOBOX                              PM_TO_GROUP,         5, 38, 140, 50, CBS_DROPDOWNLIST
DEFPUSHBUTTON DIALOG_OK,              IDOK,              185,  5,  60, 15
PUSHBUTTON    DIALOG_CANCEL,          IDCANCEL,          185, 25,  60, 15
PUSHBUTTON    DIALOG_HELP,            PM_HELP,           185, 45,  60, 15
}

/* Dialog `Group attributes' */

DIALOG_GROUP_Xx DIALOG 0, 0, 230, 65
STYLE DS_MODALFRAME
CAPTION DIALOG_GROUP_CAPTION
{
LTEXT     DIALOG_GROUP_DESCRIPTION, PM_DESCRIPTION_TXT,   05, 18,  50, 10
EDITTEXT                            PM_DESCRIPTION,       60, 18,  90, 15
LTEXT     DIALOG_GROUP_FILE,        PM_FILE_TXT,          05, 38,  50, 10
EDITTEXT                            PM_FILE,              60, 38,  90, 15
DEFPUSHBUTTON DIALOG_OK,            IDOK,                155,  5,  60, 15
PUSHBUTTON    DIALOG_CANCEL,        IDCANCEL,            155, 25,  60, 15
PUSHBUTTON    DIALOG_HELP,          PM_HELP,             155, 45,  60, 15
}

/* Dialog `Program attributes' */

DIALOG_PROGRAM_Xx DIALOG 0, 0, 250, 105
STYLE DS_MODALFRAME
CAPTION DIALOG_PROGRAM_CAPTION
{
LTEXT         DIALOG_PROGRAM_DESCRIPTION,  PM_DESCRIPTION_TXT,   05, 10,  60, 10
EDITTEXT                                   PM_DESCRIPTION,       80, 10,  90, 15
LTEXT         DIALOG_PROGRAM_COMMAND_LINE, PM_COMMAND_LINE_TXT,  05, 25,  60, 10
EDITTEXT                                   PM_COMMAND_LINE,      80, 25,  90, 15
LTEXT         DIALOG_PROGRAM_DIRECTORY,    PM_DIRECTORY_TXT,     05, 40,  60, 10
EDITTEXT                                   PM_DIRECTORY,         80, 40,  90, 15
LTEXT         DIALOG_PROGRAM_HOT_KEY,      PM_HOT_KEY_TXT,       05, 55,  60, 10
EDITTEXT                                   PM_HOT_KEY,           80, 55,  90, 15
ICON          "",                          PM_ICON,              20, 70
CHECKBOX      "",                          PM_SYMBOL,            80, 75,  10, 10
LTEXT         DIALOG_PROGRAM_SYMBOL,       IDIGNORE,             95, 75,  75, 10
DEFPUSHBUTTON DIALOG_OK,                   IDOK,                185,  5,  60, 15
PUSHBUTTON    DIALOG_CANCEL,               IDCANCEL,            185, 25,  60, 15
PUSHBUTTON    DIALOG_BROWSE,               PM_BROWSE,           185, 45,  60, 15
PUSHBUTTON    DIALOG_PROGRAM_OTHER_SYMBOL, PM_OTHER_SYMBOL,     185, 65,  60, 15
PUSHBUTTON    DIALOG_HELP,                 PM_HELP,             185, 85,  60, 15
}

/* Dialog `Symbol' */

DIALOG_SYMBOL_Xx DIALOG 0, 0, 200, 85
STYLE DS_MODALFRAME
CAPTION DIALOG_SYMBOL_CAPTION
{
LTEXT     DIALOG_SYMBOL_FILE,    PM_ICON_FILE_TXT,    5, 15,  40, 10
EDITTEXT                         PM_ICON_FILE,       45, 15,  85, 15
LTEXT     DIALOG_SYMBOL_CURRENT, PM_SYMBOL_LIST_TXT,  5, 30, 125, 10
COMBOBOX                         PM_SYMBOL_LIST,      5, 40, 125, 50,
   CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_OWNERDRAWFIXED
DEFPUSHBUTTON DIALOG_OK,         IDOK,              135,  5,  60, 15
PUSHBUTTON    DIALOG_CANCEL,     IDCANCEL,          135, 25,  60, 15
PUSHBUTTON    DIALOG_BROWSE ,    PM_BROWSE,         135, 45,  60, 15
PUSHBUTTON    DIALOG_HELP,       PM_HELP,           135, 65,  60, 15
}

/* Dialog `Execute' */

DIALOG_EXECUTE_Xx DIALOG 0, 0, 200, 85
STYLE DS_MODALFRAME
CAPTION DIALOG_EXECUTE_CAPTION
{
LTEXT     DIALOG_EXECUTE_COMMAND_LINE, IDIGNORE,   05, 15, 120, 10
EDITTEXT                               PM_COMMAND, 05, 25, 120, 15
CHECKBOX      "",                      PM_SYMBOL,  05, 45,  10, 10
LTEXT         DIALOG_EXECUTE_SYMBOL,   IDIGNORE,   20, 45, 120, 10
DEFPUSHBUTTON DIALOG_OK,               IDOK,      135,  5,  60, 15
PUSHBUTTON    DIALOG_CANCEL,           IDCANCEL,  135, 25,  60, 15
PUSHBUTTON    DIALOG_BROWSE ,          PM_BROWSE, 135, 45,  60, 15
PUSHBUTTON    DIALOG_HELP,             PM_HELP,   135, 65,  60, 15
}
