/*
 * 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

SYSMENU MENU
{
    MENUITEM "&Povrati", 61728
    MENUITEM "Pr&emesti", 61456
    MENUITEM "&Veličina", 61440
    MENUITEM "&Umanji", 61472
    MENUITEM "U&većaj", 61488
    MENUITEM SEPARATOR
    MENUITEM "&Zatvori\tAlt-F4", 61536
    MENUITEM SEPARATOR
    MENUITEM "&O Wine-u...", 61761
}

EDITMENU MENU
{
    POPUP ""
    BEGIN
        MENUITEM "&Opozivi", EM_UNDO
        MENUITEM SEPARATOR
        MENUITEM "&Iseci", WM_CUT
        MENUITEM "&Umnoži", WM_COPY
        MENUITEM "&Ubaci", WM_PASTE
        MENUITEM "Iz&briši", WM_CLEAR
        MENUITEM SEPARATOR
        MENUITEM "Izaberi &sve", EM_SETSEL
    END
}

MSGBOX DIALOG 100, 80, 216, 168
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
BEGIN
    ICON "", 1088, 8, 20, 16, 16, WS_CHILD | WS_VISIBLE
    LTEXT "", 100, 32, 4, 176, 48, WS_CHILD | WS_VISIBLE | WS_GROUP | SS_NOPREFIX
    PUSHBUTTON "&U redu", 1, 16, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Otkaži", 2, 64, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Prekini", 3, 112, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "Pokušaj &ponovo", 4, 160, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Zanemari", 5, 208, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Da", 6, 256, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Ne", 7, 304, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "Pok&ušaj ponovo", 10, 352, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Nastavi", 11, 400, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "Pomoć", 9, 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

STRINGTABLE
{
    IDS_ERROR "Greška"
    IDS_MDI_MOREWINDOWS "&Više prozora..."
}

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC

SYSMENU MENU
{
    MENUITEM "&Поврати", 61728
    MENUITEM "Пр&емести", 61456
    MENUITEM "&Величина", 61440
    MENUITEM "&Умањи", 61472
    MENUITEM "У&већај", 61488
    MENUITEM SEPARATOR
    MENUITEM "&Затвори\tAlt-F4", 61536
    MENUITEM SEPARATOR
    MENUITEM "&О Wine-у...", 61761
}

EDITMENU MENU
{
    POPUP ""
    BEGIN
        MENUITEM "&Опозиви", EM_UNDO
        MENUITEM SEPARATOR
        MENUITEM "&Исеци", WM_CUT
        MENUITEM "&Умножи", WM_COPY
        MENUITEM "&Убаци", WM_PASTE
        MENUITEM "Из&бриши", WM_CLEAR
        MENUITEM SEPARATOR
        MENUITEM "Изабери &све", EM_SETSEL
    END
}

MSGBOX DIALOG 100, 80, 216, 168
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
BEGIN
    ICON "", 1088, 8, 20, 16, 16, WS_CHILD | WS_VISIBLE
    LTEXT "", 100, 32, 4, 176, 48, WS_CHILD | WS_VISIBLE | WS_GROUP | SS_NOPREFIX
    PUSHBUTTON "&У реду", 1, 16, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Откажи", 2, 64, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Прекини", 3, 112, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "Покушај &поново", 4, 160, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Занемари", 5, 208, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Да", 6, 256, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Не", 7, 304, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "Пок&ушај поново", 10, 352, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "&Настави", 11, 400, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
    PUSHBUTTON "Помоћ", 9, 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

STRINGTABLE
{
    IDS_ERROR "Грешка"
    IDS_MDI_MOREWINDOWS "&Више прозора..."
}
