/*
 * Program Manager
 *
 * Copyright 1996 Ulrich Schmid
 * Copyright 2002 Sylvain Petreolle
 * Copyright 2003 Ivan Leo Puoti
 * Copyright 2010 Luca Bennati
 *
 * 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 "progman.h"

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

/* Menu */

MAIN_MENU MENU LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
{
 POPUP "&File" {
   MENUITEM "&Nuovo...",              PM_NEW
   MENUITEM "&Apri\tInvio",             PM_OPEN
   MENUITEM "&Sposta...\tF7",             PM_MOVE,      GRAYED
   MENUITEM "&Copia...\tF8",             PM_COPY,      GRAYED
   MENUITEM "&Elimina\tEntf",           PM_DELETE
   MENUITEM "&Proprietà...\tAlt+Invio",       PM_ATTRIBUTES
   MENUITEM SEPARATOR
   MENUITEM "&Esegui...",          PM_EXECUTE
   MENUITEM SEPARATOR
   MENUITEM "&Esci",             PM_EXIT
 }
 POPUP "&Opzioni" {
   MENUITEM "&Disposizione automatica",  PM_AUTO_ARRANGE
   MENUITEM "&Riduci a icona in esecuzione",    PM_MIN_ON_RUN
   MENUITEM "&Salva impostazioni in uscita", PM_SAVE_SETTINGS
 }
 POPUP "&F&inestra" {
   MENUITEM "&Sovrapponi\tShift+F5",       PM_OVERLAP
   MENUITEM "&A&ffianca\tShift+F4",  PM_SIDE_BY_SIDE
   MENUITEM "&Disponi icone",       PM_ARRANGE
 }
 
POPUP "&Aiuto" {
   MENUITEM "&Sommario",         PM_CONTENTS
   MENUITEM "&Ricerca...",           PM_SEARCH
   MENUITEM SEPARATOR
   MENUITEM "&Aiuto sulla Guida",     PM_HELPONHELP
   MENUITEM "&Tutorial",         PM_TUTORIAL
   MENUITEM SEPARATOR

   POPUP "&Informazioni sul Gestore Del Programma" {
     MENUITEM "&Licenza",        PM_LICENSE
     MENUITEM "&Garanzia",    PM_NO_WARRANTY
     MENUITEM "&Informazioni su WINE",     PM_ABOUT_WINE
   }
 }
}

/* Dialog `New' */

DIALOG_NEW DIALOG 0, 0, 170, 65
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Nuovo"
{
RADIOBUTTON   "",                 PM_NEW_GROUP,    10, 15,  10, 15
LTEXT         "&Gruppo di programmi",   -1,    20, 18,  80, 15
RADIOBUTTON   "",                 PM_NEW_PROGRAM,  10, 35,  10, 15
LTEXT         "&Programma", -1,  20, 38,  80, 15
DEFPUSHBUTTON "OK",          IDOK,           105,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Annulla",      IDCANCEL,       105, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Aiuto",        PM_HELP,        105, 45,  60, 15, WS_TABSTOP
}

/* Dialog `Move' */

DIALOG_MOVE DIALOG 0, 0, 250, 65
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Sposta Programma"
{
LTEXT         "Sposta programma:",    -1,            5,  5,  90, 15
LTEXT         "",                     PM_PROGRAM,         95,  5,  90, 15
LTEXT         "Dal gruppo:", -1,            5, 13,  90, 15
LTEXT         "",                     PM_FROM_GROUP,      95, 13,  90, 15
LTEXT         "&Al gruppo:",   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    "Annulla",          IDCANCEL,          185, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Aiuto",            PM_HELP,           185, 45,  60, 15, WS_TABSTOP
}

/* Dialog `Copy' */

DIALOG_COPY DIALOG 0, 0, 250, 65
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Copy Program"
{
LTEXT         "Copia programma:",    -1,            5,  5,  90, 15
LTEXT         "",                     PM_PROGRAM,         95,  5,  90, 15
LTEXT         "Dal gruppo:", -1,            5, 13,  90, 15
LTEXT         "",                     PM_FROM_GROUP,      95, 13,  90, 15
LTEXT         "&Al gruppo:",   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    "Annulla",          IDCANCEL,          185, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Aiuto",            PM_HELP,           185, 45,  60, 15, WS_TABSTOP
}

/* Dialog `Group attributes' */

DIALOG_GROUP DIALOG 0, 0, 230, 65
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Proprietà del gruppo di Programmi"
{
LTEXT     "&Descrizione:", PM_DESCRIPTION_TXT,   05, 18,  50, 10
EDITTEXT                            PM_DESCRIPTION,       60, 18,  90, 15, WS_TABSTOP
LTEXT     "&File di gruppo:",        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    "Annulla",        IDCANCEL,            155, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Aiuto",          PM_HELP,             155, 45,  60, 15, WS_TABSTOP
}

/* Dialog `Program attributes' */

