Révision 3157

tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/NewsEditor.java (revision 3157)
1
package org.txm.whatsnew.rcp;
2

  
3
import java.io.IOException;
4
import java.net.URL;
5

  
6
import org.eclipse.core.runtime.IProgressMonitor;
7
import org.eclipse.swt.SWT;
8
import org.eclipse.swt.browser.Browser;
9
import org.eclipse.swt.events.SelectionEvent;
10
import org.eclipse.swt.events.SelectionListener;
11
import org.eclipse.swt.layout.GridData;
12
import org.eclipse.swt.layout.GridLayout;
13
import org.eclipse.swt.widgets.Composite;
14
import org.eclipse.swt.widgets.ToolBar;
15
import org.eclipse.swt.widgets.ToolItem;
16
import org.eclipse.ui.IEditorInput;
17
import org.eclipse.ui.IEditorSite;
18
import org.eclipse.ui.PartInitException;
19
import org.eclipse.ui.part.EditorPart;
20
import org.osgi.framework.Version;
21
import org.txm.core.preferences.TBXPreferences;
22
import org.txm.rcp.Activator;
23
import org.txm.rcp.IImageKeys;
24
import org.txm.utils.io.IOUtils;
25
import org.txm.utils.logger.Log;
26

  
27

  
28
public class NewsEditor extends EditorPart {
29
	
30
	private Browser browser;
31
	private ToolItem stop;
32
	int vMax = 0;
33
	int vCurrentNews = NewsPreferences.getInstance().getInt(NewsPreferences.NEWS_VERSION);
34
	
35
	private ToolItem next;
36
	private ToolItem previous;
37
	private ToolItem last;
38
	
39
	@Override
40
	public void doSave(IProgressMonitor monitor) {
41
		
42
	}
43
	
44
	@Override
45
	public void doSaveAs() {
46
		
47
	}
48
	
49
	@Override
50
	public void init(IEditorSite site, IEditorInput input) throws PartInitException {
51
		
52
		this.setInput(input);
53
		this.setSite(site);
54
		
55
	}
56
	
57
	@Override
58
	public boolean isDirty() {
59
		return false;
60
	}
61
	
62
	@Override
63
	public boolean isSaveAsAllowed() {
64
		return false;
65
	}
66
	
67
	@Override
68
	public void createPartControl(Composite parent) {
69
		parent.setLayout(new GridLayout(1, true));
70
		
71
		ToolBar toolbar = new ToolBar(parent, SWT.HORIZONTAL);
72
		toolbar.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false));
73
		
74
		previous = new ToolItem(toolbar, SWT.PUSH|SWT.BORDER);
75
		previous.setText("Previous news");
76
		previous.setImage(IImageKeys.getImage("platform:/plugin/org.eclipse.ui/icons/full/elcl16/backward_nav.png"));
77
		previous.addSelectionListener(new SelectionListener() {
78
			
79
			@Override
80
			public void widgetSelected(SelectionEvent e) {
81
				int vNews = vCurrentNews - 1;
82
				if (vNews <= 0) return;
83
				
84
				vCurrentNews = vNews;
85
				refreshNews();
86
			}
87
			
88
			@Override
89
			public void widgetDefaultSelected(SelectionEvent e) { }
90
		});
91
		
92
		next = new ToolItem(toolbar, SWT.PUSH|SWT.BORDER);
93
		next.setText("Next news");
94
		next.setImage(IImageKeys.getImage("platform:/plugin/org.eclipse.ui/icons/full/elcl16/forward_nav.png"));
95
		next.addSelectionListener(new SelectionListener() {
96
			
97
			@Override
98
			public void widgetSelected(SelectionEvent e) {
99
				int vNews = vCurrentNews + 1;
100
				if (vNews > vMax) return;
101
				
102
				vCurrentNews = vNews;
103
				
104
				refreshNews();
105
			}
106
			
107
			@Override
108
			public void widgetDefaultSelected(SelectionEvent e) { }
109
		});
110
		
