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


#ifndef _SVX_OPTINET_HRC
#define _SVX_OPTINET_HRC

#ifndef _SVT_CONTROLDIMS_HRC_
#include <svtools/controldims.hrc>
#endif

// Proxy ------------------------------------------------------------------
#define GB_SETTINGS                 1
#define FT_PROXYMODE 				2
#define LB_PROXYMODE                2
#define FT_HTTP_PROXY				3
#define ED_HTTP_PROXY               3
#define FT_HTTP_PORT                4
#define ED_HTTP_PORT                4
#define FT_FTP_PROXY                5
#define ED_FTP_PROXY                5
#define FT_FTP_PORT                 6
#define ED_FTP_PORT                 6
#define FT_SOCKS_PROXY              7
#define ED_SOCKS_PROXY              7
#define FT_SOCKS_PORT               8
#define ED_SOCKS_PORT               8
#define FT_NOPROXYFOR               11
#define ED_NOPROXYFOR               11
#define ED_NOPROXYDESC              12
#define ST_PROXY_FROM_BROWSER       13
#define FT_HTTPS_PROXY				14
#define ED_HTTPS_PROXY              14
#define FT_HTTPS_PORT               15
#define ED_HTTPS_PORT               15

// Search ------------------------------------------------------------------
#define GB_SEARCH	                40
#define LB_SEARCH	                40
#define FT_SEARCH_NAME	            41
#define ED_SEARCH_NAME	            41
#define FT_SEARCH	                42
#define RB_AND		                43
#define RB_OR                       44
#define RB_EXACT                    45
#define FT_URL                      46
#define ED_URL                      46
#define FT_POSTFIX                  47
#define ED_POSTFIX                  47
#define FT_SEPARATOR                48
#define ED_SEPARATOR                48
#define FT_CASE                     49
#define ED_CASE                     49
#define PB_CHANGE	                53
#define PB_DELETE	                54
#define PB_ADD		                55
#define PB_NEW						56
#define MSG_MODIFY                  57

// Protocols  --------------------------------------------------------------
#define GB_DNS						105
#define RB_DNS_AUTO                 106
#define RB_DNS_MANUAL               107
#define ED_DNS                      107

#define ST_MSG_255_0				111
#define ST_MSG_255_1				112

// Site Certificate --------------------------------------------------------
#define GB_SITECERT					120
#define LB_SITECERT					121
#define LB_FILTERCERT				122
#define PB_EDIT_CERT				123
#define PB_DELETE_CERT				124

// personal Certificate ----------------------------------------------------
#define GB_PERSCERT					130
#define LB_PERSCERT					131
#define PB_NEW_PERSCERT				132
#define PB_INFO_PERSCERT	 		133
#define PB_DELETE_PERSCERT			134

// Security  -------------------------------------------------------------

#define FL_SEC_SECURITYOPTIONS      10
#define FI_SEC_SECURITYOPTIONS      11
#define PB_SEC_SECURITYOPTIONS      12
#define FL_SEC_PASSWORDS            13
#define CB_SEC_SAVEPASSWORDS        14
#define PB_SEC_CONNECTIONS          15
#define CB_SEC_MASTERPASSWORD       16
#define FI_SEC_MASTERPASSWORD       17
#define PB_SEC_MASTERPASSWORD       18
#define FL_SEC_MACROSEC             19
#define FI_SEC_MACROSEC             20
#define PB_SEC_MACROSEC             21

#define STR_SEC_NOPASSWDSAVE        12

#define TP_WIDTH                    260
#define TP_HEIGHT                   185
#define OFFS_BUTTON_Y               (-6)
#define BORDER_OFFSET               8
#define COL_0                       (RSC_SP_TBPG_INNERBORDER_LEFT)
#define COL_1                       (COL_0+RSC_SP_FLGR_SPACE_X)
#define COL_1a                      (COL_1+RSC_SP_CHK_TEXTINDENT)
#define COL_4                       (TP_WIDTH-RSC_SP_TBPG_INNERBORDER_RIGHT)
#define COL_3                       (COL_4-RSC_CD_PUSHBUTTON_WIDTH)
#define COL_2                       (COL_3-RSC_SP_CTRL_DESC_X)

#define ROW_0                       (RSC_SP_FLGR_INNERBORDER_TOP)
#define ROW_1                       (ROW_0+RSC_CD_FIXEDLINE_HEIGHT+RSC_SP_CTRL_DESC_Y)
#define ROW_2                       (ROW_1+3*RSC_CD_FIXEDTEXT_HEIGHT+RSC_SP_CTRL_DESC_Y)
#define ROW_2a                      (ROW_2-RSC_SP_FLGR_SPACE_Y-RSC_CD_PUSHBUTTON_HEIGHT)
#define ROW_3                       (ROW_2+RSC_CD_FIXEDLINE_HEIGHT+RSC_SP_CTRL_DESC_Y)
#define ROW_4                       (ROW_3+RSC_CD_CHECKBOX_HEIGHT+RSC_SP_CTRL_DESC_Y-1)
#define ROW_4a                      (ROW_4+RSC_CD_CHECKBOX_HEIGHT+1)
#define ROW_5                       (ROW_4a+4*RSC_CD_FIXEDTEXT_HEIGHT+RSC_SP_CTRL_DESC_Y)
#define ROW_6                       (ROW_5+RSC_CD_FIXEDLINE_HEIGHT+RSC_SP_CTRL_DESC_Y)
#define ROW_7                       (ROW_6+2*RSC_CD_FIXEDTEXT_HEIGHT+RSC_SP_CTRL_DESC_Y)
#define ROW_8                       (ROW_7+RSC_CD_FIXEDLINE_HEIGHT+RSC_SP_CTRL_DESC_Y)
#define ROW_9                       (ROW_8+RSC_CD_CHECKBOX_HEIGHT+RSC_SP_CTRL_DESC_Y)

// Defines - JavaScriptDisableQueryBox_Impl -------------------------------

#define IMG_JSCPT_WARNING			220
#define FT_JSCPT_WARNING			221
#define CB_JSCPT_DISABLE			222
#define GB_JSCPT_WARNING			223
#define BTN_JSCPT_YES				224
#define BTN_JSCPT_NO				225

// Defines - SvxEMailTabPage_Impl
#define FL_MAIL                     1
#define FT_MAILERURL                2
#define FI_MAILERURL                3
#define ED_MAILERURL                4
#define PB_MAILERURL                5
#define STR_DEFAULT_FILENAME        6

#endif // #ifndef _SVX_OPTINET_HRC

// ******************************************************************* EOF
