/*******************************************************************************
* Copyright (c) 2000, 2007 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
*******************************************************************************/
package org.eclipse.swt.examples.controlexample;
import java.text.MessageFormat;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javafx.application.Application;
import javafx.stage.Stage;
import org.eclipse.equinox.app.IApplicationContext;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import at.bestsolution.efxclipse.runtime.application.AbstractJFXApplication;
import at.bestsolution.efxclipse.runtime.examples.swt.SWTApplication;
public class ControlExample {
private static ResourceBundle resourceBundle =
ResourceBundle.getBundle("examples_control"); //$NON-NLS-1$
private ShellTab shellTab;
private TabFolder tabFolder;
private Tab [] tabs;
Image images[];
static final int ciClosedFolder = 0, ciOpenFolder = 1, ciTarget = 2, ciBackground = 3, ciParentBackground = 4;
static final String[] imageLocations = {
"closedFolder.gif", //$NON-NLS-1$
"openFolder.gif", //$NON-NLS-1$
"target.gif", //$NON-NLS-1$
"backgroundImage.png", //$NON-NLS-1$
"parentBackgroundImage.png"}; //$NON-NLS-1$
static final int[] imageTypes = {
SWT.ICON,
SWT.ICON,
SWT.ICON,
SWT.BITMAP,
SWT.BITMAP};
boolean startup = true;
/**
* Creates an instance of a ControlExample embedded inside
* the supplied parent Composite.
*
* @param parent the container of the example
*/
public ControlExample(Composite parent) {
initResources();
tabFolder = new TabFolder (parent, SWT.NONE);
tabs = createTabs();
for (int i=0; i<tabs.length; i++) {
TabItem item = new TabItem (tabFolder, SWT.NONE);
item.setText (tabs [i].getTabText ());
item.setControl (tabs [i].createTabFolderPage (tabFolder));
item.setData (tabs [i]);
}
//FIXME PORTING TO FX
// /* Workaround: if the tab folder is wider than the screen,
// * Mac platforms clip instead of somehow scrolling the tab items.
// * We try to recover some width by using shorter tab names. */
// Point size = parent.computeSize(SWT.DEFAULT, SWT.DEFAULT);
// Rectangle monitorArea = parent.getMonitor().getClientArea();
// boolean isMac = SWT.getPlatform().equals("carbon") || SWT.getPlatform().equals("cocoa");
// if (size.x > monitorArea.width && isMac) {
// TabItem [] tabItems = tabFolder.getItems();
// for (int i=0; i<tabItems.length; i++) {
// tabItems[i].setText (tabs [i].getShortTabText ());
// }
// }
startup = false;
}
/**
* Answers the set of example Tabs
*/
Tab[] createTabs() {
return new Tab [] {
new ButtonTab (this),
// new CanvasTab (this),
new ComboTab (this),
// new CoolBarTab (this),
// new DateTimeTab (this),
// new DialogTab (this),
// new ExpandBarTab (this),
// new GroupTab (this),
// new LabelTab (this),
// new LinkTab (this),
// new ListTab (this),
// new MenuTab (this),
// new ProgressBarTab (this),
// new SashTab (this),
// new ScaleTab (this),
shellTab = new ShellTab(this),
new SliderTab (this),
// new SpinnerTab (this),
new TabFolderTab (this),
// new TableTab (this),
new TextTab (this),
// new ToolBarTab (this),
// new ToolTipTab (this),
// new TreeTab (this),
// new BrowserTab (this),
};
}
/**
* Disposes of all resources associated with a particular
* instance of the ControlExample.
*/
public void dispose() {
/*
* Destroy any shells that may have been created
* by the Shells tab. When a shell is disposed,
* all child shells are also disposed. Therefore
* it is necessary to check for disposed shells
* in the shells list to avoid disposing a shell
* twice.
*/
if (shellTab != null) shellTab.closeAllShells ();
shellTab = null;
tabFolder = null;
freeResources();
}
/**
* Frees the resources
*/
void freeResources() {
if (images != null) {
for (int i = 0; i < images.length; ++i) {
final Image image = images[i];
if (image != null) image.dispose();
}
images = null;
}
}
/**
* Gets a string from the resource bundle.
* We don't want to crash because of a missing String.
* Returns the key if not found.
*/
static String getResourceString(String key) {
try {
return resourceBundle.getString(key);
} catch (MissingResourceException e) {
return key;
} catch (NullPointerException e) {
return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$
}
}
/**
* Gets a string from the resource bundle and binds it
* with the given arguments. If the key is not found,
* return the key.
*/
static String getResourceString(String key, Object[] args) {
try {
return MessageFormat.format(getResourceString(key), args);
} catch (MissingResourceException e) {
return key;
} catch (NullPointerException e) {
return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$
}
}
/**
* Loads the resources
*/
void initResources() {
final Class clazz = ControlExample.class;
if (resourceBundle != null) {
try {
if (images == null) {
images = new Image[imageLocations.length];
//FIXME PORT OT JAVAFX
// for (int i = 0; i < imageLocations.length; ++i) {
// InputStream sourceStream = clazz.getResourceAsStream(imageLocations[i]);
// ImageData source = new ImageData(sourceStream);
// if (imageTypes[i] == SWT.ICON) {
// ImageData mask = source.getTransparencyMask();
// images[i] = new Image(null, source, mask);
// } else {
// images[i] = new Image(null, source);
// }
// try {
// sourceStream.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
}
return;
} catch (Throwable t) {
}
}
String error = (resourceBundle != null) ?
getResourceString("error.CouldNotLoadResources") :
"Unable to load resources"; //$NON-NLS-1$
freeResources();
throw new RuntimeException(error);
}
/**
* Invokes as a standalone program.
*/
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display, SWT.SHELL_TRIM);
shell.setLayout(new FillLayout());
ControlExample instance = new ControlExample(shell);
shell.setText(getResourceString("window.title"));
setShellSize(instance, shell);
shell.open();
//FIXME PORT TO FX
// while (! shell.isDisposed()) {
// if (! display.readAndDispatch()) display.sleep();
// }
// instance.dispose();
// display.dispose();
}
/**
* Grabs input focus.
*/
public void setFocus() {
tabFolder.setFocus();
}
/**
* Sets the size of the shell to it's "packed" size,
* unless that makes it larger than the monitor it is being displayed on,
* in which case just set the shell size to be slightly smaller than the monitor.
*/
static void setShellSize(ControlExample instance, Shell shell) {
Point size = shell.computeSize(SWT.DEFAULT, SWT.DEFAULT);
//FIXME PORT TO FX Rectangle monitorArea = shell.getMonitor().getClientArea();
// shell.setSize(Math.min(size.x, monitorArea.width), Math.min(size.y, monitorArea.height));
}
}