/*
 * Internet control panel applet
 *
 * Copyright 2010 Detlef Riekenberg
 * Copyright 2010 YunSong Hwang
 *
 * 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 code_page(65001)

LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT

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

    GROUPBOX    " 홈 페이지 ", IDC_STATIC, 4, 4, 312, 52
    LTEXT       "홈페이지로 사용할 주소를 선택할 수 있습니다.",
                IDC_STATIC, 58, 10, 252, 10
    EDITTEXT    IDC_HOME_EDIT, 58, 22, 252, 12, WS_VISIBLE | ES_AUTOHSCROLL
    PUSHBUTTON  "현재 페이지(&C)", IDC_HOME_CURRENT, 58, 36, 80, 14
    PUSHBUTTON  "기본 페이지(&D)", IDC_HOME_DEFAULT, 144, 36, 80, 14
    PUSHBUTTON  "빈 페이지(&B)", IDC_HOME_BLANK, 230, 36, 80, 14
    GROUPBOX    " 방문 기록 ", IDC_STATIC, 4, 60, 312, 46
    LTEXT       "당신은 캐시된 페이지,쿠키나 다른 데이터를 지울 수 있습니다.",
                IDC_STATIC, 58, 72, 252, 10
    PUSHBUTTON  "파일들 지우기(&F)...", IDC_HISTORY_DELETE, 144, 86, 80, 14
    PUSHBUTTON  "설정(&S)...", IDC_HISTORY_SETTINGS, 230, 86, 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 "방문 기록 지우기"
BEGIN

    AUTOCHECKBOX   "임시 인터넷 파일\n웹페이지의 캐시된 복사본,그림 그리고 인증서.",
                    IDC_DELETE_TEMP_FILES, 10, 8, 230, 30, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "쿠키\n이 파일은 웹사이트에 위해 사용자 환경설정이나 로그인 정보같은 것을 당신의 컴퓨터에 저장하는데 사용됩니다. .",
                    IDC_DELETE_COOKIES, 10, 38, 230, 30, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "방문기록\n당신이 방문한 웹사이트의 목록.",
                    IDC_DELETE_HISTORY, 10, 68, 230, 30, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "폼 정보\n당신이 정보 폼에 입력한 사용자 이름과 다른 정보.",
                    IDC_DELETE_FORM_DATA, 10, 98, 230, 30, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "암호\n당신이 폼에 입력한 저장된 암호.",
                    IDC_DELETE_PASSWORDS, 10, 128, 230, 30, BS_TOP | BS_MULTILINE
    DEFPUSHBUTTON  "취소", IDCANCEL, 185, 230, 60, 15, WS_GROUP
    PUSHBUTTON     "지우기", 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 "보안"
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 "내용"
BEGIN

    GROUPBOX    " 인증서 ", IDC_STATIC, 4, 4, 312, 50
    LTEXT       " 인증서는 당신의 개인 식별과 인증기관과 게시자 식별에 사용됩니다.",
                IDC_STATIC, 58, 14, 252, 18
    PUSHBUTTON  "인증서...", IDC_CERT, 146, 34, 80, 14
    PUSHBUTTON	"발행자...", IDC_CERT_PUBLISHER, 230, 34, 80, 14

END
