/*
 * Copyright 2005 Jacek Caban
 *
 * 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 <windef.h>
#include <winuser.h>
#include <commctrl.h>

#include "resource.h"

#pragma makedep po

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

ID_AXINSTALL_WARNING_DLG DIALOG  0, 0, 260, 115
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Security Warning"
FONT 8, "MS Shell Dlg"
{
    CONTROL "Do you want to install this software?",
            100, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 10, 10, 240, 23
    CONTROL "Location:", 101, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 10, 26, 40, 13
    CONTROL "", ID_AXINSTALL_LOCATION, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 50, 26, 200, 13
    DEFPUSHBUTTON "Don't install", IDCANCEL, 200, 48, 50, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "", ID_AXINSTALL_INSTALL_BTN, 144, 48, 50, 14, WS_GROUP | WS_TABSTOP | WS_DISABLED
    CONTROL "", 102, "static", SS_ETCHEDHORZ, 10, 70, 240, 1
    ICON    "", ID_AXINSTALL_ICON, 10, 82, 32, 32, WS_CHILD | WS_VISIBLE
    CONTROL "When installed, an ActiveX component has full access to your " \
            "computer. Do not click install unless you have absolute trust " \
            "in the above source.",
            22002, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 46, 80, 194, 23
}

STRINGTABLE
{
    IDS_AXINSTALL_FAILURE    "Installation of component failed: %08x"
    IDS_AXINSTALL_INSTALLN   "Install (%d)"
    IDS_AXINSTALL_INSTALL    "Install"
}

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

/* @makedep: urlmon.rgs */
1 WINE_REGISTRY urlmon.rgs

/* @makedep: urlmon.inf */
REGINST REGINST urlmon.inf

#define WINE_FILENAME_STR "urlmon.dll"
#define WINE_FILEVERSION 6,0,2800,1485
#define WINE_FILEVERSION_STR "6.0.2800.1485"
#define WINE_PRODUCTVERSION 6,0,2800,1485
#define WINE_PRODUCTVERSION_STR "6.0.2800.1485"

#include "wine/wine_common_ver.rc"
