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

#include "treeopt.hrc"
#include <cuires.hrc>
#include "helpid.hrc"
#include <svx/dialogs.hrc>

#define IMAGE_STDBTN_COLOR Color { Red = 0xC000; Green = 0xC000; Blue = 0xC000; }

ModalDialog RID_OFADLG_OPTIONS_TREE
{
	HelpID = HID_OFADLG_OPTIONS_TREE ;
	Moveable = TRUE ;
	OutputSize = TRUE ;
	SVLook = TRUE ;

	Size = MAP_APPFONT ( COL_12, ROW_5 ) ;
	Text [ en-US ] = "Options" ;

	OKButton PB_OK
	{
		Pos = MAP_APPFONT ( COL_4, ROW_3 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton PB_CANCEL
	{
		Pos = MAP_APPFONT ( COL_6, ROW_3 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		TabStop = TRUE ;
	};
	HelpButton PB_HELP
	{
		Pos = MAP_APPFONT ( COL_8, ROW_3 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		TabStop = TRUE ;
	};
	PushButton PB_BACK
	{
		HelpID = "cui:PushButton:RID_OFADLG_OPTIONS_TREE:PB_BACK" ;
		Pos = MAP_APPFONT ( COL_10, ROW_3 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Back" ;
	};

	// TreeListBox
	Control TLB_PAGES
	{
		Pos = MAP_APPFONT ( COL_1, ROW_1 ) ;
		Size = MAP_APPFONT ( (COL_2-COL_1), (ROW_4-ROW_1) ) ;
		TabStop = TRUE ;
		Border = TRUE ;
	};
	Control FB_BORDER
	{
		Pos = MAP_APPFONT ( COL_3, ROW_1 ) ;
		Size = MAP_APPFONT ( WIDTH_PAGEFRAME, HEIGHT_PAGEFRAME ) ;
		Hide = TRUE ;
	};
	FixedImage IMG_HELP
	{
		Pos = MAP_APPFONT ( COL_3_1, ROW_1_1 ) ;
		Size = MAP_APPFONT ( WIDTH_IMG_HELP, HEIGHT_IMG_HELP ) ;
		Hide = TRUE ;
	};
	FixedText FT_PAGE_TITLE
	{
		Pos = MAP_APPFONT ( COL_3_3, ROW_1_2 ) ;
		Size = MAP_APPFONT ( (COL_3_5-COL_3_3), 15 ) ;
		Hide = TRUE ;
	};
	FixedLine FL_LINE_1
	{
		Pos = MAP_APPFONT ( COL_3_1, ROW_1_3 ) ;
		Size = MAP_APPFONT ( (COL_3_5-COL_3_1), 1 ) ;
		Comment = "Divider" ;
		Hide = TRUE ;
	};
	FixedText FT_HELPTEXT
	{
		Pos = MAP_APPFONT ( COL_3_3, ROW_1_4 ) ;
		Size = MAP_APPFONT ( (COL_3_5-COL_3_3), (HEIGHT_PAGEFRAME-ROW_1_4-1) ) ;
		WordBreak = TRUE ;
		Hide = TRUE ;
	};
	String ST_LOAD_ERROR
	{
		Text [ en-US ] = "The selected module could not be loaded." ;
	};
	StringArray STR_HELPTEXTS
	{
		ItemList [ en-US ] =
		{
			< "This dialog is used to define general settings when working with %PRODUCTNAME. Enter your personal data, the defaults to be used when saving documents, and paths to important files. These settings will be saved automatically and used in later sessions as well." ; SID_GENERAL_OPTIONS; > ;
			< "This is where you make settings concerning language and writing aids for your work with %PRODUCTNAME." ; SID_LANGUAGE_OPTIONS; > ;
			< "This is where you configure %PRODUCTNAME for the Internet. You can define search engines or save your proxy settings." ; SID_INET_DLG; > ;
			< "This is where you specify various settings for text documents. These settings determine how your text documents are handled in %PRODUCTNAME and are valid for all new %PRODUCTNAME Writer documents. You can also define a few settings for the active text document if you save it afterwards." ; SID_SW_EDITOPTIONS; > ;
			< "This is where you define the basic settings for %PRODUCTNAME documents in HTML format. For example, you decide which contents should be displayed on the screen or printed, how the pages are scrolled on the screen, in which color keywords are highlighted in the source text and much more." ; SID_SW_ONLINEOPTIONS; > ;
			< "This is where you define various global settings for spreadsheets. For example, you can define which contents should be displayed and in which direction the cursor will move after you enter data in a cell. You also define sort lists, the number of the decimal places displayed, etc." ; SID_SC_EDITOPTIONS; > ;
			< "This is where you define the settings that apply to all newly saved presentations. Among other things, you decide which contents are displayed on the slides, which default unit of measure is used, if and how grid alignment is used, and if notes and handouts are always printed." ; SID_SD_EDITOPTIONS; > ;
			< "This is where you define the settings for drawing documents. Among other things, you determine which contents are displayed on the pages, which scale is used, if and how grid alignment is used, and which contents are printed by default." ; SID_SD_GRAPHIC_OPTIONS; > ;
			< "This is where you select the print format and print options for all newly saved formula documents. These options take effect when you want to print a formula directly from %PRODUCTNAME Math." ; SID_SM_EDITOPTIONS; > ;
			< "This is where you specify general default settings for your %PRODUCTNAME Charts. Set the colors you want for all new charts." ; SID_SCH_EDITOPTIONS; > ;
			< "This is where you define general settings for accessing external data sources." ; SID_SB_STARBASEOPTIONS; > ;
			< "This is where you define general settings for opening and saving documents in external formats. You can control the behavior of macros or OLE objects in Microsoft Office documents or define settings for HTML documents." ; SID_FILTER_DLG; > ;
		};
	};
	Bitmap BMP_ROOT_CLOSED
	{
		File = "plus.png" ;
	};
	Bitmap BMP_ROOT_OPENED
	{
		File = "minus.png" ;
	};
};

Resource RID_OFADLG_OPTIONS_TREE_PAGES
{
	StringArray SID_GENERAL_OPTIONS
	{
		ItemList [ en-US ] =
		{
			< "%PRODUCTNAME" ;		0								; > ;
			< "User Data" ;			RID_SFXPAGE_GENERAL				; > ;
			< "General" ;			OFA_TP_MISC						; > ;
			< "Memory" ;			OFA_TP_MEMORY					; > ;
			< "View" ;				OFA_TP_VIEW						; > ;
			< "Print" ;				RID_SFXPAGE_PRINTOPTIONS		; > ;
			< "Paths" ;				RID_SFXPAGE_PATH				; > ;
			< "Colors" ;			RID_SVXPAGE_COLOR				; > ;
			< "Fonts" ;				RID_SVX_FONT_SUBSTITUTION		; > ;
			< "Security" ;			RID_SVXPAGE_INET_SECURITY		; > ;
			< "Appearance" ;		RID_SVXPAGE_COLORCONFIG			; > ;
			< "Accessibility" ;		RID_SVXPAGE_ACCESSIBILITYCONFIG	; > ;
			< "Java" ;				RID_SVXPAGE_OPTIONS_JAVA		; > ;
			< "Network Identity" ;	RID_SVXPAGE_SSO					; > ;
			< "Online Update" ;		RID_SVXPAGE_ONLINEUPDATE		; > ;
			< "" ;					RID_SVXPAGE_IMPROVEMENT			; > ;
		};
	};
	StringArray SID_LANGUAGE_OPTIONS
	{
		ItemList [ en-US ] =
		{
			< "Language Settings" ;		0							; > ;
			< "Languages" ;				OFA_TP_LANGUAGES			; > ;
			< "Writing Aids" ;			RID_SFXPAGE_LINGU			; > ;
			< "Searching in Japanese" ;	RID_SVXPAGE_JSEARCH_OPTIONS	; > ;
			< "Asian Layout" ;			RID_SVXPAGE_ASIAN_LAYOUT	; > ;
			< "Complex Text Layout" ;	RID_SVXPAGE_OPTIONS_CTL		; > ;
		};
	};
	StringArray SID_INET_DLG
	{
		// modified by jmeng begin
		ItemList [ en-US ] =
		{
			< "Internet" ;	0						; > ;
			< "Proxy" ;		RID_SVXPAGE_INET_PROXY	; > ;
			< "Search" ;	RID_SVXPAGE_INET_SEARCH	; > ;
			< "E-mail" ;	RID_SVXPAGE_INET_MAIL	; > ;
		};
		// modified by jmeng end
	};
	StringArray SID_SW_EDITOPTIONS
	{
		ItemList [ en-US ] =
		{
			< "%PRODUCTNAME Writer" ;	0								; > ;
			< "General" ;				RID_SW_TP_OPTLOAD_PAGE			; > ;
			< "View" ;					RID_SW_TP_CONTENT_OPT			; > ;
			< "Formatting Aids" ;		RID_SW_TP_OPTSHDWCRSR			; > ;
			< "Grid" ;					RID_SVXPAGE_GRID				; > ;
			< "Basic Fonts (Western)" ;	RID_SW_TP_STD_FONT				; > ;
			< "Basic Fonts (Asian)" ;	RID_SW_TP_STD_FONT_CJK			; > ;
			< "Basic Fonts (CTL)" ;		RID_SW_TP_STD_FONT_CTL			; > ;
			< "Print" ;					RID_SW_TP_OPTPRINT_PAGE			; > ;
			< "Table" ;					RID_SW_TP_OPTTABLE_PAGE			; > ;
			< "Changes" ;				RID_SW_TP_REDLINE_OPT			; > ;
			< "Compatibility" ;			RID_SW_TP_OPTCOMPATIBILITY_PAGE	; > ;
			< "AutoCaption" ;			RID_SW_TP_OPTCAPTION_PAGE		; > ;
			< "Mail Merge E-mail" ;		RID_SW_TP_MAILCONFIG			; > ;
		};
	};
	StringArray SID_SW_ONLINEOPTIONS
	{
		ItemList [ en-US ] =
		{
			< "%PRODUCTNAME Writer/Web" ;	0								; > ;
			< "View" ;						RID_SW_TP_HTML_CONTENT_OPT		; > ;
			< "Formatting Aids" ;			RID_SW_TP_HTML_OPTSHDWCRSR		; > ;
			< "Grid" ;						RID_SW_TP_HTML_OPTGRID_PAGE		; > ;
			< "Print" ;						RID_SW_TP_HTML_OPTPRINT_PAGE	; > ;
			< "Table" ;						RID_SW_TP_HTML_OPTTABLE_PAGE	; > ;
			< "Background" ;				RID_SW_TP_BACKGROUND			; > ;
		};
	};
	StringArray SID_SM_EDITOPTIONS
	{
		ItemList [ en-US ] =
		{
			< "%PRODUCTNAME Math" ;		0						; > ;
			< "Settings" ;				SID_SM_TP_PRINTOPTIONS	; > ;
		};
	};
	StringArray SID_SC_EDITOPTIONS
	{
		ItemList [ en-US ] =
		{
			< "%PRODUCTNAME Calc" ;	0							; > ;
			< "General" ;			SID_SC_TP_LAYOUT			; > ;
			< "View" ;				SID_SC_TP_CONTENT			; > ;
			< "International" ;		RID_OFA_TP_INTERNATIONAL	; > ;
			< "Calculate" ;			SID_SC_TP_CALC				; > ;
			< "Sort Lists" ;		SID_SC_TP_USERLISTS			; > ;
			< "Changes" ;			SID_SC_TP_CHANGES			; > ;
			< "Grid" ;				SID_SC_TP_GRID				; > ;
			< "Print" ;				RID_SC_TP_PRINT				; > ;
		};
	};
	StringArray SID_SD_EDITOPTIONS
	{
		ItemList [ en-US ] =
		{
			< "%PRODUCTNAME Impress" ;	0					; > ;
			< "General" ;				SID_SI_TP_MISC		; > ;
			< "View" ;					SID_SI_TP_CONTENTS	; > ;
			< "Grid" ;					SID_SI_TP_SNAP		; > ;
			< "Print" ;					SID_SI_TP_PRINT		; > ;
		};
	};
	StringArray SID_SD_GRAPHIC_OPTIONS
	{
		ItemList [ en-US ] =
		{
			< "%PRODUCTNAME Draw" ;	0					; > ;
			< "General" ;			SID_SD_TP_MISC		; > ;
			< "View" ;				SID_SD_TP_CONTENTS	; > ;
			< "Grid" ;				SID_SD_TP_SNAP		; > ;
			< "Print" ;				SID_SD_TP_PRINT		; > ;
		};
	};
	StringArray SID_SCH_EDITOPTIONS
	{
		ItemList [ en-US ] =
		{
			< "Charts" ;			0							; > ;
			< "Default Colors" ;	RID_OPTPAGE_CHART_DEFCOLORS	; > ;
		};
	};
	StringArray SID_FILTER_DLG
	{
		ItemList [ en-US ] =
		{
			< "Load/Save" ;				0							; > ;
			< "General" ;				RID_SFXPAGE_SAVE			; > ;
			< "VBA Properties" ;		SID_OPTFILTER_MSOFFICE		; > ;
			< "Microsoft Office" ;		RID_OFAPAGE_MSFILTEROPT2	; > ;
			< "HTML Compatibility" ;	RID_OFAPAGE_HTMLOPT			; > ;
		};
	};
	StringArray SID_SB_STARBASEOPTIONS
	{
		ItemList [ en-US ] =
		{
			< "%PRODUCTNAME Base" ;	0							; > ;
			< "Connections" ;		SID_SB_CONNECTIONPOOLING	; > ;
			< "Databases" ;			SID_SB_DBREGISTEROPTIONS	; > ;
		};
	};
};
String RID_RIDER_SLL_SITE
{
	Text [ en-US ] = "Site certificates" ;
};
String RID_RIDER_SLL_PERSONAL
{
	Text [ en-US ] = "Personal certificates" ;
};

#define MASK_COL    MaskColor = Color { Red = 0xFF00; Green = 0x0000; Blue = 0xFF00; } ;
#define IMGLST_IDLST \
	IdList = {					\
		SID_GENERAL_OPTIONS;	\
		SID_LANGUAGE_OPTIONS;	\
		SID_INET_DLG;			\
		SID_SW_EDITOPTIONS;		\
		SID_SW_ONLINEOPTIONS;	\
		SID_SC_EDITOPTIONS;		\
		SID_SD_EDITOPTIONS;		\
		SID_SD_GRAPHIC_OPTIONS;	\
		SID_SM_EDITOPTIONS;		\
		SID_SCH_EDITOPTIONS;	\
		SID_SB_STARBASEOPTIONS;	\
		SID_FILTER_DLG;			\
	};							\
	IdCount = {					\
		12;						\
	};

ImageList RID_IMGLIST_TREEOPT
{
	Prefix = "tr" ;
	MASK_COL
	IMGLST_IDLST
};

ImageList RID_IMGLIST_TREEOPT_HC
{
	Prefix = "trh" ;
	MASK_COL
	IMGLST_IDLST
};

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