/*
 *  Notepad (notepad.rc)
 *
 *  Copyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>
 *  To be distributed under the Wine License
 */

#include "windows.h"
#include "main.h"
 
#define CONCAT(a, b) CONCAT1(a, b)
#define CONCAT1(a, b) a##b

/* Main Menu */

CONCAT(MENU_, LANGUAGE_ID) MENU
{
 POPUP MENU_FILE {
   MENUITEM MENU_FILE_NEW,              NP_FILE_NEW 
   MENUITEM MENU_FILE_OPEN,             NP_FILE_OPEN
   MENUITEM MENU_FILE_SAVE,             NP_FILE_SAVE
   MENUITEM MENU_FILE_SAVEAS,           NP_FILE_SAVEAS
   MENUITEM MENU_FILE_PRINT,            NP_FILE_PRINT
   MENUITEM MENU_FILE_PAGESETUP,        NP_FILE_PAGESETUP
   MENUITEM MENU_FILE_PRINTSETUP,       NP_FILE_PRINTSETUP
   MENUITEM SEPARATOR   
   MENUITEM MENU_FILE_EXIT,             NP_FILE_EXIT
 }
 POPUP MENU_EDIT {
   MENUITEM MENU_EDIT_UNDO,             NP_EDIT_UNDO
   MENUITEM SEPARATOR
   MENUITEM MENU_EDIT_CUT,              NP_EDIT_CUT,     GRAYED
   MENUITEM MENU_EDIT_COPY,             NP_EDIT_COPY,    GRAYED
   MENUITEM MENU_EDIT_PASTE,            NP_EDIT_PASTE,   GRAYED
   MENUITEM MENU_EDIT_DELETE,           NP_EDIT_DELETE,  GRAYED
   MENUITEM SEPARATOR
   MENUITEM MENU_EDIT_SELECTALL,        NP_EDIT_SELECTALL
   MENUITEM MENU_EDIT_TIMEDATE,         NP_EDIT_TIMEDATE
   MENUITEM SEPARATOR
   MENUITEM MENU_EDIT_WRAP,             NP_EDIT_WRAP
 }
 POPUP MENU_SEARCH {
   MENUITEM MENU_SEARCH_SEARCH,         NP_SEARCH_SEARCH
   MENUITEM MENU_SEARCH_NEXT,           NP_SEARCH_NEXT
 }
 POPUP MENU_LANGUAGE {
   /* Dummy item, will be removed */
   MENUITEM SEPARATOR
 }
 POPUP MENU_HELP {
   MENUITEM MENU_HELP_CONTENTS,         NP_HELP_CONTENTS
   MENUITEM MENU_HELP_SEARCH,           NP_HELP_SEARCH
   MENUITEM MENU_HELP_HELP_ON_HELP,     NP_HELP_ON_HELP
   MENUITEM SEPARATOR

    POPUP MENU_INFO {
      MENUITEM MENU_INFO_LICENSE,          NP_HELP_LICENSE
      MENUITEM MENU_INFO_NO_WARRANTY,      NP_HELP_NO_WARRANTY
      MENUITEM MENU_INFO_ABOUT_WINE,       NP_HELP_ABOUT_WINE
    }
 }
 
}

/* Dialog `Page setup' */

CONCAT(DIALOG_PAGESETUP_, LANGUAGE_ID) DIALOG 0, 0, 225, 95
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "Helv"
CAPTION DIALOG_PAGESETUP_CAPTION
{
LTEXT    DIALOG_PAGESETUP_HEAD,  NP_PAGESETUP_HEAD_TXT,   10, 07, 40, 15
EDITTEXT                         NP_PAGESETUP_HEAD,       60, 05,110, 12, WS_BORDER | WS_TABSTOP
LTEXT    DIALOG_PAGESETUP_TAIL,  NP_PAGESETUP_TAIL_TXT,   10, 24, 40, 15
EDITTEXT                         NP_PAGESETUP_TAIL,       60, 22,110, 12, WS_BORDER | WS_TABSTOP

GROUPBOX DIALOG_PAGESETUP_MARGIN,NP_PAGESETUP_MARGIN,     10, 43,160, 45
LTEXT    DIALOG_PAGESETUP_LEFT,  NP_PAGESETUP_LEFT_TXT,   20, 55, 30, 10, WS_CHILD
EDITTEXT                         NP_PAGESETUP_LEFT,       50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    DIALOG_PAGESETUP_TOP,   NP_PAGESETUP_TOP_TXT,    20, 73, 30, 10, WS_CHILD
EDITTEXT                         NP_PAGESETUP_TOP,        50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    DIALOG_PAGESETUP_RIGHT, NP_PAGESETUP_RIGHT_TXT, 100, 55, 30, 10, WS_CHILD
EDITTEXT                         NP_PAGESETUP_RIGHT,     130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    DIALOG_PAGESETUP_BOTTOM,NP_PAGESETUP_BOTTOM_TXT,100, 73, 30, 10, WS_CHILD
EDITTEXT                         NP_PAGESETUP_BOTTOM,    130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP

DEFPUSHBUTTON DIALOG_OK,         IDOK,                   180,  3, 40, 15, WS_TABSTOP
PUSHBUTTON    DIALOG_CANCEL,     IDCANCEL,               180, 21, 40, 15, WS_TABSTOP
PUSHBUTTON    DIALOG_HELP,       NP_HELP,                180, 39, 40, 15, WS_TABSTOP
}


/* Strings */

#define ADDSTRING(str) ADDSTRING1(LANGUAGE_NUMBER, IDS_ ## str) STRING_ ## str
#define ADDSTRING1(langnum, ids) ADDSTRING2(langnum, ids)
#define ADDSTRING2(langnum, ids) 0x ## langnum ## ids

#define STRINGIFY(str) STRINGIFY1(str)
#define STRINGIFY1(str) #str

#define STRING_LANGUAGE_ID        STRINGIFY(LANGUAGE_ID)
#define STRING_LANGUAGE_MENU_ITEM LANGUAGE_MENU_ITEM

STRINGTABLE
{
ADDSTRING(LANGUAGE_ID)
ADDSTRING(LANGUAGE_MENU_ITEM)
ADDSTRING(NOTEPAD)
ADDSTRING(TEXT_FILES_TXT)
ADDSTRING(ALL_FILES)
ADDSTRING(ERROR)
ADDSTRING(WARNING)
ADDSTRING(INFO)
ADDSTRING(TOOLARGE)
ADDSTRING(NOTEXT)
ADDSTRING(NOTFOUND)
ADDSTRING(OUT_OF_MEMORY)
ADDSTRING(UNTITLED)
ADDSTRING(PAGESETUP_HEADERVALUE)
ADDSTRING(PAGESETUP_FOOTERVALUE)
ADDSTRING(PAGESETUP_LEFTVALUE)
ADDSTRING(PAGESETUP_RIGHTVALUE)
ADDSTRING(PAGESETUP_TOPVALUE)
ADDSTRING(PAGESETUP_BOTTOMVALUE)
}
