// *************************************************************
//  
//  Licensed to the Apache Software Foundation (ASF) under one
//  or more contributor license agreements.  See the NOTICE file
//  distributed with this work for additional information
//  regarding copyright ownership.  The ASF licenses this file
//  to you under the Apache License, Version 2.0 (the
//  "License"); you may not use this file except in compliance
//  with the License.  You may obtain a copy of the License at
//  
//    http://www.apache.org/licenses/LICENSE-2.0
//  
//  Unless required by applicable law or agreed to in writing,
//  software distributed under the License is distributed on an
//  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//  KIND, either express or implied.  See the License for the
//  specific language governing permissions and limitations
//  under the License.
//  
// *************************************************************

#ifdef FONTSIZE
#undef FONTSIZE
#endif

//#if ( %PLACEHOLDER% == LANG_KOREAN ) || ( %PLACEHOLDER% == LANG_CHINESE ) || ( %PLACEHOLDER% == LANG_JAPANESE )
//#define FONTSIZE 9
//#define LANG_CJK
//#else
//#define FONTSIZE 8
//#endif

#define FONTSIZE 9

/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_WELCOME_PAGE DIALOGEX 0, 41, 327, 195
STYLE DS_SETFONT | DS_CONTROL | WS_CHILD
EXSTYLE WS_EX_CONTROLPARENT
#ifndef LANG_CJK
FONT FONTSIZE, "MS Shell Dlg", 0, 0, 0x0
#endif
BEGIN
    CONTROL         "",IDC_RICHEDIT21,"RICHEDIT20W",TCS_RAGGEDRIGHT | ES_READONLY |
                    TCS_MULTISELECT | WS_VSCROLL,7,7,313,151
END

IDD_REPORT_PAGE DIALOGEX 0, 41, 327, 195
STYLE DS_SETFONT | DS_CONTROL | WS_CHILD
EXSTYLE WS_EX_CONTROLPARENT
#ifndef LANG_CJK
FONT FONTSIZE, "MS Shell Dlg", 0, 0, 0x0
#endif
BEGIN
    LTEXT           "1",IDC_REPORT_INTRO,7,7,313,48
    LTEXT           "2",IDC_ENTER_TITLE,7,58,320,8
    EDITTEXT        IDC_EDIT_TITLE,7,68,235,14,ES_AUTOHSCROLL
    LTEXT           "3",IDC_ENTER_DESCRIPTION,7,86,320,8
    EDITTEXT        IDC_EDIT_DESCRIPTION,7,97,235,49,ES_MULTILINE | 
                    ES_WANTRETURN | WS_VSCROLL
    CONTROL         "4",IDC_ALLOW_CONTACT,"Button",BS_AUTOCHECKBOX | 
                    WS_TABSTOP,7,148,303,10
    LTEXT           "4a",IDC_LABEL_EMAIL,18,162,226,
                    8
    EDITTEXT        IDC_EDIT_EMAIL,17,173,224,14,ES_AUTOHSCROLL
    PUSHBUTTON      "5",IDC_SHOW_REPORT,249,97,74,14
    PUSHBUTTON      "6",IDC_OPTIONS,249,115,74,14
    PUSHBUTTON      "7",IDC_SAVE_REPORT,249,134,74,14
END

IDD_DIALOG_FRAME DIALOGEX 0, 0, 331, 265
STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | 
    DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "1"
#ifndef LANG_CJK
FONT FONTSIZE, "MS Shell Dlg", 400, 0, 0x1
#endif
BEGIN
    LTEXT           "",IDC_STATIC,0,0,331,40
    CONTROL         "",IDC_HEADER,"RICHEDIT20W",TCS_VERTICAL | TCS_MULTISELECT | ES_READONLY,
                    7,7,316,33
    PUSHBUTTON      "1",IDBACK,125,244,60,14
    PUSHBUTTON      "2",IDNEXT,194,244,60,14
    PUSHBUTTON      "3",IDFINISH,194,244,60,14
    PUSHBUTTON      "4",IDCANCEL,263,244,60,14
    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,40,331,1
    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,237,331,1
END

IDD_PREVIEW_FRAME DIALOGEX 0, 0, 251, 185
STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | 
    DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | 
    WS_SIZEBOX
CAPTION "1"
#ifndef LANG_CJK
FONT FONTSIZE, "MS Shell Dlg", 400, 0, 0x1
#endif
BEGIN
    CONTROL         "",IDC_EDIT_PREVIEW,"RICHEDIT20W",ES_MULTILINE | 
                    ES_AUTOVSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | WS_HSCROLL |
                    TCS_MULTISELECT | ES_READONLY | TCS_RAGGEDRIGHT |
                    WS_BORDER
                    ,
                    7,7,237,150
    DEFPUSHBUTTON      "4",IDOK,193,164,50,14
END


IDD_OPTIONS_FRAME DIALOGEX 0, 0, 295, 182
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | 
    WS_SYSMENU
