/*
 * Copyright 2010 Nenad Vujic
 *                Paul Vriens
 * Copyright 2010 Đorđe Vasiljević
 *
 * 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 "resources.h"

#pragma code_page(65001)

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN

MSGBOX DIALOG 100, 80, 216, 168
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
BEGIN
    ICON "", MSGBOX_IDICON, 8, 20, 16, 16, WS_CHILD | WS_VISIBLE
    LTEXT "", MSGBOX_IDTEXT, 32, 4, 176, 48, WS_CHILD | WS_VISIBLE | WS_GROUP | SS_NOPREFIX
    PUSHBUTTON "&U redu", IDOK, 16, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Otkaži", IDCANCEL, 64, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Prekini", IDABORT, 112, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "Pokušaj &ponovo", IDRETRY, 160, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Zanemari", IDIGNORE, 208, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Da", IDYES, 256, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Ne", IDNO, 304, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "Pok&ušaj ponovo", IDTRYAGAIN, 352, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Nastavi", IDCONTINUE, 400, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "Pomoć", IDHELP, 448, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

MDI_MOREWINDOWS DIALOG 20, 20, 232, 122
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Izbor"
FONT 8, "MS Shell Dlg"
BEGIN
    LISTBOX         MDI_IDC_LISTBOX, 5, 7, 222, 90, WS_VSCROLL | WS_HSCROLL /* defined in mdi.h */
    DEFPUSHBUTTON   "U redu", IDOK, 75, 100, 35, 14
    PUSHBUTTON      "Otkaži", IDCANCEL, 120, 100, 35, 14
END

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC

MSGBOX DIALOG 100, 80, 216, 168
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
BEGIN
    ICON "", MSGBOX_IDICON, 8, 20, 16, 16, WS_CHILD | WS_VISIBLE
    LTEXT "", MSGBOX_IDTEXT, 32, 4, 176, 48, WS_CHILD | WS_VISIBLE | WS_GROUP | SS_NOPREFIX
    PUSHBUTTON "&У реду", IDOK, 16, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Откажи", IDCANCEL, 64, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Прекини", IDABORT, 112, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "Покушај &поново", IDRETRY, 160, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Занемари", IDIGNORE, 208, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Да", IDYES, 256, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Не", IDNO, 304, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "Пок&ушај поново", IDTRYAGAIN, 352, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Настави", IDCONTINUE, 400, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "Помоћ", IDHELP, 448, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

MDI_MOREWINDOWS DIALOG 20, 20, 232, 122
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Избор"
FONT 8, "MS Shell Dlg"
BEGIN
    LISTBOX         MDI_IDC_LISTBOX, 5, 7, 222, 90, WS_VSCROLL | WS_HSCROLL /* defined in mdi.h */
    DEFPUSHBUTTON   "У реду", IDOK, 75, 100, 35, 14
    PUSHBUTTON      "Откажи", IDCANCEL, 120, 100, 35, 14
END
