/*
 * Program Manager
 *
 * Copyright 2009 Aurimas Fišeras <aurimas@gmail.com>
 *
 * 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"

/* Menu */

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

LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL

MAIN_MENU MENU
{
 POPUP "&Failas" {
   MENUITEM "&Nauja...",                     PM_NEW
   MENUITEM "&Atverti\tEnter",               PM_OPEN
   MENUITEM "&Perkelti...\tF7",              PM_MOVE,      GRAYED
   MENUITEM "&Kopijuoti...\tF8",             PM_COPY,      GRAYED
   MENUITEM "&Šalinti\tEntf",                PM_DELETE
   MENUITEM "At&ributai...\tAlt+Enter",      PM_ATTRIBUTES
   MENUITEM SEPARATOR
   MENUITEM "&Vykdyti...",                   PM_EXECUTE
   MENUITEM SEPARATOR
   MENUITEM "Iš&eiti...",                    PM_EXIT
 }
 POPUP "&Parinktys" {
   MENUITEM "Išdėstyti &automatiškai",       PM_AUTO_ARRANGE
   MENUITEM "&Suskleisti paleidžiant",       PM_MIN_ON_RUN
   MENUITEM "Išsaugoti &nuostatas išeinant", PM_SAVE_SETTINGS
 }
 POPUP "&Langai" {
   MENUITEM "&Persikloję\tShift+F5",         PM_OVERLAP
   MENUITEM "&Greta vienas kito\tShift+F4",  PM_SIDE_BY_SIDE
   MENUITEM "&Išdėstyti piktogramas",        PM_ARRANGE
 }
 POPUP "&Žinynas" {
   MENUITEM "&Turinys",                      PM_CONTENTS
   MENUITEM "&Paieška...",                   PM_SEARCH
   MENUITEM SEPARATOR
   MENUITEM "Pa&galba apie žinyną",          PM_HELPONHELP
   MENUITEM "&Mokymo programa",              PM_TUTORIAL
   MENUITEM SEPARATOR

   POPUP "&Informacija..." {
     MENUITEM "&Licencija",                  PM_LICENSE
     MENUITEM "&JOKIŲ GARANTIJŲ",            PM_NO_WARRANTY
     MENUITEM "&Apie Wine",                  PM_ABOUT_WINE
   }
 }
}

/* Dialog `New' */

DIALOG_NEW DIALOG 0, 0, 170, 65
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Nauja"
{
RADIOBUTTON   "",                 PM_NEW_GROUP,    10, 15,  10, 15
LTEXT         "Programų &grupė",   -1,    20, 18,  80, 15
RADIOBUTTON   "",                 PM_NEW_PROGRAM,  10, 35,  10, 15
LTEXT         "&Programa", -1,  20, 38,  80, 15
DEFPUSHBUTTON "Gerai",          IDOK,           105,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Atsisakyti",      IDCANCEL,       105, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Žinynas",        PM_HELP,        105, 45,  60, 15, WS_TABSTOP
}

/* Dialog `Move' */

DIALOG_MOVE DIALOG 0, 0, 250, 65
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Perkelti programą"
{
LTEXT         "Perkelti programą:",    -1,            5,  5,  90, 15
LTEXT         "",                     PM_PROGRAM,         95,  5,  90, 15
LTEXT         "Iš grupės:", -1,            5, 13,  90, 15
LTEXT         "",                     PM_FROM_GROUP,      95, 13,  90, 15
LTEXT         "&Į grupę:",   PM_TO_GROUP_TXT,     5, 28, 140, 15
COMBOBOX                              PM_TO_GROUP,         5, 38, 140, 50, WS_TABSTOP | CBS_DROPDOWNLIST
DEFPUSHBUTTON "Gerai",              IDOK,              185,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Atsisakyti",          IDCANCEL,          185, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Žinynas",            PM_HELP,           185, 45,  60, 15, WS_TABSTOP
}

/* Dialog `Copy' */