111
		last = new ToolItem(toolbar, SWT.PUSH|SWT.BORDER);
112
		last.setText("Last news");
113
		last.setImage(IImageKeys.getImage("platform:/plugin/org.eclipse.ui/icons/full/etool16/redo_edit.png"));
114
		last.addSelectionListener(new SelectionListener() {
115
			
116
			@Override
117
			public void widgetSelected(SelectionEvent e) {
118
				
119
				vCurrentNews = vMax;
120
				
121
				refreshNews();
122
			}
123
			
124
			@Override
125
			public void widgetDefaultSelected(SelectionEvent e) { }
126
		});
127
		
128
		new ToolItem(toolbar, SWT.SEPARATOR);
129
		
130
		stop = new ToolItem(toolbar, SWT.CHECK|SWT.BORDER);
131
		stop.setText("Show news at TXM start-up");
132
		stop.setImage(IImageKeys.getImage("platform:/plugin/org.eclipse.ui.editors/icons/full/obj16/quick_assist_obj.gif"));
133
		stop.addSelectionListener(new SelectionListener() {
134
			
135
			@Override
136
			public void widgetSelected(SelectionEvent e) {
137
				NewsPreferences.getInstance().put(NewsPreferences.SHOW_NEWS, stop.getSelection());
138
				NewsPreferences.saveAll();
139
			}
140
			
141
			@Override
142
			public void widgetDefaultSelected(SelectionEvent e) { }
143
		});
144
		browser = new Browser(parent, SWT.EMBEDDED);
145
		browser.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
146
		
147
		refreshNews();
148
	}
149
	
150
	public static Version getLastVersion() {
151
		try {
152
			Version v = Activator.getDefault().getBundle().getVersion();
153
			String version = "" + v.getMajor() + "." + v.getMinor() + "." + v.getMicro();
154
			
155
			URL newVersionURL;
156
			
157
			newVersionURL = new URL(TBXPreferences.getInstance().getString(TBXPreferences.UPDATESITE) + version+"/news.version");
158
			
159
			String newsVersionString = IOUtils.getText(newVersionURL	, "UTF-8");
160
			if (newsVersionString == null || newsVersionString.length() == 0) {
161
				Log.warning("No news version available at: "+newVersionURL);
162
				return new Version("0");
163
			}
164
			
165
			return new Version(newsVersionString);
166
		} catch (Exception e) {
167
			e.printStackTrace();
168
			return new Version("0");
169
		}
170
	}
171
	
172
	public void refreshNews() {
173
		
174
		vMax = getLastVersion().getMajor();
175
		
176
		Version v = Activator.getDefault().getBundle().getVersion();
177
		String version = "" + v.getMajor() + "." + v.getMinor() + "." + v.getMicro();	
178
		
179
		stop.setSelection(NewsPreferences.getInstance().getBoolean(NewsPreferences.SHOW_NEWS));
180
		next.setEnabled(vCurrentNews < vMax);
181
		previous.setEnabled(vCurrentNews > 1);
182
		last.setEnabled(vCurrentNews != vMax);
183
		
184
		this.setPartName("News - "+vCurrentNews);
185
		
186
		try {
187
			if (vCurrentNews == 0) {
188
				return;
189
			}
190
			URL baseURL = new URL(TBXPreferences.getInstance().getString(TBXPreferences.UPDATESITE) + version+"/news_"+vCurrentNews+".html");
191
			
192
			browser.setText(IOUtils.getText(baseURL, "UTF-8"));
193
		}
194
		catch (IOException e) {
195
			Log.warning("Error: no news found for numero: "+vCurrentNews);
196
			Log.printStackTrace(e);
197
		}
198
	}
199
	
200
	@Override
201
	public void setFocus() {
202
		browser.setFocus();
203
	}
