/*
 * Internet control panel applet
 *
 * Copyright 2010 Detlef Riekenberg
 *
 * 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 "inetcpl.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
BEGIN
    IDS_CPL_NAME        "Internet Settings"
    IDS_CPL_INFO        "Configure Wine Internet Browser and related settings"
    IDS_SEC_SETTINGS    "Security settings for zone: "
    IDS_SEC_LEVEL0      "Custom"
    IDS_SEC_LEVEL1      "Very Low"
    IDS_SEC_LEVEL2      "Low"
    IDS_SEC_LEVEL3      "Medium"
    IDS_SEC_LEVEL4      "Increased"
    IDS_SEC_LEVEL5      "High"
END

/* "General" propsheet */
IDD_GENERAL DIALOG  0, 0, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
FONT 8, "MS Shell Dlg"
CAPTION "General"
BEGIN

    GROUPBOX    "Home page", IDC_STATIC, 4, 4, 312, 56
    LTEXT       "You can choose the address that will be used as your home page.",
                IDC_STATIC, 10, 14, 300, 10
    EDITTEXT    IDC_HOME_EDIT, 10, 26, 300, 12, WS_VISIBLE | ES_AUTOHSCROLL
    PUSHBUTTON  "&Current page", IDC_HOME_CURRENT, 58, 42, 80, 14
    PUSHBUTTON  "&Default page", IDC_HOME_DEFAULT, 144, 42, 80, 14
    PUSHBUTTON  "&Blank page", IDC_HOME_BLANK, 230, 42, 80, 14
    GROUPBOX    "Browsing history", IDC_STATIC, 4, 66, 312, 42
    LTEXT       "You can delete cached pages, cookies and other data.",
                IDC_STATIC, 10, 76, 300, 10
    PUSHBUTTON  "Delete &files...", IDC_HISTORY_DELETE, 144, 90, 80, 14
    PUSHBUTTON  "&Settings...", IDC_HISTORY_SETTINGS, 230, 90, 80, 14

END

/* "Delete browsing history" dialog */
IDD_DELETE_HISTORY DIALOG  0, 0, 250, 250
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Delete browsing history"
BEGIN

    AUTOCHECKBOX   "Temporary internet files\nCached copies of webpages, images and certificates.",
                    IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "Cookies\nFiles saved on your computer by websites, which store things like user preferences and login information.",
                    IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "History\nList of websites you have accessed.",
                    IDC_DELETE_HISTORY, 10, 88, 230, 40, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "Form data\nUsernames and other information you have entered into forms.",
                    IDC_DELETE_FORM_DATA, 10, 128, 230, 40, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "Passwords\nSaved passwords you have entered into forms.",
                    IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE
    DEFPUSHBUTTON  "Cancel", IDCANCEL, 185, 230, 60, 15, WS_GROUP
    PUSHBUTTON     "Delete", IDOK, 120, 230, 60, 15, WS_GROUP

END

/* "Security" propsheet */
IDD_SECURITY DIALOG  0, 0, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
FONT 8, "MS Shell Dlg"
CAPTION "Security"
BEGIN

    CONTROL     "", IDC_SEC_LISTVIEW, "SysListView32",
                LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_VSCROLL,
                4, 4, 312, 58
    LTEXT       "", IDC_SEC_ZONE_INFO, 4, 68, 312, 20
    GROUPBOX    "", IDC_SEC_GROUP, 4, 88, 312, 126
    CONTROL     "", IDC_SEC_TRACKBAR, "msctls_trackbar32",
                TBS_VERT | TBS_AUTOTICKS | TBS_BOTH | TBS_REVERSED, 8, 98, 32, 100
    LTEXT       "", IDC_SEC_LEVEL, 48, 102, 180, 12
    LTEXT       "", IDC_SEC_LEVEL_INFO, 48, 114, 260, 80
END

/* "Content" propsheet */
IDD_CONTENT DIALOG  0, 0, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
FONT 8, "MS Shell Dlg"
CAPTION "Content"
BEGIN

    GROUPBOX    "Certificates", IDC_STATIC, 4, 4, 312, 50
    LTEXT       "Certificates are used for your personal identification and to identify certificate authorities and publishers.",
                IDC_STATIC, 58, 14, 252, 18
    PUSHBUTTON  "Certificates...", IDC_CERT, 146, 34, 80, 14
    PUSHBUTTON	"Publishers...", IDC_CERT_PUBLISHER, 230, 34, 80, 14

END

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

#define WINE_FILENAME_STR "inetcpl.cpl"
#define WINE_FILEDESCRIPTION_STR "Internet Control Panel"

/* Same Version as IE 8 on WinXP */
#define WINE_FILEVERSION      8,0,6001,18939
#define WINE_FILEVERSION_STR "8.00.6001.18939"

#define WINE_PRODUCTVERSION      8,0,6001,18939
#define WINE_PRODUCTVERSION_STR "8.00.6001.18939"

#include "wine/wine_common_ver.rc"
 
/* @makedep: inetcpl.ico */
ICO_MAIN ICON "inetcpl.ico"
