package org.reldb.dbrowser.ui;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.SWT;
import org.reldb.dbrowser.ui.version.Version;
import org.eclipse.wb.swt.SWTResourceManager;
public class AboutDialog extends Dialog {
protected Shell shell;
private static final int backgroundWidth = 500;
private static final int backgroundHeight = 330;
private static final int urlTop = 180;
private static final int rightPos = backgroundWidth - 10;
/**
* Create the dialog.
* @param parent
* @param style
*/
public AboutDialog(Shell parent) {
super(parent, SWT.None);
setText("About Rel");
}
/**
* Open the dialog.
*/
public void open() {
createContents();
shell.open();
shell.layout();
Display display = getParent().getDisplay();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
private boolean isPointInText(Control control, String s, int rightPosn, int topPosn, Point p) {
GC gc = new GC(control);
gc.setFont(shell.getFont());
Point dimensions = gc.textExtent(s);
Rectangle controlRect = new Rectangle(rightPosn - dimensions.x, topPosn, dimensions.x, dimensions.y);
return controlRect.contains(p);
}
/**
* Create contents of the dialog.
*/
private void createContents() {
shell = new Shell(getParent(), SWT.NO_TRIM);
shell.setText("About Rel");
shell.setLayout(null);
shell.setMinimumSize(backgroundWidth, backgroundHeight);
shell.setSize(backgroundWidth, backgroundHeight);
shell.setLocation(getParent().getLocation().x + (getParent().getSize().x - backgroundWidth) / 2,
getParent().getLocation().y + (getParent().getSize().y - backgroundHeight) / 2);
Button btnClose = new Button(shell, SWT.PUSH);
btnClose.setText("Close");
btnClose.setFocus();
btnClose.setSize(btnClose.computeSize(SWT.DEFAULT, SWT.DEFAULT));
btnClose.setLocation(rightPos - btnClose.getSize().x, backgroundHeight - btnClose.getSize().y - 10);
btnClose.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
shell.dispose();
}
});
shell.setDefaultButton(btnClose);
Image background = IconLoader.loadIconNormal("RelAboutAndSplash");
shell.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
if (background != null)
e.gc.drawImage(background, 0, 0, background.getImageData().width, background.getImageData().height, 0, 0, backgroundWidth, backgroundHeight);
e.gc.setForeground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
e.gc.setFont(SWTResourceManager.getFont("Arial", 18, SWT.BOLD));
int width = e.gc.textExtent(Version.getVersion()).x;
e.gc.drawText(Version.getVersion(), rightPos - width, urlTop - 62, true);
e.gc.setFont(SWTResourceManager.getFont("Arial", 12, SWT.BOLD));
width = e.gc.textExtent(Version.getCopyright()).x;
e.gc.drawText(Version.getCopyright(), rightPos - width, urlTop - 28, true);
e.gc.setForeground(SWTResourceManager.getColor(150, 200, 255));
width = e.gc.textExtent(Version.getURL()).x;
e.gc.drawText(Version.getURL(), rightPos - width, urlTop, true);
}
});
shell.addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(MouseEvent e) {
if (isPointInText(shell, Version.getURL(), rightPos, urlTop, new Point(e.x, e.y)))
org.eclipse.swt.program.Program.launch(Version.getURL());
}
});
shell.addMouseMoveListener(new MouseMoveListener() {
@Override
public void mouseMove(MouseEvent e) {
Cursor cursor = shell.getCursor();
if (cursor != null)
cursor.dispose();
boolean isPointerInURL = isPointInText(shell, Version.getURL(), rightPos, urlTop, new Point(e.x, e.y));
cursor = new Cursor(shell.getDisplay(), isPointerInURL ? SWT.CURSOR_HAND : SWT.CURSOR_ARROW);
shell.setCursor(cursor);
}
});
shell.pack();
}
}