From: <ez...@us...> - 2007-03-29 00:27:10
|
Revision: 9344 http://svn.sourceforge.net/jedit/?rev=9344&view=rev Author: ezust Date: 2007-03-28 17:27:07 -0700 (Wed, 28 Mar 2007) Log Message: ----------- Merged Perspective plugin into Docker. Modified Paths: -------------- plugins/Docker/trunk/DockerPlugin.props plugins/Docker/trunk/actions.xml plugins/Docker/trunk/description.html plugins/Docker/trunk/docker/DockerPlugin.java plugins/Docker/trunk/docs/users-guide.xml Added Paths: ----------- plugins/Docker/trunk/docker/Perspective.java Modified: plugins/Docker/trunk/DockerPlugin.props =================================================================== --- plugins/Docker/trunk/DockerPlugin.props 2005-02-03 13:49:02 UTC (rev 9343) +++ plugins/Docker/trunk/DockerPlugin.props 2007-03-29 00:27:07 UTC (rev 9344) @@ -11,8 +11,8 @@ # Plugin properties plugin.docker.DockerPlugin.name=Docker plugin.docker.DockerPlugin.activate=startup -plugin.docker.DockerPlugin.author=Calvin Yu -plugin.docker.DockerPlugin.version=0.3.1 +plugin.docker.DockerPlugin.author=Calvin Yu, Shlomy Reinstein, Alan Ezust +plugin.docker.DockerPlugin.version=0.4 plugin.docker.DockerPlugin.docs=index.html plugin.docker.DockerPlugin.option-pane=docker plugin.docker.DockerPlugin.description=Enhancements to the Dockable window manager @@ -21,10 +21,10 @@ options.docker.code=new docker.DockerOptionPane() # menus -plugin.docker.DockerPlugin.menu=docker.toggle-docks docker.popup.top-dock docker.popup.left-dock docker.popup.bottom-dock docker.popup.right-dock +plugin.docker.DockerPlugin.menu=perspective-load perspective-save docker.toggle-docks docker.popup.top-dock docker.popup.left-dock docker.popup.bottom-dock docker.popup.right-dock plugin.docker.DockerPlugin.depend.0=jedit 04.02.99.00 -plugin.docker.DockerPlugin.depend.1=jdk 1.4 +plugin.docker.DockerPlugin.depend.1=jdk 1.5 plugin.docker.DockerPlugin.depend.2=plugin CommonControlsPlugin 0.7 options.docker.label=Docker @@ -37,7 +37,9 @@ docker.label.auto-hide-overrides=Override auto-hide feature for the following dockables: docker.label.add-auto-hide-override=Add docker.label.remove-auto-hide-override=Remove - +# action labels +perspective-load.label=Load Perspective... +perspective-save.label=Save Perspective... docker.popup.top-dock.label=Top Dock Popup docker.popup.left-dock.label=Left Dock Popup docker.popup.bottom-dock.label=Bottom Dock Popup Modified: plugins/Docker/trunk/actions.xml =================================================================== --- plugins/Docker/trunk/actions.xml 2005-02-03 13:49:02 UTC (rev 9343) +++ plugins/Docker/trunk/actions.xml 2007-03-29 00:27:07 UTC (rev 9344) @@ -34,4 +34,15 @@ } </CODE> </ACTION> + <ACTION NAME="perspective-save" NO_REPEAT="TRUE"> + <CODE> + docker.Perspective.save(view); + </CODE> + </ACTION> + <ACTION NAME="perspective-load" NO_REPEAT="TRUE"> + <CODE> + docker.Perspective.load(view); + </CODE> + </ACTION> + </ACTIONS> Modified: plugins/Docker/trunk/description.html =================================================================== --- plugins/Docker/trunk/description.html 2005-02-03 13:49:02 UTC (rev 9343) +++ plugins/Docker/trunk/description.html 2007-03-29 00:27:07 UTC (rev 9344) @@ -1 +1 @@ -The Docker plugin provides some extra docking actions which were not available in the jEdit core. Extra features include: dock auto-hiding, popup to cycle through docks, and a toggle all docks shortcut. \ No newline at end of file +The Docker plugin provides some extra docking actions which were not available in the jEdit core. Extra features include: loading/saving perspectives, dock auto-hiding, popup to cycle through docks, and a toggle all docks shortcut. Modified: plugins/Docker/trunk/docker/DockerPlugin.java =================================================================== --- plugins/Docker/trunk/docker/DockerPlugin.java 2005-02-03 13:49:02 UTC (rev 9343) +++ plugins/Docker/trunk/docker/DockerPlugin.java 2007-03-29 00:27:07 UTC (rev 9344) @@ -55,7 +55,8 @@ private Map handlers; private DockerConfig config; - + private DockFocusManager dfm; + /** * Create a new <code>DockerPlugin</code> */ @@ -146,9 +147,14 @@ } public void start() { - EditBus.addToBus(new DockFocusManager()); + dfm = new DockFocusManager(); + EditBus.addToBus(dfm); } + public void stop() { + EditBus.removeFromBus(dfm); + } + /** * Gets the Plugin attribute of the DockerPlugin class */ Added: plugins/Docker/trunk/docker/Perspective.java =================================================================== --- plugins/Docker/trunk/docker/Perspective.java (rev 0) +++ plugins/Docker/trunk/docker/Perspective.java 2007-03-29 00:27:07 UTC (rev 9344) @@ -0,0 +1,205 @@ +/* +Copyright (C) 2007 Shlomy Reinstein +Merged into the Docker plugin by Alan Ezust + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +package docker; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.Vector; + +import javax.swing.JOptionPane; + +import org.gjt.sp.jedit.PerspectiveManager; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.gui.DockableWindowManager; +import org.gjt.sp.util.Log; +import org.gjt.sp.util.XMLUtilities; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +public class Perspective { + + static public void save(View view) { + String name = JOptionPane.showInputDialog(null, "Perspective name:", + "Save perspective", JOptionPane.QUESTION_MESSAGE); + if (name == null) + return; + DockableWindowManager dockMan = view.getDockableWindowManager(); + Hashtable<String, String[]> dockables = new Hashtable<String, String[]>(); + dockables.put(DockableWindowManager.LEFT, + dockMan.getLeftDockingArea().getDockables()); + dockables.put(DockableWindowManager.RIGHT, + dockMan.getRightDockingArea().getDockables()); + dockables.put(DockableWindowManager.TOP, + dockMan.getTopDockingArea().getDockables()); + dockables.put(DockableWindowManager.BOTTOM, + dockMan.getBottomDockingArea().getDockables()); + PrintWriter w; + try { + w = new PrintWriter(new FileWriter(getConfigFile(name))); + w.println("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"); + w.println(); + w.println("<perspective>"); + Enumeration<String> keys = dockables.keys(); + while (keys.hasMoreElements()) { + String key = keys.nextElement(); + w.println(" <" + key + ">"); + String [] windows = dockables.get(key); + for (int i = 0; i < windows.length; i++) { + String window = windows[i]; + boolean visible = dockMan.isDockableWindowVisible(window); + w.println(" <window name=\"" + window + + "\" visible=\"" + visible + "\" />"); + } + w.println(" </" + key + ">"); + } + w.println("</perspective>"); + w.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + private static String getConfigFile(String name) { + return getConfigDirectory() + File.separator + name + ".xml"; + } + private static String getConfigDirectory() { + String dir = jEdit.getSettingsDirectory() + File.separator + "perspective"; + File f = new File(dir); + if (! f.exists()) + f.mkdir(); + return dir; + } + + static private void remove(String [] dockables) { + for (int i = 0; i < dockables.length; i++) + jEdit.setProperty(dockables[i] + ".dock-position", + DockableWindowManager.FLOATING); + } + static public void load(View view) { + File dir = new File(getConfigDirectory()); + if (! dir.canRead()) + return; + String[] names = dir.list(new FilenameFilter() { + public boolean accept(File arg0, String arg1) { + return arg1.endsWith(".xml"); + } + }); + String[] perspectives = new String[names.length]; + for (int i = 0; i < names.length; i++) { + perspectives[i] = names[i].substring(0, names[i].length() - 4); + } + int sel = JOptionPane.showOptionDialog(jEdit.getActiveView(), + "Select perspective:", "Load perspective", + JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, + null, perspectives, null); + if (sel == JOptionPane.CLOSED_OPTION) + return; + String selected = getConfigFile(perspectives[sel]); + PerspectiveHandler handler = new PerspectiveHandler(); + try + { + XMLUtilities.parseXML(new FileInputStream(selected), handler); + } + catch(IOException e) + { + Log.log(Log.ERROR,PerspectiveManager.class,e); + } + DockableWindowManager dockMan = view.getDockableWindowManager(); + // Remove all existing dockables + remove(dockMan.getLeftDockingArea().getDockables()); + remove(dockMan.getRightDockingArea().getDockables()); + remove(dockMan.getTopDockingArea().getDockables()); + remove(dockMan.getBottomDockingArea().getDockables()); + // Now put all the dockables from the loaded perspective + Hashtable<String, Vector<String> > dockables = handler.getDockables(); + Enumeration<String> keys = dockables.keys(); + while (keys.hasMoreElements()) { + String key = keys.nextElement(); + Vector<String> windows = dockables.get(key); + for (int i = 0; i < windows.size(); i++) + { + String name = windows.get(i); + jEdit.setProperty(name + ".dock-position", key); + dockMan.hideDockableWindow(name); + } + } + jEdit.propertiesChanged(); + // Restore the "visible" state + HashSet<String> visible = handler.getVisible(); + Iterator<String> it = visible.iterator(); + while (it.hasNext()) { + String name = it.next(); + dockMan.showDockableWindow(name); + } + } + + static class PerspectiveHandler extends DefaultHandler { + + private String area = null; + private Hashtable<String, Vector<String> > dockables = + new Hashtable<String, Vector<String> >(); + private static final HashSet<String> areas = new HashSet<String>(); + private HashSet<String> visible = new HashSet<String>(); + + PerspectiveHandler() { + areas.add(DockableWindowManager.LEFT); + areas.add(DockableWindowManager.RIGHT); + areas.add(DockableWindowManager.TOP); + areas.add(DockableWindowManager.BOTTOM); + } + @Override + public void startElement(String nsURI, String localName, + String qualifiedName, Attributes attr) throws SAXException + { + if (areas.contains(localName)) { + area = localName; + return; + } + if (localName.equalsIgnoreCase("window")) { + String name = attr.getValue("name"); + if (name == null) + return; + if (! dockables.containsKey(area)) + dockables.put(area, new Vector<String>()); + dockables.get(area).add(name); + String isVisible = attr.getValue("visible"); + if (isVisible == null) + return; + if (isVisible.equals("true")) + visible.add(name); + } + } + public Hashtable<String, Vector<String> > getDockables() { + return dockables; + } + public HashSet<String> getVisible() { + return visible; + } + } +} Property changes on: plugins/Docker/trunk/docker/Perspective.java ___________________________________________________________________ Name: svn:eol-style + native Modified: plugins/Docker/trunk/docs/users-guide.xml =================================================================== --- plugins/Docker/trunk/docs/users-guide.xml 2005-02-03 13:49:02 UTC (rev 9343) +++ plugins/Docker/trunk/docs/users-guide.xml 2007-03-29 00:27:07 UTC (rev 9344) @@ -15,6 +15,7 @@ <authorgroup> <author><firstname>Calvin</firstname><surname>Yu</surname></author> + <author><firstname>Shlomy</firstname><surname>Reinstein</surname></author> </authorgroup> <legalnotice><title>Legal Notice</title> @@ -43,6 +44,10 @@ <para> The following is a list of features provided by Docker: <itemizedlist> + <listitem><para> <emphasis> Perspective Management.</emphasis> + Like Eclipse, the Docker plugin supports named Perspectives, which describe the docking positions of plugins. With this, you can switch to different perspectives depending on what kind of work you need to do. For example, the gdb plugin requires many dockables while you are running the debugger, but when you are not debugging, you may not want to see the dock buttons cluttered with those unused dockables. + </para></listitem> + <listitem> <para><emphasis>Auto Hiding Docks.</emphasis> Individual docks can be set to auto hide when the text area has the focus. @@ -55,7 +60,7 @@ </para> </listitem> <listitem> - <para><emphasis>Dockable Window Popup</emphasis> + <para><emphasis>Dockable Window Popup.</emphasis> A shortcut can be created to popup a list of windows of a given dock. If the shortcut contains a modifier (<keycap>Ctrl</keycap>, <keycap>Shift</keycap>, <keycap>Alt</keycap>), Docker will allow you @@ -74,6 +79,13 @@ <itemizedlist> <listitem><para> + <emphasis role="bold">Version 0.4</emphasis> requires jEdit 4.2final </para> + <itemizedlist> + <listitem><para> Merged Perspective plugin into Docker plugin. </para></listitem> + </itemizedlist> + </listitem> + + <listitem><para> <emphasis role="bold">Version 0.3.1</emphasis> requires jEdit 4.2final</para> <itemizedlist> <listitem><para> Updated menu and option panes for 4.2 plugin API. </para></listitem> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |