From: <sh...@us...> - 2011-08-02 18:45:40
|
Revision: 19737 http://jedit.svn.sourceforge.net/jedit/?rev=19737&view=rev Author: shlomy Date: 2011-08-02 18:45:33 +0000 (Tue, 02 Aug 2011) Log Message: ----------- Added notifications plugin Added Paths: ----------- plugins/Notifications/ plugins/Notifications/trunk/ plugins/Notifications/trunk/.classpath plugins/Notifications/trunk/.project plugins/Notifications/trunk/Notifications.props plugins/Notifications/trunk/bin/ plugins/Notifications/trunk/bin/notifications/ plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$1.class plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$BalloonFrame$Balloon$1.class plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$BalloonFrame$Balloon$2$1.class plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$BalloonFrame$Balloon$2.class plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$BalloonFrame$Balloon.class plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$BalloonFrame.class plugins/Notifications/trunk/bin/notifications/BalloonNotificationService.class plugins/Notifications/trunk/bin/notifications/ErrorParameters.class plugins/Notifications/trunk/bin/notifications/NotificationsPlugin.class plugins/Notifications/trunk/build/ plugins/Notifications/trunk/build/classes/ plugins/Notifications/trunk/build/classes/notifications/ plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$1.class plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$BalloonFrame$Balloon$1.class plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$BalloonFrame$Balloon$2$1.class plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$BalloonFrame$Balloon$2.class plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$BalloonFrame$Balloon.class plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$BalloonFrame.class plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService.class plugins/Notifications/trunk/build/classes/notifications/ErrorParameters.class plugins/Notifications/trunk/build/classes/notifications/NotificationsPlugin.class plugins/Notifications/trunk/build/docs/ plugins/Notifications/trunk/build/extras/ plugins/Notifications/trunk/build/extras/Notifications.props plugins/Notifications/trunk/build/extras/description.html plugins/Notifications/trunk/build/extras/index.html plugins/Notifications/trunk/build/extras/services.xml plugins/Notifications/trunk/build.xml plugins/Notifications/trunk/description.html plugins/Notifications/trunk/index.html plugins/Notifications/trunk/services.xml plugins/Notifications/trunk/src/ plugins/Notifications/trunk/src/notifications/ plugins/Notifications/trunk/src/notifications/BalloonNotificationService.java plugins/Notifications/trunk/src/notifications/ErrorParameters.java plugins/Notifications/trunk/src/notifications/NotificationsPlugin.java Added: plugins/Notifications/trunk/.classpath =================================================================== --- plugins/Notifications/trunk/.classpath (rev 0) +++ plugins/Notifications/trunk/.classpath 2011-08-02 18:45:33 UTC (rev 19737) @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="src"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry combineaccessrules="false" kind="src" path="/jEdit"/> + <classpathentry kind="output" path="bin"/> +</classpath> Added: plugins/Notifications/trunk/.project =================================================================== --- plugins/Notifications/trunk/.project (rev 0) +++ plugins/Notifications/trunk/.project 2011-08-02 18:45:33 UTC (rev 19737) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>Notifications</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> Added: plugins/Notifications/trunk/Notifications.props =================================================================== --- plugins/Notifications/trunk/Notifications.props (rev 0) +++ plugins/Notifications/trunk/Notifications.props 2011-08-02 18:45:33 UTC (rev 19737) @@ -0,0 +1,23 @@ +plugin.notifications.NotificationsPlugin.activate=defer + +# general plugin information +plugin.notifications.NotificationsPlugin.name=Notifications +plugin.notifications.NotificationsPlugin.author=Shlomy Reinstein +plugin.notifications.NotificationsPlugin.version=0.1 +plugin.notifications.NotificationsPlugin.description=Alternate notification types +plugin.notifications.NotificationsPlugin.docs=index.html + +plugin.notifications.NotificationsPlugin.depend.0=jdk 1.5 +plugin.notifications.NotificationsPlugin.depend.1=jedit 04.05.00.00 + +# menu items +plugin.notifications.NotificationsPlugin.menu=\ + +# option panes +plugin.notifications.NotificationsPlugin.option-pane=notifications + +# docs +#plugin.notifications.NotificationsPlugin.docs=index.html + +# options +#options.CtagsInterface.ctags=ctags Added: plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$1.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$1.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$BalloonFrame$Balloon$1.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$BalloonFrame$Balloon$1.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$BalloonFrame$Balloon$2$1.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$BalloonFrame$Balloon$2$1.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$BalloonFrame$Balloon$2.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$BalloonFrame$Balloon$2.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$BalloonFrame$Balloon.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$BalloonFrame$Balloon.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$BalloonFrame.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/bin/notifications/BalloonNotificationService$BalloonFrame.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/bin/notifications/BalloonNotificationService.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/bin/notifications/BalloonNotificationService.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/bin/notifications/ErrorParameters.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/bin/notifications/ErrorParameters.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/bin/notifications/NotificationsPlugin.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/bin/notifications/NotificationsPlugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$1.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$1.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$BalloonFrame$Balloon$1.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$BalloonFrame$Balloon$1.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$BalloonFrame$Balloon$2$1.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$BalloonFrame$Balloon$2$1.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$BalloonFrame$Balloon$2.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$BalloonFrame$Balloon$2.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$BalloonFrame$Balloon.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$BalloonFrame$Balloon.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$BalloonFrame.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService$BalloonFrame.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/build/classes/notifications/BalloonNotificationService.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/build/classes/notifications/ErrorParameters.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/build/classes/notifications/ErrorParameters.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/build/classes/notifications/NotificationsPlugin.class =================================================================== (Binary files differ) Property changes on: plugins/Notifications/trunk/build/classes/notifications/NotificationsPlugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/Notifications/trunk/build/extras/Notifications.props =================================================================== --- plugins/Notifications/trunk/build/extras/Notifications.props (rev 0) +++ plugins/Notifications/trunk/build/extras/Notifications.props 2011-08-02 18:45:33 UTC (rev 19737) @@ -0,0 +1,23 @@ +plugin.notifications.NotificationsPlugin.activate=defer + +# general plugin information +plugin.notifications.NotificationsPlugin.name=Notifications +plugin.notifications.NotificationsPlugin.author=Shlomy Reinstein +plugin.notifications.NotificationsPlugin.version=0.1 +plugin.notifications.NotificationsPlugin.description=Alternate notification types +plugin.notifications.NotificationsPlugin.docs=index.html + +plugin.notifications.NotificationsPlugin.depend.0=jdk 1.5 +plugin.notifications.NotificationsPlugin.depend.1=jedit 04.05.00.00 + +# menu items +plugin.notifications.NotificationsPlugin.menu=\ + +# option panes +plugin.notifications.NotificationsPlugin.option-pane=notifications + +# docs +#plugin.notifications.NotificationsPlugin.docs=index.html + +# options +#options.CtagsInterface.ctags=ctags Added: plugins/Notifications/trunk/build/extras/description.html =================================================================== --- plugins/Notifications/trunk/build/extras/description.html (rev 0) +++ plugins/Notifications/trunk/build/extras/description.html 2011-08-02 18:45:33 UTC (rev 19737) @@ -0,0 +1 @@ +The Notifications plugin provides alternate notification types, instead of the modal error dialogs. Added: plugins/Notifications/trunk/build/extras/index.html =================================================================== --- plugins/Notifications/trunk/build/extras/index.html (rev 0) +++ plugins/Notifications/trunk/build/extras/index.html 2011-08-02 18:45:33 UTC (rev 19737) @@ -0,0 +1,11 @@ +<html> +<title>Notifications</title> +<body> +<h1>The Notifications plugin</h1> +Written by Shlomy Reinstein, August 2011. +<h2>Introduction</h2> +<p> +The Notifications plugin provides alternate types of notifications, instead of the modal error dialogs. +</p> +</body> +</html> Added: plugins/Notifications/trunk/build/extras/services.xml =================================================================== --- plugins/Notifications/trunk/build/extras/services.xml (rev 0) +++ plugins/Notifications/trunk/build/extras/services.xml 2011-08-02 18:45:33 UTC (rev 19737) @@ -0,0 +1,10 @@ +<?xml version="1.0"?> + +<!DOCTYPE SERVICES SYSTEM "services.dtd"> + +<SERVICES> + <SERVICE CLASS="org.gjt.sp.jedit.gui.notification.NotificationService" NAME="Balloon"> + new notifications.BalloonNotificationService(); + </SERVICE> +</SERVICES> + Added: plugins/Notifications/trunk/build.xml =================================================================== --- plugins/Notifications/trunk/build.xml (rev 0) +++ plugins/Notifications/trunk/build.xml 2011-08-02 18:45:33 UTC (rev 19737) @@ -0,0 +1,32 @@ +<?xml version="1.0"?> +<!-- + This is the build.xml file for building the CodeHelper plugin. + It is based on the standard build.xml file for jEdit plugins. +--> +<project name="Notifications" default="build" basedir="."> + + <property file="build.properties"/> + <property file="../build.properties"/> + <property name="jar.name" value="${ant.project.name}.jar"/> + <property name="src.dir" location="${basedir}/src"/> + <property name="build.dir" value="build"/> + <property name="docs-proc.target" value="none" /> + + <property file="build.support" value="../build-support" /> + <import file="${build.support}/plugin-build.xml" /> + + <property name="jedit.plugins.dir" value="${install.dir}" /> + + <selector id="packageFiles"> + <or> + <filename name="*.html" /> + </or> + </selector> + + <path id="project.class.path"> + <pathelement location="${jedit.install.dir}/jedit.jar"/> + </path> + +</project> + +<!-- :indentSize=4:lineSeparator=\n:noTabs=false:tabSize=4: --> Added: plugins/Notifications/trunk/description.html =================================================================== --- plugins/Notifications/trunk/description.html (rev 0) +++ plugins/Notifications/trunk/description.html 2011-08-02 18:45:33 UTC (rev 19737) @@ -0,0 +1 @@ +The Notifications plugin provides alternate notification types, instead of the modal error dialogs. Added: plugins/Notifications/trunk/index.html =================================================================== --- plugins/Notifications/trunk/index.html (rev 0) +++ plugins/Notifications/trunk/index.html 2011-08-02 18:45:33 UTC (rev 19737) @@ -0,0 +1,11 @@ +<html> +<title>Notifications</title> +<body> +<h1>The Notifications plugin</h1> +Written by Shlomy Reinstein, August 2011. +<h2>Introduction</h2> +<p> +The Notifications plugin provides alternate types of notifications, instead of the modal error dialogs. +</p> +</body> +</html> Added: plugins/Notifications/trunk/services.xml =================================================================== --- plugins/Notifications/trunk/services.xml (rev 0) +++ plugins/Notifications/trunk/services.xml 2011-08-02 18:45:33 UTC (rev 19737) @@ -0,0 +1,10 @@ +<?xml version="1.0"?> + +<!DOCTYPE SERVICES SYSTEM "services.dtd"> + +<SERVICES> + <SERVICE CLASS="org.gjt.sp.jedit.gui.notification.NotificationService" NAME="Balloon"> + new notifications.BalloonNotificationService(); + </SERVICE> +</SERVICES> + Added: plugins/Notifications/trunk/src/notifications/BalloonNotificationService.java =================================================================== --- plugins/Notifications/trunk/src/notifications/BalloonNotificationService.java (rev 0) +++ plugins/Notifications/trunk/src/notifications/BalloonNotificationService.java 2011-08-02 18:45:33 UTC (rev 19737) @@ -0,0 +1,207 @@ +package notifications; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.GridLayout; +import java.awt.Point; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Vector; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.JToolBar; +import javax.swing.SwingUtilities; +import javax.swing.Timer; + +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.gui.notification.DefaultNotificationService; +import org.gjt.sp.jedit.gui.notification.NotificationService; + +public class BalloonNotificationService extends NotificationService +{ + static private final String BALLOON_TIME_MS_PROP = "balloon.notification.time.ms"; + static private final int BALLOON_TIME_MS_DEFAULT = 5000; + static private final String BALLOON_COLOR_PROP = "balloon.notification.color"; + static private final Color BALLOON_COLOR_DEFAULT = Color.yellow; + private Object errorLock = new Object(); + private boolean error = false; + private BalloonFrame frame; + private final Vector<ErrorParameters> errors = new Vector<ErrorParameters>(); + + @SuppressWarnings("serial") + public class BalloonFrame extends JFrame + { + private int num = 0; + private JPanel p; + private final static int BalloonWidth = 500; + private final static int BalloonHeight = 80; + private final static int MaxHeight = 400; + private final Dimension size = new Dimension(BalloonWidth, 0); + private Point bottomRight = new Point(); + + public class Balloon extends JPanel + { + private Timer timer; + private static final int MaxMessageLines = 2; + Balloon(final ErrorParameters entry) + { + setBorder(BorderFactory.createEtchedBorder()); + setLayout(new BorderLayout()); + Color c = jEdit.getColorProperty(BALLOON_COLOR_PROP, BALLOON_COLOR_DEFAULT); + JPanel top = new JPanel(new BorderLayout()); + add(top, BorderLayout.NORTH); + JToolBar tb = new JToolBar(); + top.add(tb, BorderLayout.WEST); + JButton extend = new JButton("+"); + tb.add(extend); + extend.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent arg0) + { + DefaultNotificationService.instance().notifyError( + entry.comp, entry.path, entry.messageProp, entry.args); + } + }); + JLabel path = new JLabel("<html><body><b>" + entry.path + "</b></html>"); + path.setBorder(BorderFactory.createLineBorder(Color.black)); + top.add(path, BorderLayout.CENTER); + JTextArea ta = new JTextArea(); + ta.setBackground(c); + for (int i = 0; i < MaxMessageLines; i++) + { + ta.append(entry.args[i].toString()); + if (i < MaxMessageLines - 1) + ta.append("\n"); + } + ta.setEditable(false); + add(ta, BorderLayout.CENTER); + int timeMs = jEdit.getIntegerProperty(BALLOON_TIME_MS_PROP, + BALLOON_TIME_MS_DEFAULT); + timer = new Timer(timeMs, new ActionListener() + { + @Override + public void actionPerformed(ActionEvent arg0) + { + SwingUtilities.invokeLater(new Runnable() + { + @Override + public void run() + { + removeBalloon(Balloon.this); + } + }); + } + }); + timer.setRepeats(false); + timer.restart(); + } + } + + public BalloonFrame() + { + setAlwaysOnTop(true); + setUndecorated(true); + setLayout(new BorderLayout()); + p = new JPanel(); + add(new JScrollPane(p, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, + JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.CENTER); + p.setLayout(new GridLayout(0, 1)); + } + + public void setOwner(Frame owner) + { + bottomRight.x = owner.getX() + owner.getWidth(); + bottomRight.y = owner.getY() + owner.getHeight(); + } + + private void adjustSize() { + size.height = num * BalloonHeight; + if (size.height > MaxHeight) + size.height = MaxHeight; + setSize(size); + setLocation(bottomRight.x - size.width, bottomRight.y - size.height); + } + + public void addBalloons(Vector<ErrorParameters> entries) + { + num += entries.size(); + for (ErrorParameters entry: entries) + p.add(new Balloon(entry)); + ErrorParameters lastError = entries.lastElement(); + if (lastError != null) + { + Frame f = JOptionPane.getFrameForComponent(lastError.comp); + if (f != null) + setOwner(f); + } + adjustSize(); + setVisible(true); + } + + public void removeBalloon(Balloon b) + { + p.remove(b); + if (num > 0) + num--; + if (num == 0) + { + dispose(); + setVisible(false); + clear(); + } + else + adjustSize(); + } + } + + private void clear() + { + synchronized (errorLock) + { + error = false; + } + } + + public boolean unnotifiedErrors() + { + return error; + } + + public void notifyError(Component comp, String path, String messageProp, + Object[] args) + { + synchronized(errorLock) + { + error = true; + errors.add(new ErrorParameters(comp,path,messageProp,args)); + if(errors.size() == 1) + { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() + { + if (frame == null) + frame = new BalloonFrame(); + synchronized(errorLock) + { + frame.addBalloons(errors); + errors.clear(); + } + } + }); + } + } + } + +} Added: plugins/Notifications/trunk/src/notifications/ErrorParameters.java =================================================================== --- plugins/Notifications/trunk/src/notifications/ErrorParameters.java (rev 0) +++ plugins/Notifications/trunk/src/notifications/ErrorParameters.java 2011-08-02 18:45:33 UTC (rev 19737) @@ -0,0 +1,18 @@ +package notifications; + +import java.awt.Component; + +class ErrorParameters +{ + Component comp; + String path; + String messageProp; + Object[] args; + public ErrorParameters(Component comp, String path, String messageProp, Object[] args) + { + this.comp = comp; + this.path = path; + this.messageProp = messageProp; + this.args = args; + } +} \ No newline at end of file Added: plugins/Notifications/trunk/src/notifications/NotificationsPlugin.java =================================================================== --- plugins/Notifications/trunk/src/notifications/NotificationsPlugin.java (rev 0) +++ plugins/Notifications/trunk/src/notifications/NotificationsPlugin.java 2011-08-02 18:45:33 UTC (rev 19737) @@ -0,0 +1,13 @@ +package notifications; + +import org.gjt.sp.jedit.EditPlugin; + +public class NotificationsPlugin extends EditPlugin +{ + public void start() + { + } + public void stop() + { + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |