package net.sourceforge.sqlexplorer.dialogs;
/*
* Copyright (C) 2002-2004 Andrea Mazzolini
* andreamazzolini@users.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.text.Collator;
import net.sourceforge.sqlexplorer.Messages;
import net.sourceforge.sqlexplorer.plugin.SQLExplorerPlugin;
import net.sourceforge.sqlexplorer.util.ImageUtil;
import net.sourceforge.sqlexplorer.util.URLUtil;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.browser.IWebBrowser;
import org.eclipse.ui.internal.browser.WorkbenchBrowserSupport;
public class AboutDlg extends Dialog {
public AboutDlg(Shell parentShell) {
super(parentShell);
}
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText(Messages.getString("AboutDialog.Title")); //$NON-NLS-1$
}
protected Control createDialogArea(Composite parent) {
// top level composite
Composite parentComposite = (Composite) super.createDialogArea(parent);
parentComposite.setLayout(new FillLayout());
TabFolder tabFolder = new TabFolder(parentComposite, SWT.NULL);
TabItem tabItem1 = new TabItem(tabFolder, SWT.NULL);
tabItem1.setText(Messages.getString("AboutDialog.Tab.About"));
tabItem1.setToolTipText(Messages.getString("AboutDialog.Tab.AboutToolTip"));
TabItem tabItem2 = new TabItem(tabFolder, SWT.NULL);
tabItem2.setText(Messages.getString("AboutDialog.Tab.Credits"));
tabItem2.setToolTipText(Messages.getString("AboutDialog.Tab.CreditsToolTip"));
TabItem tabItem3 = new TabItem(tabFolder, SWT.NULL);
tabItem3.setText(Messages.getString("AboutDialog.Tab.License"));
tabItem3.setToolTipText(Messages.getString("AboutDialog.Tab.LicenseToolTip"));
TabItem tabItem4 = new TabItem(tabFolder, SWT.NULL);
tabItem4.setText(Messages.getString("AboutDialog.Tab.System"));
tabItem4.setToolTipText(Messages.getString("AboutDialog.Tab.SystemToolTip"));
new AboutItem(tabItem1, tabFolder);
new CreditsItem(tabItem2, tabFolder);
new LicenseItem(tabItem3, tabFolder);
new SystemProperties(tabItem4, tabFolder);
return parentComposite;
}
protected Point getInitialSize() {
return new Point(455, 340);
}
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
}
protected void setShellStyle(int newShellStyle) {
super.setShellStyle(newShellStyle | SWT.RESIZE);// Make the about dialog
// resizable
}
}
class AboutItem {
Image logoImage;
AboutItem(TabItem item, Composite parent) {
logoImage = ImageUtil.getImage("Images.Logo");
parent.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent event) {
ImageUtil.disposeImage("Images.Logo");
}
});
Composite cmp = new Composite(parent, SWT.NULL);
item.setControl(cmp);
GridLayout lay = new GridLayout();
lay.numColumns = 1;
lay.marginWidth = 15;
lay.marginHeight = 15;
cmp.setLayout(lay);
Label lb = new Label(cmp, SWT.NULL);
lb.setText(Messages.getString("AboutDialog.About.copyright"));
GridData data = new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.CENTER);
lb.setLayoutData(data);
lb.setSize(SWT.DEFAULT, 50);
ImageData imgData = logoImage.getImageData();
int width = imgData.width;
int height = imgData.height;
final Composite imgComposite = new Composite(cmp, SWT.BORDER);
data = new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.CENTER);
imgComposite.setLayoutData(data);
data.heightHint = height;
data.widthHint = width;
final Color imageBackgroundColor = new Color(parent.getDisplay(), 255, 255, 255);
final Color fontColor = new Color(parent.getDisplay(), 102, 118, 145);
final String version = Messages.getString("AboutDialog.About.versionPrefix") + SQLExplorerPlugin.getDefault().getVersion();
imgComposite.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent event) {
GC gc = event.gc;
gc.drawImage(logoImage, 0, 0);
gc.setBackground(imageBackgroundColor);
gc.setForeground(fontColor);
gc.drawText(version, 290, 75);
}
});
Link link = new Link(cmp, SWT.CENTER);
link.setText(Messages.getString("AboutDialog.About.url"));
data = new GridData(SWT.FILL);
link.setLayoutData(data);
link.setForeground(fontColor);
link.addListener (SWT.Selection, new Listener () {
public void handleEvent(Event event) {
try {
IWebBrowser browser = WorkbenchBrowserSupport.getInstance().getExternalBrowser();
browser.openURL(new URL(event.text));
} catch (Exception e) {
SQLExplorerPlugin.error("Error launching browser", e); //$NON-NLS-1$
}
}
});
}
}
class LicenseItem {
LicenseItem(TabItem item, Composite parent) {
Composite cmp = new Composite(parent, SWT.NULL);
item.setControl(cmp);
GridLayout lay = new GridLayout();
lay.numColumns = 1;
cmp.setLayout(lay);
StyledText st = new StyledText(cmp, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
st.setEditable(false);
String separator = System.getProperty("line.separator"); //$NON-NLS-1$
BufferedReader bbr = null;
try {
InputStream is = URLUtil.getResourceURL("license.txt").openStream(); //$NON-NLS-1$
bbr = new BufferedReader(new InputStreamReader(is));
String str;
StringBuffer all = new StringBuffer();
while ((str = bbr.readLine()) != null) {
all.append(str);
all.append(separator);
}
st.setText(all.toString());
is.close();
} catch (Exception e) {
st.setText(Messages.getString("AboutDialog.License")); //$NON-NLS-1$
} finally {
try {
if (bbr != null)
bbr.close();
} catch (java.io.IOException e) {
}
}
GridData data = new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_CENTER | GridData.CENTER);
st.setLayoutData(data);
}
}
class CreditsItem {
CreditsItem(TabItem item, Composite parent) {
Composite cmp = new Composite(parent, SWT.NULL);
item.setControl(cmp);
GridLayout lay = new GridLayout();
lay.numColumns = 1;
cmp.setLayout(lay);
StyledText st = new StyledText(cmp, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
st.setEditable(false);
String separator = System.getProperty("line.separator"); //$NON-NLS-1$
final String credits =
"Developers (versions 3.5.0):" + separator +
" - John Spackman (Zenesis Limited - www.zenesis.com)" + separator +
separator +
"Developers (versions 3.0.0):" + separator +
" - Davy Vanherbergen" + separator +
separator +
"Developers (version 2.2.5 (never released)):" + separator +
" - Alexandre Luti Telles" + separator +
" - Davy Vanherbergen" + separator +
separator +
"Previous Developers (versions 2.2.3 and 2.2.4):" + separator +
" - Alexandre Luti Telles" + separator +
" - Gert Wohlgemuth" + separator +
separator +
"Other Contributors (versions 2.2.2 and before):" + separator +
" - Andrea Mazzolini (original version of JFacedb)" + separator +
" - Johan Compagner" + separator +
" - Jouneau Luc" + separator +
" - Stephen Schaub" + separator +
" - Chris Potter (Sybase plugin, Sql Server plugin)" + separator +
" - Joao Reis Belo (Sql Server plugin)" + separator +
separator +
"The SQL stuff is based on SquirreL SQL (http://squirrel-sql.sourceforge.net)." + separator +
separator+
"SQLExplorer uses the following libraries too:" + separator +
" - NanoXML (http://NanoXML.sourceforge.net/) Java XML API" + separator +
" - log4j (http://jakarta.apache.org/log4j) Logging API" + separator;
st.setText(credits);
GridData data = new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_CENTER | GridData.CENTER);
st.setLayoutData(data);
}
}
class SystemProperties {
private class LProvider extends LabelProvider implements ITableLabelProvider {
public Image getColumnImage(Object arg0, int arg1) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
java.util.Map.Entry cp = (java.util.Map.Entry) element;
if (columnIndex == 0)
return cp.getKey().toString();
else
return cp.getValue().toString();
}
}
java.util.Properties props;
SystemProperties(TabItem itemTab, Composite parent) {
props = System.getProperties();
TableViewer tv = new TableViewer(parent, SWT.NULL);
tv.setSorter(new MyViewerSorter());
Table table = tv.getTable();
TableColumn c1 = new TableColumn(table, SWT.NULL);
c1.setText(Messages.getString("Property_9")); //$NON-NLS-1$
TableColumn c2 = new TableColumn(table, SWT.NULL);
c2.setText(Messages.getString("Value_10")); //$NON-NLS-1$
table.setLinesVisible(true);
table.setHeaderVisible(true);
TableLayout tableLayout = new TableLayout();
for (int i = 0; i < 2; i++)
tableLayout.addColumnData(new ColumnWeightData(1, 50, true));
table.setLayout(tableLayout);
itemTab.setControl(tv.getControl());
tv.setContentProvider(new IStructuredContentProvider() {
public Object[] getElements(Object input) {
return props.entrySet().toArray();
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object arg1, Object arg2) {
}
});
tv.setLabelProvider(new LProvider());
tv.setInput(this);
}
}
class MyViewerSorter extends ViewerSorter {
public MyViewerSorter() {
super();
}
public MyViewerSorter(Collator collator) {
super(collator);
}
public boolean isSorterProperty(Object element, String propertyId) {
return true;
}
}