/**************************************************************
 * 
 * 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 "CellAppearancePropertyPanel.hrc"
#include <sfx2/sidebar/ResourceDefinitions.hrc>
#include "sc.hrc"
#include "helpids.h"

#define TOOLBOX_WIDTH		50
#define TOOLBOX_HEIGHT		15

#define TOOLBOX_WIDTH_2		34
#define TOOLBOX_HEIGHT_2	30

#define TOOLBOX_BORDER_WIDTH	107
#define PB_BORDER_MOREBTN		57
#define POPUPPANEL_MARGIN_SMALL_PIXEL	8

//////////////////////////////////////////////////////////////////////////////
// the basic propertypanel

Control RID_PROPERTYPANEL_SC_APPEAR
{
	OutputSize = TRUE;
	DialogControl = TRUE;
	Border = FALSE;

	Size = MAP_APPFONT( PROPERTYPAGE_WIDTH,  SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT * 2 +  TEXT_CONTROL_SPACING_VERTICAL * 2 + TOOLBOX_HEIGHT  + CONTROL_SPACING_VERTICAL * 2 +  TOOLBOX_HEIGHT_2 + CBOX_HEIGHT + SECTIONPAGE_MARGIN_VERTICAL_BOT - 2);	
	HelpID = HID_PROPERTYPANEL_SC_CELL_SECTION ;
	Text [ en-US ] = "Cell Appearance";
	
	FixedText FT_BK_COLOR
	{
		Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL, SECTIONPAGE_MARGIN_VERTICAL_TOP );
		Size = MAP_APPFONT ( PROPERTYPAGE_WIDTH - SECTIONPAGE_MARGIN_HORIZONTAL * 2 , TEXT_HEIGHT) ;
		Text [ en-US ] = "~Cell background:";
	};
	ToolBox TB_BK_COLOR
	{
		SVLook = TRUE ;
		Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL, SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL) ;
		Size = MAP_APPFONT (TOOLBOX_WIDTH ,TOOLBOX_HEIGHT ) ;
		TabStop = TRUE ;
		HelpID = HID_PROPERTYPANEL_SC_TBX_BKCOLOR ;
		Text [ en-US ] = "Cell Background";
		ItemList =
		{
			ToolBoxItem
			{
				Identifier = TBI_BK_COLOR ;
				DropDown = TRUE ;
				Text [ en-US ] = "Cell background" ;
				HelpID = HID_PROPERTYPANEL_SC_TBI_BKCOLOR;
			};
		};
	};
	String STR_QH_BK_COLOR
	{
		Text [ en-US ] = "Select the background color of the selected cells." ;
	};
	FixedText FT_BORDER
	{
		Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL, SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT +  TEXT_CONTROL_SPACING_VERTICAL + TOOLBOX_HEIGHT  + CONTROL_SPACING_VERTICAL);
		Size = MAP_APPFONT (  PROPERTYPAGE_WIDTH - SECTIONPAGE_MARGIN_HORIZONTAL * 2 , TEXT_HEIGHT) ;
		Text [ en-US ] = "Cell ~border:";
	};
	ToolBox TB_APP_BORDER
	{
		SVLook = TRUE ;
		Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL, SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT * 2 +  TEXT_CONTROL_SPACING_VERTICAL * 2 + TOOLBOX_HEIGHT  + CONTROL_SPACING_VERTICAL) ;
		Size = MAP_APPFONT (TOOLBOX_WIDTH_2 ,TOOLBOX_HEIGHT_2 ) ;
		TabStop = TRUE ;
		HelpID = HID_PROPERTYPANEL_SC_TBX_BORDER ;
		Text [ en-US ] = "Cell Border";
		ItemList =
		{
			ToolBoxItem
			{
				Identifier = TBI_BORDER ;
				DropDown = TRUE ;
				Text [ en-US ] = "Cell border" ;
				HelpID = HID_PROPERTYPANEL_SC_TBI_BORDER;
			};
		};
	};
	String STR_QH_BORDER
	{
		Text [ en-US ] = "Specify the borders of the selected cells." ;
	};
	ToolBox TB_BORDER_LINE_STYLE
	{
		SVLook = TRUE ;
		Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL + TOOLBOX_WIDTH_2 + 3, SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT * 2 +  TEXT_CONTROL_SPACING_VERTICAL * 2 + TOOLBOX_HEIGHT  + CONTROL_SPACING_VERTICAL ) ;
		Size = MAP_APPFONT (TOOLBOX_WIDTH ,TOOLBOX_HEIGHT) ;
		TabStop = TRUE ;
		HelpID = HID_PROPERTYPANEL_SC_TBX_STYLE ;
		Text [ en-US ] = "Line Style";
		ItemList =
		{
			ToolBoxItem
			{
				Identifier = TBI_LINE_STYLE ;
				DropDown = TRUE ;
				Text [ en-US ] = "Line style" ;
				HelpID = HID_PROPERTYPANEL_SC_TBI_STYLE;
			};
		};
	};
	String STR_QH_BORDER_LINE_STYLE
	{
		Text [ en-US ] = "Select the line style of the borders." ;
	};
	ToolBox TB_BORDER_LINE_COLOR
	{
		SVLook = TRUE ;
		Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL + TOOLBOX_WIDTH_2 + 3, SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT * 2 +  TEXT_CONTROL_SPACING_VERTICAL * 2 + TOOLBOX_HEIGHT * 2  + CONTROL_SPACING_VERTICAL + 3) ;
		Size = MAP_APPFONT (TOOLBOX_WIDTH ,TOOLBOX_HEIGHT ) ;
		TabStop = TRUE ;
		HelpID = HID_PROPERTYPANEL_SC_TBX_LINECOLOR ;
		Text [ en-US ] = "Line Color";
		ItemList =
		{
			ToolBoxItem
			{
				Identifier = TBI_LINE_COLOR ;
				DropDown = TRUE ;
				Text [ en-US ] = "Line color" ;
				HelpID = HID_PROPERTYPANEL_SC_TBI_LINECOLOR;
			};
		};
	};
	String STR_QH_BORDER_LINE_COLOR
	{
		Text [ en-US ] = "Select the line color of the borders." ;
	};
	CheckBox CBX_SHOW_GRID
	{
		Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL , SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT * 2 +  TEXT_CONTROL_SPACING_VERTICAL * 2  +  TOOLBOX_HEIGHT + CONTROL_SPACING_VERTICAL * 2 +  TOOLBOX_HEIGHT_2 + 2) ;
        Size = MAP_APPFONT ( 90 , CBOX_HEIGHT ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Show cell ~grid lines" ;
		QuickHelpText [ en-US ] = "Show the grid lines of the cells in the entire spreadsheet.";
		HelpID = HID_PROPERTYPANEL_SC_CBOX_SHOWGRID;
	};	
	
	Image IMG_BK_COLOR
	{
		ImageBitmap = Bitmap{File = "sidebar/fill_color.png";};
	};
	Image IMG_CELL_BORDER
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder.png";};
		//MaskColor = STD_MASKCOLOR ;
	};
	Image IMG_LINE_COLOR
	{
		ImageBitmap = Bitmap{File = "sidebar/Line_color.png";};
	};
	Image IMG_LINE_STYLE1
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_005.png";};
	};
	Image IMG_LINE_STYLE2
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_250.png";};
	};
	Image IMG_LINE_STYLE3
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_400.png";};
	};
	Image IMG_LINE_STYLE4
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_500.png";};
	};
	Image IMG_LINE_STYLE5
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_110.png";};
	};
	Image IMG_LINE_STYLE6
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_260.png";};
	};
	Image IMG_LINE_STYLE7
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_450.png";};
	};
	Image IMG_LINE_STYLE8
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_505.png";};
	};
	Image IMG_LINE_STYLE9
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_750.png";};
	};
	
	//high contrast
	Image IMG_BK_COLOR_H
	{
		ImageBitmap = Bitmap{File = "sidebar/fill_color_h.png";};
	};
	Image IMG_LINE_STYLE1_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_005_h.png";};
	};
	Image IMG_LINE_STYLE2_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_250_h.png";};
	};
	Image IMG_LINE_STYLE3_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_400_h.png";};
	};
	Image IMG_LINE_STYLE4_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_500_h.png";};
	};
	Image IMG_LINE_STYLE5_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_110_h.png";};
	};
	Image IMG_LINE_STYLE6_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_260_h.png";};
	};
	Image IMG_LINE_STYLE7_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_450_h.png";};
	};
	Image IMG_LINE_STYLE8_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_505_h.png";};
	};
	Image IMG_LINE_STYLE9_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_750_h.png";};
	};
	
};

//////////////////////////////////////////////////////////////////////////////
// fill color popup

Control RID_POPUPPANEL_CELLAPPEARANCE_FILLCOLOR
{
	OutputSize = TRUE;
	DialogControl = TRUE;
	Border = FALSE;
	Size = MAP_APPFONT(  POPUP_COLOR_PICKER_WIDTH , POPUP_COLOR_PICKER_HEIGHT  );
	
	Control VS_FILLCOLOR
	{
		HelpID = HID_PROPERTYPANEL_FILL_COLOR_VS;
        Hide = TRUE ;
        Pos = MAP_APPFONT ( OFFSET_X , OFFSET_Y );
        Size = MAP_APPFONT (  POPUP_COLOR_PICKER_WIDTH - OFFSET_X * 2, POPUP_COLOR_PICKER_HEIGHT - OFFSET_Y * 2);
		TabStop = TRUE ;
		Text [ en-US ] = "Color";
	};

	String VS_NOFILLCOLOR
	{
		Text [ en-US ] = "No Color" ;
	};
};

//////////////////////////////////////////////////////////////////////////////
// line color popup

Control RID_POPUPPANEL_CELLAPPEARANCE_LINECOLOR
{
	OutputSize = TRUE;
	DialogControl = TRUE;
	Border = FALSE;
	Size = MAP_APPFONT(  POPUP_COLOR_PICKER_WIDTH , POPUP_COLOR_PICKER_HEIGHT  );
	
	Control VS_LINECOLOR
	{
		HelpID = HID_PROPERTYPANEL_LINE_COLOR_VS;
        Hide = TRUE ;
        Pos = MAP_APPFONT ( OFFSET_X , OFFSET_Y );
        Size = MAP_APPFONT (  POPUP_COLOR_PICKER_WIDTH - OFFSET_X * 2, POPUP_COLOR_PICKER_HEIGHT - OFFSET_Y * 2);
		TabStop = TRUE ;
		Text [ en-US ] = "Color";
	};
};

//////////////////////////////////////////////////////////////////////////////
// cell line style popup

Control RID_POPUPPANEL_APPEARANCE_CELL_LINESTYLE
{
	OutputSize = TRUE;
	DialogControl = TRUE;
	Border = FALSE;
	
	Size = MAP_APPFONT(  
        POPUPPANEL_MARGIN_SMALL * 2 + POPUP_BORDER_WIDTH + 80,  
        13 + POPUP_BORDER_HEIGHT + POPUPPANEL_MARGIN_SMALL * 2 + POPUPPANEL_MARGIN_LARGE + 12*9);
	
	Control VS_STYLE
	{
		HelpID = HID_PROPERTYPANEL_SC_STYLE_VS ;
        Hide = TRUE ;
        Pos = MAP_APPFONT(  POPUPPANEL_MARGIN_SMALL + OFFSET_X , POPUPPANEL_MARGIN_SMALL + OFFSET_Y ); 
        Size = MAP_APPFONT ( 80  , 12 * 9);
		TabStop = TRUE ;
		Text [ en-US ] = "Line Style";
	};
	PushButton PB_OPTIONS
	{
		HelpID = HID_PROPERTYPANEL_SC_STYLE_PB;
		Pos = MAP_APPFONT (  POPUPPANEL_MARGIN_LARGE + OFFSET_X , POPUPPANEL_MARGIN_SMALL * 2 + OFFSET_Y + 12 * 9);
		Size = MAP_APPFONT ( 75 , 12 );
		TabStop = TRUE;
		Text [ en-US ] = "~More Options...";
	};
	Bitmap	BMP_UNDERLINE_MORE
	{
		File = "sidebar/morebutton.png";
	};
	Bitmap	BMP_UNDERLINE_MORE_H
	{
		File = "sidebar/morebutton_h.png";
	};	
};

//////////////////////////////////////////////////////////////////////////////
// cell border style popup

Control RID_POPUPPANEL_APPEARANCE_CELL_BORDERSTYLE
{
	OutputSize = TRUE;
	DialogControl = TRUE;
	Border = FALSE;
	
	Size = MAP_PIXEL(  POPUPPANEL_MARGIN_SMALL_PIXEL * 2 + 108,  POPUPPANEL_MARGIN_SMALL_PIXEL * 2  + 138);
	
	ToolBox TB_BORDER1
	{
		SVLook = TRUE ;
		Pos = MAP_PIXEL(POPUPPANEL_MARGIN_SMALL_PIXEL, POPUPPANEL_MARGIN_SMALL_PIXEL); //MAP_APPFONT (POPUPPANEL_MARGIN_SMALL + OFFSET_X + 1, POPUPPANEL_MARGIN_SMALL + OFFSET_Y + 1) ;
		Size = MAP_PIXEL(TOOLBOX_BORDER_WIDTH, 31); //MAP_APPFONT (TOOLBOX_BORDER_WIDTH ,20) ;
		TabStop = TRUE ;
		HelpID = HID_PROPERTYPANEL_SC_BORDER1_TBX;
		Text [ en-US ] = "Cell Border 1";
		ItemList =
		{
			ToolBoxItem
			{
				Identifier = TBI_BORDER1_NONE ;
				HelpID = HID_PROPERTYPANEL_SC_BORDER_TBI_NONE;
				Text [ en-US ] = "No Border" ;
			};
			ToolBoxItem
			{
				Identifier = TBI_BORDER1_ALL ;
				HelpID = HID_PROPERTYPANEL_SC_BORDER_TBI_ALL;
				Text [ en-US ] = "All Borders" ;
			};
			ToolBoxItem
			{
				Identifier = TBI_BORDER1_OUTER ;
				HelpID = HID_PROPERTYPANEL_SC_BORDER_TBI_OUTER;
				Text [ en-US ] = "Outside Borders" ;
			};
			ToolBoxItem
			{
				Identifier = TBI_BORDER1_OUTERBOLD ;
				HelpID = HID_PROPERTYPANEL_SC_BORDER_TBI_OUTERBOLD;
				Text [ en-US ] = "Thick Box Border" ;
			};
		};
	};
	FixedLine FL_1
	{
		Pos = MAP_PIXEL(POPUPPANEL_MARGIN_SMALL_PIXEL, POPUPPANEL_MARGIN_SMALL_PIXEL + 31); //MAP_APPFONT ( POPUPPANEL_MARGIN_SMALL + OFFSET_X + 1 , POPUPPANEL_MARGIN_SMALL + OFFSET_Y + 20 + 1) ;
        Size = MAP_PIXEL(TOOLBOX_BORDER_WIDTH, 8); // MAP_APPFONT ( TOOLBOX_BORDER_WIDTH , 5 ) ;
	};
	ToolBox TB_BORDER2
	{
		SVLook = TRUE ;
		Pos = MAP_PIXEL(POPUPPANEL_MARGIN_SMALL_PIXEL, POPUPPANEL_MARGIN_SMALL_PIXEL + 31 + 8); // MAP_APPFONT (POPUPPANEL_MARGIN_SMALL + OFFSET_X + 1, POPUPPANEL_MARGIN_SMALL + OFFSET_Y + 20 + 5 + 1) ;
		Size = MAP_PIXEL (TOOLBOX_BORDER_WIDTH ,61) ;
		TabStop = TRUE ;
		HelpID = HID_PROPERTYPANEL_SC_BORDER2_TBX;
		Text [ en-US ] = "Cell Border 2";
	};
	FixedLine FL_2
	{
		Pos = MAP_PIXEL(POPUPPANEL_MARGIN_SMALL_PIXEL, POPUPPANEL_MARGIN_SMALL_PIXEL + 31 + 8 + 61); // MAP_APPFONT ( POPUPPANEL_MARGIN_SMALL + OFFSET_X + 1 , POPUPPANEL_MARGIN_SMALL + OFFSET_Y + 20 + 38 + 5 + 1) ;
        Size = MAP_PIXEL ( TOOLBOX_BORDER_WIDTH , 8 ) ;
	};
	ToolBox TB_BORDER3
	{
		SVLook = TRUE ;
		Pos = MAP_PIXEL(POPUPPANEL_MARGIN_SMALL_PIXEL, POPUPPANEL_MARGIN_SMALL_PIXEL + 31 +8 + 61 + 8); // MAP_APPFONT (POPUPPANEL_MARGIN_SMALL + OFFSET_X + 1, POPUPPANEL_MARGIN_SMALL + OFFSET_Y + 20 + 38 + 10 + 1) ;
		Size = MAP_PIXEL (TOOLBOX_BORDER_WIDTH ,31) ;
		TabStop = TRUE ;
		HelpID = HID_PROPERTYPANEL_SC_BORDER3_TBX;
		Text [ en-US ] = "Cell Border 3";
		ItemList =
		{
			ToolBoxItem
			{
				Identifier = TBI_BORDER3_S1;
				HelpID = HID_PROPERTYPANEL_SC_BORDER_TBI_S1;
				Text [ en-US ] = "Thick Bottom Border" ;	
			};
			ToolBoxItem
			{
				Identifier = TBI_BORDER3_S2 ;
				HelpID = HID_PROPERTYPANEL_SC_BORDER_TBI_S2;
				Text [ en-US ] = "Double Bottom Border" ;	
			};
			ToolBoxItem
			{
				Identifier = TBI_BORDER3_S3 ;
				HelpID = HID_PROPERTYPANEL_SC_BORDER_TBI_S3;
				Text [ en-US ] = "Top and Thick Bottom Borders" ;	
			};
			ToolBoxItem
			{
				Identifier = TBI_BORDER3_S4 ;
				HelpID = HID_PROPERTYPANEL_SC_BORDER_TBI_S4;
				Text [ en-US ] = "Top and Double Bottom Borders" ;	
			};
		};
	};
	
	Image IMG_BORDER1
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_Empty_18x18.png";};
	};
	Image IMG_BORDER2
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_All_18x18.png";};
	};
	Image IMG_BORDER3
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_FourBorders_18x18.png";};
	};
	Image IMG_BORDER4
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_FourBorders_Thick_18x18.png";};
	};
	Image IMG_BORDER5
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_Left_18x18.png";};
	};
	Image IMG_BORDER6
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_Right_18x18.png";};
	};
	Image IMG_BORDER7
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_Top_18x18.png";};
	};
	Image IMG_BORDER8
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_Bottom_18x18.png";};
	};
	Image IMG_BORDER9
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_RightDiagonal_18x18.png";};
	};
	Image IMG_BORDER10
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_LeftDiagonal_18x18.png";};
	};
	Image IMG_BORDER11
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_TopAndBottom_18x18.png";};
	};
	Image IMG_BORDER12
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_LeftAndRight_18x18.png";};
	};
	Image IMG_BORDER13
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_Bottom_Thick_18x18.png";};
	};
	Image IMG_BORDER14
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_Bottom_Double_18x18.png";};
	};
	Image IMG_BORDER15
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_TopThin_BottomThick_18x18.png";};
	};
	Image IMG_BORDER16
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_TopSingle_BottomDouble_18x18.png";};
	};
	String STR_BORDER_1
	{
		Text [ en-US ] = "Left Border";
	};
	String STR_BORDER_2
	{
		Text [ en-US ] = "Right Border";
	};
	String STR_BORDER_3
	{
		Text [ en-US ] = "Top Border";
	};
	String STR_BORDER_4
	{
		Text [ en-US ] = "Bottom Border";
	};
	String STR_BORDER_5
	{
		Text [ en-US ] = "Diagonal Up Border";
	};
	String STR_BORDER_6
	{
		Text [ en-US ] = "Diagonal Down Border";
	};
	String STR_BORDER_7
	{
		Text [ en-US ] = "Top and Bottom Borders";
	};
	String STR_BORDER_8
	{
		Text [ en-US ] = "Left and Right Borders";
	};

	//high contrast
	Image IMG_BORDER1_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_Empty_18x18_h.png";};
	};
	Image IMG_BORDER2_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_All_18x18_h.png";};
	};
	Image IMG_BORDER3_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_FourBorders_18x18_h.png";};
	};
	Image IMG_BORDER4_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_FourBorders_Thick_18x18_h.png";};
	};
	Image IMG_BORDER5_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_Left_18x18_h.png";};
	};
	Image IMG_BORDER6_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_Right_18x18_h.png";};
	};
	Image IMG_BORDER7_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_Top_18x18_h.png";};
	};
	Image IMG_BORDER8_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_Bottom_18x18_h.png";};
	};
	Image IMG_BORDER9_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_RightDiagonal_18x18_h.png";};
	};
	Image IMG_BORDER10_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_LeftDiagonal_18x18_h.png";};
	};
	Image IMG_BORDER11_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_TopAndBottom_18x18_h.png";};
	};
	Image IMG_BORDER12_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_LeftAndRight_18x18_h.png";};
	};
	Image IMG_BORDER13_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_Bottom_Thick_18x18_h.png";};
	};
	Image IMG_BORDER14_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_Bottom_Double_18x18_h.png";};
	};
	Image IMG_BORDER15_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_TopThin_BottomThick_18x18_h.png";};
	};
	Image IMG_BORDER16_H
	{
		ImageBitmap = Bitmap{File = "sidebar/CellBorder_TopSingle_BottomDouble_18x18_h.png";};
	};
};

// eof
