###############################################################################
# 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
Italic				= Italic
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)

