path solving the feature request: jedit startup option (turn on/off) in its trayicon menu (OS Windows) - ID: 3606375
Submitted | bilymare - 2013-05-02 - 16:15:47z | Assigned | ezust |
---|---|---|---|
Priority | 5 | Category | general |
Status | Open | Group | None |
Resolution | None | Visibility | No |
2013-05-21 - 12:28:40z bilymare |
From 448dc85031b9078d29bbcf1e93caf02eac51c1c9 Mon Sep 17 00:00:00 2001 From: Marek Bily <bilymare@fel.cvut.cz> Date: Thu, 2 May 2013 17:41:24 +0200 Subject: [PATCH] the patch solving the feature: jedit startup option in its trayicon menu (OS Windows) - ID: 3606375 --- org/gjt/sp/jedit/gui/tray/JEditSwingTrayIcon.java | 122 +++++++++++++++++++++- org/jedit/localization/jedit_cs.props | 4 +- org/jedit/localization/jedit_en.props | 2 + org/jedit/localization/jedit_fr.props | 4 +- org/jedit/localization/jedit_ja.props | 4 +- package-files/windows/win32installer.iss | 8 +- 6 files changed, 134 insertions(+), 10 deletions(-) diff --git a/org/gjt/sp/jedit/gui/tray/JEditSwingTrayIcon.java b/org/gjt/sp/jedit/gui/tray/JEditSwingTrayIcon.java index 294bedd..f70888a 100644 --- a/org/gjt/sp/jedit/gui/tray/JEditSwingTrayIcon.java +++ b/org/gjt/sp/jedit/gui/tray/JEditSwingTrayIcon.java @@ -42,6 +42,15 @@ import org.gjt.sp.jedit.View; import org.gjt.sp.jedit.jEdit; import org.gjt.sp.jedit.msg.EditPaneUpdate; import org.gjt.sp.util.StringList; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import javax.swing.JOptionPane; +import java.net.URLDecoder; +import java.io.UnsupportedEncodingException; +import java.util.logging.Level; +import java.util.logging.Logger; //}}} /** @@ -53,24 +62,66 @@ public class JEditSwingTrayIcon extends JEditTrayIcon implements EBComponent private boolean restore; private String userDir; private String[] args; +private boolean isWindows; +private boolean isAutoStart; //{{{ JEditSwingTrayIcon() constructor public JEditSwingTrayIcon() { super(GUIUtilities.getEditorIcon(), "jEdit"); setImageAutoSize(true); + +String system=System.getProperty("os.name"); + system=system.toUpperCase(); + if(system.startsWith("WINDOWS")){ + isWindows=true; + String outS; + final String dosCommand = "reg query \"HKEY_CURRENT_USER\\Software\\" + + "Microsoft\\Windows\\CurrentVersion\\Run\" /v \"jEdit Server\""; + try { + final Process process = Runtime.getRuntime().exec(dosCommand); + BufferedReader r_in = new BufferedReader(new InputStreamReader(process.getInputStream())); + BufferedReader r_err = new BufferedReader(new InputStreamReader(process.getErrorStream())); + isAutoStart=false; + while((outS=r_in.readLine())!=null){ + System.out.println(outS+""); + isAutoStart=true; + } + while((outS=r_err.readLine())!=null){ + System.out.println(outS+""); + isAutoStart=false; + } + + } catch (IOException e) { + e.printStackTrace(); + } + }else{ + isWindows=false; + } + JPopupMenu popup = new JPopupMenu(); JMenuItem newViewItem = new JMenuItem(jEdit.getProperty("tray.newView.label")); +popup.add(newViewItem); +JMenuItem offAutoStart = new JMenuItem(jEdit.getProperty("tray.offAutoStartoff.label")); +if(isAutoStart){ + offAutoStart= new JMenuItem(jEdit.getProperty("tray.offAutoStarton.label")); +}else{ +offAutoStart = new JMenuItem(jEdit.getProperty("tray.offAutoStartoff.label")); +} JMenuItem newPlainViewItem = new JMenuItem(jEdit.getProperty("tray.newPlainView.label")); JMenuItem exitItem = new JMenuItem(jEdit.getProperty("tray.exit.label")); -popup.add(newViewItem); + popup.add(newPlainViewItem); popup.addSeparator(); +if(isWindows){ +popup.add(offAutoStart); +} popup.add(exitItem); -ActionListener actionListener = new MyActionListener(newViewItem, newPlainViewItem, exitItem); +ActionListener actionListener = new MyActionListener(newViewItem, newPlainViewItem, offAutoStart, exitItem); newViewItem.addActionListener(actionListener); newPlainViewItem.addActionListener(actionListener); +offAutoStart.addActionListener(actionListener); exitItem.addActionListener(actionListener); setMenu(popup); addMouseListener(new MyMouseAdapter()); @@ -169,12 +220,14 @@ public class JEditSwingTrayIcon extends JEditTrayIcon implements EBComponent { private final JMenuItem newViewItem; private final JMenuItem newPlainViewItem; +private final JMenuItem offAutoStart; private final JMenuItem exitItem; -MyActionListener(JMenuItem newViewItem, JMenuItem newPlainViewItem, JMenuItem exitItem) +MyActionListener(JMenuItem newViewItem, JMenuItem newPlainViewItem, JMenuItem offAutoStart, JMenuItem exitItem) { this.newViewItem = newViewItem; this.newPlainViewItem = newPlainViewItem; +this.offAutoStart = offAutoStart; this.exitItem = exitItem; } @@ -187,6 +240,69 @@ public class JEditSwingTrayIcon extends JEditTrayIcon implements EBComponent } else if (e.getSource() == newPlainViewItem) { jEdit.newView(null, null, true); +} else if (e.getSource() == offAutoStart) +{ + +String textAutostart=offAutoStart.getText(); + +String textAutostartOn=jEdit.getProperty("tray.offAutoStarton.label"); +if(textAutostart.equals(textAutostartOn)){ +int result= JOptionPane.showConfirmDialog (null, "Would You Like to stop autostart?","Warning",JOptionPane.YES_NO_OPTION); + if(result == JOptionPane.YES_OPTION){ + String dosCommand = "reg delete \"HKEY_CURRENT_USER\\Software\\" + + "Microsoft\\Windows\\CurrentVersion\\Run\" /v \"jEdit Server\" /f"; + try { + Process process = Runtime.getRuntime().exec(dosCommand); + BufferedReader r_in = new BufferedReader(new InputStreamReader(process.getInputStream())); + if(r_in.readLine()!=null){ +offAutoStart.setText(jEdit.getProperty("tray.offAutoStartoff.label")); + } + process.destroy(); + +} catch (IOException eexq) { + eexq.printStackTrace(); +} + } +}else{ +int result= JOptionPane.showConfirmDialog (null, "Would You Like to turn on autostart?","Warning",JOptionPane.YES_NO_OPTION); + if(result == JOptionPane.YES_OPTION){ + String path = JEditSwingTrayIcon.class.getProtectionDomain().getCodeSource().getLocation().getPath(); +String decodedPath="C:\\Program Files\\jEdit\\jedit.exe"; +try { +decodedPath = URLDecoder.decode(path, "UTF-8"); +} catch (UnsupportedEncodingException exuex) { +Logger.getLogger(JEditSwingTrayIcon.class.getName()).log(Level.SEVERE, null, exuex); +} +if(decodedPath.charAt(0)=='/'){ +decodedPath=decodedPath.substring(1); +} +decodedPath=decodedPath.replaceAll("/", "\\\\"); +int indexer=decodedPath.length()-1; +while(decodedPath.charAt(indexer)!='\\'){ +indexer--; + +} +indexer++; +decodedPath=decodedPath.substring(0, indexer); + String dosCommand = "reg add \"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\" + + "CurrentVersion\\Run\" /v \"jEdit Server\" /t \"REG_SZ\" /d \""+decodedPath + +"jedit.exe -background -nogui --l4j-dont-wait\" /f"; + try { +final Process process = Runtime.getRuntime().exec(dosCommand); +BufferedReader r_in = new BufferedReader(new InputStreamReader(process.getInputStream())); +BufferedReader r_err = new BufferedReader(new InputStreamReader(process.getErrorStream())); +String outS; +while((outS=r_in.readLine())!=null){ +offAutoStart.setText(jEdit.getProperty("tray.offAutoStarton.label")); +} + +} catch (IOException exio) { +exio.printStackTrace(); + +} + } + +} } else if (e.getSource() == exitItem) { jEdit.exit(null, true); diff --git a/org/jedit/localization/jedit_cs.props b/org/jedit/localization/jedit_cs.props index 0040992..3145e61 100644 --- a/org/jedit/localization/jedit_cs.props +++ b/org/jedit/localization/jedit_cs.props @@ -1,4 +1,4 @@ -### +### ### jEdit user interface definitions, ### :tabSize=8:indentSize=8:noTabs=false: ### :folding=explicit:collapseFolds=1: @@ -77,6 +77,8 @@ view.context.customize=Upravit toto menu... #{{{ System tray menu tray.newView.label=Nový pohled tray.newPlainView.label=Nový prostý pohled +tray.offAutoStarton.label=Ukoncit autospusteni +tray.offAutoStartoff.label=Zapnout autospusteni tray.exit.label=Ukončit #}}} diff --git a/org/jedit/localization/jedit_en.props b/org/jedit/localization/jedit_en.props index 4a6e71a..41bb8f5 100644 --- a/org/jedit/localization/jedit_en.props +++ b/org/jedit/localization/jedit_en.props @@ -78,6 +78,8 @@ view.context.customize=Customize This Menu... tray.newView.label=New view tray.newPlainView.label=New plain view tray.exit.label=Exit +tray.offAutoStarton.label=Turn off Autostart +tray.offAutoStartoff.label=Turn on Autostart #}}} #{{{ Menu bar diff --git a/org/jedit/localization/jedit_fr.props b/org/jedit/localization/jedit_fr.props index eafe2b6..5b43b59 100644 --- a/org/jedit/localization/jedit_fr.props +++ b/org/jedit/localization/jedit_fr.props @@ -1,4 +1,4 @@ -### +### ### jEdit user interface definitions, ### :tabSize=8:indentSize=8:noTabs=false: ### :folding=explicit:collapseFolds=1: @@ -78,6 +78,8 @@ view.context.customize=Personnaliser ce menu... tray.newView.label=Nouvel affichage tray.newPlainView.label=Nouvel affichage simple tray.exit.label=Fermer +tray.offAutoStarton.label=Turn off Autostart +tray.offAutoStartoff.label=Turn on Autostart #}}} #{{{ Menu bar diff --git a/org/jedit/localization/jedit_ja.props b/org/jedit/localization/jedit_ja.props index b75b9cf..238cfda 100644 --- a/org/jedit/localization/jedit_ja.props +++ b/org/jedit/localization/jedit_ja.props @@ -1,4 +1,4 @@ -### +### ### jEdit user interface definitions, ### :tabSize=8:indentSize=8:noTabs=false: ### :folding=explicit:collapseFolds=1: @@ -78,6 +78,8 @@ view.context.customize=������をカスタ�イズ... tray.newView.label=新規��� tray.newPlainView.label=新規������� tray.exit.label=終了 +tray.offAutoStarton.label=Turn off Autostart +tray.offAutoStartoff.label=Turn on Autostart #}}} #{{{ Menu bar diff --git a/package-files/windows/win32installer.iss b/package-files/windows/win32installer.iss index 06ea99c..863aff6 100644 --- a/package-files/windows/win32installer.iss +++ b/package-files/windows/win32installer.iss @@ -79,7 +79,7 @@ Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\jEdit; Filename: {a [Languages] Name: en; MessagesFile: compiler:Default.isl Name: de; MessagesFile: compiler:Languages\German.isl -Name: eu; MessagesFile: compiler:Languages\Basque.isl +;Name: eu; MessagesFile: compiler:Languages\Basque.isl Name: pt_BR; MessagesFile: compiler:Languages\BrazilianPortuguese.isl Name: ca; MessagesFile: compiler:Languages\Catalan.isl Name: cs; MessagesFile: compiler:Languages\Czech.isl @@ -88,14 +88,14 @@ Name: nl; MessagesFile: compiler:Languages\Dutch.isl Name: fi; MessagesFile: compiler:Languages\Finnish.isl Name: fr; MessagesFile: compiler:Languages\French.isl Name: he; MessagesFile: compiler:Languages\Hebrew.isl -Name: hu; MessagesFile: compiler:Languages\Hungarian.isl +;Name: hu; MessagesFile: compiler:Languages\Hungarian.isl Name: it; MessagesFile: compiler:Languages\Italian.isl Name: ja; MessagesFile: compiler:Languages\Japanese.isl Name: no; MessagesFile: compiler:Languages\Norwegian.isl Name: pl; MessagesFile: compiler:Languages\Polish.isl Name: pt; MessagesFile: compiler:Languages\Portuguese.isl Name: ru; MessagesFile: compiler:Languages\Russian.isl -Name: sk; MessagesFile: compiler:Languages\Slovak.isl +;Name: sk; MessagesFile: compiler:Languages\Slovak.isl Name: sl; MessagesFile: compiler:Languages\Slovenian.isl Name: es; MessagesFile: compiler:Languages\Spanish.isl @@ -130,7 +130,7 @@ Root: HKCR; Subkey: *\Shell; Flags: uninsdeletekeyifempty Root: HKCR; Subkey: *\Shell\{cm:OpenWithProgram,jEdit}; Flags: uninsdeletekey Root: HKCR; Subkey: *\Shell\{cm:OpenWithProgram,jEdit}\Command; ValueType: string; ValueData: """{app}\jedit.exe"" ""%1""" Root: HKCR; Subkey: *\Shell\{cm:OpenWithProgram,jEdit}; ValueName: Icon; ValueType: string; ValueData: "{app}\jedit.exe" -Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: jEdit Server; ValueData: """{app}\jedit.exe"" -background -nogui --l4j-dont-wait"; Flags: uninsdeletevalue; Tasks: autostartserver +Root: HKCU; Subkey: SOFTWARE\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: jEdit Server; ValueData: """{app}\jedit.exe"" -background -nogui --l4j-dont-wait"; Flags: uninsdeletevalue; Tasks: autostartserver [Run] Filename: {app}\jedit.exe; Description: {cm:ViewFile,README}; Parameters: "--l4j-dont-wait -nosettings ""{app}\doc\README.txt"""; WorkingDir: {app}; Flags: nowait postinstall skipifsilent -- 1.8.0.msysgit.0 |
---|---|
2013-05-21 - 15:39:53z ezust |
For logging errors, it is better to use the jEdit "Log" class rather than the swing
logger API. We don't use the swing logger class anywhere else in the code. |
2013-08-10 - 02:33:49z ezust |
Please replace the patch you have attached (from may 2) with the updated patch as
file attachment so it can be reviewed. I see some other issues with your current code
and I will address it then. |
2013-08-10 - 02:40:03z ezust |
oops. I see they are both the same. Please ignore previous comment. Here is one more comment about your patch: Regarding this part: +String system=System.getProperty("os.name"); + system=system.toUpperCase(); + if(system.startsWith("WINDOWS")){ + isWindows=true; it is better to use OperatingSystem.isWindows() |
2013-05-02 - 16:15:48z bilymare |
the-patch-solving-the-feature_request-ID_3606375.patch patch from bilymare@fel.cvut.cz |
---|