/*
 * Help Viewer
 *
 * Copyright 1996 Ulrich Schmid
 * Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
 *
 * 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"

/* UTF-8 */
#pragma code_page(65001)

LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL

/* Menu */

MAIN_MENU MENU
{
 POPUP "&File" {
  MENUITEM "&Apri...", MNID_FILE_OPEN
  MENUITEM SEPARATOR
  MENUITEM "S&tampa", MNID_FILE_PRINT
  MENUITEM "&Installazione stampante...", MNID_FILE_SETUP
   MENUITEM SEPARATOR
  MENUITEM "&Esci", MNID_FILE_EXIT
 }
 POPUP "&Modifica" {
   MENUITEM "&Copia...", MNID_EDIT_COPYDLG
   MENUITEM SEPARATOR
   MENUITEM "&Annota...", MNID_EDIT_ANNOTATE
 }
 POPUP "&Segnalibro" {
   MENUITEM "&Definisci...", MNID_BKMK_DEFINE
 }
 POPUP "&Opzioni" {
   POPUP	"Aiuto sempre visibile"
   BEGIN
     MENUITEM "Predefinito",	MNID_OPTS_HELP_DEFAULT
     MENUITEM "Visibile",	MNID_OPTS_HELP_VISIBLE
     MENUITEM "Non visibile",	MNID_OPTS_HELP_NONVISIBLE
  END
  MENUITEM "Cronologia",		MNID_OPTS_HISTORY
  POPUP    "Caratteri"
  BEGIN
    MENUITEM "Piccoli",		MNID_OPTS_FONTS_SMALL
    MENUITEM "Normali",    	MNID_OPTS_FONTS_NORMAL
    MENUITEM "Grandi",     	MNID_OPTS_FONTS_LARGE
  END
  MENUITEM "Usa i colori di sistema",	MNID_OPTS_SYSTEM_COLORS
 }
 POPUP "&Aiuto" {
   MENUITEM "&Aiuto sulla guida", MNID_HELP_HELPON
   MENUITEM "Sempre in primo &piano", MNID_HELP_HELPTOP
   MENUITEM SEPARATOR
   MENUITEM "&Informazioni su...", MNID_HELP_ABOUT
 }
}

IDD_INDEX DIALOG 0, 0, 200, 190
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Indice"
{
    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 "Cerca"
{
    LTEXT  "Non implementato.", -1, 10, 10, 180, 150
}

/* Strings */
STRINGTABLE
{
STID_WINE_HELP, 	"Guida di Wine"
STID_WHERROR, 		"ERRORE"
STID_WARNING,  		"ATTENZIONE"
STID_INFO,  		"Informazione"
STID_NOT_IMPLEMENTED, 	"Non ancora implementato"
STID_HLPFILE_ERROR_s, 	"Errore di lettura del file della Guida `%s'"
STID_INDEX, 		"Indice"
STID_CONTENTS,		"&Sommario"
STID_BACK, 		"&Precedente"
STID_ALL_FILES, 	"Tutti i file (*.*)"
STID_HELP_FILES_HLP, 	"File della guida (*.hlp)"
STID_FILE_NOT_FOUND_s	"Non è stato possibile trovare '%s'. Vuoi cercare questo file?"
STID_NO_RICHEDIT	"Non è stato possibile trovare un'implementazione richedit... Annullando"
STID_PSH_INDEX,		"Argomenti di aiuto: "
}

CONTEXT_MENU MENU
BEGIN
    POPUP ""
    BEGIN
        MENUITEM "Annotazione...",       MNID_CTXT_ANNOTATE
        MENUITEM "Copia",                MNID_CTXT_COPY
        MENUITEM "Stampa...",            MNID_CTXT_PRINT
        POPUP    "Caratteri"
        BEGIN
            MENUITEM "Piccoli",       MNID_CTXT_FONTS_SMALL
            MENUITEM "Normali",      MNID_CTXT_FONTS_NORMAL
            MENUITEM "Grandi",       MNID_CTXT_FONTS_LARGE
        END
        POPUP   "Aiuto sempre visibile"
        BEGIN
            MENUITEM "Predefinito",     MNID_CTXT_HELP_DEFAULT
            MENUITEM "Visibile",     MNID_CTXT_HELP_VISIBLE
            MENUITEM "Non visibile", MNID_CTXT_HELP_NONVISIBLE
        END
        MENUITEM "Usa i colori di sistema",   MNID_CTXT_SYSTEM_COLORS
    END
END