CAPTION "1"
#ifndef LANG_CJK
FONT FONTSIZE, "MS Shell Dlg", 400, 0, 0x1
#endif
BEGIN
    GROUPBOX        "1",IDC_PROXY_SETTINGS,7,7,222,92
    CONTROL         "2",IDC_RADIO_SYSTEM,"Button",BS_AUTORADIOBUTTON,15,27,
                    208,10
    CONTROL         "3",IDC_RADIO_DIRECT,"Button",BS_AUTORADIOBUTTON,15,39,
                    208,10
    CONTROL         "4",IDC_RADIO_MANUAL,"Button",BS_AUTORADIOBUTTON,15,51,
                    208,10
    LTEXT           "5",IDC_LABEL_PROXYSERVER,27,64,148,8
    EDITTEXT        IDC_EDIT_PROXYSERVER,27,76,148,14,ES_AUTOHSCROLL
    LTEXT           ":",IDC_STATIC,178,78,8,8
    LTEXT           "6",IDC_LABEL_PROXYPORT,184,64,40,8
    EDITTEXT        IDC_EDIT_PROXYPORT,184,76,40,14,ES_AUTOHSCROLL | 
                    ES_NUMBER
    DEFPUSHBUTTON   "7",IDOK,238,7,50,14
    PUSHBUTTON      "8",IDCANCEL,238,26,50,14
    CONTROL         "",IDC_PROXY_DESCRIPTION,"RichEdit20W",ES_MULTILINE | 
                    ES_READONLY | WS_VSCROLL,7,106,281,69
END

IDD_SENDING_STATUS DIALOGEX 0, 0, 216, 73
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | 
    WS_SYSMENU
CAPTION "1"
#ifndef LANG_CJK
FONT FONTSIZE, "MS Shell Dlg", 400, 0, 0x1
#endif
BEGIN
    PUSHBUTTON      "2",IDCANCEL,159,52,50,14
    LTEXT           "3",IDC_SENDING_REPORT_STATUS,7,7,202,34
END

/////////////////////////////////////////////////////////////////////////////
//
// String Table
//

STRINGTABLE 
BEGIN
    IDS_WELCOME_CAPTION     %WELCOME_CAPTION%
    IDS_WELCOME_HEADER      %WELCOME_HEADER%
    IDS_WELCOME_BODY1       %WELCOME_BODY1%
    IDS_WELCOME_BODY2       %WELCOME_BODY2%
    IDS_WELCOME_BODY3       %WELCOME_BODY3%
    IDS_PRIVACY_URL         %PRIVACY_URL%
    IDS_NEXT_BUTTON         %NEXT_BUTTON%
    IDS_CANCEL_BUTTON       %CANCEL_BUTTON%
    IDS_OK_BUTTON			%OK_BUTTON%
END

STRINGTABLE 
BEGIN
    IDS_REPORT_CAPTION      %REPORT_CAPTION%
    IDS_REPORT_HEADER       %REPORT_HEADER%
    IDS_REPORT_INTRO        %REPORT_BODY%
    IDS_ENTER_TITLE         %ENTER_TITLE%
    IDS_ALLOW_CONTACT       %ALLOW_CONTACT%
    IDS_ENTER_DESCRIPTION   %ENTER_DESCRIPTION%
    IDS_BACK_BUTTON         %BACK_BUTTON%
    IDS_SEND_BUTTON         %SEND_BUTTON%
    IDS_DONOT_SEND_BUTTON   %DONOT_SEND_BUTTON%
    IDS_SHOW_REPORT_BUTTON  %SHOW_REPORT_BUTTON%
    IDS_SAVE_REPORT_BUTTON  %SAVE_REPORT_BUTTON%
    IDS_OPTIONS_BUTTON		%OPTIONS_BUTTON%
    IDS_LABEL_EMAIL			%ENTER_EMAIL%
END

STRINGTABLE
BEGIN
	IDS_ERROR_MSG_SIMPLE_MAPI			%ERROR_MSG_SIMPLE_MAPI%
	IDS_ERROR_MSG_DISK_FULL				%ERROR_MSG_DISK_FULL%
	IDS_ERROR_MSG_PROXY					%ERROR_MSG_PROXY%
	IDS_ERROR_MSG_NOCONNECT				%ERROR_MSG_NOCONNECT%
	IDS_ERROR_MSG_NOEMAILADDRESS		%ERROR_MSG_NOEMAILADDRESS%
	IDS_SENDING_REPORT_HEADER			%SENDING_REPORT_HEADER%
	IDS_SENDING_REPORT_STATUS			%SENDING_REPORT_STATUS%
	IDS_SENDING_REPORT_STATUS_FINISHED	%SENDING_REPORT_STATUS_FINISHED%
	IDS_MSG_CMDLINE_USAGE				%MSG_CMDLINE_USAGE%
	IDS_MSG_PARAM_PROCESSID				%MSG_PARAM_PROCESSID%
	IDS_MSG_PARAM_PROCESSID_DESCRIPTION	%MSG_PARAM_PROCESSID_DESCRIPTION%
	IDS_MSG_PARAM_HELP_DESCRIPTION		%MSG_PARAM_HELP_DESCRIPTION%
END

STRINGTABLE
BEGIN
	IDS_OPTIONS_CAPTION			%OPTIONS_TITLE%
	IDS_PROXY_SETTINGS_HEADER	%PROXY_SETTINGS_HEADER%
	IDS_PROXY_SYSTEM			%PROXY_SETTINGS_SYSTEM%
	IDS_PROXY_DIRECT			%PROXY_SETTINGS_DIRECT%
	IDS_PROXY_MANUAL			%PROXY_SETTINGS_MANUAL%
	IDS_LABEL_PROXYSERVER		%PROXY_SETTINGS_ADDRESS%
	IDS_LABEL_PROXYPORT			%PROXY_SETTINGS_PORT%
	IDS_PROXY_DESCRIPTION		%PROXY_SETTINGS_DESCRIPTION%
END
