/*
 * Help Viewer
 *
 * Copyright 1997 Henrik Olsen
 * Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
 * Copyright 2008 Jens Albretsen<jens@albretsen.dk>
 *           2010 Thomas Larsen
 *
 * 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 "winhelp_res.h"

#pragma code_page(65001)

LANGUAGE LANG_DANISH, SUBLANG_DEFAULT

/* Menu */

MAIN_MENU MENU
{
 POPUP "&Filer" {
  MENUITEM "Å&ben...", MNID_FILE_OPEN
  MENUITEM SEPARATOR
  MENUITEM "&Udskriv emne", MNID_FILE_PRINT
  MENUITEM "&Indstil printer", MNID_FILE_SETUP
   MENUITEM SEPARATOR
  MENUITEM "&Afslut", MNID_FILE_EXIT
 }
 POPUP "&Rediger" {
   MENUITEM "K&opier...", MNID_EDIT_COPYDLG
   MENUITEM SEPARATOR
   MENUITEM "&Anmærk...", MNID_EDIT_ANNOTATE
 }
 POPUP "Bog&mærke" {
   MENUITEM "&Definer...", MNID_BKMK_DEFINE
 }
 POPUP "&Options" {
   POPUP	"Help always visible"
   BEGIN
     MENUITEM "Default",	MNID_OPTS_HELP_DEFAULT
     MENUITEM "Visible",	MNID_OPTS_HELP_VISIBLE
     MENUITEM "Non visible",	MNID_OPTS_HELP_NONVISIBLE
  END
  MENUITEM "History",		MNID_OPTS_HISTORY
  POPUP    "Fonts"
  BEGIN
    MENUITEM "Small",		MNID_OPTS_FONTS_SMALL
    MENUITEM "Normal",    	MNID_OPTS_FONTS_NORMAL
    MENUITEM "Large",     	MNID_OPTS_FONTS_LARGE
  END
  MENUITEM "Use system colors",	MNID_OPTS_SYSTEM_COLORS
 }
 POPUP "&Hjælp" {
   MENUITEM "&Brug af Hjælp", MNID_HELP_HELPON
   MENUITEM "Altid &øverst", MNID_HELP_HELPTOP
   MENUITEM SEPARATOR
   MENUITEM "&Information...", MNID_HELP_ABOUT
 }
}

IDD_INDEX DIALOG 0, 0, 200, 190
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Index"
{
    LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER
}

IDD_SEARCH DIALOG 0, 0, 200, 190
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Søg"
{
    LTEXT  "Er ikke blevet implementeret endnu", -1, 10, 10, 180, 150
}

/* Strings */
STRINGTABLE
{
STID_WINE_HELP, 	"Wine Hjælp"
STID_WHERROR, 		"FEJL"
STID_WARNING,  		"ADVARSEL"
STID_INFO,  		"Information"
STID_NOT_IMPLEMENTED, 	"Ikke implementeret"
STID_HLPFILE_ERROR_s, 	"Fejl ved indlæsning af filen `%s'"
STID_INDEX, 		"&Indhold"
STID_CONTENTS,		"Summary"
STID_BACK, 		"&Tilbage"
STID_ALL_FILES, 	"Alle filer (*.*)"
STID_HELP_FILES_HLP, 	"Hjælpe filer (*.hlp)"
STID_FILE_NOT_FOUND_s	"Kan ikke finde '%s'. Vil du selv finde filen?"
STID_NO_RICHEDIT	"Kan ikke finde en 'richedit' implementering... Afbryder"
}

CONTEXT_MENU MENU
BEGIN
        POPUP ""
        BEGIN
                MENUITEM "Notat...",           MNID_CTXT_ANNOTATE
                MENUITEM "Kopier",             MNID_CTXT_COPY
                MENUITEM "Udskriv...",         MNID_CTXT_PRINT
                POPUP    "Skrifttype"
                BEGIN
                        MENUITEM "Lille",      MNID_CTXT_FONTS_SMALL
                        MENUITEM "Normal",     MNID_CTXT_FONTS_NORMAL
                        MENUITEM "Stor",       MNID_CTXT_FONTS_LARGE
                END
                POPUP   "Bevar Hjælp øverst"
                BEGIN
                        MENUITEM "Standard",   MNID_CTXT_HELP_DEFAULT
                        MENUITEM "Synlig",     MNID_CTXT_HELP_VISIBLE
                        MENUITEM "Usynlig",    MNID_CTXT_HELP_NONVISIBLE
                END
                MENUITEM "Benyt systemfarver", MNID_CTXT_SYSTEM_COLORS
        END
END