DIALOG_PROGRAM DIALOG 0, 0, 250, 105
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Proprietà del programma"
{
LTEXT         "&Descrizione:",  PM_DESCRIPTION_TXT,   05, 10,  60, 10
EDITTEXT                                   PM_DESCRIPTION,       80, 10,  90, 15, WS_TABSTOP
LTEXT         "&Linea di comando:", PM_COMMAND_LINE_TXT,  05, 25,  60, 10
EDITTEXT                                   PM_COMMAND_LINE,      80, 25,  90, 15, WS_TABSTOP
LTEXT         "&Directory di &lavoro:",    PM_DIRECTORY_TXT,     05, 40,  60, 10
EDITTEXT                                   PM_DIRECTORY,         80, 40,  90, 15, WS_TABSTOP
LTEXT         "&Tasto di scelta rapida:",      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         "&Avvia ridotto a icona",       -1,             95, 75,  75, 10
DEFPUSHBUTTON "OK",                   IDOK,                185,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Annulla",               IDCANCEL,            185, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Trova...",               PM_BROWSE,           185, 45,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Cambia icona...", PM_OTHER_SYMBOL,     185, 65,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Aiuto",                 PM_HELP,             185, 85,  60, 15, WS_TABSTOP
}

/* Dialog `Symbol' */

DIALOG_SYMBOL DIALOG 0, 0, 200, 85
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Cambia icona"
{
LTEXT     "&Nome del file:",    PM_ICON_FILE_TXT,    5, 15,  40, 10
EDITTEXT                         PM_ICON_FILE,       45, 15,  85, 15, WS_TABSTOP
LTEXT     "I&cona corrente:", 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    "Annulla",     IDCANCEL,          135, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Cerca...",    PM_BROWSE,         135, 45,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Aiuto",       PM_HELP,           135, 65,  60, 15, WS_TABSTOP
}

/* Dialog `Execute' */

DIALOG_EXECUTE DIALOG 0, 0, 200, 85
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Esegui programma"
{
LTEXT     "&Linea di comando:", -1,   05, 15, 120, 10
EDITTEXT                               PM_COMMAND, 05, 25, 120, 15, WS_TABSTOP
CHECKBOX      "",                      PM_SYMBOL,  05, 45,  10, 10, WS_TABSTOP
LTEXT         "&Avvia ridotto a icona",   -1,   20, 45, 120, 10
DEFPUSHBUTTON "OK",               IDOK,      135,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Annulla",           IDCANCEL,  135, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Cerca...",          PM_BROWSE, 135, 45,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Aiuto",             PM_HELP,   135, 65,  60, 15, WS_TABSTOP
}

/* Strings */

STRINGTABLE DISCARDABLE LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
{
IDS_PROGRAM_MANAGER,		"Gestore Programma"
IDS_ERROR,			"ERRORE"
IDS_WARNING,			"ATTENZIONE"
IDS_INFO,			"Informazioni"
IDS_DELETE,			"Elimina"
IDS_DELETE_GROUP_s,		"Eliminare il gruppo `%s' ?"
IDS_DELETE_PROGRAM_s,		"Eliminare `%s' ?"
IDS_NOT_IMPLEMENTED,		"Non implementato"
IDS_FILE_READ_ERROR_s,		"Errore di lettura `%s'."
IDS_FILE_WRITE_ERROR_s,		"Errore di scrittura `%s'."
IDS_GRPFILE_READ_ERROR_s,	"\
Il file di gruppo `%s' non può essere aperto.\n\
Provare ad aprirlo in futuro?"
IDS_OUT_OF_MEMORY,		"Memoria esaurita"
IDS_WINHELP_ERROR,		"Guida non disponibile"
IDS_UNKNOWN_FEATURE_s,		"Funzione sconosciuta nel file %s"
IDS_FILE_NOT_OVERWRITTEN_s,	"Il file `%s' esiste. Non sovrascritto."
IDS_SAVE_GROUP_AS_s,		"Salvare il gruppo come `%s' per non sovrascrivere i file originali"
IDS_NO_HOT_KEY,			"Nessuno"
IDS_ALL_FILES,			"Tutti i file (*.*)"
IDS_PROGRAMS,			"Programmi"
IDS_LIBRARIES_DLL,		"Librerie (*.dll)"
IDS_SYMBOL_FILES,		"File icona"
IDS_SYMBOLS_ICO,		"Icone (*.ico)"
}

STRINGTABLE DISCARDABLE LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
{
IDS_LICENSE_CAPTION,            "LICENZA"
IDS_LICENSE,
"Questo programma è software libero; puoi redistribuirlo e/o \
modificarlo sotto i termini della GNU Lesser General Public \
License come pubblicata dalla Free Software Foundation; sia la \
versione 2.1 della LGPL, che (a tua scelta) una versione più nuova.\n\
Questo programma è distribuito nella speranza che sarà utile, \
ma SENZA ALCUNA GARANZIA; pure senza la garanzia implicita di \
COMMERCIABILTÀ o ADEGUATEZZA PER UN PARTICOLARE SCOPO. Leggere la GNU \
Lesser General Public License per più informazioni.\n\
Dovresti aver ricevuto una copia della GNU Lesser General Public \
License insieme a questo programma; sennò, scrivi alla Free Software \
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA"

IDS_WARRANTY_CAPTION, "NESSUNA GARANZIA"
IDS_WARRANTY,
"Questo programma è distribuito nella speranza che sarà utile, \
ma SENZA ALCUNA GARANZIA; pure senza la garanzia implicita di \
COMMERCIABILTÀ o ADEGUATEZZA PER UN PARTICOLARE SCOPO. Leggere la GNU \
Lesser General Public License per più informazioni."
}