204
}
0 205

  
tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/NewsEditorInput.java (revision 3157)
1
package org.txm.whatsnew.rcp;
2

  
3
import org.txm.rcp.editors.input.AbstractEditorInput;
4

  
5

  
6
public class NewsEditorInput extends AbstractEditorInput {
7
	
8
}
0 9

  
tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/DoInstallStep.java (revision 3157)
1
package org.txm.whatsnew.rcp;
2

  
3

  
4
import java.net.URL;
5

  
6
import org.eclipse.swt.widgets.Display;
7
import org.osgi.framework.Version;
8
import org.txm.PostInstallationStep;
9
import org.txm.core.preferences.TBXPreferences;
10
import org.txm.rcp.Activator;
11
import org.txm.rcp.commands.OpenBrowser;
12
import org.txm.utils.io.IOUtils;
13
import org.txm.utils.logger.Log;
14

  
15
/**
16
 * Opens news about TXM development
17
 * 
18
 * @author mdecorde
19
 *
20
 */
21
public class DoInstallStep  extends PostInstallationStep {
22

  
23
	public static String ID = DoInstallStep.class.getName(); //$NON-NLS-1$
24

  
25
	public void install() {
26
		
27
		try {
28
			Version newsVersion = NewsEditor.getLastVersion();
29
			
30
			String currentNewsVersionString = NewsPreferences.getInstance().getString(NewsPreferences.NEWS_VERSION);
31
			Version currentNewsVersion = new Version(currentNewsVersionString);
32
			
33
			NewsPreferences.getInstance().put(NewsPreferences.NEWS_VERSION, newsVersion.getMajor());
34
			
35
			if (NewsPreferences.getInstance().getBoolean(NewsPreferences.SHOW_NEWS) && newsVersion.compareTo(currentNewsVersion) > 0) {
36
				OpenNews.open();
37
			}
38
		}
39
		catch (Exception e) {
40
			Log.warning("Error while fetching news: "+e);
41
			Log.printStackTrace(e);
42
		}
43
	}
44
	
45
	public void preInstall() {
46
		
47
	}
48
	
49
	public DoInstallStep() {
50
		name = "WhatsNew";
51
	}
52
}
0 53

  
tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/NewsPreferencesPage.java (revision 3157)
1
package org.txm.whatsnew.rcp;
2

  
3
import org.eclipse.jface.preference.BooleanFieldEditor;
4
import org.eclipse.ui.IWorkbench;
5
import org.txm.rcp.IImageKeys;
6
import org.txm.rcp.preferences.TXMPreferencePage;
7
import org.txm.rcp.preferences.TXMPreferenceStore;
8

  
9

  
10
public class NewsPreferencesPage extends TXMPreferencePage {
11
	
12
	@Override
13
	public void init(IWorkbench workbench) {
14
		
15
		this.setPreferenceStore(new TXMPreferenceStore(NewsPreferences.getInstance().getPreferencesNodeQualifier()));
16
		this.setTitle("News");
17
		this.setImageDescriptor(IImageKeys.getImageDescriptor("platform:/plugin/org.eclipse.ui.editors/icons/full/obj16/quick_assist_obj.gif"));
18
	}
19
	
20
	@Override
21
	protected void createFieldEditors() {
22
		
23
		this.addField(new BooleanFieldEditor(NewsPreferences.SHOW_NEWS, "Show news when TXM starts up", this.getFieldEditorParent()));
24
		
25
		// enable if dev needs to update the NEWS_VERSION value
26
		//this.addField(new org.eclipse.jface.preference.IntegerFieldEditor(NewsPreferences.NEWS_VERSION, "Current news index", this.getFieldEditorParent()));
27
	}
28
}
0 29

  
tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/NewsPreferences.java (revision 3157)
1
package org.txm.whatsnew.rcp;
2

  
3
import org.osgi.service.prefs.Preferences;
4
import org.txm.core.preferences.TXMPreferences;
5

  
6

  
7
public class NewsPreferences extends TXMPreferences  {
8
	
9
	public static final String SHOW_NEWS = "show_news";
10
	public static final String NEWS_VERSION = "news_version";
11
	
12
	/**
13
	 * Gets the instance.
14
	 * 
15
	 * @return the instance
16
	 */
17
	public static NewsPreferences getInstance() {
18
		if (!TXMPreferences.instances.containsKey(NewsPreferences.class)) {
19
			new NewsPreferences();
20
		}
21
		return (NewsPreferences) TXMPreferences.instances.get(NewsPreferences.class);
22
	}
23
	
24
	
25
	@Override
26
	public void initializeDefaultPreferences() {
27
		super.initializeDefaultPreferences();
28
		
29
		Preferences preferences = this.getDefaultPreferencesNode();
30
		preferences.putBoolean(SHOW_NEWS, true); // $NON-NLS-1$
31
		preferences.put(NEWS_VERSION, "0"); // $NON-NLS-1$
32
	}
33
}
0 34

  
tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/OpenNews.java (revision 3157)
1
package org.txm.whatsnew.rcp;
2

  
3
import java.io.IOException;
4
import java.net.MalformedURLException;
5
import java.net.URL;
6

  
7
import org.eclipse.core.commands.ExecutionEvent;
8
import org.eclipse.core.commands.ExecutionException;
9
import org.eclipse.swt.widgets.Display;
10
import org.eclipse.ui.IWorkbenchPage;
11
import org.eclipse.ui.IWorkbenchWindow;
12
import org.eclipse.ui.PlatformUI;
13
import org.osgi.framework.Version;
14
import org.txm.core.preferences.TBXPreferences;
15
import org.txm.rcp.Activator;
16
import org.txm.rcp.commands.OpenBrowser;
17
import org.txm.rcp.editors.TXMBrowserEditor;
18
import org.txm.rcp.editors.TXMEditor;
19
import org.txm.rcp.handlers.BaseAbstractHandler;
20
import org.txm.utils.io.IOUtils;
21
import org.txm.utils.logger.Log;
22

  
23

  
24
public class OpenNews extends BaseAbstractHandler {
25
	
26
	@Override
27
	public Object execute(ExecutionEvent event) throws ExecutionException {
28
		
29
		try {
30
			open();
31
		}
32
		catch (MalformedURLException e) {
33
			Log.warning(e.toString());
34
			Log.printStackTrace(e);
35
		}
36
		return null;
37
	}
38

  
39
	public static void open() throws MalformedURLException {
40
		
41
		Display.getDefault().syncExec(new Runnable() {
42
			
43
			@Override
44
			public void run() {
45
				try {
46
					IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
47
					IWorkbenchPage page = window.getActivePage();
48
					
49
					NewsEditor editor = (NewsEditor) page.openEditor(new NewsEditorInput(), NewsEditor.class.getName(), true);
50
				}
51
				catch (Exception e) {
52
					// TODO Auto-generated catch block
53
					e.printStackTrace();
54
				}
55
			}
56
		});
57
	}
58
}
0 59

  
tmp/org.txm.whatsnew.rcp/build.properties (revision 3157)
1
source.. = src/
2
output.. = bin/
3
bin.includes = META-INF/,\
4
               .,\
