/*
 * Copyright 2010 Matej Spindler
 *
 * 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"

#pragma code_page(65001)

LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT

IDD_BROWSE_OPEN DIALOG 10, 10, 200, 70
STYLE DS_MODALFRAME | WS_CAPTION
CAPTION "Open URL"
FONT 8, "MS Shell Dlg"
{
    LTEXT "Vnesite interneti naslov dokumenta, ki ga bo Internet Explorer odpru.",-1,25, 5, 150,15
    LTEXT "Odpri:", -1, 2, 32, 20, 15
    EDITTEXT IDC_BROWSE_OPEN_URL, 25, 30, 160, 13
    DEFPUSHBUTTON "&V redu", IDOK, 25, 50, 50, 15
    PUSHBUTTON "&Prekliči", IDCANCEL, 85, 50, 50, 15
}

IDR_BROWSE_MAIN_MENU MENU
{
    POPUP "&Datoteka"
    {
        POPUP "&Nov"
        {
            MENUITEM "&Okno",                       ID_BROWSE_NEW_WINDOW
        }
        MENUITEM "&Odpri ...",                      ID_BROWSE_OPEN
        MENUITEM "&Shrani",                         ID_BROWSE_SAVE
        MENUITEM "Shrani &kot ...",                 ID_BROWSE_SAVE_AS
        MENUITEM SEPARATOR
        MENUITEM "Nastavitve tiskanja ...",         ID_BROWSE_PRINT_FORMAT
        MENUITEM "Na&tisni ...",                    ID_BROWSE_PRINT
        MENUITEM "Predo&gled tiskanja ...",         ID_BROWSE_PRINT_PREVIEW
        MENUITEM SEPARATOR
        MENUITEM "&Lastnosti ...",                  ID_BROWSE_PROPERTIES
        MENUITEM "&Zapri",                          ID_BROWSE_QUIT
    }
    POPUP "Pogl&ed"
    {
        POPUP "Oro&dne vrstice"
        {
            MENUITEM "&Statusna vrstica",           ID_BROWSE_BAR_STD
            MENUITEM "&Naslovna vrstica",           ID_BROWSE_BAR_ADDR
        }
    }
    POPUP "&Priljubljene"
    {
        MENUITEM "&Dodaj med priljubljene ...",     ID_BROWSE_ADDFAV
        MENUITEM SEPARATOR
    }
    POPUP "&Pomoč"
    {
        MENUITEM "O programu Internet Explorer ...", ID_BROWSE_ABOUT
    }
}

STRINGTABLE
{
    IDS_TB_BACK             "Nazaj"
    IDS_TB_FORWARD          "Naprej"
    IDS_TB_STOP             "Stop"
    IDS_TB_REFRESH          "Osveži"
    IDS_TB_HOME             "Domov"
    IDS_TB_PRINT            "Natisni"
}

STRINGTABLE
{
    IDS_ADDRESS             "Naslov"
}
