2015-11-15 22:15:37 +01:00
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright ( c ) 2015 MINRES Technologies GmbH 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 :
* MINRES Technologies GmbH - initial API and implementation
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
package com.minres.scviewer.e4.application.parts ;
import java.awt.Desktop ;
import java.io.IOException ;
import java.net.URISyntaxException ;
import java.util.regex.Matcher ;
import java.util.regex.Pattern ;
import org.eclipse.swt.SWT ;
import org.eclipse.swt.custom.StyleRange ;
import org.eclipse.swt.custom.StyledText ;
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.Color ;
import org.eclipse.swt.graphics.Image ;
import org.eclipse.swt.graphics.Point ;
import org.eclipse.swt.layout.GridData ;
import org.eclipse.swt.layout.GridLayout ;
import org.eclipse.swt.widgets.Button ;
import org.eclipse.swt.widgets.Canvas ;
import org.eclipse.swt.widgets.Dialog ;
import org.eclipse.swt.widgets.Display ;
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.wb.swt.ResourceManager ;
import org.eclipse.wb.swt.SWTResourceManager ;
public class AboutDialog extends Dialog {
protected int result ;
protected Shell shell ;
private Color white ;
protected StyledText styledText ;
/ *
Eclipse IDE for Java Developers
Version : Mars . 1 Release ( 4 . 5 . 1 )
Build id : 20150924 - 1200
( c ) Copyright Eclipse contributors and others 2000 , 2015 . All rights reserved . Eclipse and the Eclipse logo are trademarks of the Eclipse Foundation , Inc . , https : //www.eclipse.org/. The Eclipse logo cannot be altered without Eclipse's permission. Eclipse logos are provided for use under the Eclipse logo and trademark guidelines, https://www.eclipse.org/logotm/. Oracle and Java are trademarks or registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.
* /
private String productTitle =
" \ nSCViewer - a SystemC waveform viewer \ n \ nVersion: 1.0 \ n " ;
private String copyrightText = " \ nCopyright (c) 2015 MINRES Technologies GmbH and others. \ n " +
" \ n " +
" All rights reserved. MINRES and the MINRES logo are trademarks of MINRES Technologies GmbH, http://www.minres.com/ . " +
" This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 " +
2015-11-16 10:51:05 +01:00
" which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html \ n " +
" \ n \ nSources code is hosted at GitHub: https://github.com/eyck/txviewer \ n " ;
2015-11-15 22:15:37 +01:00
/ * *
* Create the dialog .
* @param parent
* @param style
* /
public AboutDialog ( Shell parent , int style ) {
super ( parent , style ) ;
setText ( " SWT Dialog " ) ;
white = SWTResourceManager . getColor ( SWT . COLOR_WHITE ) ;
}
/ * *
* Open the dialog .
* @return the result
* /
public int open ( ) {
createContents ( ) ;
shell . open ( ) ;
shell . layout ( ) ;
Display display = getParent ( ) . getDisplay ( ) ;
while ( ! shell . isDisposed ( ) ) {
if ( ! display . readAndDispatch ( ) ) {
display . sleep ( ) ;
}
}
return result ;
}
/ * *
* Create contents of the dialog .
* /
private void createContents ( ) {
shell = new Shell ( getParent ( ) , getStyle ( ) ) ;
shell . setSize ( 600 , 300 ) ;
shell . setText ( getText ( ) ) ;
shell . setLayout ( new GridLayout ( 2 , false ) ) ;
final Image scviewerLogo = ResourceManager . getPluginImage ( " com.minres.scviewer.e4.application " , " icons/SCViewer_logo.png " ) ;
final Image minresLogo = ResourceManager . getPluginImage ( " com.minres.scviewer.e4.application " , " icons/Minres_logo.png " ) ;
Canvas canvas = new Canvas ( shell , SWT . NO_REDRAW_RESIZE ) ;
GridData gd_canvas = new GridData ( SWT . LEFT , SWT . CENTER , false , false , 1 , 1 ) ;
gd_canvas . widthHint = 200 ;
gd_canvas . heightHint = 250 ;
canvas . setLayoutData ( gd_canvas ) ;
canvas . addPaintListener ( new PaintListener ( ) {
public void paintControl ( PaintEvent e ) {
e . gc . setBackground ( white ) ;
e . gc . fillRectangle ( e . x , e . y , e . width , e . height ) ;
e . gc . drawImage ( scviewerLogo , 4 , 0 ) ;
e . gc . drawImage ( minresLogo , 0 , 200 ) ;
}
} ) ;
styledText = new StyledText ( shell , SWT . BORDER ) ;
styledText . setEditable ( false ) ;
GridData gd_styledText = new GridData ( SWT . FILL , SWT . FILL , true , true , 1 , 1 ) ;
styledText . setLayoutData ( gd_styledText ) ;
styledText . setText ( productTitle + copyrightText ) ;
styledText . setBackground ( white ) ;
styledText . setWordWrap ( true ) ;
styledText . setLeftMargin ( 5 ) ;
StyleRange styleRange = new StyleRange ( ) ;
styleRange . start = 0 ;
styleRange . length = productTitle . length ( ) ;
styleRange . fontStyle = SWT . BOLD ;
styledText . setStyleRange ( styleRange ) ;
///^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
Pattern pattern = Pattern . compile ( " https?: \\ / \\ /([ \\ da-z \\ .-]+) \\ .([a-z \\ .]{2,6})([ \\ / \\ w \\ .-]*)* \\ /? " ) ;
// in case you would like to ignore case sensitivity,
// you could use this statement:
// Pattern pattern = Pattern.compile("\\s+", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern . matcher ( productTitle + copyrightText ) ;
// check all occurance
while ( matcher . find ( ) ) {
styleRange = new StyleRange ( ) ;
styleRange . underline = true ;
styleRange . underlineStyle = SWT . UNDERLINE_LINK ;
styleRange . data = matcher . group ( ) ;
styleRange . start = matcher . start ( ) ;
styleRange . length = matcher . end ( ) - matcher . start ( ) ;
styledText . setStyleRange ( styleRange ) ;
}
styledText . addListener ( SWT . MouseDown , new Listener ( ) {
@Override
public void handleEvent ( Event event ) {
// It is up to the application to determine when and how a link should be activated.
// links are activated on mouse down when the control key is held down
// if ((event.stateMask & SWT.MOD1) != 0) {
try {
int offset = styledText . getOffsetAtLocation ( new Point ( event . x , event . y ) ) ;
StyleRange style = styledText . getStyleRangeAtOffset ( offset ) ;
if ( style ! = null & & style . underline & & style . underlineStyle = = SWT . UNDERLINE_LINK ) {
Desktop . getDesktop ( ) . browse ( new java . net . URI ( style . data . toString ( ) ) ) ;
}
} catch ( IOException | URISyntaxException | IllegalArgumentException e ) { }
// }
}
} ) ;
styleRange . start = 0 ;
new Label ( shell , SWT . NONE ) ;
Button okButton = new Button ( shell , SWT . NONE ) ;
okButton . setLayoutData ( new GridData ( SWT . RIGHT , SWT . CENTER , false , false , 1 , 1 ) ) ;
okButton . setBounds ( 0 , 0 , 94 , 28 ) ;
okButton . setText ( " Close " ) ;
okButton . setFocus ( ) ;
okButton . addSelectionListener ( new SelectionAdapter ( ) {
@Override
public void widgetSelected ( SelectionEvent e ) {
if ( ! shell . isDisposed ( ) ) shell . dispose ( ) ;
}
} ) ;
}
public static boolean open ( Shell parent , int style ) {
AboutDialog dialog = new AboutDialog ( parent , style | SWT . SHEET ) ;
return dialog . open ( ) = = 0 ;
}
}