5
               plugin.xml
0 6

  
tmp/org.txm.whatsnew.rcp/plugin.xml (revision 3157)
1
<?xml version="1.0" encoding="UTF-8"?>
2
<?eclipse version="3.4"?>
3
<plugin>
4
   <extension
5
         point="org.txm.PostInstallationStep">
6
      <PostInstallationStep
7
            class="org.txm.whatsnew.rcp.DoInstallStep"
8
            description="Whats new about TXM"
9
            name="org.txm.whatsnew.rcp.DoInstallStep">
10
      </PostInstallationStep>
11
   </extension>
12
   <extension
13
         point="org.eclipse.ui.menus">
14
      <menuContribution
15
            locationURI="menu:menu.help?before=org.txm.rcp.separator1">
16
         <command
17
               commandId="org.txm.whatsnew.rcp.OpenNews"
18
               icon="platform:/plugin/org.eclipse.ui.editors/icons/full/obj16/quick_assist_obj.gif"
19
               style="push">
20
         </command>
21
      </menuContribution>
22
   </extension>
23
   <extension
24
         point="org.eclipse.ui.commands">
25
      <command
26
            defaultHandler="org.txm.whatsnew.rcp.OpenNews"
27
            id="org.txm.whatsnew.rcp.OpenNews"
28
            name="What&apos;s new?">
