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

#pragma makedep po

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 web pages, 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"
ICO_INTERNET ICON "inetcpl.ico"
