/*
 * Lithuanian resources for Twain
 *
 * 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
 */

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

LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL

IDD_CAMERAUI DIALOG DISCARDABLE  0, 0, 372, 273
STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE |
    WS_CAPTION | WS_SYSMENU
CAPTION "Failai kameroje"
MENU 20545
FONT 8, "MS Sans Serif"
BEGIN
	CONTROL         "List1",IDC_LIST1,"SysListView32", LVS_ICON | WS_BORDER |
WS_TABSTOP,7,7,358,229
    DEFPUSHBUTTON   "Importuoti pažymėtus",IDC_IMPORT,152,252,72,14
    PUSHBUTTON      "Peržiūra",IDC_FETCH,7,252,64,14
    PUSHBUTTON      "Importuoti visus",IDC_IMPORTALL,80,252,64,14
    CONTROL         "Praleisti šį dialogo langą",IDC_SKIP,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,230,252,90,14
    PUSHBUTTON      "Išeiti",IDC_EXIT,329,252,36,14
END

IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 186, 46
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | DS_CENTER | DS_SETFOREGROUND
CAPTION "Perduodama"
FONT 8, "MS Sans Serif"
BEGIN
    LTEXT   "Perduodama... Prašome palaukti",IDC_STATIC,5,19,176,8, SS_CENTER
END

IDD_CONNECTING DIALOG DISCARDABLE  0, 0, 280, 116
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU| WS_VISIBLE | DS_CENTER
CAPTION "Jungiamasi prie kameros"
FONT 8, "MS Sans Serif"
BEGIN
    CONTROL         "",IDC_BITMAP,"Static",SS_BITMAP|SS_CENTERIMAGE,4,4,110,110
    LTEXT           "Jungiamasi prie kameros... Prašome palaukti",IDC_STATIC,124,58,
                    140,8
END

#pragma code_page(default)
