###############################################################################
# Copyright (c) 2000, 2006 IBM Corporation and others.
#
# This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
#
# 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.BrowserExample.name = Browser
launchitem.BrowserExample.description = \
	This example is a simple demonstration of the SWT Browser widget.\n\n\
	It consists of a composite containing a Browser widget to render HTML. \
	Additional widgets allow the user to perform typical browser actions (for example, navigate to a particular URL, go back, forward, refresh and stop).

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.DND.name = Drag and Drop
launchitem.DND.description = \
	The Drag and Drop example shows the various SWT drag and drop transfer types in use.
	
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, PNG, and TIFF.  \
	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.AdvancedGraphics.name = Advanced Graphics
launchitem.AdvancedGraphics.description = \
	This example (updated for 3.3) contains a collection of applications that show the use of advanced graphics operations.

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.
	
