/* * STSintro.java * * This file is part of the STS-Tool project. * Copyright (c) 2011-2012 "University of Trento - DISI" All rights reserved. * * Is strictly forbidden to remove this copyright notice from this source code. * * Disclaimer of Warranty: * STS-Tool (this software) is provided "as-is" and without warranty of any kind, * express, implied or otherwise, including without limitation, any warranty of * merchantability or fitness for a particular purpose. * In no event shall the copyright holder or contributors be liable for any direct, * indirect, incidental, special, exemplary, or consequential damages * including, but not limited to, procurement of substitute goods or services; * loss of use, data, or profits; or business interruption) however caused and on * any theory of liability, whether in contract, strict liability, or tort (including * negligence or otherwise) arising in any way out of the use of this software, even * if advised of the possibility of such damage. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License version 3 * as published by the Free Software Foundation with the addition of the * following permission added to Section 15 as permitted in Section 7(a): * FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY * "University of Trento - DISI","University of Trento - DISI" DISCLAIMS THE * WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. * * See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public License * along with this program; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA, 02110-1301 USA, or download the license from the following URL: * http://www.sts-tool.eu/License.php * * For more information, please contact STS-Tool group at this * address: ststool@disi.unitn.it * */ package eu.aniketos.wp1.ststool.diagram.custom.intro; import java.awt.Desktop; import java.io.IOException; import java.net.URL; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Locale; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.ControlAdapter; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.ExpandEvent; import org.eclipse.swt.events.ExpandListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.ExpandBar; import org.eclipse.swt.widgets.ExpandItem; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.ui.IMemento; import org.eclipse.ui.IPropertyListener; import org.eclipse.ui.PartInitException; import org.eclipse.ui.intro.IIntroPart; import org.eclipse.ui.intro.IIntroSite; import eu.aniketos.wp1.ststool.diagram.application.SWTResourceManager; import eu.aniketos.wp1.ststool.diagram.custom.intro.ChangeLog.ChangeLogEntry; import eu.aniketos.wp1.ststool.diagram.custom.intro.ChangeLog.ChangeLogRelease; import eu.aniketos.wp1.ststool.diagram.part.StsToolDiagramEditorPlugin; /** * Custom welcome page, that display the log. * * @author Mauro Poggianella * */ public class STSintro implements IIntroPart { /** * Construction and initialization of the welcome page * * @see org.eclipse.ui.intro.IIntroPart#createPartControl(Composite) */ @Override public void createPartControl(Composite container) { SashForm sashForm = new SashForm(container, SWT.VERTICAL); sashForm.setForeground(SWTResourceManager .getColor(SWT.COLOR_WIDGET_FOREGROUND)); sashForm.setBackground(SWTResourceManager .getColor(SWT.COLOR_WIDGET_DARK_SHADOW)); sashForm.setSashWidth(0); final ScrolledComposite sc = new ScrolledComposite(sashForm, SWT.V_SCROLL); sc.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); final Composite composite = new Composite(sc, SWT.NONE); sc.setContent(composite); sc.setExpandHorizontal(true); sc.addControlListener(new ControlAdapter() { @Override public void controlResized(ControlEvent e) { composite.setSize(composite.computeSize( sc.getClientArea().width, SWT.DEFAULT, true)); } }); composite.setBackgroundMode(SWT.INHERIT_DEFAULT); composite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); composite.setLayout(new GridLayout(1, false)); Label lblNewLabel = new Label(composite, SWT.NONE); lblNewLabel.setFont(SWTResourceManager .getFont("Segoe UI", 16, SWT.BOLD)); lblNewLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 1)); lblNewLabel.setText("Change Log"); final ExpandBar expandBar = new ExpandBar(composite, SWT.INHERIT_DEFAULT); expandBar.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); expandBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); expandBar.addExpandListener(new ExpandListener() { @Override public void itemExpanded(ExpandEvent e) { composite.getDisplay().asyncExec(new Runnable() { @Override public void run() { composite.pack(); } }); } @Override public void itemCollapsed(ExpandEvent e) { composite.getDisplay().asyncExec(new Runnable() { @Override public void run() { composite.pack(); } }); } }); createLogContent(expandBar); composite.getDisplay().asyncExec(new Runnable() { @Override public void run() { composite.pack(true); } }); Composite composite_1 = new Composite(sashForm, SWT.BORDER); composite_1.setLayout(new FillLayout()); composite_1.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); sashForm.setWeights(new int[] { 217, 78 }); StyledText styledText = new StyledText(composite_1, SWT.BORDER); sashForm.setWeights(new int[] { 217, 78 }); try { final String NL = "\n"; String text = "Reporting Bugs" + NL + NL + "The Developing team needs your feedback in order to improve the tool!!!" + NL + "There are two easy things you can do to help us debug your (and maybe not only yours) crash!" + NL + " 1. Before reporting on Mantis, we ask you to zip your \".metadata\" folder. This folder is located in \"../StsTool/Workspaces/\", and contains the log files that are really useful to us. Zip also the \".ststool_diagram\" file you were working on, while the crash occurred." + NL + " 2. Attach both these files directly into Mantis to report the crash."+ NL + NL + "Thanks from the developing team."; styledText.setText(text); styledText.setEditable(false); FontData fd = styledText.getFont().getFontData()[0]; styledText.setFont(SWTResourceManager.getFont(fd.getName(),(int) (fd.getHeight() * 1.2), fd.getStyle())); fd = styledText.getFont().getFontData()[0]; StyleRange range1 = new StyleRange(); range1.start = 0; range1.length = 14; range1.font=SWTResourceManager.getFont(fd.getName(),(int)(fd.getHeight()*1.2),SWT.BOLD); StyleRange[] styles = new StyleRange[] { range1}; styledText.setStyleRanges(styles); // final String NL="\n"; // String text="How to: Bug reporting:"+NL+NL+ // "The Developer team need you to improve the tool!!!"+NL+ // "There are 2 easy things to do, to help us debugging your (and maybe not only yours) crash!" // +NL+ // "Before reporting in mantis, we ask you to zip your \".metadata\" folder."+NL+ // "This folder is located in \"../StsTool/Workspaces/\", it contains the logs file that are really useful to us."+NL+ // "If you want you can also zip the \".ststool_diagram\" file you were working on, while the crash occurred."+NL+ // "Then you can attach this files directly in mantis when you report the crash"+NL+NL+ // "Thanks from the developers team."; // // styledText.setText(text); // styledText.setEditable(false); // FontData fd=styledText.getFont().getFontData()[0]; // styledText.setFont(SWTResourceManager.getFont(fd.getName(),(int)(fd.getHeight()*1.2),fd.getStyle())); // // fd=styledText.getFont().getFontData()[0]; // StyleRange range1 = new StyleRange(); // range1.start=0; // range1.length=7; // range1.font=SWTResourceManager.getFont(fd.getName(),(int)(fd.getHeight()*1.2),SWT.BOLD); // // // StyleRange range2 = new StyleRange(); // range2.start=8; // range2.length=14; // range2.font=SWTResourceManager.getFont(fd.getName(),(int)(fd.getHeight()*1.2),SWT.BOLD); // range2.underline=true; // // // StyleRange range3 = new StyleRange(); // range3.start=217; // range3.length=10; // range3.fontStyle=SWT.BOLD; // // StyleRange range4 = new StyleRange(); // range4.start=264; // range4.length=22; // range4.fontStyle=SWT.BOLD; // // StyleRange range5 = new StyleRange(); // range5.start=380; // range5.length=16; // range5.fontStyle=SWT.BOLD; // // // StyleRange range6 = new StyleRange(); // range6.start=526; // range6.length=32; // range6.fontStyle=SWT.ITALIC; // // StyleRange[]styles=new // StyleRange[]{range1,range2,range3,range4,range5,range6}; // styledText.setStyleRanges(styles); } catch (Exception e) { e.printStackTrace(); } } /** * Create the content of the ExpandBar * * @param expandBar */ private void createLogContent(ExpandBar expandBar) { List<ChangeLogRelease> clrl = new ArrayList<ChangeLogRelease>(ChangeLog .getInstance().getChangeLogReleases()); Collections.sort(clrl, new Comparator<ChangeLogRelease>() { @Override public int compare(ChangeLogRelease o1, ChangeLogRelease o2) { return -o1.getReleaseDate().compareTo(o2.getReleaseDate()); } }); for (int i = 0; i < clrl.size(); i++) { ExpandItem ei = createVersionItem(expandBar, clrl.get(i)); if (i == 0) { ei.setExpanded(true); } } } /** * Create an ExpandItem in the specified expandBar, that will represent a * release log * * @param parent * the parent * @param clr * the ChangeLogRelease descriptor * @return the added {@link ExpandItem} */ private ExpandItem createVersionItem(ExpandBar parent, ChangeLogRelease clr) { ExpandItem xpandI = new ExpandItem(parent, SWT.NONE); xpandI.setText("Version " + clr.getVersion() + " (" + new SimpleDateFormat("dd MMMMM yyyy", Locale.ENGLISH) .format(clr.getReleaseDate()) + ")"); Composite composite = new Composite(parent, SWT.BORDER); xpandI.setControl(composite); RowLayout layout = new RowLayout(SWT.VERTICAL); layout.spacing = 0; composite.setLayout(layout); for (ChangeLogEntry cle : clr.getEntries()) { createEntry(composite, cle); } xpandI.setHeight(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT).y + 10); return xpandI; } /** * Create a Composite that describe an ChangeLogEntry * * @param parent * the parent COmposite * @param entry * the ChangeLogEntry descriptor * @return the created Composite */ private Composite createEntry(Composite parent, final ChangeLogEntry entry) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new RowLayout()); CLabel label = new CLabel(composite, SWT.NONE); label.setMargins(3, 0, 3, 0); int size = 5; Image image = new Image(composite.getDisplay(), size, size); GC gc = new GC(image); gc.setBackground(composite.getForeground()); gc.fillOval(0, 0, size, size); label.setImage(image); label.setText(entry.getBugText()); if (entry.bugID > 0) { Link link = new Link(composite, SWT.NONE); link.setText("(<a>bug " + String.format("%07d", entry.bugID) + "</a>)"); link.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { try { if (Desktop.isDesktopSupported()) { Desktop desktop = Desktop.getDesktop(); if (desktop.isSupported(Desktop.Action.BROWSE)) { try { URL url = new URL( "http://www.sts-tool.eu/mantis/view.php?id=" + entry.bugID); desktop.browse(url.toURI()); } catch (IOException ex) { } } } } catch (Exception ex) { } } }); } return composite; } /** * @see org.eclipse.ui.intro.IIntroPart#dispose() */ @Override public void dispose() { } /** * @see org.eclipse.ui.intro.IIntroPart#getTitle() */ @Override public String getTitle() { return "Welcome!"; } /** * @see org.eclipse.ui.intro.IIntroPart#getTitleImage() */ @Override public Image getTitleImage() { ImageDescriptor myImage = StsToolDiagramEditorPlugin .getBundledImageDescriptor("icons/logo/logo 16.gif"); return myImage.createImage(); } /** * @see org.eclipse.ui.intro.IIntroPart#init(IIntroSite, IMemento) */ @Override public void init(IIntroSite site, IMemento memento) throws PartInitException { } /** * @see org.eclipse.ui.intro.IIntroPart#removePropertyListener(IPropertyListener) */ @Override public void removePropertyListener(IPropertyListener listener) { } /** * @see org.eclipse.ui.intro.IIntroPart#saveState(IMemento) */ @Override public void saveState(IMemento memento) { } /** * @see org.eclipse.ui.intro.IIntroPart#setFocus() */ @Override public void setFocus() { } /** * @see org.eclipse.ui.intro.IIntroPart#standbyStateChanged(boolean) */ @Override public void standbyStateChanged(boolean standby) { } /** * @see org.eclipse.ui.intro.IIntroPart#getAdapter(Class) */ @SuppressWarnings("rawtypes") @Override public Object getAdapter(Class adapter) { return null; } /** * @see org.eclipse.ui.intro.IIntroPart#addPropertyListener(IPropertyListener) */ @Override public void addPropertyListener(IPropertyListener listener) { } /** * @see org.eclipse.ui.intro.IIntroPart#getIntroSite() */ @Override public IIntroSite getIntroSite() { return null; } }