/*
 * Ukrainian resources for Twain
 *
 * Copyright 2006 CodeWeavers, Aric Stewart
 * Copyright 2010 Igor Paliychuk
 *
 * 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 "resource.h"

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

LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT

IDD_CAMERAUI DIALOG DISCARDABLE  0, 0, 372, 273
STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE |
    WS_CAPTION | WS_SYSMENU
CAPTION "Файли в камері"
FONT 8, "MS Sans Serif"
BEGIN
	CONTROL         "List1",IDC_LIST1,"SysListView32", LVS_ICON | WS_BORDER |
WS_TABSTOP,7,7,358,229
    DEFPUSHBUTTON   "Імпортувати обране",IDC_IMPORT,152,252,72,14
    PUSHBUTTON      "Перегляд",IDC_FETCH,7,252,64,14
    PUSHBUTTON      "Імпортувати все",IDC_IMPORTALL,80,252,64,14
    CONTROL         "Пропустити діалог",IDC_SKIP,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,230,252,76,14
    PUSHBUTTON      "Вихід",IDC_EXIT,315,252,50,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 "Перенесення"
FONT 8, "MS Sans Serif"
BEGIN
    LTEXT   "Перенесення... Зачекайте",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 "Під'єднання до камери"
FONT 8, "MS Sans Serif"
BEGIN
    CONTROL         "",IDC_BITMAP,"Static",SS_BITMAP|SS_CENTERIMAGE,4,4,110,110
    LTEXT           "Під'єднання до камери... Зачекайте",IDC_STATIC,128,58,
                    116,8
END
