###############################################################################
# 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
###############################################################################
providerName = Eclipse.org
plugin.SWTStandaloneExampleSet.name = SWT Standalone Examples Plugin

launchcategory.SWTStandaloneExamples.name = Standalone
launchcategory.SWTStandaloneExamples.description = \
	A collection of Standard Widget Toolkit examples that run independant \
	of the Eclipse Platform.

launchitem.AddressBook.name = Address Book
launchitem.AddressBook.description = \
	The AddressBook example shows how the Table control can be used to \
	present information in a tabular format.\n\n\
	The application can save and load data from a file, sort the entries, and \
	search for strings within the fields.

launchitem.Clipboard.name = Clipboard
launchitem.Clipboard.description = \
	The Clipboard example shows the various SWT clipboard transfer types in use.

launchitem.ControlExample.name = SWT Controls Example
launchitem.ControlExample.description = \
	The Controls example is a simple demonstration of common SWT controls. \n\n\
	It consists of a tab folder where each tab in the folder allows the user \
	to interact with a different control. \
	The user can change styles and settings and view how this affects the control.

launchitem.FileViewer.name = File Viewer
launchitem.FileViewer.description = \
	The File Viewer example shows how a simple application can be implemented using SWT.\n\n\
	This application provides the ability to navigate files and folders and manipulate them via Drag and Drop.  \
	It includes the use of alternate threads for long actions and demonstrates the use of the Tree, \
	Table, Toolbar and Program.

launchitem.HoverHelp.name = Hover Help
launchitem.HoverHelp.description = \
	The Hover Help example shows how to implement custom tooltips and hover help support \
	on a number of different SWT controls including Buttons, TableItems, ToolItems and TreeItems.\n\n\
	The example implements its own tooltip and hover help support.  \
	To see the custom tooltips in action, hover over an item or button in the UI.  \
	An image appears in the left-hand corner of the tooltip.\n\n\
	To see the custom hover help in action, hover over an item or button in the UI until \
	the tooltip is displayed.  Without moving the mouse, hit F1.  A new Shell will pop up with the \
	extended hover help information for the UI element in question

launchitem.HelloWorld1.name = Hello World (1)
launchitem.HelloWorld1.description = \
	This example demonstrates how to open a Shell and process the events.

launchitem.HelloWorld2.name = Hello World (2)
launchitem.HelloWorld2.description = \
	This example builds on HelloWorld1 and demonstrates how to display a Label inside the Shell.

launchitem.HelloWorld3.name = Hello World (3)
launchitem.HelloWorld3.description = \
	This example builds on HelloWorld2 and demonstrates how to resize the Label \
	when the Shell resizes using a Listener mechanism.

launchitem.HelloWorld4.name = Hello World (4)
launchitem.HelloWorld4.description = \
	This example builds on HelloWorld2 and demonstrates how to resize the Label \
	when the Shell resizes using a Layout.

launchitem.HelloWorld5.name = Hello World (5)
launchitem.HelloWorld5.description = \
	This example builds on HelloWorld1 and demonstrates how to draw directly on an SWT Control using a graphic context.

launchitem.ImageAnalyzer.name = Image Analyzer
launchitem.ImageAnalyzer.description = \
	The ImageAnalyzer opens image files and displays the visual contents of the file along with a \
	summary of the data in the image file.\n\n\
	The user can make adjustments to various elements of the image such as scaling and Alpha \
	blending and can save these changes to a file.\n\n\
	The ImageAnalyzer will load and display image files of type GIF, JPEG, BMP, ICO, and PNG.  \
	To open a file, use the File->Open... menu item, and select the image file in the FileDialog.\n\n\
	If the file is an interlaced GIF or PNG or a progressive JPEG, and Incremental Display is selected, \
	then the ImageAnalyzer displays the image increments as they are being loaded.\n\n\
	If the file contains an animated GIF, then the Next, Previous, and Animate buttons become enabled, \
	and they can be used to cycle through the images in the file, or animate them. If a GIF defines a background color, \
	as many animated GIFs do, selecting Background will use the GIF's background color.\n\n\
	If the image has transparency (possible with GIF, PNG, or ICO), then selecting Display Mask will draw the image's transparency \
	mask to the right of the image. You can change the background color of the ImageAnalyzer to see the transparency work. \
	To turn off the transparency, deselect Display Transparency.\n\n\
	After an image is loaded, it can be scaled or have alpha transparency applied, using the Scale and Alpha-K combos, \
	and the Alpha menu. File->Reopen restores scaling and Alpha to their default values and reloads the current image file.\n\n\
	File->Save As... can be used to save the currently loaded image to another type of image file. If the image has transparency, \
	File->Save Mask As... saves the image's transparency mask.\n\n\
	When SWT loads an image file, an instance of org.eclipse.swt.graphics.ImageData is created. (In the case of an ICO file or \
	multi-image GIF, an array of ImageData instances is created). The ImageAnalyzer displays all of the data stored in the ImageData \
	instance(s) for the currently loaded image file, including the pixel data. Hovering over a pixel in the image display will show the RGB \
	color data for that pixel. For certain images (particularly animated GIFs) additional data is stored in the org.eclipse.swt.graphics.ImageLoader \
	instance used to load the image. The ImageAnalyzer displays this data as well.

launchitem.JavaViewer.name = Java Syntax Viewer
launchitem.JavaViewer.description = \
	This example demonstrates how to implement a user-defined line styler for the StyledText widget.\n\n\
	The example provides a typical editor interface.  \
	To see the effect of the line styler, open a *.java file.  \
	When the contents of the file are displayed in the editor area, notice that the keywords have been highlighted.

launchitem.LayoutExample.name = Layout Example
launchitem.LayoutExample.description = \
	This example is a simple demonstration of common SWT layouts. \n\n\
	It consists of a tab folder where each tab in the folder allows the \
	user to interact with a different SWT layout. \
	The user can insert widgets into a layout and set the values of the layout data \
	using a property sheet.  When the user has a suitable arrangement, code can be \
	generated by clicking on the Code button.

launchitem.TextEditor.name = Text Editor
launchitem.TextEditor.description = \
	This example demonstrates how to use the StyledText widget to implement \
	a text editor with formatting support.\n\n\
	The example has a typical text editor interface.  \
	The Edit menu contains Cut, Copy, Paste and Set Font items and the toolbar \
	provides a bold text toggle, three colour tools that operate on the current \
	selection, and a reset to defaults button that also operates on the current selection.
	