29
      </command>
30
   </extension>
31
   <extension
32
         point="org.eclipse.core.runtime.preferences">
33
      <initializer
34
            class="org.txm.whatsnew.rcp.NewsPreferences">
35
      </initializer>
36
   </extension>
37
   <extension
38
         point="org.eclipse.ui.preferencePages">
39
      <page
40
            category="org.txm.rcp.preferences.UserPreferencePage"
41
            class="org.txm.whatsnew.rcp.NewsPreferencesPage"
42
            id="org.txm.whatsnew.rcp.NewsPreferencesPage"
43
            name="News">
44
      </page>
45
   </extension>
46
   <extension
47
         point="org.eclipse.ui.editors">
48
      <editor
49
            class="org.txm.whatsnew.rcp.NewsEditor"
50
            default="false"
51
            icon="platform:/plugin/org.eclipse.ui.editors/icons/full/obj16/quick_assist_obj.gif"
52
            id="org.txm.whatsnew.rcp.NewsEditor"
53
            name="News">
54
      </editor>
55
   </extension>
56

  
57
</plugin>
0 58

  
tmp/org.txm.whatsnew.rcp/.settings/org.eclipse.jdt.core.prefs (revision 3157)
1
eclipse.preferences.version=1
2
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
4
org.eclipse.jdt.core.compiler.compliance=1.8
5
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
6
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
7
org.eclipse.jdt.core.compiler.source=1.8
0 8

  
tmp/org.txm.whatsnew.rcp/.classpath (revision 3157)
1
<?xml version="1.0" encoding="UTF-8"?>
2
<classpath>
3
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
4
	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
5
		<accessrules>
6
			<accessrule kind="accessible" pattern="**"/>
7
		</accessrules>
8
	</classpathentry>
9
	<classpathentry kind="src" path="src"/>
10
	<classpathentry kind="output" path="bin"/>
11
</classpath>
0 12

  
tmp/org.txm.whatsnew.rcp/META-INF/MANIFEST.MF (revision 3157)
1
Manifest-Version: 1.0
2
Bundle-ManifestVersion: 2
3
Bundle-Name: org.txm.whatsnew.rcp
4
Bundle-SymbolicName: org.txm.whatsnew.rcp;singleton:=true
5
Bundle-Version: 1.0.0.qualifier
6
Bundle-Vendor: textometrie.org
7
Automatic-Module-Name: org.txm.whatsnew.rcp
8
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
9
Require-Bundle: org.txm.rcp;bundle-version="0.8.2",
10
 org.txm.core
11
Import-Package: org.txm
0 12

  
tmp/org.txm.whatsnew.rcp/.project (revision 3157)
1
<?xml version="1.0" encoding="UTF-8"?>
2
<projectDescription>
3
	<name>org.txm.whatsnew.rcp</name>
4
	<comment></comment>
5
	<projects>
6
	</projects>
7
	<buildSpec>
8
		<buildCommand>
9
			<name>org.eclipse.jdt.core.javabuilder</name>
10
			<arguments>
11
			</arguments>
12
		</buildCommand>
13
		<buildCommand>
14
			<name>org.eclipse.pde.ManifestBuilder</name>
15
			<arguments>
16
			</arguments>
17
		</buildCommand>
18
		<buildCommand>
19
			<name>org.eclipse.pde.SchemaBuilder</name>
20
			<arguments>
21
			</arguments>
22
		</buildCommand>
23
	</buildSpec>
24
	<natures>
25
		<nature>org.eclipse.pde.PluginNature</nature>
26
		<nature>org.eclipse.jdt.core.javanature</nature>
27
	</natures>
28
</projectDescription>
0 29

  

Formats disponibles : Unified diff