/**************************************************************
 *
 * 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 ---------------------------------------------------------------
#include <svx/dialogs.hrc>
#include "helpid.hrc"
#include "stbctrls.h"
// pragma ----------------------------------------------------------------

// Strings ---------------------------------------------------------------
String RID_SVXSTR_INSERT_TEXT
{
	// 'Insert' shortened to max. 5 characters
	Text [ en-US ] = "INSRT" ;
};
String RID_SVXSTR_OVERWRITE_TEXT
{
	// 'Overwrite' shortened to max. 5 characters
	Text [ en-US ] = "OVER" ;
};
String RID_SVXSTR_SELMODE_STD
{
	// 'Standard' shortened to max. 3 characters
	Text [ en-US ] = "STD" ;
};
String RID_SVXSTR_SELMODE_ER
{
	// 'Extended' shortened to max. 3 characters
	Text [ en-US ] = "EXT" ;
};
String RID_SVXSTR_SELMODE_ERG
{
	// 'Added' shortened to max. 3 characters
	Text [ en-US ] = "ADD" ;
};

String RID_SVXSTR_SELMODE_BLK
{
	// 'Block' shortened to max. 3 characters
	Text [ en-US ] = "BLK" ;
};

String RID_SVXSTR_XMLSEC_SIG_OK
{
	Text [ en-US ] = "Digital Signature: The document signature is OK." ;
};

String RID_SVXSTR_XMLSEC_SIG_OK_NO_VERIFY
{
	Text [ en-US ] = "Digital Signature: The document signature is OK, but the certificates could not be validated." ;
};

String RID_SVXSTR_XMLSEC_SIG_NOT_OK
{
	Text [ en-US ] = "Digital Signature: The document signature does not match the document content. We strongly recommend that you do not trust this document." ;
};

String RID_SVXSTR_XMLSEC_NO_SIG
{
	Text [ en-US ] = "Digital Signature: The document is not signed." ;
};

String RID_SVXSTR_XMLSEC_SIG_CERT_OK_PARTIAL_SIG
{
	Text [ en-US ] = "Digital Signature: The document signature and the certificate are OK, but not all parts of the document are signed." ;
};

// PopupMenu -------------------------------------------------------------
Menu RID_SVXMNU_ZOOM
{
	ItemList =
	{
		MenuItem
		{
			Identifier = ZOOM_200 ;
			HelpId = HID_MNU_ZOOM_200 ;
			Text [ en-US ] = "200%" ;
		};
		MenuItem
		{
			Identifier = ZOOM_150 ;
			HelpId = HID_MNU_ZOOM_150 ;
			Text [ en-US ] = "150%" ;
		};
		MenuItem
		{
			Identifier = ZOOM_100 ;
			HelpId = HID_MNU_ZOOM_100 ;
			Text [ en-US ] = "100%" ;
		};
		MenuItem
		{
			Identifier = ZOOM_75 ;
			HelpId = HID_MNU_ZOOM_75 ;
			Text [ en-US ] = "75%" ;
		};
		MenuItem
		{
			Identifier = ZOOM_50 ;
			HelpId = HID_MNU_ZOOM_50 ;
			Text [ en-US ] = "50%" ;
		};
		MenuItem
		{
			Identifier = ZOOM_OPTIMAL ;
			HelpId = HID_MNU_ZOOM_OPTIMAL ;
			Text [ en-US ] = "Optimal" ;
		};
		MenuItem
		{
			Identifier = ZOOM_PAGE_WIDTH ;
			HelpId = HID_MNU_ZOOM_PAGE_WIDTH ;
			Text [ en-US ] = "Page Width" ;
		};
		MenuItem
		{
			Identifier = ZOOM_WHOLE_PAGE ;
			HelpId = HID_MNU_ZOOM_WHOLE_PAGE ;
			Text [ en-US ] = "Entire Page" ;
		};
	};
};
// Function selection for SvxPosSizeStatusBarControl in Calc
Menu RID_SVXMNU_PSZ_FUNC
{
	ItemList =
	{
		MenuItem
		{
			Identifier = PSZ_FUNC_AVG ;
			HelpId = HID_MNU_FUNC_AVG ;
			Text [ en-US ] = "Average" ;
		};
		MenuItem
		{
			Identifier = PSZ_FUNC_COUNT2 ;
			HelpId = HID_MNU_FUNC_COUNT2 ;
			Text [ en-US ] = "CountA" ;
		};
		MenuItem
		{
			Identifier = PSZ_FUNC_COUNT ;
			HelpId = HID_MNU_FUNC_COUNT ;
			Text [ en-US ] = "Count" ;
		};
		MenuItem
		{
			Identifier = PSZ_FUNC_MAX ;
			HelpId = HID_MNU_FUNC_MAX ;
			Text [ en-US ] = "Maximum" ;
		};
		MenuItem
		{
			Identifier = PSZ_FUNC_MIN ;
			HelpId = HID_MNU_FUNC_MIN ;
			Text [ en-US ] = "Minimum" ;
		};
		MenuItem
		{
			Identifier = PSZ_FUNC_SUM ;
			HelpId = HID_MNU_FUNC_SUM ;
			Text [ en-US ] = "Sum" ;
		};
		MenuItem
		{
			Identifier = PSZ_FUNC_NONE ;
			HelpId = HID_MNU_FUNC_NONE ;
			Text [ en-US ] = "None" ;
		};
	};
};
Menu RID_SVXMNU_XMLSECSTATBAR
{
	ItemList =
	{
		MenuItem
		{
			Identifier = XMLSEC_CALL ;
			HelpId = HID_XMLSEC_CALL ;
			Text [ en-US ] = "Digital Signatures..." ;
		};
	};
};

// Images ----------------------------------------------------------------

Image RID_SVXBMP_POSITION
{
	ImageBitmap = Bitmap
	{
		File = "sc10223.png" ;
	};
};
Image RID_SVXBMP_SIZE
{
	ImageBitmap = Bitmap
	{
		File = "sc10224.png" ;
	};
};
Image RID_SVXBMP_SIGNET
{
	ImageBitmap = Bitmap
	{
		File = "signet_11x16.png" ;
	};
};
Image RID_SVXBMP_SIGNET_BROKEN
{
	ImageBitmap = Bitmap
	{
		File = "caution_11x16.png" ;
	};
};
Image RID_SVXBMP_SIGNET_NOTVALIDATED
{
	ImageBitmap = Bitmap
	{
		File = "notcertificate_11x16.png" ;
	};
};
Image RID_SVXBMP_POSITION_H
{
	ImageBitmap = Bitmap
	{
		File = "sch10223.png" ;
	};
};
Image RID_SVXBMP_SIZE_H
{
	ImageBitmap = Bitmap
	{
		File = "sch10224.png" ;
	};
};
Image RID_SVXBMP_SIGNET_H
{
	ImageBitmap = Bitmap
	{
		File = "signet_11x16_h.png" ;
	};
};
Image RID_SVXBMP_SIGNET_BROKEN_H
{
	ImageBitmap = Bitmap
	{
		File = "caution_11x16_h.png" ;
	};
};
Image RID_SVXBMP_SIGNET_NOTVALIDATED_H
{
	ImageBitmap = Bitmap
	{
		File = "notcertificate_11x16_h.png" ;
	};
};


Image RID_SVXBMP_SLIDERBUTTON
{
	ImageBitmap = Bitmap
	{
		File = "slidecontrol.png" ;
	};
};
Image RID_SVXBMP_SLIDERDECREASE
{
	ImageBitmap = Bitmap
	{
		File = "slidezoomout_11.png" ;
	};
};
Image RID_SVXBMP_SLIDERINCREASE
{
	ImageBitmap = Bitmap
	{
		File = "slidezoomin_11.png" ;
	};
};
Image RID_SVXBMP_SLIDERBUTTON_HC
{
	ImageBitmap = Bitmap
	{
		File = "slidecontrol_h.png" ;
	};
};
Image RID_SVXBMP_SLIDERDECREASE_HC
{
	ImageBitmap = Bitmap
	{
		File = "slidezoomout_11_h.png" ;
	};
};
Image RID_SVXBMP_SLIDERINCREASE_HC
{
	ImageBitmap = Bitmap
	{
		File = "slidezoomin_11_h.png" ;
	};
};

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