###############################################################################
# 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 Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################
window.title = SWT Layouts

Add					= &Add
Delete	 			= &Delete
Clear				= &Clear
Children			= Children
Type				= Type
Layout				= Layout
Preferred_Size		= Preferred Size
Code				= C&ode
Generated_Code		= Generated Code
Parameters			= Parameters
Properties			= Properties
Margins				= Margins
Margins_Spacing		= Margins and Spacing
Columns				= Columns
Attach_Edit			= Edit
Left_Attachment		= Edit Left Attachment
Right_Attachment	= Edit Right Attachment
Top_Attachment		= Edit Top Attachment
Bottom_Attachment	= Edit Bottom Attachment
Position			= Position
Control				= Control
Offset				= Offset [+/-]
Item				= Item {0}
Combo_Index			= Combo {0}
Group_Index			= Group {0}
Label_Index			= Label {0}
Button_Index		= Button {0}
StyledText_Index	= StyledText {0}
Text_Index			= Text {0}
OK					= OK
Cancel				= Cancel
Edit				= &Edit
Select_All			= Select &All\tCtrl+A
Copy				= &Copy\tCtrl+C
Exit				= E&xit
Name_Title			= Enter Names
Name_Label			= Enter names for your controls
Invalid_Name 		= Invalid Name - Please enter valid variable names for your controls
Default				= Default