/**************************************************************
 *
 * 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 <svx/dialogs.hrc>
#include "attrdlg.hrc"

 //================================================
 // Attributdialog:

TabDialog RID_SCDLG_ATTR
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 280 , 165 ) ;
	Text [ en-US ] = "Format Cells" ;
	Moveable = TRUE ;
	Closeable = FALSE ;
	TabControl 1
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( 23 , 0 ) ;
		Size = MAP_APPFONT ( 260 , 135 ) ;
		PageList =
		{
			PageItem
			{
				Identifier = TP_NUMBER ;
				PageResID = 256 ;
				Text [ en-US ] = "Numbers" ;
			};
			PageItem
			{
				Identifier = TP_FONT ;
				PageResID = 257 ;
				Text [ en-US ] = "Font" ;
			};
			PageItem
			{
				Identifier = TP_FONTEFF ;
				PageResID = 262 ;
				Text [ en-US ] = "Font Effects";
			};
			PageItem
			{
				Identifier = TP_ALIGNMENT ;
				PageResID = 258 ;
				Text [ en-US ] = "Alignment" ;
			};
			PageItem
			{
				Identifier = TP_ASIAN ;
				PageResID = 263 ;
				Text [ en-US ] = "Asian Typography";
			};
			PageItem
			{
				Identifier = TP_BORDER ;
				PageResID = 259 ;
				Text [ en-US ] = "Borders" ;
			};
			PageItem
			{
				Identifier = TP_BACKGROUND ;
				PageResID = 260 ;
				Text [ en-US ] = "Background" ;
			};
			PageItem
			{
				Identifier = TP_PROTECTION ;
				PageResID = 261 ;
				Text [ en-US ] = "Cell Protection" ;
			};
		};
	};
};

 //================================================
 // Zellschutz-TabPage:

TabPage RID_SCPAGE_PROTECTION
{
	Hide = TRUE ;
	SVLook = TRUE ;
	HelpId = HID_SCPAGE_PROTECTION ;
	Pos = MAP_APPFONT ( 0 , 0 ) ;
	Size = MAP_APPFONT ( 260 , 185 ) ;
	TriStateBox BTN_PROTECTED
	{
	    HelpID = "sc:TriStateBox:RID_SCPAGE_PROTECTION:BTN_PROTECTED";
        Pos = MAP_APPFONT ( 22 , 28 ) ;
        Size = MAP_APPFONT ( 90 , 10 ) ;
		Text [ en-US ] = "~Protected" ;
		TabStop = TRUE ;
	};
	TriStateBox BTN_HIDE_FORMULAR
	{
	    HelpID = "sc:TriStateBox:RID_SCPAGE_PROTECTION:BTN_HIDE_FORMULAR";
        Pos = MAP_APPFONT ( 22 , 42 ) ;
        Size = MAP_APPFONT ( 90 , 10 ) ;
		Text [ en-US ] = "Hide ~formula" ;
		TabStop = TRUE ;
	};
	TriStateBox BTN_HIDE_ALL
	{
	    HelpID = "sc:TriStateBox:RID_SCPAGE_PROTECTION:BTN_HIDE_ALL";
        Pos = MAP_APPFONT ( 12 , 14 ) ;
		Size = MAP_APPFONT ( 100 , 10 ) ;
		Text [ en-US ] = "Hide ~all" ;
		TabStop = TRUE ;
	};
	FixedText FT_HINT
	{
		Pos = MAP_APPFONT ( 114 , 14 ) ;
        Size = MAP_APPFONT ( 137 , 56 ) ;
		WordBreak = TRUE ;
		Text [ en-US ] = "Cell protection is only effective after the current sheet has been protected. \n\nSelect 'Protect Document' from the 'Tools' menu, and specify 'Sheet'." ;
	};
    FixedLine FL_PROTECTION
	{
		Pos = MAP_APPFONT ( 6 , 3 ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
		Text [ en-US ] = "Protection" ;
	};
	TriStateBox BTN_HIDE_PRINT
	{
	    HelpID = "sc:TriStateBox:RID_SCPAGE_PROTECTION:BTN_HIDE_PRINT";
		Pos = MAP_APPFONT ( 12 , 87 ) ;
		Size = MAP_APPFONT ( 100 , 10 ) ;
		Text [ en-US ] = "Hide ~when printing" ;
		TabStop = TRUE ;
	};
	FixedText FT_HINT2
	{
		Pos = MAP_APPFONT ( 114 , 87 ) ;
        Size = MAP_APPFONT ( 137 , 24 ) ;
		WordBreak = TRUE ;
		Text [ en-US ] = "The cells selected will be omitted when printing." ;
	};
    FixedLine FL_PRINT
	{
		Pos = MAP_APPFONT ( 6 , 76 ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
		Text [ en-US ] = "Print" ;
	};
};
