###############################################################################
# Copyright (c) 2000, 2003 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials 
# are made available under the terms of the Common Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/cpl-v10.html
# 
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################
error.CouldNotLoadResources = Unable to load resources
window.title = SWT Controls
custom.window.title = SWT Custom Controls

Text_Buttons		= Text Buttons
Size 				= Size
Alignment			= Alignment
Left				= Left
Right				= Right
Up					= Up
Down				= Down
Center				= Center
One					= One
Two					= Two
Three				= Three
Image_Buttons		= Image Buttons
Control_Example		= Control Example
Parameters			= Parameters
Other				= Other
Enabled				= Enabled
Visible				= Visible
Preferred 			= Preferred
Styles	 			= Styles
Listeners			= Listeners
Select_Listeners	= Select Listeners
Listen				= Listen
Clear				= Clear
Select_All			= Select All
Deselect_All		= Deselect All
OK					= OK
FillDamage			= Fill Damaged Area With Color
Title_Text			= Title Text
Text_Labels			= Text Labels
Image_Labels		= Image Labels
Custom_Labels		= Custom Labels
Custom_Combo		= Custom Combo
One_Two_Three		= One Two Three
Text_ToolBar 		= Text ToolBar
Image_ToolBar 		= Image ToolBar
Maximum				= Maximum
Minimum				= Minimum
Selection			= Selection
Increment			= Increment
Page_Increment		= Page Increment
Thumb				= Thumb
Tree_With_Images	= Tree With Images
Dialog_Type			= Dialog Type
Create_Dialog		= Create Dialog
Button_Styles		= Button Styles
Icon_Styles			= Icon Styles
Modal_Styles		= Modal Styles
File_Dialog_Styles	= File Dialog Styles
Item_Styles			= Item Styles
Dialog_Result		= Dialog Result
ColorDialog			= ColorDialog
DirectoryDialog		= DirectoryDialog
FileDialog			= FileDialog
FontDialog			= FontDialog
PrintDialog			= PrintDialog
MessageBox			= MessageBox
Multi_line			= A multi line text widget.
Example_string		= The quick brown fox jumps over the lazy dog.
Header_Visible		= Header Visible
Lines_Visible		= Lines Visible
Locked				= Locked
Node_1				= Node 1
Node_2				= Node 2
Node_3				= Node 3
Node_4				= Node 4
Node_1_1			= Node 1.1
Node_2_1			= Node 2.1
Node_3_1			= Node 3.1
Node_2_2			= Node 2.2
Node_2_2_1			= Node 2.2.1
Parent				= Parent
No_Parent			= No Parent
Decoration_Styles	= Decoration Styles
Create_Shell		= Create Shell
Close_All_Shells	= Close All Shells
Push				= Push
Radio				= Radio
Check				= Check
Drop_Down			= Drop Down
Images_failed		= Warning: Failed to load images
readme_txt			= readme.txt
Index				= Index:
Title				= Title:
Close				= Close
Result				= Result: {0}
FilterName_0		= Text Files
FilterName_1		= Batch Files
FilterName_2		= Doc Files
TableTitle_0		= Name
TableTitle_1		= Type
TableTitle_2		= Size
TableTitle_3		= Modified
TableLine0_0		= <empty>
TableLine0_1		= classes
TableLine0_2		= 0
TableLine0_3		= today
TableLine1_0		= <empty>
TableLine1_1		= databases
TableLine1_2		= 2556
TableLine1_3		= <empty>
TableLine2_0		= <empty>
TableLine2_1		= images
TableLine2_2		= 91571
TableLine2_3		= yesterday
ListData0_0			= Line 1
ListData0_1			= Line 2
ListData0_2			= Line 3
ListData0_3			= Line 4
ListData0_4			= Line 5
ListData0_5			= Line 6
ListData0_6			= Line 7
ListData0_7			= Line 8
ListData0_8			= Longest Line In List
ListData1_0			= Apples
ListData1_1			= Oranges
ListData1_2			= Bananas
ListData1_3			= Grapefruit
ListData1_4			= Peaches
ListData1_5			= Kiwi
ListData1_6			= Apricots
ListData1_7			= Strawberries
ListData1_8			= The Longest String
DropDownData_0			= Apples
DropDownData_1			= Oranges
DropDownData_2			=
DropDownData_3			= Grapefruit
DropDownData_4			= Peaches
DropDownData_5			= Kiwi
DropDownData_6			=
DropDownData_7			= Strawberries
DropDownData_8			= The Longest String
Colors 				= Colors and Font
Table_Item_Colors	= Row 0 Colors and Font
Tree_Item_Colors	= Node 1 Colors and Font
CTab_Item_Colors	= CTab 0 Font
Background_Color	= Background Color
Foreground_Color	= Foreground Color
Font				= &Font...
Defaults			= &Defaults
Wrap_Text			= Jack and Jill went up the hill to fetch a pail of water, \
					  Jack fell down and broke his crown and Jill came tumbling after!
Foreground_Style	= Foreground Style
Background_Style 	= Background Style
StyledText_Styles	= Text Styles
StyledText_Style_Instructions	= Select text, then style.
Bold				= Bold
Fill				= Horizontal Fill
TabItem1_0			= Tab 0
TabItem1_1			= Tab 1
TabItem1_2			= Tab 2
TabItem_content		= TabItem Content
CTabItem1_0			= CTabItem 0
CTabItem1_1			= CTabItem 1
CTabItem1_2			= CTabItem 2 has a long name
CItem_Colors		= CTabItem Colors
CTabItem_content	= CTabItem Content
Set_Simple_Tabs		= Simple Tabs
Set_Image			= Image
TableTree_column	= Column
MenuItem_Cut		= Cu&t	Ctrl+X
MenuItem_Copy		= &Copy	Ctrl+C
MenuItem_Paste		= &Paste	Ctrl+V
MenuItem_SelectAll	= Select &All	Ctrl+A
Orientation = Orientation
Default = Default (Inherit)