DIALOG_COPY DIALOG 0, 0, 250, 65
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Kopijuoti programą"
{
LTEXT         "Kopijuoti programą:",    -1,            5,  5,  90, 15
LTEXT         "",                     PM_PROGRAM,         95,  5,  90, 15
LTEXT         "Iš grupės:", -1,            5, 13,  90, 15
LTEXT         "",                     PM_FROM_GROUP,      95, 13,  90, 15
LTEXT         "&Į grupę:",   PM_TO_GROUP_TXT,     5, 28, 140, 15
COMBOBOX                              PM_TO_GROUP,         5, 38, 140, 50, WS_TABSTOP | CBS_DROPDOWNLIST
DEFPUSHBUTTON "Gerai",              IDOK,              185,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Atsisakyti",          IDCANCEL,          185, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Žinynas",            PM_HELP,           185, 45,  60, 15, WS_TABSTOP
}

/* Dialog `Group attributes' */

DIALOG_GROUP DIALOG 0, 0, 230, 65
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Programų grupės atributai"
{
LTEXT     "&Aprašas:", PM_DESCRIPTION_TXT,   05, 18,  50, 10
EDITTEXT                            PM_DESCRIPTION,       60, 18,  90, 15, WS_TABSTOP
LTEXT     "&Grupės failas:",        PM_FILE_TXT,          05, 38,  50, 10
EDITTEXT                            PM_FILE,              60, 38,  90, 15, WS_TABSTOP
DEFPUSHBUTTON "Gerai",            IDOK,                155,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Atsisakyti",        IDCANCEL,            155, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Žinynas",          PM_HELP,             155, 45,  60, 15, WS_TABSTOP
}

/* Dialog `Program attributes' */

DIALOG_PROGRAM DIALOG 0, 0, 250, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Programos atributai"
{
LTEXT         "&Aprašas:",  PM_DESCRIPTION_TXT,   05, 10,  80, 10
EDITTEXT                                   PM_DESCRIPTION,       90, 10,  80, 15, WS_TABSTOP
LTEXT         "Komandos &eilutė:", PM_COMMAND_LINE_TXT,  05, 25,  80, 10
EDITTEXT                                   PM_COMMAND_LINE,      90, 25,  80, 15, WS_TABSTOP
LTEXT         "&Veikiamasis katalogas:",    PM_DIRECTORY_TXT,     05, 40,  80, 10
EDITTEXT                                   PM_DIRECTORY,         90, 40,  80, 15, WS_TABSTOP
LTEXT         "&Klavišų kombinacija:",      PM_HOT_KEY_TXT,       05, 55,  80, 10
EDITTEXT                                   PM_HOT_KEY,           90, 55,  80, 15, WS_TABSTOP
ICON          "",                          PM_ICON,              20, 70
CHECKBOX      "",                          PM_SYMBOL,            90, 75,  10, 10, WS_TABSTOP
LTEXT         "&Suskleisti paleidus",       -1,             105, 75,  75, 10
DEFPUSHBUTTON "Gerai",                   IDOK,                175,  5,  70, 15, WS_TABSTOP
PUSHBUTTON    "Atsisakyti",               IDCANCEL,            175, 25,  70, 15, WS_TABSTOP
PUSHBUTTON    "Pari&nkti...",               PM_BROWSE,           175, 45,  70, 15, WS_TABSTOP
PUSHBUTTON    "Keisti &piktogramą...", PM_OTHER_SYMBOL,     175, 65,  70, 15, WS_TABSTOP
PUSHBUTTON    "&Žinynas",                 PM_HELP,             175, 85,  70, 15, WS_TABSTOP
}

/* Dialog `Symbol' */

DIALOG_SYMBOL DIALOG 0, 0, 200, 85
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Keisti piktogramą"
{
LTEXT     "&Failas:",    PM_ICON_FILE_TXT,    5, 15,  40, 10
EDITTEXT                         PM_ICON_FILE,       45, 15,  85, 15, WS_TABSTOP
LTEXT     "Dabartinė &piktograma:", 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 "Gerai",         IDOK,              135,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Atsisakyti",     IDCANCEL,          135, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "Pari&nkti...",    PM_BROWSE,         135, 45,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Žinynas",       PM_HELP,           135, 65,  60, 15, WS_TABSTOP
}

/* Dialog `Execute' */

DIALOG_EXECUTE DIALOG 0, 0, 200, 85
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Vykdyti programą"
{
LTEXT     "&Komandos eilutė:", -1,   05, 15, 120, 10
EDITTEXT                               PM_COMMAND, 05, 25, 120, 15, WS_TABSTOP
CHECKBOX      "",                      PM_SYMBOL,  05, 45,  10, 10, WS_TABSTOP
LTEXT         "&Suskleisti paleidus",   -1,   20, 45, 120, 10
DEFPUSHBUTTON "Gerai",               IDOK,      135,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Atsisakyti",           IDCANCEL,  135, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "Pari&nkti...",          PM_BROWSE, 135, 45,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Žinynas",             PM_HELP,   135, 65,  60, 15, WS_TABSTOP
}

/* Strings */

STRINGTABLE DISCARDABLE
{
IDS_PROGRAM_MANAGER,        "Programų tvarkytuvė"
IDS_ERROR,                  "KLAIDA"
IDS_WARNING,                "ĮSPĖJIMAS"
IDS_INFO,                   "Informacija"
IDS_DELETE,                 "Šalinti"
IDS_DELETE_GROUP_s,         "Šalinti grupę „%s“?"
IDS_DELETE_PROGRAM_s,       "Šalinti programą „%s“?"
IDS_NOT_IMPLEMENTED,        "Nerealizuota"
IDS_FILE_READ_ERROR_s,      "Klaida skaitant „%s“."
IDS_FILE_WRITE_ERROR_s,     "Klaida rašant „%s“."
IDS_GRPFILE_READ_ERROR_s,   "Nepavyko atidaryti grupės failo „%s“.\n\
                            Mėginti atidaryti toliau?"
IDS_OUT_OF_MEMORY,          "Trūksta atminties."
IDS_WINHELP_ERROR,          "Žinynas neprieinamas."
IDS_UNKNOWN_FEATURE_s,      "Nežinoma %s funkcija"
IDS_FILE_NOT_OVERWRITTEN_s, "Failas „%s“ egzistuoja. Neperrašytas."
IDS_SAVE_GROUP_AS_s,        "Išsaugoti grupę kaip „%s“, taip neperrašant originalių failų."
IDS_NO_HOT_KEY,             "Nėra"
IDS_ALL_FILES,              "Visi failai (*.*)"
IDS_PROGRAMS,               "Programos"
IDS_LIBRARIES_DLL,          "Bibliotekos (*.dll)"
IDS_SYMBOL_FILES,           "Piktogramų failai"
IDS_SYMBOLS_ICO,            "Piktogramos (*.ico)"
}

STRINGTABLE DISCARDABLE
{
IDS_LICENSE_CAPTION,            "LICENCIJA"
IDS_LICENSE,
"Ši programa yra laisva programinė įranga; galite ją platinti ir/ar \
modifikuoti GNU laisvosios bendrosios viešosios licencijos (LGPL) \
sąlygomis, kurios paskelbtos Laisvosios programinės įrangos fondo \
(FSF); 2.1-osios arba (Jūsų pasirinkimu) bet kurios vėlesnės \
licencijos versijos sąlygomis.\n\
Ši programa yra platinama tikintis, kad ji bus naudinga, bet BE JOKIŲ \
GARANTIJŲ; net be numanomų PERKAMUMO ar TINKAMUMO KONKREČIAI \
UŽDUOČIAI garantijų. Išsamią informaciją rasite GNU laisvojoje \
bendrojoje viešojoje licencijoje.\n\
Jūs turėjote gauti GNU laisvosios bendrosios viešosios licencijos \
kopiją kartu su Wine; jei negavote, rašykite adresu \
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, \
Boston, MA 02110-1301, USA."

IDS_WARRANTY_CAPTION, "JOKIŲ GARANTIJŲ"
IDS_WARRANTY,
"Ši programa yra platinama tikintis, kad ji bus naudinga, bet BE JOKIŲ \
GARANTIJŲ; net be numanomų PERKAMUMO ar TINKAMUMO KONKREČIAI \
UŽDUOČIAI garantijų. Išsamią informaciją rasite GNU laisvojoje \
bendrojoje viešojoje licencijoje."
}
