From: <sh...@us...> - 2008-08-02 08:07:03
|
Revision: 13135 http://jedit.svn.sourceforge.net/jedit/?rev=13135&view=rev Author: shlomy Date: 2008-08-02 08:06:56 +0000 (Sat, 02 Aug 2008) Log Message: ----------- Skeleton of the MyDoggyPlugin, which uses MyDoggy as the docking framework of jEdit. Added Paths: ----------- plugins/MyDoggyPlugin/ plugins/MyDoggyPlugin/trunk/ plugins/MyDoggyPlugin/trunk/.classpath plugins/MyDoggyPlugin/trunk/.project plugins/MyDoggyPlugin/trunk/LICENSE.txt plugins/MyDoggyPlugin/trunk/MyDoggyPlugin.props plugins/MyDoggyPlugin/trunk/actions.xml plugins/MyDoggyPlugin/trunk/bin/ plugins/MyDoggyPlugin/trunk/bin/myDoggy/ plugins/MyDoggyPlugin/trunk/bin/myDoggy/Plugin.class plugins/MyDoggyPlugin/trunk/build/ plugins/MyDoggyPlugin/trunk/build/classes/ plugins/MyDoggyPlugin/trunk/build/classes/myDoggy/ plugins/MyDoggyPlugin/trunk/build/classes/myDoggy/Plugin.class plugins/MyDoggyPlugin/trunk/build/docs/ plugins/MyDoggyPlugin/trunk/build/extras/ plugins/MyDoggyPlugin/trunk/build/extras/MyDoggyPlugin.props plugins/MyDoggyPlugin/trunk/build/extras/actions.xml plugins/MyDoggyPlugin/trunk/build/extras/index.html plugins/MyDoggyPlugin/trunk/build/extras/services.xml plugins/MyDoggyPlugin/trunk/build.xml plugins/MyDoggyPlugin/trunk/description.html plugins/MyDoggyPlugin/trunk/index.html plugins/MyDoggyPlugin/trunk/services.xml plugins/MyDoggyPlugin/trunk/src/ plugins/MyDoggyPlugin/trunk/src/myDoggy/ plugins/MyDoggyPlugin/trunk/src/myDoggy/Plugin.java Added: plugins/MyDoggyPlugin/trunk/.classpath =================================================================== --- plugins/MyDoggyPlugin/trunk/.classpath (rev 0) +++ plugins/MyDoggyPlugin/trunk/.classpath 2008-08-02 08:06:56 UTC (rev 13135) @@ -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/MyDoggyPlugin/trunk/.project =================================================================== --- plugins/MyDoggyPlugin/trunk/.project (rev 0) +++ plugins/MyDoggyPlugin/trunk/.project 2008-08-02 08:06:56 UTC (rev 13135) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>MyDoggyPlugin</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/MyDoggyPlugin/trunk/LICENSE.txt =================================================================== --- plugins/MyDoggyPlugin/trunk/LICENSE.txt (rev 0) +++ plugins/MyDoggyPlugin/trunk/LICENSE.txt 2008-08-02 08:06:56 UTC (rev 13135) @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. Added: plugins/MyDoggyPlugin/trunk/MyDoggyPlugin.props =================================================================== --- plugins/MyDoggyPlugin/trunk/MyDoggyPlugin.props (rev 0) +++ plugins/MyDoggyPlugin/trunk/MyDoggyPlugin.props 2008-08-02 08:06:56 UTC (rev 13135) @@ -0,0 +1,22 @@ +# jEdit only needs to load the plugin the first time the user accesses it +# the presence of this property also tells jEdit the plugin is using the new API +plugin.myDoggy.Plugin.activate=defer + +# These two properties are required for all plugins +plugin.myDoggy.Plugin.name=MyDoggyPlugin +plugin.myDoggy.Plugin.author=Shlomy Reinstein +plugin.myDoggy.Plugin.description=MyDoggyPlugin uses MyDoggy to manage the dockable windows in jEdit. + +plugin.myDoggy.Plugin.version=0.1 + +# Dependencies + +plugin.myDoggy.Plugin.depend.0=jdk 1.5 +plugin.myDoggy.Plugin.depend.1=jedit 04.03.12.00 + +# Options +plugin.myDoggy.Plugin.option-group=CtagsSideKick-general CtagsSideKick-tree-style + +# docs +plugin.myDoggy.Plugin.docs=index.html + Added: plugins/MyDoggyPlugin/trunk/actions.xml =================================================================== --- plugins/MyDoggyPlugin/trunk/actions.xml (rev 0) +++ plugins/MyDoggyPlugin/trunk/actions.xml 2008-08-02 08:06:56 UTC (rev 13135) @@ -0,0 +1,6 @@ +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> + +<ACTIONS> + +</ACTIONS> + Property changes on: plugins/MyDoggyPlugin/trunk/bin/myDoggy/Plugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/MyDoggyPlugin/trunk/build/classes/myDoggy/Plugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/MyDoggyPlugin/trunk/build/extras/MyDoggyPlugin.props =================================================================== --- plugins/MyDoggyPlugin/trunk/build/extras/MyDoggyPlugin.props (rev 0) +++ plugins/MyDoggyPlugin/trunk/build/extras/MyDoggyPlugin.props 2008-08-02 08:06:56 UTC (rev 13135) @@ -0,0 +1,22 @@ +# jEdit only needs to load the plugin the first time the user accesses it +# the presence of this property also tells jEdit the plugin is using the new API +plugin.myDoggy.Plugin.activate=defer + +# These two properties are required for all plugins +plugin.myDoggy.Plugin.name=MyDoggyPlugin +plugin.myDoggy.Plugin.author=Shlomy Reinstein +plugin.myDoggy.Plugin.description=MyDoggyPlugin uses MyDoggy to manage the dockable windows in jEdit. + +plugin.myDoggy.Plugin.version=0.1 + +# Dependencies + +plugin.myDoggy.Plugin.depend.0=jdk 1.5 +plugin.myDoggy.Plugin.depend.1=jedit 04.03.12.00 + +# Options +plugin.myDoggy.Plugin.option-group=CtagsSideKick-general CtagsSideKick-tree-style + +# docs +plugin.myDoggy.Plugin.docs=index.html + Added: plugins/MyDoggyPlugin/trunk/build/extras/actions.xml =================================================================== --- plugins/MyDoggyPlugin/trunk/build/extras/actions.xml (rev 0) +++ plugins/MyDoggyPlugin/trunk/build/extras/actions.xml 2008-08-02 08:06:56 UTC (rev 13135) @@ -0,0 +1,6 @@ +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> + +<ACTIONS> + +</ACTIONS> + Added: plugins/MyDoggyPlugin/trunk/build/extras/index.html =================================================================== --- plugins/MyDoggyPlugin/trunk/build/extras/index.html (rev 0) +++ plugins/MyDoggyPlugin/trunk/build/extras/index.html 2008-08-02 08:06:56 UTC (rev 13135) @@ -0,0 +1,20 @@ +<html> +<head> + <title>MyDoggyPlugin</title> +</head> + +<body> +<h1>MyDoggyPlugin plugin documentation</h1> + +Written by Shlomy Reinstein, August 2008. +<h2>Description</h2> + +<p>MyDoggyPlugin brings the power of the open-source docking framework named MyDoggy to jEdit. It uses MyDoggy to manage the dockable windows in jEdit, so they can be dragged from one docking area to another, share the same docking area, and a lot more. </p> + +<h2>Usage</h2> + +<p>To use MyDoggyPlugin, select <tt>Utilities->Global Options->Docking</tt> and select MyDoggy as the docking framework. +</p> + +</body> +</html> Added: plugins/MyDoggyPlugin/trunk/build/extras/services.xml =================================================================== --- plugins/MyDoggyPlugin/trunk/build/extras/services.xml (rev 0) +++ plugins/MyDoggyPlugin/trunk/build/extras/services.xml 2008-08-02 08:06:56 UTC (rev 13135) @@ -0,0 +1,9 @@ +<?xml version="1.0"?> + +<!DOCTYPE SERVICES SYSTEM "services.dtd"> + +<SERVICES> + <SERVICE CLASS="org.gjt.sp.jedit.gui.DockingFrameworkProvider" NAME="MyDoggy"> + new myDoggy.Provider + </SERVICE> +</SERVICES> \ No newline at end of file Added: plugins/MyDoggyPlugin/trunk/build.xml =================================================================== --- plugins/MyDoggyPlugin/trunk/build.xml (rev 0) +++ plugins/MyDoggyPlugin/trunk/build.xml 2008-08-02 08:06:56 UTC (rev 13135) @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<project name="MyDoggyPlugin" default="build" basedir="."> +<!-- + This is a build.xml file for building the CtagsSideKick plugin. +--> + <!-- Read optional properties from various places --> + <!-- Latter ones override previous properties. --> + <property file="build.properties"/> + <property file="../build.properties"/> + <property name="javadoc.packagenames" value="ctags.*" /> + <property name="user-doc.xml" location = "users-guide.xml"/> + <property name="plugin.dependencies" value="ErrorList,SideKick,CommonControls" /> + <property name="dist.target" value="dist.complete" /> + <property name="compiler.source" value="1.5" /> + <property name="compiler.target" value="1.5" /> + + <import file="${build.support}/plugin-build.xml" /> + + <selector id="packageFiles"> + <or> + <filename name="icons/*.png" /> + <filename name="index.html" /> + </or> + </selector> + + <path id="project.class.path"> + <pathelement location="${jedit.install.dir}/jedit.jar" /> + <pathelement location="${install.dir}/ErrorList.jar"/> + <pathelement location="${install.dir}/SideKick.jar"/> + <pathelement location="${install.dir}/CommonControls.jar"/> + </path> + +</project> Added: plugins/MyDoggyPlugin/trunk/description.html =================================================================== --- plugins/MyDoggyPlugin/trunk/description.html (rev 0) +++ plugins/MyDoggyPlugin/trunk/description.html 2008-08-02 08:06:56 UTC (rev 13135) @@ -0,0 +1,4 @@ +<p> +MyDoggyPlugin allows you to use the open-source docking framework named MyDoggy to manage the dockable windows in jEdit. This enables dockable windows to be dragged from one area to another, share the same docking area, and more. +</p> + Added: plugins/MyDoggyPlugin/trunk/index.html =================================================================== --- plugins/MyDoggyPlugin/trunk/index.html (rev 0) +++ plugins/MyDoggyPlugin/trunk/index.html 2008-08-02 08:06:56 UTC (rev 13135) @@ -0,0 +1,20 @@ +<html> +<head> + <title>MyDoggyPlugin</title> +</head> + +<body> +<h1>MyDoggyPlugin plugin documentation</h1> + +Written by Shlomy Reinstein, August 2008. +<h2>Description</h2> + +<p>MyDoggyPlugin brings the power of the open-source docking framework named MyDoggy to jEdit. It uses MyDoggy to manage the dockable windows in jEdit, so they can be dragged from one docking area to another, share the same docking area, and a lot more. </p> + +<h2>Usage</h2> + +<p>To use MyDoggyPlugin, select <tt>Utilities->Global Options->Docking</tt> and select MyDoggy as the docking framework. +</p> + +</body> +</html> Added: plugins/MyDoggyPlugin/trunk/services.xml =================================================================== --- plugins/MyDoggyPlugin/trunk/services.xml (rev 0) +++ plugins/MyDoggyPlugin/trunk/services.xml 2008-08-02 08:06:56 UTC (rev 13135) @@ -0,0 +1,9 @@ +<?xml version="1.0"?> + +<!DOCTYPE SERVICES SYSTEM "services.dtd"> + +<SERVICES> + <SERVICE CLASS="org.gjt.sp.jedit.gui.DockingFrameworkProvider" NAME="MyDoggy"> + new myDoggy.Provider + </SERVICE> +</SERVICES> \ No newline at end of file Added: plugins/MyDoggyPlugin/trunk/src/myDoggy/Plugin.java =================================================================== --- plugins/MyDoggyPlugin/trunk/src/myDoggy/Plugin.java (rev 0) +++ plugins/MyDoggyPlugin/trunk/src/myDoggy/Plugin.java 2008-08-02 08:06:56 UTC (rev 13135) @@ -0,0 +1,14 @@ +package myDoggy; + +import org.gjt.sp.jedit.EditPlugin; + +public class Plugin extends EditPlugin { + + public static final String NAME = "MyDoggyPlugin"; + public void start() + { + } + public void stop() + { + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-08-12 03:21:56
|
Revision: 13272 http://jedit.svn.sourceforge.net/jedit/?rev=13272&view=rev Author: shlomy Date: 2008-08-12 03:21:49 +0000 (Tue, 12 Aug 2008) Log Message: ----------- First version of DockingFramesPlugin. Still don't know how to use it correctly... Added Paths: ----------- plugins/DockingFramesPlugin/ plugins/DockingFramesPlugin/trunk/ plugins/DockingFramesPlugin/trunk/.classpath plugins/DockingFramesPlugin/trunk/.project plugins/DockingFramesPlugin/trunk/DockingFrames.jar plugins/DockingFramesPlugin/trunk/DockingFramesPlugin.props plugins/DockingFramesPlugin/trunk/actions.xml plugins/DockingFramesPlugin/trunk/bin/ plugins/DockingFramesPlugin/trunk/bin/dockingFrames/ plugins/DockingFramesPlugin/trunk/bin/dockingFrames/DockingLayout.class plugins/DockingFramesPlugin/trunk/bin/dockingFrames/Plugin.class plugins/DockingFramesPlugin/trunk/bin/dockingFrames/Provider.class plugins/DockingFramesPlugin/trunk/bin/dockingFrames/WindowManager.class plugins/DockingFramesPlugin/trunk/build/ plugins/DockingFramesPlugin/trunk/build/classes/ plugins/DockingFramesPlugin/trunk/build/classes/dockingFrames/ plugins/DockingFramesPlugin/trunk/build/classes/dockingFrames/DockingLayout.class plugins/DockingFramesPlugin/trunk/build/classes/dockingFrames/Plugin.class plugins/DockingFramesPlugin/trunk/build/classes/dockingFrames/Provider.class plugins/DockingFramesPlugin/trunk/build/classes/dockingFrames/WindowManager.class plugins/DockingFramesPlugin/trunk/build/docs/ plugins/DockingFramesPlugin/trunk/build/extras/ plugins/DockingFramesPlugin/trunk/build/extras/DockingFramesPlugin.props plugins/DockingFramesPlugin/trunk/build/extras/actions.xml plugins/DockingFramesPlugin/trunk/build/extras/index.html plugins/DockingFramesPlugin/trunk/build/extras/services.xml plugins/DockingFramesPlugin/trunk/build.xml plugins/DockingFramesPlugin/trunk/index.html plugins/DockingFramesPlugin/trunk/license.txt plugins/DockingFramesPlugin/trunk/services.xml plugins/DockingFramesPlugin/trunk/src/ plugins/DockingFramesPlugin/trunk/src/dockingFrames/ plugins/DockingFramesPlugin/trunk/src/dockingFrames/DockingLayout.java plugins/DockingFramesPlugin/trunk/src/dockingFrames/Plugin.java plugins/DockingFramesPlugin/trunk/src/dockingFrames/Provider.java plugins/DockingFramesPlugin/trunk/src/dockingFrames/WindowManager.java Added: plugins/DockingFramesPlugin/trunk/.classpath =================================================================== --- plugins/DockingFramesPlugin/trunk/.classpath (rev 0) +++ plugins/DockingFramesPlugin/trunk/.classpath 2008-08-12 03:21:49 UTC (rev 13272) @@ -0,0 +1,8 @@ +<?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="/dock"/> + <classpathentry combineaccessrules="false" kind="src" path="/jEdit"/> + <classpathentry kind="output" path="bin"/> +</classpath> Added: plugins/DockingFramesPlugin/trunk/.project =================================================================== --- plugins/DockingFramesPlugin/trunk/.project (rev 0) +++ plugins/DockingFramesPlugin/trunk/.project 2008-08-12 03:21:49 UTC (rev 13272) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>DockingFramesPlugin</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> Property changes on: plugins/DockingFramesPlugin/trunk/DockingFrames.jar ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/DockingFramesPlugin/trunk/DockingFramesPlugin.props =================================================================== --- plugins/DockingFramesPlugin/trunk/DockingFramesPlugin.props (rev 0) +++ plugins/DockingFramesPlugin/trunk/DockingFramesPlugin.props 2008-08-12 03:21:49 UTC (rev 13272) @@ -0,0 +1,17 @@ +# jEdit only needs to load the plugin the first time the user accesses it +# the presence of this property also tells jEdit the plugin is using the new API +plugin.dockingFrames.Plugin.activate=defer + +# These two properties are required for all plugins +plugin.dockingFrames.Plugin.name=DockingFramesPlugin +plugin.dockingFrames.Plugin.author=Shlomy Reinstein +plugin.dockingFrames.Plugin.description=DockingFramesPlugin + +plugin.dockingFrames.Plugin.version=0.1 + +# Dependencies + +plugin.dockingFrames.Plugin.depend.0=jdk 1.5 +plugin.dockingFrames.Plugin.depend.1=jedit 04.03.15.00 + + Added: plugins/DockingFramesPlugin/trunk/actions.xml =================================================================== --- plugins/DockingFramesPlugin/trunk/actions.xml (rev 0) +++ plugins/DockingFramesPlugin/trunk/actions.xml 2008-08-12 03:21:49 UTC (rev 13272) @@ -0,0 +1,6 @@ +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> + +<ACTIONS> + +</ACTIONS> + Property changes on: plugins/DockingFramesPlugin/trunk/bin/dockingFrames/DockingLayout.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/DockingFramesPlugin/trunk/bin/dockingFrames/Plugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/DockingFramesPlugin/trunk/bin/dockingFrames/Provider.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/DockingFramesPlugin/trunk/bin/dockingFrames/WindowManager.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/DockingFramesPlugin/trunk/build/classes/dockingFrames/DockingLayout.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/DockingFramesPlugin/trunk/build/classes/dockingFrames/Plugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/DockingFramesPlugin/trunk/build/classes/dockingFrames/Provider.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/DockingFramesPlugin/trunk/build/classes/dockingFrames/WindowManager.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/DockingFramesPlugin/trunk/build/extras/DockingFramesPlugin.props =================================================================== --- plugins/DockingFramesPlugin/trunk/build/extras/DockingFramesPlugin.props (rev 0) +++ plugins/DockingFramesPlugin/trunk/build/extras/DockingFramesPlugin.props 2008-08-12 03:21:49 UTC (rev 13272) @@ -0,0 +1,17 @@ +# jEdit only needs to load the plugin the first time the user accesses it +# the presence of this property also tells jEdit the plugin is using the new API +plugin.dockingFrames.Plugin.activate=defer + +# These two properties are required for all plugins +plugin.dockingFrames.Plugin.name=DockingFramesPlugin +plugin.dockingFrames.Plugin.author=Shlomy Reinstein +plugin.dockingFrames.Plugin.description=DockingFramesPlugin + +plugin.dockingFrames.Plugin.version=0.1 + +# Dependencies + +plugin.dockingFrames.Plugin.depend.0=jdk 1.5 +plugin.dockingFrames.Plugin.depend.1=jedit 04.03.15.00 + + Added: plugins/DockingFramesPlugin/trunk/build/extras/actions.xml =================================================================== --- plugins/DockingFramesPlugin/trunk/build/extras/actions.xml (rev 0) +++ plugins/DockingFramesPlugin/trunk/build/extras/actions.xml 2008-08-12 03:21:49 UTC (rev 13272) @@ -0,0 +1,6 @@ +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> + +<ACTIONS> + +</ACTIONS> + Added: plugins/DockingFramesPlugin/trunk/build/extras/index.html =================================================================== --- plugins/DockingFramesPlugin/trunk/build/extras/index.html (rev 0) +++ plugins/DockingFramesPlugin/trunk/build/extras/index.html 2008-08-12 03:21:49 UTC (rev 13272) @@ -0,0 +1,20 @@ +<html> +<head> + <title>MyDoggyPlugin</title> +</head> + +<body> +<h1>MyDoggyPlugin plugin documentation</h1> + +Written by Shlomy Reinstein, August 2008. +<h2>Description</h2> + +<p>MyDoggyPlugin brings the power of the open-source docking framework named MyDoggy to jEdit. It uses MyDoggy to manage the dockable windows in jEdit, so they can be dragged from one docking area to another, share the same docking area, and a lot more. </p> + +<h2>Usage</h2> + +<p>To use MyDoggyPlugin, select <tt>Utilities->Global Options->Docking</tt> and select MyDoggy as the docking framework. +</p> + +</body> +</html> Added: plugins/DockingFramesPlugin/trunk/build/extras/services.xml =================================================================== --- plugins/DockingFramesPlugin/trunk/build/extras/services.xml (rev 0) +++ plugins/DockingFramesPlugin/trunk/build/extras/services.xml 2008-08-12 03:21:49 UTC (rev 13272) @@ -0,0 +1,9 @@ +<?xml version="1.0"?> + +<!DOCTYPE SERVICES SYSTEM "services.dtd"> + +<SERVICES> + <SERVICE CLASS="org.gjt.sp.jedit.gui.DockingFrameworkProvider" NAME="DockingFrames"> + new dockingFrames.Provider() + </SERVICE> +</SERVICES> \ No newline at end of file Added: plugins/DockingFramesPlugin/trunk/build.xml =================================================================== --- plugins/DockingFramesPlugin/trunk/build.xml (rev 0) +++ plugins/DockingFramesPlugin/trunk/build.xml 2008-08-12 03:21:49 UTC (rev 13272) @@ -0,0 +1,36 @@ +<?xml version="1.0"?> +<project name="DockingFramesPlugin" default="build" basedir="."> +<!-- + This is a build.xml file for building the CtagsSideKick plugin. +--> + <!-- Read optional properties from various places --> + <!-- Latter ones override previous properties. --> + <property file="build.properties"/> + <property file="../build.properties"/> + <property name="javadoc.packagenames" value="ctags.*" /> + <property name="user-doc.xml" location = "users-guide.xml"/> + <property name="plugin.dependencies" value="ErrorList,SideKick,CommonControls" /> + <property name="dist.target" value="dist.complete" /> + <property name="compiler.source" value="1.5" /> + <property name="compiler.target" value="1.5" /> + + <import file="${build.support}/plugin-build.xml" /> + + <selector id="packageFiles"> + <or> + <filename name="icons/*.png" /> + <filename name="index.html" /> + </or> + </selector> + + <path id="project.class.path"> + <pathelement location="${jedit.install.dir}/jedit.jar" /> + <pathelement location="${install.dir}/DockingFrames.jar"/> + </path> + + <target name="build.prepare" > + <mkdir dir="${build.dir}" /> + <copy file="DockingFrames.jar" todir="${install.dir}" /> + </target> + +</project> Added: plugins/DockingFramesPlugin/trunk/index.html =================================================================== --- plugins/DockingFramesPlugin/trunk/index.html (rev 0) +++ plugins/DockingFramesPlugin/trunk/index.html 2008-08-12 03:21:49 UTC (rev 13272) @@ -0,0 +1,20 @@ +<html> +<head> + <title>MyDoggyPlugin</title> +</head> + +<body> +<h1>MyDoggyPlugin plugin documentation</h1> + +Written by Shlomy Reinstein, August 2008. +<h2>Description</h2> + +<p>MyDoggyPlugin brings the power of the open-source docking framework named MyDoggy to jEdit. It uses MyDoggy to manage the dockable windows in jEdit, so they can be dragged from one docking area to another, share the same docking area, and a lot more. </p> + +<h2>Usage</h2> + +<p>To use MyDoggyPlugin, select <tt>Utilities->Global Options->Docking</tt> and select MyDoggy as the docking framework. +</p> + +</body> +</html> Added: plugins/DockingFramesPlugin/trunk/license.txt =================================================================== --- plugins/DockingFramesPlugin/trunk/license.txt (rev 0) +++ plugins/DockingFramesPlugin/trunk/license.txt 2008-08-12 03:21:49 UTC (rev 13272) @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + Added: plugins/DockingFramesPlugin/trunk/services.xml =================================================================== --- plugins/DockingFramesPlugin/trunk/services.xml (rev 0) +++ plugins/DockingFramesPlugin/trunk/services.xml 2008-08-12 03:21:49 UTC (rev 13272) @@ -0,0 +1,9 @@ +<?xml version="1.0"?> + +<!DOCTYPE SERVICES SYSTEM "services.dtd"> + +<SERVICES> + <SERVICE CLASS="org.gjt.sp.jedit.gui.DockingFrameworkProvider" NAME="DockingFrames"> + new dockingFrames.Provider() + </SERVICE> +</SERVICES> \ No newline at end of file Added: plugins/DockingFramesPlugin/trunk/src/dockingFrames/DockingLayout.java =================================================================== --- plugins/DockingFramesPlugin/trunk/src/dockingFrames/DockingLayout.java (rev 0) +++ plugins/DockingFramesPlugin/trunk/src/dockingFrames/DockingLayout.java 2008-08-12 03:21:49 UTC (rev 13272) @@ -0,0 +1,25 @@ +package dockingFrames; + +import java.io.File; +import java.io.IOException; + +import org.gjt.sp.jedit.SettingsXML.Saver; +import org.xml.sax.helpers.DefaultHandler; + +public class DockingLayout extends + org.gjt.sp.jedit.gui.DockableWindowManager.DockingLayout { + + @Override + public DefaultHandler getPerspectiveHandler() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void savePerspective(File file, Saver out, String lineSep) + throws IOException { + // TODO Auto-generated method stub + + } + +} Added: plugins/DockingFramesPlugin/trunk/src/dockingFrames/Plugin.java =================================================================== --- plugins/DockingFramesPlugin/trunk/src/dockingFrames/Plugin.java (rev 0) +++ plugins/DockingFramesPlugin/trunk/src/dockingFrames/Plugin.java 2008-08-12 03:21:49 UTC (rev 13272) @@ -0,0 +1,14 @@ +package dockingFrames; + +import org.gjt.sp.jedit.EditPlugin; + +public class Plugin extends EditPlugin { + + public static final String NAME = "DockingFramesPlugin"; + public void start() + { + } + public void stop() + { + } +} Added: plugins/DockingFramesPlugin/trunk/src/dockingFrames/Provider.java =================================================================== --- plugins/DockingFramesPlugin/trunk/src/dockingFrames/Provider.java (rev 0) +++ plugins/DockingFramesPlugin/trunk/src/dockingFrames/Provider.java 2008-08-12 03:21:49 UTC (rev 13272) @@ -0,0 +1,22 @@ +package dockingFrames; + +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.View.ViewConfig; +import org.gjt.sp.jedit.gui.DockableWindowFactory; +import org.gjt.sp.jedit.gui.DockableWindowManager; +import org.gjt.sp.jedit.gui.IDockingFrameworkProvider; +import org.gjt.sp.jedit.gui.DockableWindowManager.DockingLayout; + +public class Provider implements IDockingFrameworkProvider { + + public DockableWindowManager create(View view, + DockableWindowFactory instance, ViewConfig config) + { + return new WindowManager(view, instance, config); + } + + public DockingLayout createDockingLayout() { + return new dockingFrames.DockingLayout(); + } + +} Added: plugins/DockingFramesPlugin/trunk/src/dockingFrames/WindowManager.java =================================================================== --- plugins/DockingFramesPlugin/trunk/src/dockingFrames/WindowManager.java (rev 0) +++ plugins/DockingFramesPlugin/trunk/src/dockingFrames/WindowManager.java 2008-08-12 03:21:49 UTC (rev 13272) @@ -0,0 +1,134 @@ +package dockingFrames; + +import java.awt.BorderLayout; + +import javax.swing.JComponent; +import javax.swing.JPanel; + +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.View.ViewConfig; +import org.gjt.sp.jedit.gui.DockableWindowFactory; +import org.gjt.sp.jedit.gui.DockableWindowManager; + +import bibliothek.gui.DockController; +import bibliothek.gui.Dockable; +import bibliothek.gui.dock.DefaultDockable; +import bibliothek.gui.dock.FlapDockStation; +import bibliothek.gui.dock.SplitDockStation; + +@SuppressWarnings("serial") +public class WindowManager extends DockableWindowManager { + + private SplitDockStation station; + FlapDockStation east = new FlapDockStation(); + FlapDockStation west = new FlapDockStation(); + FlapDockStation south = new FlapDockStation(); + FlapDockStation north = new FlapDockStation(); + + public WindowManager(View view, DockableWindowFactory instance, + ViewConfig config) { + super(view, instance, config); + setLayout(new BorderLayout()); + DockController controller = new DockController(); + station = new SplitDockStation(); + add(station.getComponent(), BorderLayout.CENTER); + add(east.getComponent(), BorderLayout.EAST); + add(west.getComponent(), BorderLayout.WEST); + add(north.getComponent(), BorderLayout.NORTH); + add(south.getComponent(), BorderLayout.SOUTH); + controller.add(east); + controller.add(west); + controller.add(north); + controller.add(south); + controller.add(station); + } + + @Override + public void closeCurrentArea() { + // TODO Auto-generated method stub + + } + + @Override + public JComponent floatDockableWindow(String name) { + // TODO Auto-generated method stub + return null; + } + + @Override + public DockingArea getBottomDockingArea() { + // TODO Auto-generated method stub + return null; + } + + @Override + public DockingLayout getDockingLayout(ViewConfig config) { + // TODO Auto-generated method stub + return null; + } + + @Override + public DockingArea getLeftDockingArea() { + // TODO Auto-generated method stub + return null; + } + + @Override + public DockingArea getRightDockingArea() { + // TODO Auto-generated method stub + return null; + } + + @Override + public DockingArea getTopDockingArea() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void hideDockableWindow(String name) { + // TODO Auto-generated method stub + + } + + @Override + public boolean isDockableWindowDocked(String name) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isDockableWindowVisible(String name) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setMainPanel(JPanel panel) { + station.drop(new DefaultDockable(panel, "main")); + //add(panel, BorderLayout.CENTER); + } + + @Override + public void showDockableWindow(String name) { + JComponent window = getDockable(name); + String position = getDockablePosition(name); + if (window == null) + window = createDockable(name); + if (window == null) + return; + String title = getDockableTitle(name); + Dockable d = new DefaultDockable(window, title); + FlapDockStation s; + if (position.equals(DockableWindowManager.TOP)) + s = north; + else if (position.equals(DockableWindowManager.BOTTOM)) + s = south; + else if (position.equals(DockableWindowManager.RIGHT)) + s = east; + else + s = west; + s.drop(d); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-08-26 13:32:58
|
Revision: 13427 http://jedit.svn.sourceforge.net/jedit/?rev=13427&view=rev Author: shlomy Date: 2008-08-26 13:32:52 +0000 (Tue, 26 Aug 2008) Log Message: ----------- First version of flexdock plugin. Added Paths: ----------- plugins/FlexDockPlugin/ plugins/FlexDockPlugin/trunk/ plugins/FlexDockPlugin/trunk/.classpath plugins/FlexDockPlugin/trunk/.project plugins/FlexDockPlugin/trunk/FlexDock/ plugins/FlexDockPlugin/trunk/FlexDock/LICENSE.txt plugins/FlexDockPlugin/trunk/FlexDock/flexdock-0.5.1.jar plugins/FlexDockPlugin/trunk/FlexDockPlugin.props plugins/FlexDockPlugin/trunk/LICENSE.txt plugins/FlexDockPlugin/trunk/actions.xml plugins/FlexDockPlugin/trunk/bin/ plugins/FlexDockPlugin/trunk/bin/flexdock/ plugins/FlexDockPlugin/trunk/bin/flexdock/FlexDockDockingLayout.class plugins/FlexDockPlugin/trunk/bin/flexdock/FlexDockWindowManager$FlexDockDockingArea.class plugins/FlexDockPlugin/trunk/bin/flexdock/FlexDockWindowManager.class plugins/FlexDockPlugin/trunk/bin/flexdock/Plugin.class plugins/FlexDockPlugin/trunk/bin/flexdock/Provider.class plugins/FlexDockPlugin/trunk/build/ plugins/FlexDockPlugin/trunk/build/classes/ plugins/FlexDockPlugin/trunk/build/classes/flexdock/ plugins/FlexDockPlugin/trunk/build/classes/flexdock/FlexDockDockingLayout.class plugins/FlexDockPlugin/trunk/build/classes/flexdock/FlexDockWindowManager$FlexDockDockingArea.class plugins/FlexDockPlugin/trunk/build/classes/flexdock/FlexDockWindowManager.class plugins/FlexDockPlugin/trunk/build/classes/flexdock/OptionPane.class plugins/FlexDockPlugin/trunk/build/classes/flexdock/Plugin.class plugins/FlexDockPlugin/trunk/build/classes/flexdock/Provider.class plugins/FlexDockPlugin/trunk/build/classes/myDoggy/ plugins/FlexDockPlugin/trunk/build/classes/myDoggy/Plugin.class plugins/FlexDockPlugin/trunk/build/docs/ plugins/FlexDockPlugin/trunk/build/extras/ plugins/FlexDockPlugin/trunk/build/extras/FlexDockPlugin.props plugins/FlexDockPlugin/trunk/build/extras/actions.xml plugins/FlexDockPlugin/trunk/build/extras/index.html plugins/FlexDockPlugin/trunk/build/extras/services.xml plugins/FlexDockPlugin/trunk/build.xml plugins/FlexDockPlugin/trunk/description.html plugins/FlexDockPlugin/trunk/index.html plugins/FlexDockPlugin/trunk/services.xml plugins/FlexDockPlugin/trunk/src/ plugins/FlexDockPlugin/trunk/src/flexdock/ plugins/FlexDockPlugin/trunk/src/flexdock/FlexDockDockingLayout.java plugins/FlexDockPlugin/trunk/src/flexdock/FlexDockWindowManager.java plugins/FlexDockPlugin/trunk/src/flexdock/Plugin.java plugins/FlexDockPlugin/trunk/src/flexdock/Provider.java Added: plugins/FlexDockPlugin/trunk/.classpath =================================================================== --- plugins/FlexDockPlugin/trunk/.classpath (rev 0) +++ plugins/FlexDockPlugin/trunk/.classpath 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,8 @@ +<?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="lib" path="D:/jEdit/FlexDockPlugin/FlexDock/flexdock-0.5.1.jar"/> + <classpathentry kind="output" path="bin"/> +</classpath> Added: plugins/FlexDockPlugin/trunk/.project =================================================================== --- plugins/FlexDockPlugin/trunk/.project (rev 0) +++ plugins/FlexDockPlugin/trunk/.project 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>MyDoggyPlugin</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/FlexDockPlugin/trunk/FlexDock/LICENSE.txt =================================================================== --- plugins/FlexDockPlugin/trunk/FlexDock/LICENSE.txt (rev 0) +++ plugins/FlexDockPlugin/trunk/FlexDock/LICENSE.txt 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,19 @@ +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in the +Software without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the +Software, and to permit persons to whom the Software is furnished to do so, subject +to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +This product includes software developed by +The Apache Software Foundation (http://www.apache.org/). Property changes on: plugins/FlexDockPlugin/trunk/FlexDock/flexdock-0.5.1.jar ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/FlexDockPlugin/trunk/FlexDockPlugin.props =================================================================== --- plugins/FlexDockPlugin/trunk/FlexDockPlugin.props (rev 0) +++ plugins/FlexDockPlugin/trunk/FlexDockPlugin.props 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,26 @@ +# jEdit only needs to load the plugin the first time the user accesses it +# the presence of this property also tells jEdit the plugin is using the new API +plugin.flexdock.Plugin.activate=defer + +# These two properties are required for all plugins +plugin.flexdock.Plugin.name=FlexDockPlugin +plugin.flexdock.Plugin.author=Shlomy Reinstein +plugin.flexdock.Plugin.description=FlexDockPlugin uses FlexDock to manage the dockable windows in jEdit. + +plugin.flexdock.Plugin.version=0.1 + +# Dependencies + +plugin.flexdock.Plugin.depend.0=jdk 1.5 +plugin.flexdock.Plugin.depend.1=jedit 04.03.12.00 + +# Options +plugin.flexdock.Plugin.option-pane=flexdock +options.flexdock.label=FlexDockPlugin +options.flexdock.code=new flexdock.OptionPane(); + +# Option pane labels + +# docs +plugin.flexdock.Plugin.docs=index.html + Added: plugins/FlexDockPlugin/trunk/LICENSE.txt =================================================================== --- plugins/FlexDockPlugin/trunk/LICENSE.txt (rev 0) +++ plugins/FlexDockPlugin/trunk/LICENSE.txt 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. Added: plugins/FlexDockPlugin/trunk/actions.xml =================================================================== --- plugins/FlexDockPlugin/trunk/actions.xml (rev 0) +++ plugins/FlexDockPlugin/trunk/actions.xml 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,6 @@ +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> + +<ACTIONS> + +</ACTIONS> + Property changes on: plugins/FlexDockPlugin/trunk/bin/flexdock/FlexDockDockingLayout.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/FlexDockPlugin/trunk/bin/flexdock/FlexDockWindowManager$FlexDockDockingArea.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/FlexDockPlugin/trunk/bin/flexdock/FlexDockWindowManager.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/FlexDockPlugin/trunk/bin/flexdock/Plugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/FlexDockPlugin/trunk/bin/flexdock/Provider.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/FlexDockPlugin/trunk/build/classes/flexdock/FlexDockDockingLayout.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/FlexDockPlugin/trunk/build/classes/flexdock/FlexDockWindowManager$FlexDockDockingArea.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/FlexDockPlugin/trunk/build/classes/flexdock/FlexDockWindowManager.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/FlexDockPlugin/trunk/build/classes/flexdock/OptionPane.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/FlexDockPlugin/trunk/build/classes/flexdock/Plugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/FlexDockPlugin/trunk/build/classes/flexdock/Provider.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/FlexDockPlugin/trunk/build/classes/myDoggy/Plugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/FlexDockPlugin/trunk/build/extras/FlexDockPlugin.props =================================================================== --- plugins/FlexDockPlugin/trunk/build/extras/FlexDockPlugin.props (rev 0) +++ plugins/FlexDockPlugin/trunk/build/extras/FlexDockPlugin.props 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,26 @@ +# jEdit only needs to load the plugin the first time the user accesses it +# the presence of this property also tells jEdit the plugin is using the new API +plugin.flexdock.Plugin.activate=defer + +# These two properties are required for all plugins +plugin.flexdock.Plugin.name=FlexDockPlugin +plugin.flexdock.Plugin.author=Shlomy Reinstein +plugin.flexdock.Plugin.description=FlexDockPlugin uses FlexDock to manage the dockable windows in jEdit. + +plugin.flexdock.Plugin.version=0.1 + +# Dependencies + +plugin.flexdock.Plugin.depend.0=jdk 1.5 +plugin.flexdock.Plugin.depend.1=jedit 04.03.12.00 + +# Options +plugin.flexdock.Plugin.option-pane=flexdock +options.flexdock.label=FlexDockPlugin +options.flexdock.code=new flexdock.OptionPane(); + +# Option pane labels + +# docs +plugin.flexdock.Plugin.docs=index.html + Added: plugins/FlexDockPlugin/trunk/build/extras/actions.xml =================================================================== --- plugins/FlexDockPlugin/trunk/build/extras/actions.xml (rev 0) +++ plugins/FlexDockPlugin/trunk/build/extras/actions.xml 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,6 @@ +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> + +<ACTIONS> + +</ACTIONS> + Added: plugins/FlexDockPlugin/trunk/build/extras/index.html =================================================================== --- plugins/FlexDockPlugin/trunk/build/extras/index.html (rev 0) +++ plugins/FlexDockPlugin/trunk/build/extras/index.html 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,20 @@ +<html> +<head> + <title>MyDoggyPlugin</title> +</head> + +<body> +<h1>MyDoggyPlugin plugin documentation</h1> + +Written by Shlomy Reinstein, August 2008. +<h2>Description</h2> + +<p>MyDoggyPlugin brings the power of the open-source docking framework named MyDoggy to jEdit. It uses MyDoggy to manage the dockable windows in jEdit, so they can be dragged from one docking area to another, share the same docking area, and a lot more. </p> + +<h2>Usage</h2> + +<p>To use MyDoggyPlugin, select <tt>Utilities->Global Options->Docking</tt> and select MyDoggy as the docking framework. +</p> + +</body> +</html> Added: plugins/FlexDockPlugin/trunk/build/extras/services.xml =================================================================== --- plugins/FlexDockPlugin/trunk/build/extras/services.xml (rev 0) +++ plugins/FlexDockPlugin/trunk/build/extras/services.xml 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,7 @@ +<?xml version="1.0"?> + +<!DOCTYPE SERVICES SYSTEM "services.dtd"> + +<SERVICES> + <SERVICE CLASS="org.gjt.sp.jedit.gui.DockingFrameworkProvider" NAME="FlexDock">new flexdock.Provider()</SERVICE> +</SERVICES> \ No newline at end of file Added: plugins/FlexDockPlugin/trunk/build.xml =================================================================== --- plugins/FlexDockPlugin/trunk/build.xml (rev 0) +++ plugins/FlexDockPlugin/trunk/build.xml 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,36 @@ +<?xml version="1.0"?> +<project name="FlexDockPlugin" default="build" basedir="."> +<!-- + This is a build.xml file for building the FlexDock plugin. +--> + <!-- Read optional properties from various places --> + <!-- Latter ones override previous properties. --> + <property file="build.properties"/> + <property file="../build.properties"/> + <property name="javadoc.packagenames" value="ctags.*" /> + <property name="user-doc.xml" location = "users-guide.xml"/> + <property name="plugin.dependencies" value="ErrorList,SideKick,CommonControls" /> + <property name="dist.target" value="dist.complete" /> + <property name="compiler.source" value="1.5" /> + <property name="compiler.target" value="1.5" /> + + <import file="${build.support}/plugin-build.xml" /> + + <selector id="packageFiles"> + <or> + <filename name="icons/*.png" /> + <filename name="index.html" /> + </or> + </selector> + + <path id="project.class.path"> + <pathelement location="${jedit.install.dir}/jedit.jar" /> + <pathelement location="${install.dir}/flexdock-0.5.1.jar"/> + </path> + + <target name="build.prepare" > + <mkdir dir="${build.dir}" /> + <copy file="FlexDock/flexdock-0.5.1.jar" todir="${install.dir}" /> + </target> + +</project> Added: plugins/FlexDockPlugin/trunk/description.html =================================================================== --- plugins/FlexDockPlugin/trunk/description.html (rev 0) +++ plugins/FlexDockPlugin/trunk/description.html 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,4 @@ +<p> +MyDoggyPlugin allows you to use the open-source docking framework named MyDoggy to manage the dockable windows in jEdit. This enables dockable windows to be dragged from one area to another, share the same docking area, and more. +</p> + Added: plugins/FlexDockPlugin/trunk/index.html =================================================================== --- plugins/FlexDockPlugin/trunk/index.html (rev 0) +++ plugins/FlexDockPlugin/trunk/index.html 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,20 @@ +<html> +<head> + <title>MyDoggyPlugin</title> +</head> + +<body> +<h1>MyDoggyPlugin plugin documentation</h1> + +Written by Shlomy Reinstein, August 2008. +<h2>Description</h2> + +<p>MyDoggyPlugin brings the power of the open-source docking framework named MyDoggy to jEdit. It uses MyDoggy to manage the dockable windows in jEdit, so they can be dragged from one docking area to another, share the same docking area, and a lot more. </p> + +<h2>Usage</h2> + +<p>To use MyDoggyPlugin, select <tt>Utilities->Global Options->Docking</tt> and select MyDoggy as the docking framework. +</p> + +</body> +</html> Added: plugins/FlexDockPlugin/trunk/services.xml =================================================================== --- plugins/FlexDockPlugin/trunk/services.xml (rev 0) +++ plugins/FlexDockPlugin/trunk/services.xml 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,7 @@ +<?xml version="1.0"?> + +<!DOCTYPE SERVICES SYSTEM "services.dtd"> + +<SERVICES> + <SERVICE CLASS="org.gjt.sp.jedit.gui.DockingFrameworkProvider" NAME="FlexDock">new flexdock.Provider()</SERVICE> +</SERVICES> \ No newline at end of file Added: plugins/FlexDockPlugin/trunk/src/flexdock/FlexDockDockingLayout.java =================================================================== --- plugins/FlexDockPlugin/trunk/src/flexdock/FlexDockDockingLayout.java (rev 0) +++ plugins/FlexDockPlugin/trunk/src/flexdock/FlexDockDockingLayout.java 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,49 @@ +package flexdock; + +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; + +import org.gjt.sp.jedit.gui.DockableWindowManager.DockingLayout; + +public class FlexDockDockingLayout extends DockingLayout { + + private static final String TEMP_LAYOUT_NAME = "temp"; + private String layoutFilename = null; + + public FlexDockDockingLayout() { + } + + public String getLayoutFilename() { + return layoutFilename; + } + + @Override + public boolean loadLayout(String baseName, int viewIndex) { + layoutFilename = getLayoutFilename(baseName, viewIndex); + return true; + } + + @Override + public boolean saveLayout(String baseName, int viewIndex) { + String filename = getLayoutFilename(baseName, viewIndex); + FileOutputStream outputStream; + try { + outputStream = new FileOutputStream(filename); + outputStream.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + return false; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public String getName() { + return "MyDoggyPlugin"; + } + +} Added: plugins/FlexDockPlugin/trunk/src/flexdock/FlexDockWindowManager.java =================================================================== --- plugins/FlexDockPlugin/trunk/src/flexdock/FlexDockWindowManager.java (rev 0) +++ plugins/FlexDockPlugin/trunk/src/flexdock/FlexDockWindowManager.java 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,149 @@ +package flexdock; + +import java.awt.BorderLayout; + +import javax.swing.JComponent; +import javax.swing.JPanel; + +import org.flexdock.docking.Dockable; +import org.flexdock.docking.DockingConstants; +import org.flexdock.docking.DockingManager; +import org.flexdock.docking.defaults.DefaultDockingPort; +import org.gjt.sp.jedit.PerspectiveManager; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.View.ViewConfig; +import org.gjt.sp.jedit.gui.DockableWindowFactory; +import org.gjt.sp.jedit.gui.DockableWindowManager; + +@SuppressWarnings("serial") +public class FlexDockWindowManager extends DockableWindowManager { + + private DefaultDockingPort leftPort, rightPort, topPort, bottomPort; + + public FlexDockWindowManager(View view, DockableWindowFactory instance, + ViewConfig config) + { + super(view, instance, config); + setLayout(new BorderLayout()); + leftPort = new DefaultDockingPort(); + add(leftPort, BorderLayout.WEST); + rightPort = new DefaultDockingPort(); + add(rightPort, BorderLayout.EAST); + topPort = new DefaultDockingPort(); + add(topPort, BorderLayout.NORTH); + bottomPort = new DefaultDockingPort(); + add(bottomPort, BorderLayout.SOUTH); + PerspectiveManager.setPerspectiveDirty(true); + } + + @Override + protected void dockingPositionChanged(String name, + String oldPosition, String newPosition) + { + } + + @Override + public void closeCurrentArea() + { + } + + @Override + public JComponent floatDockableWindow(String name) + { + return null; + } + + @Override + public DockingLayout getDockingLayout(ViewConfig config) + { + return null; + } + + @Override + public void hideDockableWindow(String name) + { + } + + @Override + public boolean isDockableWindowDocked(String name) + { + return false; + } + + @Override + public boolean isDockableWindowVisible(String name) + { + return false; + } + + @Override + public void applyDockingLayout(DockingLayout docking) + { + // 'docking' is null if jEdit was started without a perspective file + boolean loaded = false; + if (docking != null) + { + } + if (! loaded) // No saved layout - just use the docking positions specified by jEdit properties + super.applyDockingLayout(null); + } + + @Override + public void showDockableWindow(String name) + { + JComponent window = getDockable(name); + String position = getDockablePosition(name); + if (window == null) + window = createDockable(name); + if (window == null) + return; + Dockable d = DockingManager.registerDockable(window); + DefaultDockingPort port; + if (position.equals(DockableWindowManager.LEFT)) + port = leftPort; + else if (position.equals(DockableWindowManager.RIGHT)) + port = rightPort; + else if (position.equals(DockableWindowManager.TOP)) + port = topPort; + else + port = bottomPort; + port.dock(d, DockingConstants.CENTER_REGION); + } + + @Override + public void setMainPanel(JPanel panel) + { + add(panel, BorderLayout.CENTER); + } + + public class FlexDockDockingArea implements DockingArea { + public void showMostRecent() { + } + public String getCurrent() { + return null; + } + public void show(String name) { + } + } + + public DockingArea getBottomDockingArea() { + return null; + } + + public DockingArea getLeftDockingArea() { + return null; + } + + public DockingArea getRightDockingArea() { + return null; + } + + public DockingArea getTopDockingArea() { + return null; + } + + @Override + public void disposeDockableWindow(String name) { + } + +} Added: plugins/FlexDockPlugin/trunk/src/flexdock/Plugin.java =================================================================== --- plugins/FlexDockPlugin/trunk/src/flexdock/Plugin.java (rev 0) +++ plugins/FlexDockPlugin/trunk/src/flexdock/Plugin.java 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,14 @@ +package flexdock; + +import org.gjt.sp.jedit.EditPlugin; + +public class Plugin extends EditPlugin { + + public static final String NAME = "FlexDockPlugin"; + public void start() + { + } + public void stop() + { + } +} Added: plugins/FlexDockPlugin/trunk/src/flexdock/Provider.java =================================================================== --- plugins/FlexDockPlugin/trunk/src/flexdock/Provider.java (rev 0) +++ plugins/FlexDockPlugin/trunk/src/flexdock/Provider.java 2008-08-26 13:32:52 UTC (rev 13427) @@ -0,0 +1,22 @@ +package flexdock; + +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.View.ViewConfig; +import org.gjt.sp.jedit.gui.DockableWindowFactory; +import org.gjt.sp.jedit.gui.DockableWindowManager; +import org.gjt.sp.jedit.gui.IDockingFrameworkProvider; +import org.gjt.sp.jedit.gui.DockableWindowManager.DockingLayout; + +public class Provider implements IDockingFrameworkProvider { + + public DockableWindowManager create(View view, + DockableWindowFactory instance, ViewConfig config) + { + return new FlexDockWindowManager(view, instance, config); + } + + public DockingLayout createDockingLayout() { + return new FlexDockDockingLayout(); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jtu...@us...> - 2008-08-31 00:41:24
|
Revision: 13461 http://jedit.svn.sourceforge.net/jedit/?rev=13461&view=rev Author: jturcotte Date: 2008-08-31 00:41:21 +0000 (Sun, 31 Aug 2008) Log Message: ----------- Initial commit of the MetalColor plugin Added Paths: ----------- plugins/MetalColor/ plugins/MetalColor/branches/ plugins/MetalColor/tags/ plugins/MetalColor/trunk/ plugins/MetalColor/trunk/MetalColor.props plugins/MetalColor/trunk/build.xml plugins/MetalColor/trunk/description.html plugins/MetalColor/trunk/index.html plugins/MetalColor/trunk/metalcolor/ plugins/MetalColor/trunk/metalcolor/MetalColorOptionPane.java plugins/MetalColor/trunk/metalcolor/MetalColorPlugin.java plugins/MetalColor/trunk/metalcolor/MetalColorTheme.java Added: plugins/MetalColor/trunk/MetalColor.props =================================================================== --- plugins/MetalColor/trunk/MetalColor.props (rev 0) +++ plugins/MetalColor/trunk/MetalColor.props 2008-08-31 00:41:21 UTC (rev 13461) @@ -0,0 +1,35 @@ +# Properties file for MetalColor plugin +# $Id$ + +# jEdit only needs to load the plugin the first time the user accesses it +# the presence of this property also tells jEdit the plugin is using the new API +plugin.metalcolor.MetalColorPlugin.activate=startup + +# These two properties are required for all plugins +plugin.metalcolor.MetalColorPlugin.name=MetalColor +plugin.metalcolor.MetalColorPlugin.author=Jocelyn Turcotte + +# version number == jEdit version number +plugin.metalcolor.MetalColorPlugin.version=1.0 + +# online help +plugin.metalcolor.MetalColorPlugin.docs=index.html + +# we only have one dependency, jEdit 4.2, since we use the new plugin API +plugin.metalcolor.MetalColorPlugin.depend.0=jedit 04.02.01.00 +plugin.metalcolor.MetalColorPlugin.depend.1=jdk 1.5 + +plugin.metalcolor.MetalColorPlugin.description=The MetalColor plugin allows you to customize colors of the Metal look-and-feel. + +# plugin option pane +plugin.metalcolor.MetalColorPlugin.option-pane=metalcolor + +# Option pane activation BeanShell snippet +options.metalcolor.code=new metalcolor.MetalColorOptionPane(); + +options.metalcolor.label=MetalColor +options.metalcolor.note=Note: Restart jEdit for changes to be applied completely +options.metalcolor.controlcolor=Control color: +options.metalcolor.backgroundcolor=Background color: +options.metalcolor.textcolor=Text color: + Added: plugins/MetalColor/trunk/build.xml =================================================================== --- plugins/MetalColor/trunk/build.xml (rev 0) +++ plugins/MetalColor/trunk/build.xml 2008-08-31 00:41:21 UTC (rev 13461) @@ -0,0 +1,16 @@ +<?xml version="1.0"?> +<project name="MetalColor" + default="build"> + <description> + This is an ant build.xml file for building the MetalColor plugin for jEdit. + </description> + + <property file="build.properties" /> + <property file="../build.properties" /> + + <import file="${build.support}/plugin-build.xml" /> + + <selector id="packageFiles"> + <filename name="index.html" /> + </selector> +</project> Added: plugins/MetalColor/trunk/description.html =================================================================== --- plugins/MetalColor/trunk/description.html (rev 0) +++ plugins/MetalColor/trunk/description.html 2008-08-31 00:41:21 UTC (rev 13461) @@ -0,0 +1,5 @@ +<html> +<body> +The MetalColor plugin allows you to customize colors of the Metal look-and-feel. +</body> +</html> Added: plugins/MetalColor/trunk/index.html =================================================================== --- plugins/MetalColor/trunk/index.html (rev 0) +++ plugins/MetalColor/trunk/index.html 2008-08-31 00:41:21 UTC (rev 13461) @@ -0,0 +1,23 @@ +<html><head><title>MetalColor plugin</title></head> +<body> +<h1>MetalColor plugin</h1> +Author: Jocelyn Turcotte +<br /><br /> + +<h2>Introduction</h2> +With the MetalColor plugin you can customize the colors of the default Metal look and feel. +<br /><br /> + +<h2>Usage</h2> +First make sure that you have selected the Metal option from "Global Options / Appearance / Swing Look & Feel" and that the Look And Feel plugin is set to None.<br /> +<br /> +The plugin only consists of an option pane that allows you to choose 3 base colors: +<ul> +<li>Control color, changes controls color like buttons, scroll bars and selected menu</li> +<li>Background color, change background elements color like panels and menus</li> +<li>Text color, which modifies UI controls text color (not in jEdit text area)</li> +</ul> +Just change these colors, press apply to preview then restart jEdit to correct small glitches, voilà!<br /> + +</body> +</html> Added: plugins/MetalColor/trunk/metalcolor/MetalColorOptionPane.java =================================================================== --- plugins/MetalColor/trunk/metalcolor/MetalColorOptionPane.java (rev 0) +++ plugins/MetalColor/trunk/metalcolor/MetalColorOptionPane.java 2008-08-31 00:41:21 UTC (rev 13461) @@ -0,0 +1,76 @@ +/* + * MetalColorOptionPane.java - MetalColor plugin + * Copyright (C) 2008 Jocelyn Turcotte + * + * 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id$ + */ + +package metalcolor; + +import java.awt.BorderLayout; +import javax.swing.JLabel; +import java.awt.Color; + +import org.gjt.sp.jedit.gui.*; +import org.gjt.sp.jedit.*; + +public class MetalColorOptionPane extends AbstractOptionPane +{ + private ColorWellButton controlColor; + private ColorWellButton bgColor; + private ColorWellButton textColor; + + public MetalColorOptionPane() + { + super( MetalColorPlugin.NAME ); + } + + public void _init() + { + controlColor = new ColorWellButton( jEdit.getColorProperty(MetalColorPlugin.CONTROLCOLOR_PROPERTY_NAME, MetalColorTheme.DEFAULT_CONTROLCOLOR) ); + addComponent( jEdit.getProperty("options.metalcolor.controlcolor"), controlColor ); + + bgColor = new ColorWellButton( jEdit.getColorProperty(MetalColorPlugin.BGCOLOR_PROPERTY_NAME, MetalColorTheme.DEFAULT_BGCOLOR) ); + addComponent( jEdit.getProperty("options.metalcolor.backgroundcolor"), bgColor ); + + textColor = new ColorWellButton( jEdit.getColorProperty(MetalColorPlugin.TEXTCOLOR_PROPERTY_NAME, MetalColorTheme.DEFAULT_TEXTCOLOR) ); + addComponent( jEdit.getProperty("options.metalcolor.textcolor"), textColor ); + + addSeparator(); + addComponent( new JLabel(jEdit.getProperty("options.metalcolor.note")) ); + } + + public void _save() + { + boolean dirty = false; + + Color oldControl = jEdit.getColorProperty( MetalColorPlugin.CONTROLCOLOR_PROPERTY_NAME ); + jEdit.setColorProperty( MetalColorPlugin.CONTROLCOLOR_PROPERTY_NAME, controlColor.getSelectedColor() ); + dirty |= oldControl == null || !controlColor.getSelectedColor().equals(oldControl); + + Color oldBg = jEdit.getColorProperty( MetalColorPlugin.BGCOLOR_PROPERTY_NAME ); + jEdit.setColorProperty( MetalColorPlugin.BGCOLOR_PROPERTY_NAME, bgColor.getSelectedColor() ); + dirty |= oldBg == null || !bgColor.getSelectedColor().equals(oldBg); + + Color oldText = jEdit.getColorProperty( MetalColorPlugin.TEXTCOLOR_PROPERTY_NAME ); + jEdit.setColorProperty( MetalColorPlugin.TEXTCOLOR_PROPERTY_NAME, textColor.getSelectedColor() ); + dirty |= oldText == null || !textColor.getSelectedColor().equals(oldText); + + if( dirty ) + MetalColorPlugin.updateTheme(); + } +} Added: plugins/MetalColor/trunk/metalcolor/MetalColorPlugin.java =================================================================== --- plugins/MetalColor/trunk/metalcolor/MetalColorPlugin.java (rev 0) +++ plugins/MetalColor/trunk/metalcolor/MetalColorPlugin.java 2008-08-31 00:41:21 UTC (rev 13461) @@ -0,0 +1,88 @@ +/* + * MetalColorPlugin.java - MetalColor plugin + * Copyright (C) 2008 Jocelyn Turcotte + * + * 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id$ + */ + +package metalcolor; + +import org.gjt.sp.jedit.EditPlugin; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.util.Log; + +import java.awt.Color; +import java.awt.Frame; +import java.awt.Window; +import javax.swing.plaf.metal.MetalLookAndFeel; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; + +import metalcolor.MetalColorTheme; + +/** + * The MetalColor plugin + * + * @author Jocelyn Turcotte + */ +public class MetalColorPlugin extends EditPlugin +{ + public static final String NAME = "metalcolor"; + public static final String CONTROLCOLOR_PROPERTY_NAME = "metalcolor.basecolor"; + public static final String TEXTCOLOR_PROPERTY_NAME = "metalcolor.textcolor"; + public static final String BGCOLOR_PROPERTY_NAME = "metalcolor.backgroundcolor"; + + public void start() + { + updateTheme(); + } + + public static void updateTheme() + { + try + { + Color controlColor = jEdit.getColorProperty( CONTROLCOLOR_PROPERTY_NAME, MetalColorTheme.DEFAULT_CONTROLCOLOR ); + Color textColor = jEdit.getColorProperty( TEXTCOLOR_PROPERTY_NAME, MetalColorTheme.DEFAULT_TEXTCOLOR ); + Color bgColor = jEdit.getColorProperty( BGCOLOR_PROPERTY_NAME, MetalColorTheme.DEFAULT_BGCOLOR ); + + MetalLookAndFeel.setCurrentTheme( new MetalColorTheme(controlColor, textColor, bgColor) ); + updateAllComponentTreeUIs(); + } + catch (Exception e) + { + Log.log(Log.ERROR, MetalColorPlugin.class, e); + } + } + + /** + * Update the component trees of all windows. + */ + private static void updateAllComponentTreeUIs() throws javax.swing.UnsupportedLookAndFeelException + { + if( UIManager.getLookAndFeel() instanceof MetalLookAndFeel ) + { + // re-install the Metal Look and Feel + UIManager.setLookAndFeel( new MetalLookAndFeel() ); + + Frame[] frames = Frame.getFrames(); + for (int i=0; i<frames.length; i++) + { + SwingUtilities.updateComponentTreeUI(frames[i]); + } + } + } +} Added: plugins/MetalColor/trunk/metalcolor/MetalColorTheme.java =================================================================== --- plugins/MetalColor/trunk/metalcolor/MetalColorTheme.java (rev 0) +++ plugins/MetalColor/trunk/metalcolor/MetalColorTheme.java 2008-08-31 00:41:21 UTC (rev 13461) @@ -0,0 +1,216 @@ +/* + * MetalColorTheme.java - MetalColor plugin + * Copyright (C) 2008 Jocelyn Turcotte + * + * 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id$ + */ + +package metalcolor; + +import java.awt.Color; +import java.util.Arrays; +import javax.swing.plaf.ColorUIResource; +import javax.swing.plaf.metal.OceanTheme; +import javax.swing.UIDefaults; + +/** Overrides OceanTheme taking 3 base colors in input and keeping the same color ratio. */ +public class MetalColorTheme extends OceanTheme +{ + public static final Color DEFAULT_CONTROLCOLOR = new Color(0xA3B8CC); + public static final Color DEFAULT_TEXTCOLOR = new Color(0x333333); + public static final Color DEFAULT_BGCOLOR = new Color(0xEEEEEE); + + /** Keep default getBlack() here since we override it with text color */ + private static final ColorUIResource REAL_BLACK = new ColorUIResource(0x333333); + + private final ColorUIResource primaryColor1; + private final ColorUIResource primaryColor2; + private final ColorUIResource primaryColor3; + private final ColorUIResource secondaryColor1; + private final ColorUIResource secondaryColor2; + private final ColorUIResource secondaryColor3; + + private final ColorUIResource borderColor; + private final ColorUIResource buttonGradientColor1; + private final ColorUIResource buttonGradientColor2; + private final ColorUIResource sliderGradientColor1; + private final ColorUIResource sliderGradientColor2; + private final ColorUIResource menuGradientColor1; + private final ColorUIResource menuGradientColor2; + + private final ColorUIResource auxColor1; + private final ColorUIResource auxColor2; + private final ColorUIResource auxColor3; + + private final ColorUIResource blackColor; + private final ColorUIResource whiteColor; + + private final ColorUIResource textColor; + + public MetalColorTheme( Color controlColor, Color textColor, Color bgColor ) + { + primaryColor1 = getRelativeColor( controlColor, 0.28f, -0.05f ); + primaryColor2 = new ColorUIResource( controlColor ); + primaryColor3 = getRelativeColor( controlColor, 0.0f, 0.10f ); + secondaryColor1 = getRelativeColor( controlColor, 0.0f, -0.20f ); + secondaryColor2 = getRelativeColor( controlColor, 0.0f, 0.10f ); + secondaryColor3 = new ColorUIResource( bgColor ); + + borderColor = getRelativeColor( controlColor, -0.60f, 0.0f ); + buttonGradientColor1= getRelativeColor( controlColor, -0.11f, 0.15f ); + buttonGradientColor2= getRelativeColor( controlColor, -0.80f, 0.20f ); + sliderGradientColor1= getRelativeColor( controlColor, -0.03f, 0.15f ); + sliderGradientColor2= getRelativeColor( controlColor, -0.80f, 0.20f ); + menuGradientColor1 = getRelativeColor( bgColor, 0.0f, 0.07f ); + menuGradientColor2 = getRelativeColor( bgColor, 0.0f, -0.08f ); + auxColor1 = getRelativeColor( controlColor, -0.5f, 0.05f ); + auxColor2 = getRelativeColor( controlColor, -0.08f, 0.14f ); + auxColor3 = getRelativeColor( controlColor, -0.02f, 0.20f ); + + this.textColor = new ColorUIResource(textColor); + + // Override black color since it is used directly in some places (like tooltips) + blackColor = new ColorUIResource(textColor); + whiteColor = getRelativeColor( bgColor, 0.0f, 0.25f ); + } + + public void addCustomEntriesToTable(UIDefaults table) + { + // Call OceanTheme's one then override our properties + super.addCustomEntriesToTable( table ); + + // The rest was filtered from OpenSDK's OceanTheme.java file. + java.util.List buttonGradient = Arrays.asList( + new Object[] {new Float(.3f), new Float(0f), + getButtonGradientColor1(), getButtonGradientColor2(), getSecondary2() }); + + java.util.List sliderGradient = Arrays.asList(new Object[] { + new Float(.3f), new Float(.2f), + getSliderGradientColor1(), getSliderGradientColor2(), getSecondary2() }); + + Object[] defaults = new Object[] { + "Button.gradient", buttonGradient, + "Button.toolBarBorderBackground", getInactiveControlTextColor(), + "Button.disabledToolBarBorderBackground", getBorderColor(), + + "CheckBox.gradient", buttonGradient, + + "CheckBoxMenuItem.gradient", buttonGradient, + + "MenuBar.gradient", Arrays.asList(new Object[] { + new Float(1f), new Float(0f), + getMenuGradientColor1(), getMenuGradientColor2(), + getMenuGradientColor2() }), + "MenuBar.borderColor", getBorderColor(), + + "InternalFrame.activeTitleGradient", buttonGradient, + + "RadioButton.gradient", buttonGradient, + + "RadioButtonMenuItem.gradient", buttonGradient, + + "ScrollBar.gradient", buttonGradient, + + "Slider.altTrackColor", getAuxColor2(), + "Slider.gradient", sliderGradient, + "Slider.focusGradient", sliderGradient, + + "SplitPane.dividerFocusColor", getSliderGradientColor1(), + + "TabbedPane.borderHightlightColor", getPrimary1(), + "TabbedPane.contentAreaColor", getSliderGradientColor1(), + "TabbedPane.selected", getSliderGradientColor1(), + "TabbedPane.tabAreaBackground", getAuxColor1(), + "TabbedPane.unselectedBackground", getSecondary3(), + + "Table.gridColor", getSecondary1(), + "TableHeader.focusCellBackground", getSliderGradientColor1(), + + "ToggleButton.gradient", buttonGradient, + + "ToolBar.borderColor", getBorderColor(), + + "Tree.selectionBorderColor", getPrimary1(), + "Tree.dropLineColor", getPrimary1(), + "Table.dropLineColor", getPrimary1(), + "Table.dropLineShortColor", getBlack(), + + "Table.dropCellBackground", getAuxColor3(), + "Tree.dropCellBackground", getAuxColor3(), + "List.dropCellBackground", getAuxColor3(), + "List.dropLineColor", getPrimary1() + }; + table.putDefaults(defaults); + } + + public String getName() { return "MetalColorTheme"; } + + public ColorUIResource getBlack() { return blackColor; } + public ColorUIResource getWhite() { return whiteColor; } + + public ColorUIResource getControlTextColor() { return getBlack(); } + public ColorUIResource getSystemTextColor() { return getBlack(); } + public ColorUIResource getUserTextColor() { return getBlack(); } + public ColorUIResource getWindowTitleForeground() { return getBlack(); } + public ColorUIResource getWindowTitleInactiveForeground() { return REAL_BLACK; } + public ColorUIResource getMenuForeground() { return getBlack(); } + public ColorUIResource getMenuSelectedForeground() { return getBlack(); } + public ColorUIResource getAcceleratorSelectedForeground() { return getBlack(); } + + protected ColorUIResource getPrimary1() { return primaryColor1; } + protected ColorUIResource getPrimary2() { return primaryColor2; } + protected ColorUIResource getPrimary3() { return primaryColor3; } + protected ColorUIResource getSecondary1() { return secondaryColor1; } + protected ColorUIResource getSecondary2() { return secondaryColor2; } + protected ColorUIResource getSecondary3() { return secondaryColor3; } + + private ColorUIResource getBorderColor() { return borderColor; } + + private ColorUIResource getButtonGradientColor1() { return buttonGradientColor1; } + private ColorUIResource getButtonGradientColor2() { return buttonGradientColor2; } + + private ColorUIResource getSliderGradientColor1() { return sliderGradientColor1; } + private ColorUIResource getSliderGradientColor2() { return sliderGradientColor2; } + + private ColorUIResource getMenuGradientColor1() { return menuGradientColor1; } + private ColorUIResource getMenuGradientColor2() { return menuGradientColor2; } + + private ColorUIResource getAuxColor1() { return auxColor1; } + private ColorUIResource getAuxColor2() { return auxColor2; } + private ColorUIResource getAuxColor3() { return auxColor3; } + + private ColorUIResource getRelativeColor( Color baseColor, float saturationDelta, float brightnessDelta ) + { + float[] hsbVals = new float[3]; + Color.RGBtoHSB( baseColor.getRed() + , baseColor.getGreen() + , baseColor.getBlue() + , hsbVals ); + + float sat = hsbVals[1] + saturationDelta; + if( sat < 0.0f ) sat = 0.0f; + else if( sat > 1.0f ) sat = 1.0f; + + float bri = hsbVals[2] + brightnessDelta; + if( bri < 0.0f ) bri = 0.0f; + else if( bri > 1.0f ) bri = 1.0f; + + int newColor = Color.HSBtoRGB( hsbVals[0] , sat , bri ); + + return new ColorUIResource( newColor ); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-09-06 11:06:04
|
Revision: 13535 http://jedit.svn.sourceforge.net/jedit/?rev=13535&view=rev Author: shlomy Date: 2008-09-06 11:05:59 +0000 (Sat, 06 Sep 2008) Log Message: ----------- First version of InfoNodeDW plugin. Added Paths: ----------- plugins/InfoNodeDWPlugin/ plugins/InfoNodeDWPlugin/trunk/ plugins/InfoNodeDWPlugin/trunk/.classpath plugins/InfoNodeDWPlugin/trunk/.project plugins/InfoNodeDWPlugin/trunk/InfoNodeDWPlugin.props plugins/InfoNodeDWPlugin/trunk/actions.xml plugins/InfoNodeDWPlugin/trunk/bin/ plugins/InfoNodeDWPlugin/trunk/bin/infonode/ plugins/InfoNodeDWPlugin/trunk/bin/infonode/InfoNodeDWDockingLayout.class plugins/InfoNodeDWPlugin/trunk/bin/infonode/InfoNodeDWWindowManager$InfoNodeDWDockingArea.class plugins/InfoNodeDWPlugin/trunk/bin/infonode/InfoNodeDWWindowManager.class plugins/InfoNodeDWPlugin/trunk/bin/infonode/Plugin.class plugins/InfoNodeDWPlugin/trunk/bin/infonode/Provider.class plugins/InfoNodeDWPlugin/trunk/build/ plugins/InfoNodeDWPlugin/trunk/build/classes/ plugins/InfoNodeDWPlugin/trunk/build/classes/infonode/ plugins/InfoNodeDWPlugin/trunk/build/classes/infonode/InfoNodeDWDockingLayout.class plugins/InfoNodeDWPlugin/trunk/build/classes/infonode/InfoNodeDWWindowManager$InfoNodeDWDockingArea.class plugins/InfoNodeDWPlugin/trunk/build/classes/infonode/InfoNodeDWWindowManager.class plugins/InfoNodeDWPlugin/trunk/build/classes/infonode/Plugin.class plugins/InfoNodeDWPlugin/trunk/build/classes/infonode/Provider.class plugins/InfoNodeDWPlugin/trunk/build/classes/myDoggy/ plugins/InfoNodeDWPlugin/trunk/build/classes/myDoggy/Plugin.class plugins/InfoNodeDWPlugin/trunk/build/docs/ plugins/InfoNodeDWPlugin/trunk/build/extras/ plugins/InfoNodeDWPlugin/trunk/build/extras/InfoNodeDWPlugin.props plugins/InfoNodeDWPlugin/trunk/build/extras/actions.xml plugins/InfoNodeDWPlugin/trunk/build/extras/index.html plugins/InfoNodeDWPlugin/trunk/build/extras/services.xml plugins/InfoNodeDWPlugin/trunk/build.xml plugins/InfoNodeDWPlugin/trunk/description.html plugins/InfoNodeDWPlugin/trunk/idw-gpl.jar plugins/InfoNodeDWPlugin/trunk/index.html plugins/InfoNodeDWPlugin/trunk/services.xml plugins/InfoNodeDWPlugin/trunk/src/ plugins/InfoNodeDWPlugin/trunk/src/infonode/ plugins/InfoNodeDWPlugin/trunk/src/infonode/InfoNodeDWDockingLayout.java plugins/InfoNodeDWPlugin/trunk/src/infonode/InfoNodeDWWindowManager.java plugins/InfoNodeDWPlugin/trunk/src/infonode/Plugin.java plugins/InfoNodeDWPlugin/trunk/src/infonode/Provider.java Added: plugins/InfoNodeDWPlugin/trunk/.classpath =================================================================== --- plugins/InfoNodeDWPlugin/trunk/.classpath (rev 0) +++ plugins/InfoNodeDWPlugin/trunk/.classpath 2008-09-06 11:05:59 UTC (rev 13535) @@ -0,0 +1,8 @@ +<?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 combineaccessrules="false" kind="src" path="/InfoNodeDW"/> + <classpathentry kind="output" path="bin"/> +</classpath> Added: plugins/InfoNodeDWPlugin/trunk/.project =================================================================== --- plugins/InfoNodeDWPlugin/trunk/.project (rev 0) +++ plugins/InfoNodeDWPlugin/trunk/.project 2008-09-06 11:05:59 UTC (rev 13535) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>InfoNodeDWPlugin</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/InfoNodeDWPlugin/trunk/InfoNodeDWPlugin.props =================================================================== --- plugins/InfoNodeDWPlugin/trunk/InfoNodeDWPlugin.props (rev 0) +++ plugins/InfoNodeDWPlugin/trunk/InfoNodeDWPlugin.props 2008-09-06 11:05:59 UTC (rev 13535) @@ -0,0 +1,30 @@ +# jEdit only needs to load the plugin the first time the user accesses it +# the presence of this property also tells jEdit the plugin is using the new API +plugin.infonode.Plugin.activate=defer + +# These two properties are required for all plugins +plugin.infonode.Plugin.name=InfoNodeDWPlugin +plugin.infonode.Plugin.author=Shlomy Reinstein +plugin.infonode.Plugin.description=InfoNodeDWPlugin uses InfoNodeDWto manage the dockable windows in jEdit. + +plugin.infonode.Plugin.version=0.1 + +# Dependencies + +plugin.infonode.Plugin.depend.0=jdk 1.5 +plugin.infonode.Plugin.depend.1=jedit 04.03.12.00 + +plugin.infonode.Plugin.jars=idw-gpl.jar + +# Options +#plugin.infonode.Plugin.option-pane=mydoggy +#options.mydoggy.label=MyDoggyPlugin +#options.mydoggy.code=new myDoggy.OptionPane(); + +# Option pane labels +#options.mydoggy.pushAwayMode.label=Push away mode: +#options.mydoggy.useAlternateLayout.label=Override push-away mode with jEdit alternate layout property + +# docs +plugin.infonode.Plugin.docs=index.html + Added: plugins/InfoNodeDWPlugin/trunk/actions.xml =================================================================== --- plugins/InfoNodeDWPlugin/trunk/actions.xml (rev 0) +++ plugins/InfoNodeDWPlugin/trunk/actions.xml 2008-09-06 11:05:59 UTC (rev 13535) @@ -0,0 +1,6 @@ +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> + +<ACTIONS> + +</ACTIONS> + Property changes on: plugins/InfoNodeDWPlugin/trunk/bin/infonode/InfoNodeDWDockingLayout.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/InfoNodeDWPlugin/trunk/bin/infonode/InfoNodeDWWindowManager$InfoNodeDWDockingArea.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/InfoNodeDWPlugin/trunk/bin/infonode/InfoNodeDWWindowManager.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/InfoNodeDWPlugin/trunk/bin/infonode/Plugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/InfoNodeDWPlugin/trunk/bin/infonode/Provider.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/InfoNodeDWPlugin/trunk/build/classes/infonode/InfoNodeDWDockingLayout.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/InfoNodeDWPlugin/trunk/build/classes/infonode/InfoNodeDWWindowManager$InfoNodeDWDockingArea.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/InfoNodeDWPlugin/trunk/build/classes/infonode/InfoNodeDWWindowManager.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/InfoNodeDWPlugin/trunk/build/classes/infonode/Plugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/InfoNodeDWPlugin/trunk/build/classes/infonode/Provider.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: plugins/InfoNodeDWPlugin/trunk/build/classes/myDoggy/Plugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/InfoNodeDWPlugin/trunk/build/extras/InfoNodeDWPlugin.props =================================================================== --- plugins/InfoNodeDWPlugin/trunk/build/extras/InfoNodeDWPlugin.props (rev 0) +++ plugins/InfoNodeDWPlugin/trunk/build/extras/InfoNodeDWPlugin.props 2008-09-06 11:05:59 UTC (rev 13535) @@ -0,0 +1,30 @@ +# jEdit only needs to load the plugin the first time the user accesses it +# the presence of this property also tells jEdit the plugin is using the new API +plugin.infonode.Plugin.activate=defer + +# These two properties are required for all plugins +plugin.infonode.Plugin.name=InfoNodeDWPlugin +plugin.infonode.Plugin.author=Shlomy Reinstein +plugin.infonode.Plugin.description=InfoNodeDWPlugin uses InfoNodeDWto manage the dockable windows in jEdit. + +plugin.infonode.Plugin.version=0.1 + +# Dependencies + +plugin.infonode.Plugin.depend.0=jdk 1.5 +plugin.infonode.Plugin.depend.1=jedit 04.03.12.00 + +plugin.infonode.Plugin.jars=idw-gpl.jar + +# Options +#plugin.infonode.Plugin.option-pane=mydoggy +#options.mydoggy.label=MyDoggyPlugin +#options.mydoggy.code=new myDoggy.OptionPane(); + +# Option pane labels +#options.mydoggy.pushAwayMode.label=Push away mode: +#options.mydoggy.useAlternateLayout.label=Override push-away mode with jEdit alternate layout property + +# docs +plugin.infonode.Plugin.docs=index.html + Added: plugins/InfoNodeDWPlugin/trunk/build/extras/actions.xml =================================================================== --- plugins/InfoNodeDWPlugin/trunk/build/extras/actions.xml (rev 0) +++ plugins/InfoNodeDWPlugin/trunk/build/extras/actions.xml 2008-09-06 11:05:59 UTC (rev 13535) @@ -0,0 +1,6 @@ +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> + +<ACTIONS> + +</ACTIONS> + Added: plugins/InfoNodeDWPlugin/trunk/build/extras/index.html =================================================================== --- plugins/InfoNodeDWPlugin/trunk/build/extras/index.html (rev 0) +++ plugins/InfoNodeDWPlugin/trunk/build/extras/index.html 2008-09-06 11:05:59 UTC (rev 13535) @@ -0,0 +1,20 @@ +<html> +<head> + <title>MyDoggyPlugin</title> +</head> + +<body> +<h1>MyDoggyPlugin plugin documentation</h1> + +Written by Shlomy Reinstein, August 2008. +<h2>Description</h2> + +<p>MyDoggyPlugin brings the power of the open-source docking framework named MyDoggy to jEdit. It uses MyDoggy to manage the dockable windows in jEdit, so they can be dragged from one docking area to another, share the same docking area, and a lot more. </p> + +<h2>Usage</h2> + +<p>To use MyDoggyPlugin, select <tt>Utilities->Global Options->Docking</tt> and select MyDoggy as the docking framework. +</p> + +</body> +</html> Added: plugins/InfoNodeDWPlugin/trunk/build/extras/services.xml =================================================================== --- plugins/InfoNodeDWPlugin/trunk/build/extras/services.xml (rev 0) +++ plugins/InfoNodeDWPlugin/trunk/build/extras/services.xml 2008-09-06 11:05:59 UTC (rev 13535) @@ -0,0 +1,7 @@ +<?xml version="1.0"?> + +<!DOCTYPE SERVICES SYSTEM "services.dtd"> + +<SERVICES> + <SERVICE CLASS="org.gjt.sp.jedit.gui.DockingFrameworkProvider" NAME="InfoNodeDW">new infonode.Provider()</SERVICE> +</SERVICES> \ No newline at end of file Added: plugins/InfoNodeDWPlugin/trunk/build.xml =================================================================== --- plugins/InfoNodeDWPlugin/trunk/build.xml (rev 0) +++ plugins/InfoNodeDWPlugin/trunk/build.xml 2008-09-06 11:05:59 UTC (rev 13535) @@ -0,0 +1,34 @@ +<?xml version="1.0"?> +<project name="InfoNodeDWPlugin" default="build" basedir="."> +<!-- + This is a build.xml file for building the InfoNodeDW plugin. +--> + <!-- Read optional properties from various places --> + <!-- Latter ones override previous properties. --> + <property file="build.properties"/> + <property file="../build.properties"/> + <property name="user-doc.xml" location = "users-guide.xml"/> + <property name="plugin.dependencies" value="" /> + <property name="dist.target" value="dist.complete" /> + <property name="compiler.source" value="1.5" /> + <property name="compiler.target" value="1.5" /> + + <import file="${build.support}/plugin-build.xml" /> + + <selector id="packageFiles"> + <or> + <filename name="index.html" /> + </or> + </selector> + + <path id="project.class.path"> + <pathelement location="${jedit.install.dir}/jedit.jar" /> + <pathelement location="${install.dir}/idw-gpl.jar"/> + </path> + + <target name="build.prepare" > + <mkdir dir="${build.dir}" /> + <copy file="idw-gpl.jar" todir="${install.dir}" /> + </target> + +</project> Added: plugins/InfoNodeDWPlugin/trunk/description.html =================================================================== --- plugins/InfoNodeDWPlugin/trunk/description.html (rev 0) +++ plugins/InfoNodeDWPlugin/trunk/description.html 2008-09-06 11:05:59 UTC (rev 13535) @@ -0,0 +1,4 @@ +<p> +InfoNodeDWPlugin allows you to use the open-source docking framework named InfoNodeDW to manage the dockable windows in jEdit. This enables dockable windows to be dragged from one area to another, share the same docking area, and more. +</p> + Property changes on: plugins/InfoNodeDWPlugin/trunk/idw-gpl.jar ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/InfoNodeDWPlugin/trunk/index.html =================================================================== --- plugins/InfoNodeDWPlugin/trunk/index.html (rev 0) +++ plugins/InfoNodeDWPlugin/trunk/index.html 2008-09-06 11:05:59 UTC (rev 13535) @@ -0,0 +1,20 @@ +<html> +<head> + <title>MyDoggyPlugin</title> +</head> + +<body> +<h1>MyDoggyPlugin plugin documentation</h1> + +Written by Shlomy Reinstein, August 2008. +<h2>Description</h2> + +<p>MyDoggyPlugin brings the power of the open-source docking framework named MyDoggy to jEdit. It uses MyDoggy to manage the dockable windows in jEdit, so they can be dragged from one docking area to another, share the same docking area, and a lot more. </p> + +<h2>Usage</h2> + +<p>To use MyDoggyPlugin, select <tt>Utilities->Global Options->Docking</tt> and select MyDoggy as the docking framework. +</p> + +</body> +</html> Added: plugins/InfoNodeDWPlugin/trunk/services.xml =================================================================== --- plugins/InfoNodeDWPlugin/trunk/services.xml (rev 0) +++ plugins/InfoNodeDWPlugin/trunk/services.xml 2008-09-06 11:05:59 UTC (rev 13535) @@ -0,0 +1,7 @@ +<?xml version="1.0"?> + +<!DOCTYPE SERVICES SYSTEM "services.dtd"> + +<SERVICES> + <SERVICE CLASS="org.gjt.sp.jedit.gui.DockingFrameworkProvider" NAME="InfoNodeDW">new infonode.Provider()</SERVICE> +</SERVICES> \ No newline at end of file Added: plugins/InfoNodeDWPlugin/trunk/src/infonode/InfoNodeDWDockingLayout.java =================================================================== --- plugins/InfoNodeDWPlugin/trunk/src/infonode/InfoNodeDWDockingLayout.java (rev 0) +++ plugins/InfoNodeDWPlugin/trunk/src/infonode/InfoNodeDWDockingLayout.java 2008-09-06 11:05:59 UTC (rev 13535) @@ -0,0 +1,50 @@ +package infonode; + +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; + +import org.gjt.sp.jedit.gui.DockableWindowManager.DockingLayout; + +public class InfoNodeDWDockingLayout extends DockingLayout { + + private static final String TEMP_LAYOUT_NAME = "temp"; + private String layoutFilename = null; + + public InfoNodeDWDockingLayout() { + } + + public String getLayoutFilename() { + return layoutFilename; + } + + @Override + public boolean loadLayout(String baseName, int viewIndex) { + layoutFilename = getLayoutFilename(baseName, viewIndex); + return true; + } + + @Override + public boolean saveLayout(String baseName, int viewIndex) { + String filename = getLayoutFilename(baseName, viewIndex); + FileOutputStream outputStream; + try { + outputStream = new FileOutputStream(filename); + //wm.getPersistenceDelegate().save(outputStream); + outputStream.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + return false; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public String getName() { + return "InfoNodeDWPlugin"; + } + +} Added: plugins/InfoNodeDWPlugin/trunk/src/infonode/InfoNodeDWWindowManager.java =================================================================== --- plugins/InfoNodeDWPlugin/trunk/src/infonode/InfoNodeDWWindowManager.java (rev 0) +++ plugins/InfoNodeDWPlugin/trunk/src/infonode/InfoNodeDWWindowManager.java 2008-09-06 11:05:59 UTC (rev 13535) @@ -0,0 +1,255 @@ +package infonode; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import javax.swing.Icon; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.UIManager; + +import net.infonode.docking.RootWindow; +import net.infonode.docking.SplitWindow; +import net.infonode.docking.TabWindow; +import net.infonode.docking.properties.TabWindowProperties; +import net.infonode.docking.util.DockingUtil; +import net.infonode.docking.util.StringViewMap; +import net.infonode.util.Direction; + +import org.gjt.sp.jedit.PerspectiveManager; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.View.ViewConfig; +import org.gjt.sp.jedit.gui.DockableWindowFactory; +import org.gjt.sp.jedit.gui.DockableWindowManager; + +@SuppressWarnings("serial") +public class InfoNodeDWWindowManager extends DockableWindowManager { + + static private String MAIN_VIEW_NAME = "main"; + private RootWindow rootWindow = null; + private StringViewMap views; + private net.infonode.docking.View mainView; + private JPanel center; + private Map<String, TabWindow> tabWindows; + + public InfoNodeDWWindowManager(View view, DockableWindowFactory instance, + ViewConfig config) + { + super(view, instance, config); + setLayout(new BorderLayout()); + views = new StringViewMap(); + center = new JPanel(new BorderLayout()); + mainView = new net.infonode.docking.View(MAIN_VIEW_NAME, null, center); + mainView.setName(MAIN_VIEW_NAME); + mainView.getViewProperties().setAlwaysShowTitle(false); + views.addView(mainView); + rootWindow = DockingUtil.createRootWindow(views, true); + rootWindow.getRootWindowProperties().getWindowAreaProperties().setBackgroundColor(center.getBackground()); + rootWindow.getWindowBar(Direction.DOWN).setEnabled(true); + rootWindow.getWindowBar(Direction.UP).setEnabled(true); + rootWindow.getWindowBar(Direction.LEFT).setEnabled(true); + rootWindow.getWindowBar(Direction.RIGHT).setEnabled(true); + setLayout(new BorderLayout()); + add(rootWindow, BorderLayout.CENTER); + tabWindows = new HashMap<String, TabWindow>(); + tabWindows.put(DockableWindowManager.LEFT, createTabWindow(Direction.LEFT, Direction.UP)); + tabWindows.put(DockableWindowManager.RIGHT, createTabWindow(Direction.RIGHT, Direction.DOWN)); + tabWindows.put(DockableWindowManager.BOTTOM, createTabWindow(Direction.UP, Direction.RIGHT)); + tabWindows.put(DockableWindowManager.TOP, createTabWindow(Direction.UP, Direction.RIGHT)); + SplitWindow sw = new SplitWindow(true, 0.25f, tabWindows.get(DockableWindowManager.LEFT), mainView); + sw = new SplitWindow(true, 0.75f, sw, tabWindows.get(DockableWindowManager.RIGHT)); + sw = new SplitWindow(false, 0.25f, tabWindows.get(DockableWindowManager.TOP), sw); + sw = new SplitWindow(false, 0.75f, sw, tabWindows.get(DockableWindowManager.BOTTOM)); + rootWindow.setWindow(sw); + PerspectiveManager.setPerspectiveDirty(true); + } + + private TabWindow createTabWindow(Direction side, Direction dir) + { + TabWindow tw = new TabWindow(); + TabWindowProperties twp = tw.getTabWindowProperties(); + twp.getTabbedPanelProperties().setTabAreaOrientation(side); + twp.getTabProperties().getTitledTabProperties().getNormalProperties().setDirection(dir); + return tw; + } + + @Override + protected void dockingPositionChanged(String name, + String oldPosition, String newPosition) + { + showDockableWindow(name); + } + + @Override + public void closeCurrentArea() + { + } + + @Override + public JComponent floatDockableWindow(String name) + { + return null; + } + + @Override + public DockingLayout getDockingLayout(ViewConfig config) + { + InfoNodeDWDockingLayout layout = null;//new InfoNodeDWDockingLayout(wm); + return layout; + } + + private String getToolWindowID(String dockableName) + { + return dockableName; + } + + @Override + public void hideDockableWindow(String name) + { + } + + @Override + public boolean isDockableWindowDocked(String name) + { + return false; + } + + @Override + public boolean isDockableWindowVisible(String name) + { + return false; + } + + private void loadInfoNodeDWLayout(String filename) + { + FileInputStream inputStream; + try { + inputStream = new FileInputStream(filename); + //PersistenceDelegateCallback callback = new PersistenceCallback(); + //wm.getPersistenceDelegate().merge(inputStream, MergePolicy.RESET, callback); + inputStream.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void applyDockingLayout(DockingLayout docking) + { + // 'docking' is null if jEdit was started without a perspective file + boolean loaded = false; + if (docking != null) + { + InfoNodeDWDockingLayout layout = (InfoNodeDWDockingLayout) docking; + String filename = layout.getLayoutFilename(); + if (filename != null) { + java.io.File f = new File(filename); + if (f.exists()) { + loadInfoNodeDWLayout(filename); + loaded = true; + } + } + } + if (! loaded) // No saved layout - just use the docking positions specified by jEdit properties + super.applyDockingLayout(null); + } + + @Override + public void showDockableWindow(String name) + { + JComponent c = createDockable(name); + net.infonode.docking.View v = new net.infonode.docking.View(getDockableTitle(name), null, c); + String position = getDockablePosition(name); + TabWindow tw = tabWindows.get(position); + if (tw != null) { + if (v.getWindowParent() != tw) + tw.addTab(v); + tw.setVisible(true); + } + } + + /* + private void activateToolWindow(ToolWindow tw) + { + ToolWindowAnchor anchor = tw.getAnchor(); + if (anchor != null) + { + ToolWindowBar bar = wm.getToolWindowBar(anchor); + if (! bar.isVisible()) + bar.setVisible(true); + } + tw.setActive(true); + focusDockable(tw.getId()); + } + */ + + @Override + public void setMainPanel(JPanel panel) + { + center.add(panel, BorderLayout.CENTER); + } + + public class InfoNodeDWDockingArea implements DockingArea { + public InfoNodeDWDockingArea() {//ToolWindowAnchor anchor) + } + public void showMostRecent() { + } + public String getCurrent() { + return null; + } + public void show(String name) { + } + } + + public DockingArea getBottomDockingArea() { + return new InfoNodeDWDockingArea();//ToolWindowAnchor.BOTTOM); + } + + public DockingArea getLeftDockingArea() { + return new InfoNodeDWDockingArea();//ToolWindowAnchor.LEFT); + } + + public DockingArea getRightDockingArea() { + return new InfoNodeDWDockingArea();//ToolWindowAnchor.RIGHT); + } + + public DockingArea getTopDockingArea() { + return new InfoNodeDWDockingArea();//ToolWindowAnchor.TOP); + } + + @Override + public void dockableTitleChanged(String dockable, String newTitle) { + /* + ToolWindow tw = getToolWindow(dockable); + if (tw != null) + tw.setTitle(newTitle); + */ + } + + @Override + protected void applyAlternateLayout(boolean alternateLayout) { + //setPushAwayMode(); + } + + public void disposeDockableWindow(String name) { + /*ToolWindow tw = getToolWindow(name); + if (tw != null) + wm.unregisterToolWindow(name); + */ + } + +} Added: plugins/InfoNodeDWPlugin/trunk/src/infonode/Plugin.java =================================================================== --- plugins/InfoNodeDWPlugin/trunk/src/infonode/Plugin.java (rev 0) +++ plugins/InfoNodeDWPlugin/trunk/src/infonode/Plugin.java 2008-09-06 11:05:59 UTC (rev 13535) @@ -0,0 +1,14 @@ +package infonode; + +import org.gjt.sp.jedit.EditPlugin; + +public class Plugin extends EditPlugin { + + public static final String NAME = "InfoNodeDWPlugin"; + public void start() + { + } + public void stop() + { + } +} Added: plugins/InfoNodeDWPlugin/trunk/src/infonode/Provider.java =================================================================== --- plugins/InfoNodeDWPlugin/trunk/src/infonode/Provider.java (rev 0) +++ plugins/InfoNodeDWPlugin/trunk/src/infonode/Provider.java 2008-09-06 11:05:59 UTC (rev 13535) @@ -0,0 +1,22 @@ +package infonode; + +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.View.ViewConfig; +import org.gjt.sp.jedit.gui.DockableWindowFactory; +import org.gjt.sp.jedit.gui.DockableWindowManager; +import org.gjt.sp.jedit.gui.DockingFrameworkProvider; +import org.gjt.sp.jedit.gui.DockableWindowManager.DockingLayout; + +public class Provider implements DockingFrameworkProvider { + + public DockableWindowManager create(View view, + DockableWindowFactory instance, ViewConfig config) + { + return new InfoNodeDWWindowManager(view, instance, config); + } + + public DockingLayout createDockingLayout() { + return new InfoNodeDWDockingLayout(); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-10-25 06:42:41
|
Revision: 13923 http://jedit.svn.sourceforge.net/jedit/?rev=13923&view=rev Author: shlomy Date: 2008-10-25 06:42:38 +0000 (Sat, 25 Oct 2008) Log Message: ----------- First version of the Source Navigator plugin. Added Paths: ----------- plugins/SourceNavigator/ plugins/SourceNavigator/trunk/ plugins/SourceNavigator/trunk/.classpath plugins/SourceNavigator/trunk/.project plugins/SourceNavigator/trunk/BerkleyDB.jar plugins/SourceNavigator/trunk/LICENSE.DB.txt plugins/SourceNavigator/trunk/LICENSE.txt plugins/SourceNavigator/trunk/SourceNavigator.props plugins/SourceNavigator/trunk/actions.xml plugins/SourceNavigator/trunk/build.xml plugins/SourceNavigator/trunk/description.html plugins/SourceNavigator/trunk/dockables.xml plugins/SourceNavigator/trunk/src/ plugins/SourceNavigator/trunk/src/sn/ plugins/SourceNavigator/trunk/src/sn/DbAccess.java plugins/SourceNavigator/trunk/src/sn/MainOptionPane.java plugins/SourceNavigator/trunk/src/sn/RefByList.java plugins/SourceNavigator/trunk/src/sn/SourceElement.java plugins/SourceNavigator/trunk/src/sn/SourceNavigatorPlugin.java Added: plugins/SourceNavigator/trunk/.classpath =================================================================== --- plugins/SourceNavigator/trunk/.classpath (rev 0) +++ plugins/SourceNavigator/trunk/.classpath 2008-10-25 06:42:38 UTC (rev 13923) @@ -0,0 +1,8 @@ +<?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 combineaccessrules="false" kind="src" path="/BerkleyDB"/> + <classpathentry kind="output" path="bin"/> +</classpath> Added: plugins/SourceNavigator/trunk/.project =================================================================== --- plugins/SourceNavigator/trunk/.project (rev 0) +++ plugins/SourceNavigator/trunk/.project 2008-10-25 06:42:38 UTC (rev 13923) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>SourceNavigator</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/SourceNavigator/trunk/BerkleyDB.jar =================================================================== (Binary files differ) Property changes on: plugins/SourceNavigator/trunk/BerkleyDB.jar ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/SourceNavigator/trunk/LICENSE.DB.txt =================================================================== --- plugins/SourceNavigator/trunk/LICENSE.DB.txt (rev 0) +++ plugins/SourceNavigator/trunk/LICENSE.DB.txt 2008-10-25 06:42:38 UTC (rev 13923) @@ -0,0 +1,130 @@ +/*- + * $Id: LICENSE,v 12.9 2008/02/07 17:12:17 mark Exp $ + */ + +The following is the license that applies to this copy of the Berkeley DB +software. For a license to use the Berkeley DB software under conditions +other than those described here, or to purchase support for this software, +please contact Oracle at ber...@or.... + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/* + * Copyright (c) 1990,2008 Oracle. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Redistributions in any form must be accompanied by information on + * how to obtain complete source code for the DB software and any + * accompanying software that uses the DB software. The source code + * must either be included in the distribution or be available for no + * more than the cost of distribution plus a nominal fee, and must be + * freely redistributable under reasonable conditions. For an + * executable file, complete source code means the source code for all + * modules it contains. It does not include source code for modules or + * files that typically accompany the major components of the operating + * system on which the executable file runs. + * + * THIS SOFTWARE IS PROVIDED BY ORACLE ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR + * NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * Copyright (c) 1990, 1993, 1994, 1995 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/* + * Copyright (c) 1995, 1996 + * The President and Fellows of Harvard University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/*** + * ASM: a very small and fast Java bytecode manipulation framework + * Copyright (c) 2000-2005 INRIA, France Telecom + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ Added: plugins/SourceNavigator/trunk/LICENSE.txt =================================================================== --- plugins/SourceNavigator/trunk/LICENSE.txt (rev 0) +++ plugins/SourceNavigator/trunk/LICENSE.txt 2008-10-25 06:42:38 UTC (rev 13923) @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. Added: plugins/SourceNavigator/trunk/SourceNavigator.props =================================================================== --- plugins/SourceNavigator/trunk/SourceNavigator.props (rev 0) +++ plugins/SourceNavigator/trunk/SourceNavigator.props 2008-10-25 06:42:38 UTC (rev 13923) @@ -0,0 +1,42 @@ +plugin.sn.SourceNavigatorPlugin.activate=defer + +# general plugin information +plugin.sn.SourceNavigatorPlugin.name=Source Navigator Plugin +plugin.sn.SourceNavigatorPlugin.author=Shlomy Reinstein +plugin.sn.SourceNavigatorPlugin.version=0.1 +plugin.sn.SourceNavigatorPlugin.description=\ + Source Navigator Plugin provides an interface to the GNU tool "Source Navigator". + +plugin.sn.SourceNavigatorPlugin.depend.0=jdk 1.6 +plugin.sn.SourceNavigatorPlugin.depend.1=jedit 04.03.16.00 + +plugin.sn.SourceNavigatorPlugin.docs=index.html + +# action labels +source-navigator-add-file.label=Add tag file... +#ctags-interface-print-tags.label=Print tags +#ctags-interface-print-tags-containing.label=Print tags with substring... + +# menu items +plugin.sn.SourceNavigatorPlugin.menu=source-navigator-ref-by-list \ + source-navigator-ref-by-tree + +# option panes +plugin.sn.SourceNavigatorPlugin.option-pane=source-navigator-options-main +options.source-navigator-options-main.label=Source Navigator +options.source-navigator-options-main.code=new sn.MainOptionPane(); + +# dockables +source-navigator-ref-by-list.title=Referred by list +source-navigator-ref-by-list.label=Referred By +source-navigator-ref-by-tree.title=Referred by tree +source-navigator-ref-by-tree.label=Referred By + +# docs +#plugin.sn.SourceNavigatorPlugin.docs=index.html + +# options +#options.CtagsInterface.ctags=ctags + +# messages +#messages.CtagsInterface.ctags=Ctags executable path: Added: plugins/SourceNavigator/trunk/actions.xml =================================================================== --- plugins/SourceNavigator/trunk/actions.xml (rev 0) +++ plugins/SourceNavigator/trunk/actions.xml 2008-10-25 06:42:38 UTC (rev 13923) @@ -0,0 +1,45 @@ +<?xml version="1.0"?> +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> +<ACTIONS> + <!--ACTION NAME="ctags-interface-add-file" NO_REPEAT="TRUE"> + <CODE> + ctags.CtagsInterfacePlugin.addTagFile(view); + </CODE> + </ACTION> + <ACTION NAME="ctags-interface-print-tags" NO_REPEAT="TRUE"> + <CODE> + ctags.CtagsInterfacePlugin.printTags(); + </CODE> + </ACTION> + <ACTION NAME="ctags-interface-print-tags-containing" NO_REPEAT="TRUE"> + <CODE> + ctags.CtagsInterfacePlugin.printTagsContaining(view); + </CODE> + </ACTION> + <ACTION NAME="ctags-interface-jump-to-tag" NO_REPEAT="TRUE"> + <CODE> + ctags.CtagsInterfacePlugin.jumpToTag(view); + </CODE> + </ACTION> + <ACTION NAME="ctags-interface-search-tag-by-substring" NO_REPEAT="TRUE"> + <CODE> + ctags.CtagsInterfacePlugin.searchTagBySubstring(view); + </CODE> + </ACTION> + <ACTION NAME="ctags-interface-search-tag-by-prefix" NO_REPEAT="TRUE"> + <CODE> + ctags.CtagsInterfacePlugin.searchTagByPrefix(view); + </CODE> + </ACTION> + <ACTION NAME="ctags-interface-tag-all-projects" NO_REPEAT="TRUE"> + <CODE> + ctags.CtagsInterfacePlugin.tagAllProjects(view); + </CODE> + </ACTION> + <ACTION NAME="ctags-interface-complete" NO_REPEAT="TRUE"> + <CODE> + ctags.CtagsInterfacePlugin.complete(view); + </CODE> + </ACTION--> +</ACTIONS> + Added: plugins/SourceNavigator/trunk/build.xml =================================================================== --- plugins/SourceNavigator/trunk/build.xml (rev 0) +++ plugins/SourceNavigator/trunk/build.xml 2008-10-25 06:42:38 UTC (rev 13923) @@ -0,0 +1,53 @@ +<?xml version="1.0"?> +<!-- + This is the build.xml file for building the CtagsInterface plugin. + It is based on the standard build.xml file for jEdit plugins. +--> +<project name="SourceNavigator" default="build" basedir="."> + + <property name="compiler.source" value="1.5" /> + <property name="compiler.target" value="1.5" /> + <property file="build.properties"/> + <property file="../build.properties"/> + <property file="${user.home}/.build.properties"/> + <property file="${user.home}/build.properties"/> + + <property file="build.support" value="../build-support" /> + <import file="${build.support}/plugin-build.xml" /> + + <selector id="packageFiles"> + <or> + <filename name="icons/*.png" /> + <filename name="*.txt" /> + </or> + </selector> + + <property name="jar.name" value="${ant.project.name}.jar"/> + <property name="docs-proc.target" value="xsltproc"/> + + <property name="src.dir" location="${basedir}/src"/> + <property name="build.dir" value="build"/> + + <path id="project.class.path"> + <pathelement location="${jedit.install.dir}/jedit.jar"/> + <pathelement location="${install.dir}/BerkleyDB.jar"/> + </path> + + <target name="build.prepare" > + <mkdir dir="${build.dir}" /> + <copy file="BerkleyDB.jar" todir="${install.dir}" /> + </target> + + <target name="tags"> + <exec executable="ctags"> + <arg value="-f" /> + <arg path="tags_" /> + <arg value="-R" /> + <arg path="." /> + </exec> + </target> + + +</project> + +<!-- :indentSize=4:lineSeparator=\n:noTabs=false:tabSize=4: --> Added: plugins/SourceNavigator/trunk/description.html =================================================================== --- plugins/SourceNavigator/trunk/description.html (rev 0) +++ plugins/SourceNavigator/trunk/description.html 2008-10-25 06:42:38 UTC (rev 13923) @@ -0,0 +1,6 @@ +<p> +SourceNavigatorPlugin provides an interface to the amazing GNU tool "Source Navigator". +The plugin takes care of updating the Source Navigator database when needed and +providing a user interface within jEdit for the information in that database. +</p> + Added: plugins/SourceNavigator/trunk/dockables.xml =================================================================== --- plugins/SourceNavigator/trunk/dockables.xml (rev 0) +++ plugins/SourceNavigator/trunk/dockables.xml 2008-10-25 06:42:38 UTC (rev 13923) @@ -0,0 +1,15 @@ +<?xml version="1.0"?> +<!-- $Id: dockables.xml 10867 2007-10-10 13:01:00Z shlomy $ --> + +<!DOCTYPE DOCKABLES SYSTEM "dockables.dtd"> + +<DOCKABLES> + <DOCKABLE NAME="source-navigator-ref-by-list" MOVABLE="TRUE"> + new sn.RefByList(view); + </DOCKABLE> + <DOCKABLE NAME="source-navigator-ref-by-tree" MOVABLE="TRUE"> + new sn.RefByTree(view); + </DOCKABLE> +</DOCKABLES> + +<!-- :noTabs=false:lineSeparator=\r\n:tabSize=4:folding=none: --> Added: plugins/SourceNavigator/trunk/src/sn/DbAccess.java =================================================================== --- plugins/SourceNavigator/trunk/src/sn/DbAccess.java (rev 0) +++ plugins/SourceNavigator/trunk/src/sn/DbAccess.java 2008-10-25 06:42:38 UTC (rev 13923) @@ -0,0 +1,70 @@ +package sn; + +import java.io.FileNotFoundException; + +import javax.swing.JOptionPane; + +import org.gjt.sp.jedit.jEdit; + +import com.sleepycat.db.Cursor; +import com.sleepycat.db.Database; +import com.sleepycat.db.DatabaseConfig; +import com.sleepycat.db.DatabaseEntry; +import com.sleepycat.db.DatabaseException; +import com.sleepycat.db.DatabaseType; +import com.sleepycat.db.OperationStatus; + +public class DbAccess { + + private String dir; + private String proj; + private String db; + + // C-tor that uses the default database path + public DbAccess(String db) { + this(SourceNavigatorPlugin.getOption(MainOptionPane.DEFAULT_DIR), + SourceNavigatorPlugin.getOption(MainOptionPane.DEFAULT_PROJ), db); + } + public DbAccess(String dir, String proj, String db) { + this.dir = dir; + this.proj = proj; + this.db = db; + } + public String getDir() { + return dir; + } + public interface RecordHandler { + // Returns true to continue record iteration, false to abort it + boolean handle(DatabaseEntry key, DatabaseEntry data); + } + public void lookup(DatabaseEntry key, DatabaseEntry data, RecordHandler handler) + { + if (dir == null || proj == null || dir.length() == 0 || proj.length() == 0) { + JOptionPane.showMessageDialog(jEdit.getActiveView(), + "Database properties not configured - please configure them first " + + "using the plugin option pane."); + return; + } + String dbPath = dir + "/SNDB4/" + proj + "." + db; + Database db; + try { + DatabaseConfig dbConfig = new DatabaseConfig(); + dbConfig.setAllowCreate(false); + dbConfig.setType(DatabaseType.BTREE); + db = new Database(dbPath, null, dbConfig); + Cursor crs = db.openCursor(null, null); + OperationStatus stat = crs.getSearchKeyRange(key, data, null); + while (stat.equals(OperationStatus.SUCCESS)) + { + if (! handler.handle(key, data)) + break; + stat = crs.getNext(key, data, null); + } + db.close(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } catch (DatabaseException e1) { + e1.printStackTrace(); + } + } +} Added: plugins/SourceNavigator/trunk/src/sn/MainOptionPane.java =================================================================== --- plugins/SourceNavigator/trunk/src/sn/MainOptionPane.java (rev 0) +++ plugins/SourceNavigator/trunk/src/sn/MainOptionPane.java 2008-10-25 06:42:38 UTC (rev 13923) @@ -0,0 +1,27 @@ +package sn; + +import javax.swing.JTextField; + +import org.gjt.sp.jedit.AbstractOptionPane; + +@SuppressWarnings("serial") +public class MainOptionPane extends AbstractOptionPane { + + public static final String DEFAULT_PROJ = "defaultProj"; + public static final String DEFAULT_DIR = "defaultDir"; + private JTextField defaultDir; + private JTextField defaultProj; + + public MainOptionPane() { + super("source-navigator-options-main"); + defaultDir = new JTextField(SourceNavigatorPlugin.getOption(DEFAULT_DIR), 40); + addComponent("Default directory:", defaultDir); + defaultProj = new JTextField(SourceNavigatorPlugin.getOption(DEFAULT_PROJ), 40); + addComponent("Default project:", defaultProj); + } + @Override + public void _save() { + SourceNavigatorPlugin.setOption(DEFAULT_DIR, defaultDir.getText()); + SourceNavigatorPlugin.setOption(DEFAULT_PROJ, defaultProj.getText()); + } +} Added: plugins/SourceNavigator/trunk/src/sn/RefByList.java =================================================================== --- plugins/SourceNavigator/trunk/src/sn/RefByList.java (rev 0) +++ plugins/SourceNavigator/trunk/src/sn/RefByList.java 2008-10-25 06:42:38 UTC (rev 13923) @@ -0,0 +1,136 @@ +package sn; + +import java.awt.BorderLayout; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; + +import javax.swing.DefaultListModel; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextField; +import javax.swing.ListSelectionModel; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; + +import org.gjt.sp.jedit.View; + +import sn.DbAccess.RecordHandler; + +import com.sleepycat.db.DatabaseEntry; + +@SuppressWarnings("serial") +public class RefByList extends JPanel { + + private View view; + private JTextField text; + private JList list; + private DefaultListModel model; + + public RefByList(View view) { + super(new BorderLayout()); + this.view = view; + model = new DefaultListModel(); + list = new JList(model); + list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + list.addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + if (e.getValueIsAdjusting() == false) { + SourceElement refBy = (SourceElement) list.getSelectedValue(); + if (refBy != null) + refBy.jumpTo(RefByList.this.view); + } + } + }); + add(new JScrollPane(list), BorderLayout.CENTER); + JPanel p = new JPanel(new BorderLayout()); + JLabel l = new JLabel("Find:"); + p.add(l, BorderLayout.WEST); + text = new JTextField(40); + text.addKeyListener(new KeyAdapter() { + @Override + public void keyReleased(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_ENTER) + find(text.getText()); + else + super.keyReleased(e); + } + }); + p.add(text, BorderLayout.CENTER); + add(p, BorderLayout.NORTH); + } + + private DatabaseEntry identifierToKey(String identifier) { + int index = identifier.lastIndexOf("::"); + byte[] bytes; + if (index >= 0) { + String namespace = identifier.substring(0, index); + String name = identifier.substring(index + 2); + bytes = new byte[index + 1 + name.length() + 1]; + for (int i = 0; i < namespace.length(); i++) + bytes[i] = (byte) namespace.charAt(i); + bytes[index] = 1; + for (int i = 0; i < name.length(); i++) + bytes[index + 1 + i] = (byte) name.charAt(i); + } else { + bytes = new byte[3 + identifier.length()]; + bytes[0] = '#'; + bytes[1] = 1; + for (int i = 0; i < identifier.length(); i++) + bytes[2 + i] = (byte) identifier.charAt(i); + } + bytes[bytes.length - 1] = 1; + return new DatabaseEntry(bytes); + } + + private class RefByRecordHandler implements RecordHandler { + private String dir; + private String identifier; + public RefByRecordHandler(String dir, String identifier) { + this.dir = dir; + this.identifier = identifier; + } + @Override + public boolean handle(DatabaseEntry key, DatabaseEntry data) { + String [] strings = keyToStrings(key); + if (! getIdentifier(strings).equals(identifier)) + return false; + model.addElement(recordToSourceElement(strings, dir)); + return true; + } + private String [] keyToStrings(DatabaseEntry key) { + byte [] bytes = key.getData(); + String [] strings = new String[9]; + int start = 0; + int index = 0; + for (int i = 0; i < bytes.length && index < 9; i++) { + if (bytes[i] <= 1) { + strings[index++] = new String(bytes, start, i - start); + start = i + 1; + } + } + if (index < 9) + strings[index] = new String(bytes, start, bytes.length - start - 1); + return strings; + } + private String getIdentifier(String [] strings) { + if (strings[0].equals("#")) + return strings[1]; + return strings[0] + "::" + strings[1]; + } + private SourceElement recordToSourceElement(String [] strings, String dir) { + return new SourceElement(strings[3], strings[4], strings[5], strings[8], + Integer.valueOf(strings[7]), dir); + } + + } + private void find(String identifier) { + model.clear(); + DbAccess db = new DbAccess("by"); + DatabaseEntry key = identifierToKey(identifier); + DatabaseEntry data = new DatabaseEntry(); + db.lookup(key, data, new RefByRecordHandler(db.getDir(), identifier)); + } +} Added: plugins/SourceNavigator/trunk/src/sn/SourceElement.java =================================================================== --- plugins/SourceNavigator/trunk/src/sn/SourceElement.java (rev 0) +++ plugins/SourceNavigator/trunk/src/sn/SourceElement.java 2008-10-25 06:42:38 UTC (rev 13923) @@ -0,0 +1,40 @@ +package sn; + +import org.gjt.sp.jedit.MiscUtilities; +import org.gjt.sp.jedit.View; + +public class SourceElement { + public String namespace; + public String name; + public String kind; + public String file; + public int line; + public String dir; + + public SourceElement(String namespace, String name, String kind, + String file, int line, String dir) + { + this.namespace = namespace; + this.name = name; + this.kind = kind; + this.file = file; + this.line = line; + this.dir = dir; + } + public String toString() { + StringBuffer sb = new StringBuffer(); + if (namespace != null && namespace.length() > 0) + sb.append(namespace + "::"); + sb.append(name); + sb.append(" [" + kind + "] (" + file + ":" + line + ")"); + return sb.toString(); + } + public void jumpTo(View view) { + String path; + if (! MiscUtilities.isAbsolutePath(file)) + path = dir + "/" + file; + else + path = file; + SourceNavigatorPlugin.jumpTo(view, path, line); + } +} Added: plugins/SourceNavigator/trunk/src/sn/SourceNavigatorPlugin.java =================================================================== --- plugins/SourceNavigator/trunk/src/sn/SourceNavigatorPlugin.java (rev 0) +++ plugins/SourceNavigator/trunk/src/sn/SourceNavigatorPlugin.java 2008-10-25 06:42:38 UTC (rev 13923) @@ -0,0 +1,45 @@ +package sn; + +import org.gjt.sp.jedit.Buffer; +import org.gjt.sp.jedit.EditPlugin; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.io.VFSManager; + +public class SourceNavigatorPlugin extends EditPlugin { + + static public String OPTION_PREFIX = "option.source-navigator."; + + public void start() + { + } + + public void stop() + { + } + + static public String getOption(String name) { + return jEdit.getProperty(OPTION_PREFIX + name); + } + static public void setOption(String name, String value) { + jEdit.setProperty(OPTION_PREFIX + name, value); + } + static public void jumpTo(final View view, String file, final int line) { + Buffer buffer = jEdit.openFile(view, file); + if (buffer == null) { + System.err.println("Unable to open: " + file); + return; + } + VFSManager.runInAWTThread(new Runnable() { + public void run() { + try { + view.getTextArea().setCaretPosition( + view.getTextArea().getLineStartOffset(line - 1)); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lan...@us...> - 2008-11-16 11:28:15
|
Revision: 14048 http://jedit.svn.sourceforge.net/jedit/?rev=14048&view=rev Author: lanciaux Date: 2008-11-16 11:28:10 +0000 (Sun, 16 Nov 2008) Log Message: ----------- copying Added Paths: ----------- plugins/CookViewer.props plugins/actions.xml plugins/build/ plugins/build/CookViewer$1.class plugins/build/CookViewer.class plugins/build/CookViewerPlugin.class plugins/build.properties plugins/build.xml plugins/docbook-wrapper.xsl plugins/dockables.xml plugins/lib/ plugins/lib/cookbsh-1.2.jar plugins/lib/cookformlayout-1.0.jar plugins/lib/cookswing-1.4.jar plugins/lib/cookxml-2.5.jar plugins/lib/forms-1.0.7.jar plugins/src/ plugins/src/CookViewer.java plugins/src/CookViewerPlugin.java plugins/users-guide.xml plugins/users-guide.xsl Added: plugins/CookViewer.props =================================================================== --- plugins/CookViewer.props (rev 0) +++ plugins/CookViewer.props 2008-11-16 11:28:10 UTC (rev 14048) @@ -0,0 +1,30 @@ +# Properties file for CookViewer plugin + +# application activator (4.2) +plugin.CookViewerPlugin.activate=defer + +# general plugin information +plugin.CookViewerPlugin.name=CookViewer +plugin.CookViewerPlugin.author=Ludovic ANCIAUX +plugin.CookViewerPlugin.version=1.0.1 +plugin.CookViewerPlugin.docs=index.html +plugin.CookViewerPlugin.depend.0=jedit 04.02.09.00 +plugin.CookViewerPlugin.depend.1=jdk 1.4 +#plugin.CookViewerPlugin.jars=cookswing.jar + +# application menu items (4.2) +plugin.CookViewerPlugin.menu=cookviewer.toggle + +# action labels for actions.xml +cookviewer.toggle.label=CookViewer Panel + +# action labels for dockables.xml +cookviewer.label=CookViewer + +# window title +cookviewer.title=CookViewer + +# plugin toolbar buttons +cookviewer.render.icon=Parse.png + +# :folding=explicit:tabSize=2:indentSize=2: Property changes on: plugins/CookViewer.props ___________________________________________________________________ Added: svn:executable + Added: plugins/actions.xml =================================================================== --- plugins/actions.xml (rev 0) +++ plugins/actions.xml 2008-11-16 11:28:10 UTC (rev 14048) @@ -0,0 +1,23 @@ +<?xml version="1.0"?> + +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> + +<ACTIONS> + + <ACTION NAME="cookviewer.toggle"> + <CODE> + view.getDockableWindowManager().addDockableWindow(CookViewerPlugin.NAME); + view.getDockableWindowManager().getDockable(CookViewerPlugin.NAME); + </CODE> + </ACTION> + + <ACTION NAME="cookviewer.render"> + <CODE> + view.getDockableWindowManager().addDockableWindow(CookViewerPlugin.NAME); + view.getDockableWindowManager().getDockable(CookViewerPlugin.NAME).renderContent(); + </CODE> + </ACTION> + +</ACTIONS> + +<!-- :folding=explicit:tabSize=2:indentSize=2: --> \ No newline at end of file Property changes on: plugins/actions.xml ___________________________________________________________________ Added: svn:executable + Added: plugins/build/CookViewer$1.class =================================================================== (Binary files differ) Property changes on: plugins/build/CookViewer$1.class ___________________________________________________________________ Added: svn:executable + Added: svn:mime-type + application/octet-stream Added: plugins/build/CookViewer.class =================================================================== (Binary files differ) Property changes on: plugins/build/CookViewer.class ___________________________________________________________________ Added: svn:executable + Added: svn:mime-type + application/octet-stream Added: plugins/build/CookViewerPlugin.class =================================================================== (Binary files differ) Property changes on: plugins/build/CookViewerPlugin.class ___________________________________________________________________ Added: svn:executable + Added: svn:mime-type + application/octet-stream Added: plugins/build.properties =================================================================== --- plugins/build.properties (rev 0) +++ plugins/build.properties 2008-11-16 11:28:10 UTC (rev 14048) @@ -0,0 +1,12 @@ +### +### Build property file for GfxView plugin +### + +### Uncomment these two lines if you want to use jikes +#build.compiler=jikes +#build.compiler.emacs=true + +### If you want to build the user's guide and FAQ, set this property to +### the path of the DocBook-XSL stylesheets +#docbook.xsl=d:/xmlapps/docbook-xsl +docbook.xsl=/usr/share/xml/docbook Property changes on: plugins/build.properties ___________________________________________________________________ Added: svn:executable + Added: plugins/build.xml =================================================================== --- plugins/build.xml (rev 0) +++ plugins/build.xml 2008-11-16 11:28:10 UTC (rev 14048) @@ -0,0 +1,120 @@ +<?xml version="1.0"?> + +<!-- + This is a build.xml file for building the CookViewer plugin. + + The 'dist' target compiles the plugin and creates the JAR file. + Before running the 'dist' target, you will need to generate the + documentation using one of these two targets: + + - 'docs-xalan': Creates documentation using the Xalan XSLT processor + - 'docs-xsltproc': Creates documentation using the xsltproc tool + + To use it for building your own plugin, make these changes: + + - Change definition of 'jar.name' to the name of your plugin's JAR file + - If necessary, add any dependencies to the 'project.class.path' + definition + - If necessary, change the list of files in the 'dist' targtet + - If necessary, change the 'docs-xalan' and 'docs-xsltproc' targets + accordingly. +--> + +<project name="CookViewer" default="dist" basedir="."> + + <property file="build.properties"/> + + <property name="jar.name" value="cookviewer.jar"/> + + <property name="src.dir" value="src"/> + <property name="build.dir" value="build"/> + <property name="install.dir" value="dist"/> + + <property name="jedit.install.dir" value="/home/lanciaux/.jedit/jars"/> + + <path id="project.class.path"> + <pathelement location="lib/cookxml-2.5.jar"/> + <pathelement location="lib/cookswing-1.4.jar"/> + <pathelement location="lib/cookbsh-1.2.jar"/> + <pathelement location="lib/cookformlayout-1.0.jar"/> + </path> + + + + <target name="init"> + <mkdir dir="${build.dir}"/> + <delete file="docbook-wrapper.xsl" /> + <echo file="docbook-wrapper.xsl" + message="<xsl:stylesheet"/> + <echo file="docbook-wrapper.xsl" append="true" + message=" xmlns:xsl='http://www.w3.org/1999/XSL/Transform'"/> + <echo file="docbook-wrapper.xsl" append="true" + message=" version='1.0'>"/> + <echo file="docbook-wrapper.xsl" append="true" + message="<xsl:import href='${docbook.xsl}/html/chunk.xsl'/>"/> <!-- docbook.xsl --> + <echo file="docbook-wrapper.xsl" append="true" + message="</xsl:stylesheet>"/> + </target> + + + <target name="compile" depends="init"> + <javac + srcdir="${src.dir}" + destdir="${build.dir}" + deprecation="on" + includeJavaRuntime="yes" + source="1.3" + target="1.3"> + <classpath refid="project.class.path"/> + </javac> + </target> + + + <target name="dist" depends="compile"> + <mkdir dir="${install.dir}"/> + <jar jarfile="${install.dir}/${jar.name}"> + <fileset dir="${build.dir}"/> + <fileset dir="."> + <include name="actions.xml"/> + <include name="browser.actions.xml"/> + <include name="dockables.xml"/> + <include name="*.props"/> + <include name="**/*.html"/> + <include name="**/*.txt"/> + </fileset> + </jar> + </target> + + <!-- Generate docs with xsltproc tool from www.xmlsoft.org --> + <target name="docs-xsltproc" depends="init"> + <exec executable="xsltproc"> + <arg value="--catalogs"/> + <arg value="users-guide.xsl"/> + <arg value="users-guide.xml"/> + </exec> + </target> + + <!-- Generate docs with Xalan tool from xml.apache.org --> + <target name="docs-xalan" depends="init"> + <style + style="users-guide.xsl" + in="users-guide.xml"/> + </target> + + <target name="clean"> + <delete dir="${build.dir}"/> + <delete> + <fileset dir="." includes="**/*~" defaultexcludes="no"/> + <fileset dir="." includes="**/*.html" defaultexcludes="no"/> + </delete> + </target> + + <!-- Generate tags using 'ctags' program from ctags.sourceforge.net --> + <target name="tags"> + <exec executable="ctags"> + <arg value="-R" /> + <arg path="." /> + </exec> + </target> + +</project> Property changes on: plugins/build.xml ___________________________________________________________________ Added: svn:executable + Added: plugins/docbook-wrapper.xsl =================================================================== --- plugins/docbook-wrapper.xsl (rev 0) +++ plugins/docbook-wrapper.xsl 2008-11-16 11:28:10 UTC (rev 14048) @@ -0,0 +1 @@ +<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'><xsl:import href='/usr/share/xml/docbook/html/chunk.xsl'/></xsl:stylesheet> \ No newline at end of file Property changes on: plugins/docbook-wrapper.xsl ___________________________________________________________________ Added: svn:executable + Added: plugins/dockables.xml =================================================================== --- plugins/dockables.xml (rev 0) +++ plugins/dockables.xml 2008-11-16 11:28:10 UTC (rev 14048) @@ -0,0 +1,15 @@ +<?xml version="1.0"?> + +<!-- Dockable component definition file for CookViewer plugin --> + +<!DOCTYPE DOCKABLES SYSTEM "dockables.dtd"> + +<!-- CookViewer dockable windows --> + +<DOCKABLES> + <DOCKABLE NAME="cookviewer"> + new CookViewer(view, position); + </DOCKABLE> +</DOCKABLES> + +<!-- :folding=explicit:tabSize=2:indentSize=2: --> Property changes on: plugins/dockables.xml ___________________________________________________________________ Added: svn:executable + Added: plugins/lib/cookbsh-1.2.jar =================================================================== (Binary files differ) Property changes on: plugins/lib/cookbsh-1.2.jar ___________________________________________________________________ Added: svn:executable + Added: svn:mime-type + application/octet-stream Added: plugins/lib/cookformlayout-1.0.jar =================================================================== (Binary files differ) Property changes on: plugins/lib/cookformlayout-1.0.jar ___________________________________________________________________ Added: svn:executable + Added: svn:mime-type + application/octet-stream Added: plugins/lib/cookswing-1.4.jar =================================================================== (Binary files differ) Property changes on: plugins/lib/cookswing-1.4.jar ___________________________________________________________________ Added: svn:executable + Added: svn:mime-type + application/octet-stream Added: plugins/lib/cookxml-2.5.jar =================================================================== (Binary files differ) Property changes on: plugins/lib/cookxml-2.5.jar ___________________________________________________________________ Added: svn:executable + Added: svn:mime-type + application/octet-stream Added: plugins/lib/forms-1.0.7.jar =================================================================== (Binary files differ) Property changes on: plugins/lib/forms-1.0.7.jar ___________________________________________________________________ Added: svn:executable + Added: svn:mime-type + application/octet-stream Added: plugins/src/CookViewer.java =================================================================== --- plugins/src/CookViewer.java (rev 0) +++ plugins/src/CookViewer.java 2008-11-16 11:28:10 UTC (rev 14048) @@ -0,0 +1,145 @@ +import java.beans.*; +import java.awt.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import javax.swing.*; +import javax.swing.event.*; +import javax.swing.border.*; +import org.gjt.sp.jedit.*; +import org.gjt.sp.jedit.gui.*; +import org.gjt.sp.jedit.io.*; +import org.gjt.sp.jedit.msg.*; +import org.gjt.sp.jedit.textarea.*; +import org.gjt.sp.util.*; +import cookxml.core.TagLibrary; +import cookxml.core.creator.DefaultCreator; +import cookxml.cookswing.CookSwing; +import cookxml.cookformlayout.CookFormLayout; +import cookxml.cookbsh.CookBSH; + +public class CookViewer extends JPanel implements EBComponent { + private View view; + private CookSwing cookSwing; + private Container renderContainer; + private JPanel renderPanel; + private JScrollPane scrollPane; + private JToolBar toolBar; + + //{{{ +CookViewer(View view, String position) [constructor] + public CookViewer(View view, String position) { + super(new BorderLayout()); + this.view = view; + + try { + // Extra library for BSH inner scripts + CookBSH.setupTagLibrary(CookSwing.getSwingTagLibrary()); + } catch (NoClassDefFoundError ee) { + Log.log(Log.WARNING,this,"Extension CookBsh.jar not in classpath"); + } + + try { + // Extra library for CookFormLayout easy rendering + CookFormLayout.setupTagLibrary(CookSwing.getSwingTagLibrary()); + } catch (NoClassDefFoundError ee) { + Log.log(Log.WARNING,this,"Extension CookFormLayout and/or JGoodies not in classpath"); + } + + try { + add(toolbarPanel(),BorderLayout.NORTH); + renderPanel = new JPanel(); + scrollPane = new JScrollPane(renderPanel); + add(scrollPane,BorderLayout.CENTER); + + + cookSwing = new CookSwing(); + // --------------------------------------------------------------------------- + // Experimental (2008-11-10) + // But : remplacer dialog/frame par un composant h\xE9ritable dans un Jpanel + // parce que jEdit ne supporte qu'un seul Dialog/Frame (lui-m\xEAme) +// cookxml.core.TagLibrary library = CookSwing.getSwingTagLibrary(); +// library.setCreator("dialog",DefaultCreator.getCreator (JInternalFrame.class)); +// library.setCreator("frame", DefaultCreator.getCreator (JInternalFrame.class)); + // Pas terrible, il faudrait substituer une autre classe dialog/frame qui ressemble \xE0 + // un JPanel et qui laisse tomber les \xE9l\xE9ments de "dialog"/"frame" + // car comme il ne les comprend pas Cookswing rend un container vide + // --------------------------------------------------------------------------- + + } catch (NoClassDefFoundError ee) { + ((JButton) toolBar.getComponentAtIndex(0)).setEnabled(false); + JOptionPane.showMessageDialog(view, + "CookXML.jar and/or CookSwing.jar", "Missing libraries", + JOptionPane.INFORMATION_MESSAGE); + } + } + //}}} + + //{{{ +renderContent() : void + public void renderContent() { +// Log.log(Log.DEBUG,this,"[cookxml] : "+view.getBuffer().getPath()); + try { + if (renderContainer != null) { + renderPanel.remove(renderContainer); + } + renderContainer = cookSwing.render(view.getBuffer().getPath()); + + if (renderContainer instanceof JFrame || renderContainer instanceof JDialog) { + JOptionPane.showMessageDialog(view, + "JFrame/JDialog not allowed", "jEdit CookViewer implementation limitation", + JOptionPane.INFORMATION_MESSAGE); + } + else { + renderPanel.add(renderContainer); + renderPanel.validate(); + renderPanel.repaint(); + } + } catch (Exception ee) { + JOptionPane.showMessageDialog(view, + "Buffer can not be parsed : incorrect content ?", "Parsing error", + JOptionPane.INFORMATION_MESSAGE); + } + } + //}}} + + //{{{ -JToolBar toolbarPanel() : JToolBar + private JToolBar toolbarPanel() { + toolBar = new JToolBar(); + toolBar.setFloatable(false); + toolBar.putClientProperty("JToolBar.isRollover",Boolean.TRUE); + toolBar.add(makeCustomButton("cookviewer.render", new ActionListener() { + public void actionPerformed(ActionEvent evt) { + renderContent(); + } + } )); + + return toolBar; + } + //}}} + + //{{{ +handleMessage(EBMessage) : void + public void handleMessage(EBMessage message) { + } //}}} + + //{{{ -makeCustomButton(String, ActionListener) : AbstractButton + private AbstractButton makeCustomButton(String name,ActionListener listener) { + + String toolTip = jEdit.getProperty(name.concat(".label")); + AbstractButton b = new JButton(GUIUtilities.loadIcon (jEdit.getProperty(name + ".icon"))); + + if (listener != null) { + b.addActionListener(listener); + b.setEnabled(true); + } + else { + b.setEnabled(false); + } + + b.setToolTipText(toolTip); + b.setMargin(new Insets(0,0,0,0)); + b.setAlignmentY(0.0f); + b.setRequestFocusEnabled(false); + return b; + } //}}} +} + +/* :folding=explicit:tabSize=4:indentSize=4: */ Property changes on: plugins/src/CookViewer.java ___________________________________________________________________ Added: svn:executable + Added: plugins/src/CookViewerPlugin.java =================================================================== --- plugins/src/CookViewerPlugin.java (rev 0) +++ plugins/src/CookViewerPlugin.java 2008-11-16 11:28:10 UTC (rev 14048) @@ -0,0 +1,8 @@ +import java.util.*; +import org.gjt.sp.jedit.EditPlugin; + +public class CookViewerPlugin extends EditPlugin { + public static final String NAME = "cookviewer"; +} + +/* :folding=explicit:tabSize=2:indentSize=2: */ \ No newline at end of file Property changes on: plugins/src/CookViewerPlugin.java ___________________________________________________________________ Added: svn:executable + Added: plugins/users-guide.xml =================================================================== --- plugins/users-guide.xml (rev 0) +++ plugins/users-guide.xml 2008-11-16 11:28:10 UTC (rev 14048) @@ -0,0 +1,145 @@ +<?xml version="1.0"?> + +<!-- CookViewer user's guide --> +<!-- (C) 2006 Ludovic ANCIAUX --> + +<!-- jEdit buffer-local properties: --> +<!-- :tabSize=1:indentSize=1:noTabs=true:folding=sidekick: --> + +<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + +<book> + + <bookinfo><title>CookViewer plugin user's guide</title> + <author> + <firstname>Ludovic</firstname> + <surname>Anciaux</surname> + <email>Lud...@ad...</email> + <address> + <city>Jurbise</city> + <country>Belgium</country> + </address> + </author> + + <copyright> + <year>2006, 2008</year> + <holder>Ludovic ANCIAUX</holder> + </copyright> + + <legalnotice><title>Legal Notice</title> + <para> + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.1 or + any later version published by the Free Software Foundation; with no + <quote>Invariant Sections</quote>, <quote>Front-Cover Texts</quote> or + <quote>Back-Cover Texts</quote>, each as defined in the license. A copy of + the license can be found in the file <filename>COPYING.DOC.txt</filename> + included with jEdit. + </para> + + <para> + <ulink url="http://cookxml.sourceforge.net">CookXML library</ulink> by <quote>Heng Yuan</quote> is used for rendering. + </para> + + <para> + <ulink url="http://cookxml.sourceforge.net/cookswing/">CookSwing extension library</ulink> by <quote>Heng Yuan</quote> is used for rendering. + </para> + + <para> + <ulink url="http://cookxml.sourceforge.net/cookbsh/">CookBsh extension library</ulink> by <quote>Heng Yuan</quote> is used for rendering itself based on + <ulink url="http://www.beanshell.org">BeanShell</ulink> by <quote>Patrick Niemeyer</quote>. + </para> + + <para> + <ulink url="http://cookxml.sourceforge.net/cookswing/cookformlayout/">CookFormLayout extension library</ulink> by <quote>Heng Yuan</quote> is used for rendering itself based on + <ulink url="http://www.jgoodies.com/freeware/forms/index.html">JGoodies Forms</ulink> by <quote>Karsten Lentzsch</quote>. + </para> + + </legalnotice> + </bookinfo> + + <chapter id="intro"><title>Introduction</title> + + <para> + The <application>CookViewer</application> plugin allows users to render a + CookSwing XML description in a jEdit dockable. This XML definition can have + <ulink url="http://www.beanshell.org/">Beanshell</ulink> mixed inside + as well as following <ulink url="http://www.jgoodies.com/freeware/forms/index.html">JGoodies Forms</ulink> layout. + </para> + + <para> + It is mainly a development tool for CookXML users thanks to jEdit XML and SideKick plugins which greatly improve GUI building. + </para> + + </chapter> + + <chapter id="commands"><title>Commands</title> + + <para>A simple panel toggling entry is in plugin menu.</para> + + </chapter> + + <chapter id="display"><title>The CookViewer panel</title> + + <para> + There is a simple dockable panel where XML buffer is rendered. + </para> + + <para> + A rendering button is shown at top left of render panel. + </para> + + </chapter> + + <chapter id="limitations"><title>Limitations</title> + <itemizedlist> + <listitem><para>It only parse valid CookSwing Tags</para></listitem> + + <listitem><para>It doesn't parse frame/dialog Tag</para></listitem> + + <listitem> + <para>CookXML, CookSwing have to be in ClassPath or in jEdit jars directory</para> + <itemizedlist> + <listitem> + <para>CookBSH is supported but has to be in ClassPath or in jEdit jars directory as well Beanshell 2.04+ which is part of jEdit 4.3pre6.</para> + <itemizedlist> + <listitem> + <para>if you are using jEdit prior to 4.3pre6, you can also drop a copy of beanshell-2.04.jar in jEdit jars directory</para> + </listitem> + </itemizedlist> + + </listitem> + <listitem> + <para>CookFormLayout is supported but has to be in ClassPath or in jEdit jars directory as well JForms 1.07+ library</para> + </listitem> + + </itemizedlist> + </listitem> + </itemizedlist> + </chapter> + + <chapter id="todo"><title>To do</title> + <itemizedlist> + <listitem><para>Implement a more elegant way of handling CookBSH and CookFormLayout</para></listitem> + <listitem><para>Implement a way of downloading latest CookXML and subprojects in jars plugin directory</para></listitem> + <listitem><para>Implement a way to use <quote>frame / dialog</quote> tags </para></listitem> + <listitem><para>Implement a basic drag'n'drop gui builder</para></listitem> + <listitem><para>Fix bugs</para></listitem> + </itemizedlist> + </chapter> + + <appendix id="changes"><title>Change log</title> + <itemizedlist> + <listitem><para><emphasis role="bold">Version 1.0.1 (november 2008)</emphasis> + requires jEdit 4.2pre9 (tested on jEdit 4.3pre15)</para> + <para>First try to implement a nicer way to handle Frame or Dialog objects ...I've been unlucky</para> + <para>Code cleanup and fixing repaint bug when changing buffer</para> + </listitem> + <listitem><para><emphasis role="bold">Version 1.0 (2006)</emphasis> + requires jEdit 4.2pre9 (tested on jEdit 4.3pre5)</para> + </listitem> + </itemizedlist> + </appendix> + +</book> Property changes on: plugins/users-guide.xml ___________________________________________________________________ Added: svn:executable + Added: plugins/users-guide.xsl =================================================================== --- plugins/users-guide.xsl (rev 0) +++ plugins/users-guide.xsl 2008-11-16 11:28:10 UTC (rev 14048) @@ -0,0 +1,61 @@ +<?xml version='1.0'?> + +<!-- You should use this XSL stylesheet to create plugin documentation. + + If you want all output in a single HTML file, specify the path to + your DocBook-XSL "html/docbook.xsl" file in the <xsl:import> + statement below. If you want each chapter to have its own file, + specify the path to your "html/xtchunk.xsl". +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns="http://www.w3.org/TR/xhtml1/transitional" + exclude-result-prefixes="#default"> + +<xsl:import href="docbook-wrapper.xsl"/> + +<!-- Swing HTML control doesn't support “ and ” --> +<xsl:template match="quote">"<xsl:apply-templates/>"</xsl:template> + +<xsl:template match="guibutton"> + <xsl:call-template name="inline.boldseq"/> +</xsl:template> + +<xsl:template match="guiicon"> + <xsl:call-template name="inline.boldseq"/> +</xsl:template> + +<xsl:template match="guilabel"> + <xsl:call-template name="inline.boldseq"/> +</xsl:template> + +<xsl:template match="guimenu"> + <xsl:call-template name="inline.boldseq"/> +</xsl:template> + +<xsl:template match="guimenuitem"> + <xsl:call-template name="inline.boldseq"/> +</xsl:template> + +<xsl:template match="guisubmenu"> + <xsl:call-template name="inline.boldseq"/> +</xsl:template> + +<xsl:variable name="toc.list.type">ul</xsl:variable> + +<xsl:variable name="shade.verbatim">1</xsl:variable> + +<xsl:variable name="funcsynopsis.style">ansi</xsl:variable> +<xsl:template match="void"><xsl:apply-templates/></xsl:template> + +<xsl:param name="chunk.first.sections">1</xsl:param> + +<xsl:template match="*" mode="object.title.markup.textonly"> + <xsl:variable name="title"> + <xsl:apply-templates select="." mode="title.markup"/> + </xsl:variable> + <xsl:value-of select="$title"/> +</xsl:template> + +</xsl:stylesheet> Property changes on: plugins/users-guide.xsl ___________________________________________________________________ Added: svn:executable + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lan...@us...> - 2008-11-16 12:22:01
|
Revision: 14051 http://jedit.svn.sourceforge.net/jedit/?rev=14051&view=rev Author: lanciaux Date: 2008-11-16 11:30:22 +0000 (Sun, 16 Nov 2008) Log Message: ----------- no comment Removed Paths: ------------- plugins/CookViewer.props plugins/actions.xml plugins/build.properties plugins/build.xml plugins/docbook-wrapper.xsl plugins/dockables.xml plugins/users-guide.xml plugins/users-guide.xsl Deleted: plugins/CookViewer.props =================================================================== --- plugins/CookViewer.props 2008-11-16 11:29:25 UTC (rev 14050) +++ plugins/CookViewer.props 2008-11-16 11:30:22 UTC (rev 14051) @@ -1,30 +0,0 @@ -# Properties file for CookViewer plugin - -# application activator (4.2) -plugin.CookViewerPlugin.activate=defer - -# general plugin information -plugin.CookViewerPlugin.name=CookViewer -plugin.CookViewerPlugin.author=Ludovic ANCIAUX -plugin.CookViewerPlugin.version=1.0.1 -plugin.CookViewerPlugin.docs=index.html -plugin.CookViewerPlugin.depend.0=jedit 04.02.09.00 -plugin.CookViewerPlugin.depend.1=jdk 1.4 -#plugin.CookViewerPlugin.jars=cookswing.jar - -# application menu items (4.2) -plugin.CookViewerPlugin.menu=cookviewer.toggle - -# action labels for actions.xml -cookviewer.toggle.label=CookViewer Panel - -# action labels for dockables.xml -cookviewer.label=CookViewer - -# window title -cookviewer.title=CookViewer - -# plugin toolbar buttons -cookviewer.render.icon=Parse.png - -# :folding=explicit:tabSize=2:indentSize=2: Deleted: plugins/actions.xml =================================================================== --- plugins/actions.xml 2008-11-16 11:29:25 UTC (rev 14050) +++ plugins/actions.xml 2008-11-16 11:30:22 UTC (rev 14051) @@ -1,23 +0,0 @@ -<?xml version="1.0"?> - -<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> - -<ACTIONS> - - <ACTION NAME="cookviewer.toggle"> - <CODE> - view.getDockableWindowManager().addDockableWindow(CookViewerPlugin.NAME); - view.getDockableWindowManager().getDockable(CookViewerPlugin.NAME); - </CODE> - </ACTION> - - <ACTION NAME="cookviewer.render"> - <CODE> - view.getDockableWindowManager().addDockableWindow(CookViewerPlugin.NAME); - view.getDockableWindowManager().getDockable(CookViewerPlugin.NAME).renderContent(); - </CODE> - </ACTION> - -</ACTIONS> - -<!-- :folding=explicit:tabSize=2:indentSize=2: --> \ No newline at end of file Deleted: plugins/build.properties =================================================================== --- plugins/build.properties 2008-11-16 11:29:25 UTC (rev 14050) +++ plugins/build.properties 2008-11-16 11:30:22 UTC (rev 14051) @@ -1,12 +0,0 @@ -### -### Build property file for GfxView plugin -### - -### Uncomment these two lines if you want to use jikes -#build.compiler=jikes -#build.compiler.emacs=true - -### If you want to build the user's guide and FAQ, set this property to -### the path of the DocBook-XSL stylesheets -#docbook.xsl=d:/xmlapps/docbook-xsl -docbook.xsl=/usr/share/xml/docbook Deleted: plugins/build.xml =================================================================== --- plugins/build.xml 2008-11-16 11:29:25 UTC (rev 14050) +++ plugins/build.xml 2008-11-16 11:30:22 UTC (rev 14051) @@ -1,120 +0,0 @@ -<?xml version="1.0"?> - -<!-- - This is a build.xml file for building the CookViewer plugin. - - The 'dist' target compiles the plugin and creates the JAR file. - Before running the 'dist' target, you will need to generate the - documentation using one of these two targets: - - - 'docs-xalan': Creates documentation using the Xalan XSLT processor - - 'docs-xsltproc': Creates documentation using the xsltproc tool - - To use it for building your own plugin, make these changes: - - - Change definition of 'jar.name' to the name of your plugin's JAR file - - If necessary, add any dependencies to the 'project.class.path' - definition - - If necessary, change the list of files in the 'dist' targtet - - If necessary, change the 'docs-xalan' and 'docs-xsltproc' targets - accordingly. ---> - -<project name="CookViewer" default="dist" basedir="."> - - <property file="build.properties"/> - - <property name="jar.name" value="cookviewer.jar"/> - - <property name="src.dir" value="src"/> - <property name="build.dir" value="build"/> - <property name="install.dir" value="dist"/> - - <property name="jedit.install.dir" value="/home/lanciaux/.jedit/jars"/> - - <path id="project.class.path"> - <pathelement location="lib/cookxml-2.5.jar"/> - <pathelement location="lib/cookswing-1.4.jar"/> - <pathelement location="lib/cookbsh-1.2.jar"/> - <pathelement location="lib/cookformlayout-1.0.jar"/> - </path> - - - - <target name="init"> - <mkdir dir="${build.dir}"/> - <delete file="docbook-wrapper.xsl" /> - <echo file="docbook-wrapper.xsl" - message="<xsl:stylesheet"/> - <echo file="docbook-wrapper.xsl" append="true" - message=" xmlns:xsl='http://www.w3.org/1999/XSL/Transform'"/> - <echo file="docbook-wrapper.xsl" append="true" - message=" version='1.0'>"/> - <echo file="docbook-wrapper.xsl" append="true" - message="<xsl:import href='${docbook.xsl}/html/chunk.xsl'/>"/> <!-- docbook.xsl --> - <echo file="docbook-wrapper.xsl" append="true" - message="</xsl:stylesheet>"/> - </target> - - - <target name="compile" depends="init"> - <javac - srcdir="${src.dir}" - destdir="${build.dir}" - deprecation="on" - includeJavaRuntime="yes" - source="1.3" - target="1.3"> - <classpath refid="project.class.path"/> - </javac> - </target> - - - <target name="dist" depends="compile"> - <mkdir dir="${install.dir}"/> - <jar jarfile="${install.dir}/${jar.name}"> - <fileset dir="${build.dir}"/> - <fileset dir="."> - <include name="actions.xml"/> - <include name="browser.actions.xml"/> - <include name="dockables.xml"/> - <include name="*.props"/> - <include name="**/*.html"/> - <include name="**/*.txt"/> - </fileset> - </jar> - </target> - - <!-- Generate docs with xsltproc tool from www.xmlsoft.org --> - <target name="docs-xsltproc" depends="init"> - <exec executable="xsltproc"> - <arg value="--catalogs"/> - <arg value="users-guide.xsl"/> - <arg value="users-guide.xml"/> - </exec> - </target> - - <!-- Generate docs with Xalan tool from xml.apache.org --> - <target name="docs-xalan" depends="init"> - <style - style="users-guide.xsl" - in="users-guide.xml"/> - </target> - - <target name="clean"> - <delete dir="${build.dir}"/> - <delete> - <fileset dir="." includes="**/*~" defaultexcludes="no"/> - <fileset dir="." includes="**/*.html" defaultexcludes="no"/> - </delete> - </target> - - <!-- Generate tags using 'ctags' program from ctags.sourceforge.net --> - <target name="tags"> - <exec executable="ctags"> - <arg value="-R" /> - <arg path="." /> - </exec> - </target> - -</project> Deleted: plugins/docbook-wrapper.xsl =================================================================== --- plugins/docbook-wrapper.xsl 2008-11-16 11:29:25 UTC (rev 14050) +++ plugins/docbook-wrapper.xsl 2008-11-16 11:30:22 UTC (rev 14051) @@ -1 +0,0 @@ -<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'><xsl:import href='/usr/share/xml/docbook/html/chunk.xsl'/></xsl:stylesheet> \ No newline at end of file Deleted: plugins/dockables.xml =================================================================== --- plugins/dockables.xml 2008-11-16 11:29:25 UTC (rev 14050) +++ plugins/dockables.xml 2008-11-16 11:30:22 UTC (rev 14051) @@ -1,15 +0,0 @@ -<?xml version="1.0"?> - -<!-- Dockable component definition file for CookViewer plugin --> - -<!DOCTYPE DOCKABLES SYSTEM "dockables.dtd"> - -<!-- CookViewer dockable windows --> - -<DOCKABLES> - <DOCKABLE NAME="cookviewer"> - new CookViewer(view, position); - </DOCKABLE> -</DOCKABLES> - -<!-- :folding=explicit:tabSize=2:indentSize=2: --> Deleted: plugins/users-guide.xml =================================================================== --- plugins/users-guide.xml 2008-11-16 11:29:25 UTC (rev 14050) +++ plugins/users-guide.xml 2008-11-16 11:30:22 UTC (rev 14051) @@ -1,145 +0,0 @@ -<?xml version="1.0"?> - -<!-- CookViewer user's guide --> -<!-- (C) 2006 Ludovic ANCIAUX --> - -<!-- jEdit buffer-local properties: --> -<!-- :tabSize=1:indentSize=1:noTabs=true:folding=sidekick: --> - -<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> - -<book> - - <bookinfo><title>CookViewer plugin user's guide</title> - <author> - <firstname>Ludovic</firstname> - <surname>Anciaux</surname> - <email>Lud...@ad...</email> - <address> - <city>Jurbise</city> - <country>Belgium</country> - </address> - </author> - - <copyright> - <year>2006, 2008</year> - <holder>Ludovic ANCIAUX</holder> - </copyright> - - <legalnotice><title>Legal Notice</title> - <para> - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 or - any later version published by the Free Software Foundation; with no - <quote>Invariant Sections</quote>, <quote>Front-Cover Texts</quote> or - <quote>Back-Cover Texts</quote>, each as defined in the license. A copy of - the license can be found in the file <filename>COPYING.DOC.txt</filename> - included with jEdit. - </para> - - <para> - <ulink url="http://cookxml.sourceforge.net">CookXML library</ulink> by <quote>Heng Yuan</quote> is used for rendering. - </para> - - <para> - <ulink url="http://cookxml.sourceforge.net/cookswing/">CookSwing extension library</ulink> by <quote>Heng Yuan</quote> is used for rendering. - </para> - - <para> - <ulink url="http://cookxml.sourceforge.net/cookbsh/">CookBsh extension library</ulink> by <quote>Heng Yuan</quote> is used for rendering itself based on - <ulink url="http://www.beanshell.org">BeanShell</ulink> by <quote>Patrick Niemeyer</quote>. - </para> - - <para> - <ulink url="http://cookxml.sourceforge.net/cookswing/cookformlayout/">CookFormLayout extension library</ulink> by <quote>Heng Yuan</quote> is used for rendering itself based on - <ulink url="http://www.jgoodies.com/freeware/forms/index.html">JGoodies Forms</ulink> by <quote>Karsten Lentzsch</quote>. - </para> - - </legalnotice> - </bookinfo> - - <chapter id="intro"><title>Introduction</title> - - <para> - The <application>CookViewer</application> plugin allows users to render a - CookSwing XML description in a jEdit dockable. This XML definition can have - <ulink url="http://www.beanshell.org/">Beanshell</ulink> mixed inside - as well as following <ulink url="http://www.jgoodies.com/freeware/forms/index.html">JGoodies Forms</ulink> layout. - </para> - - <para> - It is mainly a development tool for CookXML users thanks to jEdit XML and SideKick plugins which greatly improve GUI building. - </para> - - </chapter> - - <chapter id="commands"><title>Commands</title> - - <para>A simple panel toggling entry is in plugin menu.</para> - - </chapter> - - <chapter id="display"><title>The CookViewer panel</title> - - <para> - There is a simple dockable panel where XML buffer is rendered. - </para> - - <para> - A rendering button is shown at top left of render panel. - </para> - - </chapter> - - <chapter id="limitations"><title>Limitations</title> - <itemizedlist> - <listitem><para>It only parse valid CookSwing Tags</para></listitem> - - <listitem><para>It doesn't parse frame/dialog Tag</para></listitem> - - <listitem> - <para>CookXML, CookSwing have to be in ClassPath or in jEdit jars directory</para> - <itemizedlist> - <listitem> - <para>CookBSH is supported but has to be in ClassPath or in jEdit jars directory as well Beanshell 2.04+ which is part of jEdit 4.3pre6.</para> - <itemizedlist> - <listitem> - <para>if you are using jEdit prior to 4.3pre6, you can also drop a copy of beanshell-2.04.jar in jEdit jars directory</para> - </listitem> - </itemizedlist> - - </listitem> - <listitem> - <para>CookFormLayout is supported but has to be in ClassPath or in jEdit jars directory as well JForms 1.07+ library</para> - </listitem> - - </itemizedlist> - </listitem> - </itemizedlist> - </chapter> - - <chapter id="todo"><title>To do</title> - <itemizedlist> - <listitem><para>Implement a more elegant way of handling CookBSH and CookFormLayout</para></listitem> - <listitem><para>Implement a way of downloading latest CookXML and subprojects in jars plugin directory</para></listitem> - <listitem><para>Implement a way to use <quote>frame / dialog</quote> tags </para></listitem> - <listitem><para>Implement a basic drag'n'drop gui builder</para></listitem> - <listitem><para>Fix bugs</para></listitem> - </itemizedlist> - </chapter> - - <appendix id="changes"><title>Change log</title> - <itemizedlist> - <listitem><para><emphasis role="bold">Version 1.0.1 (november 2008)</emphasis> - requires jEdit 4.2pre9 (tested on jEdit 4.3pre15)</para> - <para>First try to implement a nicer way to handle Frame or Dialog objects ...I've been unlucky</para> - <para>Code cleanup and fixing repaint bug when changing buffer</para> - </listitem> - <listitem><para><emphasis role="bold">Version 1.0 (2006)</emphasis> - requires jEdit 4.2pre9 (tested on jEdit 4.3pre5)</para> - </listitem> - </itemizedlist> - </appendix> - -</book> Deleted: plugins/users-guide.xsl =================================================================== --- plugins/users-guide.xsl 2008-11-16 11:29:25 UTC (rev 14050) +++ plugins/users-guide.xsl 2008-11-16 11:30:22 UTC (rev 14051) @@ -1,61 +0,0 @@ -<?xml version='1.0'?> - -<!-- You should use this XSL stylesheet to create plugin documentation. - - If you want all output in a single HTML file, specify the path to - your DocBook-XSL "html/docbook.xsl" file in the <xsl:import> - statement below. If you want each chapter to have its own file, - specify the path to your "html/xtchunk.xsl". ---> - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" - xmlns="http://www.w3.org/TR/xhtml1/transitional" - exclude-result-prefixes="#default"> - -<xsl:import href="docbook-wrapper.xsl"/> - -<!-- Swing HTML control doesn't support “ and ” --> -<xsl:template match="quote">"<xsl:apply-templates/>"</xsl:template> - -<xsl:template match="guibutton"> - <xsl:call-template name="inline.boldseq"/> -</xsl:template> - -<xsl:template match="guiicon"> - <xsl:call-template name="inline.boldseq"/> -</xsl:template> - -<xsl:template match="guilabel"> - <xsl:call-template name="inline.boldseq"/> -</xsl:template> - -<xsl:template match="guimenu"> - <xsl:call-template name="inline.boldseq"/> -</xsl:template> - -<xsl:template match="guimenuitem"> - <xsl:call-template name="inline.boldseq"/> -</xsl:template> - -<xsl:template match="guisubmenu"> - <xsl:call-template name="inline.boldseq"/> -</xsl:template> - -<xsl:variable name="toc.list.type">ul</xsl:variable> - -<xsl:variable name="shade.verbatim">1</xsl:variable> - -<xsl:variable name="funcsynopsis.style">ansi</xsl:variable> -<xsl:template match="void"><xsl:apply-templates/></xsl:template> - -<xsl:param name="chunk.first.sections">1</xsl:param> - -<xsl:template match="*" mode="object.title.markup.textonly"> - <xsl:variable name="title"> - <xsl:apply-templates select="." mode="title.markup"/> - </xsl:variable> - <xsl:value-of select="$title"/> -</xsl:template> - -</xsl:stylesheet> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2009-01-14 13:09:35
|
Revision: 14344 http://jedit.svn.sourceforge.net/jedit/?rev=14344&view=rev Author: shlomy Date: 2009-01-14 11:41:19 +0000 (Wed, 14 Jan 2009) Log Message: ----------- First attempt at implementing a minimap feature. Added Paths: ----------- plugins/Minimap/ plugins/Minimap/trunk/ plugins/Minimap/trunk/.classpath plugins/Minimap/trunk/.project plugins/Minimap/trunk/Minimap.props plugins/Minimap/trunk/actions.xml plugins/Minimap/trunk/build.xml plugins/Minimap/trunk/description.html plugins/Minimap/trunk/src/ plugins/Minimap/trunk/src/minimap/ plugins/Minimap/trunk/src/minimap/MinimapPlugin.java Added: plugins/Minimap/trunk/.classpath =================================================================== --- plugins/Minimap/trunk/.classpath (rev 0) +++ plugins/Minimap/trunk/.classpath 2009-01-14 11:41:19 UTC (rev 14344) @@ -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/Minimap/trunk/.project =================================================================== --- plugins/Minimap/trunk/.project (rev 0) +++ plugins/Minimap/trunk/.project 2009-01-14 11:41:19 UTC (rev 14344) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>Minimap</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/Minimap/trunk/Minimap.props =================================================================== --- plugins/Minimap/trunk/Minimap.props (rev 0) +++ plugins/Minimap/trunk/Minimap.props 2009-01-14 11:41:19 UTC (rev 14344) @@ -0,0 +1,10 @@ +plugin.minimap.MinimapPlugin.name=Minimap +plugin.minimap.MinimapPlugin.activate=startup +plugin.minimap.MinimapPlugin.description=Show minimap for the text area +plugin.minimap.MinimapPlugin.author=Shlomy Reinstein +plugin.minimap.MinimapPlugin.version=0.1 +plugin.minimap.MinimapPlugin.docs=description.html + +plugin.minimap.MinimapPlugin.depend.0=jdk 1.5 +plugin.minimap.MinimapPlugin.depend.1=jedit 04.03.15.00 + Added: plugins/Minimap/trunk/actions.xml =================================================================== --- plugins/Minimap/trunk/actions.xml (rev 0) +++ plugins/Minimap/trunk/actions.xml 2009-01-14 11:41:19 UTC (rev 14344) @@ -0,0 +1,10 @@ +<?xml version="1.0"?> +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> +<ACTIONS> + <ACTION NAME="minimap-show" NO_REPEAT="TRUE"> + <CODE> + minimap.MinimapPlugin.show(view); + </CODE> + </ACTION> +</ACTIONS> + Added: plugins/Minimap/trunk/build.xml =================================================================== --- plugins/Minimap/trunk/build.xml (rev 0) +++ plugins/Minimap/trunk/build.xml 2009-01-14 11:41:19 UTC (rev 14344) @@ -0,0 +1,82 @@ +<?xml version="1.0"?> + +<!-- + + This is the build.xml file for building the Minimap plugin. + + It is based on the standard build.xml file for jEdit plugins. + +--> + +<project name="Minimap" default="dist" basedir="."> + + <property file="build.properties"/> + <property file="../build.properties"/> + <property file="${user.home}/.build.properties"/> + <property file="${user.home}/build.properties"/> + + <property name="jar.name" value="${ant.project.name}.jar"/> + <property name="docs-proc.target" value="xsltproc"/> + + <property name="src.dir" value="."/> + <property name="install.dir" value=".."/> + <property name="build.dir" value="build"/> + + <path id="project.class.path"> + <pathelement location="${jedit.install.dir}/jedit.jar"/> + <pathelement location="${src.dir}"/> + </path> + + <target name="prepare" > + <mkdir dir="${build.dir}" /> + </target> + + <target name="compile" depends="prepare"> + <javac + srcdir="${src.dir}" + destdir="${build.dir}" + deprecation="on" + debug="yes" + includeJavaRuntime="yes" + > + <classpath refid="project.class.path"/> + </javac> + </target> + + <target name="dist" depends="compile"> + <mkdir dir="${install.dir}"/> + + <jar jarfile="${install.dir}/${jar.name}"> + <fileset dir="${build.dir}"/> + <fileset dir="${src.dir}"> + <include name="actions.xml"/> + <include name="dockables.xml"/> + <include name="**/*.props"/> + <include name="**/*.html"/> + <include name="**/*.txt"/> + <include name="**/*.png"/> + </fileset> + </jar> + </target> + + <target name="clean"> + <delete dir="${build.dir}"/> + <delete> + <fileset dir="." includes="**/*~"/> + </delete> + <delete file="doc/index.html"/> + <delete file="doc/docbook-wrapper.xsl"/> + </target> + + <target name="tags"> + <exec executable="ctags"> + <arg value="-f" /> + <arg path="tags_" /> + <arg value="-R" /> + <arg path="." /> + </exec> + </target> + +</project> + +<!-- :indentSize=4:lineSeparator=\n:noTabs=false:tabSize=4: --> Added: plugins/Minimap/trunk/description.html =================================================================== --- plugins/Minimap/trunk/description.html (rev 0) +++ plugins/Minimap/trunk/description.html 2009-01-14 11:41:19 UTC (rev 14344) @@ -0,0 +1 @@ +Show minimap for text area \ No newline at end of file Added: plugins/Minimap/trunk/src/minimap/MinimapPlugin.java =================================================================== --- plugins/Minimap/trunk/src/minimap/MinimapPlugin.java (rev 0) +++ plugins/Minimap/trunk/src/minimap/MinimapPlugin.java 2009-01-14 11:41:19 UTC (rev 14344) @@ -0,0 +1,56 @@ +package minimap; +import java.awt.Container; +import java.awt.FlowLayout; + +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JSplitPane; + +import org.gjt.sp.jedit.EBMessage; +import org.gjt.sp.jedit.EBPlugin; +import org.gjt.sp.jedit.EditPane; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.textarea.JEditEmbeddedTextArea; +import org.gjt.sp.jedit.textarea.JEditTextArea; +import org.gjt.sp.jedit.textarea.TextArea; +import org.gjt.sp.jedit.visitors.JEditVisitorAdapter; + +public class MinimapPlugin extends EBPlugin { + + @Override + public void handleMessage(EBMessage message) { + // TODO Auto-generated method stub + super.handleMessage(message); + } + + public void stop() + { + } + + public void start() + { + } + static public void show(View view) { + EditPane editPane = view.getEditPane(); + JEditTextArea textArea = editPane.getTextArea(); + TextArea text = new JEditEmbeddedTextArea(); + text.getBuffer().setProperty("folding","explicit"); + text.getPainter().setFont(text.getPainter().getFont().deriveFont((float) 2.0)); + Container c = textArea.getParent(); + int i; + for (i = 0; i < c.getComponentCount(); i++) + if (c.getComponent(i) == textArea) + break; + c.remove(textArea); + JSplitPane splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); + splitter.add(textArea); + splitter.add(text); + c.add(splitter); + c.validate(); + splitter.setDividerLocation(0.7); + text.setBuffer(textArea.getBuffer()); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rfr...@us...> - 2009-01-30 18:27:09
|
Revision: 14523 http://jedit.svn.sourceforge.net/jedit/?rev=14523&view=rev Author: rfrancois Date: 2009-01-30 18:27:06 +0000 (Fri, 30 Jan 2009) Log Message: ----------- first commit of "Nested" plugin Added Paths: ----------- plugins/Nested/ plugins/Nested/trunk/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2009-03-07 14:54:11
|
Revision: 14728 http://jedit.svn.sourceforge.net/jedit/?rev=14728&view=rev Author: shlomy Date: 2009-03-07 14:54:05 +0000 (Sat, 07 Mar 2009) Log Message: ----------- Beginning of MarkerSets plugin Added Paths: ----------- plugins/MarkerSets/ plugins/MarkerSets/trunk/ plugins/MarkerSets/trunk/.classpath plugins/MarkerSets/trunk/.project plugins/MarkerSets/trunk/LICENSE.txt plugins/MarkerSets/trunk/MarkerSets.props plugins/MarkerSets/trunk/actions.xml plugins/MarkerSets/trunk/build.xml plugins/MarkerSets/trunk/description.html plugins/MarkerSets/trunk/dockables.xml plugins/MarkerSets/trunk/index.html plugins/MarkerSets/trunk/src/ plugins/MarkerSets/trunk/src/marker/ plugins/MarkerSets/trunk/src/marker/FileMarker.java plugins/MarkerSets/trunk/src/marker/MarkerExtension.java plugins/MarkerSets/trunk/src/marker/MarkerSet.java plugins/MarkerSets/trunk/src/marker/MarkerSetManager.java plugins/MarkerSets/trunk/src/marker/MarkerSetsPlugin.java Added: plugins/MarkerSets/trunk/.classpath =================================================================== --- plugins/MarkerSets/trunk/.classpath (rev 0) +++ plugins/MarkerSets/trunk/.classpath 2009-03-07 14:54:05 UTC (rev 14728) @@ -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/MarkerSets/trunk/.project =================================================================== --- plugins/MarkerSets/trunk/.project (rev 0) +++ plugins/MarkerSets/trunk/.project 2009-03-07 14:54:05 UTC (rev 14728) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>MarkerSets</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/MarkerSets/trunk/LICENSE.txt =================================================================== --- plugins/MarkerSets/trunk/LICENSE.txt (rev 0) +++ plugins/MarkerSets/trunk/LICENSE.txt 2009-03-07 14:54:05 UTC (rev 14728) @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. Added: plugins/MarkerSets/trunk/MarkerSets.props =================================================================== --- plugins/MarkerSets/trunk/MarkerSets.props (rev 0) +++ plugins/MarkerSets/trunk/MarkerSets.props 2009-03-07 14:54:05 UTC (rev 14728) @@ -0,0 +1,32 @@ +plugin.marker.MarkerSetsPlugin.activate=defer + +# general plugin information +plugin.marker.MarkerSetsPlugin.name=MarkerSets +plugin.marker.MarkerSetsPlugin.author=Shlomy Reinstein +plugin.marker.MarkerSetsPlugin.version=0.1 +plugin.marker.MarkerSetsPlugin.description=The MarkerSets plugin enables you \ + to create named sets of markers from various files. + +plugin.marker.MarkerSetsPlugin.depend.0=jdk 1.5 +plugin.marker.MarkerSetsPlugin.depend.1=jedit 04.03.17.00 + +# action labels +markersets-set-active-markerset.label=Set active marker set... +markersets-use-global-markerset.label=Set to global marker set +markersets-toggle-marker.label=Toggle marker at caret location + +# menu items +plugin.marker.MarkerSetsPlugin.menu=markersets-set-active-markerset \ + markersets-use-global-markerset markersets-toggle-marker + +# dockables +marker-set-manager.title=Marker Sets +marker-set-manager.longtitle=View and Manage Marker Sets +marker-set-manager.label=Marker Sets + +# docs +plugin.marker.MarkerSetsPlugin.docs=index.html + +# messages +#class-browser.msg.title=Class Browser +#class-browser.msg.no-selected-class=For this action to work, you must either Added: plugins/MarkerSets/trunk/actions.xml =================================================================== --- plugins/MarkerSets/trunk/actions.xml (rev 0) +++ plugins/MarkerSets/trunk/actions.xml 2009-03-07 14:54:05 UTC (rev 14728) @@ -0,0 +1,23 @@ +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> +<!-- $Id: actions.xml 7606 2004-11-07 15:52:36Z orutherfurd $ --> + +<ACTIONS> + + <ACTION NAME="markersets-set-active-markerset" NO_REPEAT="TRUE"> + <CODE> + marker.MarkerSetsPlugin.setActiveMarkerSet(); + </CODE> + </ACTION> + <ACTION NAME="markersets-use-global-markerset" NO_REPEAT="TRUE"> + <CODE> + marker.MarkerSetsPlugin.useGlobalMarkerSet(); + </CODE> + </ACTION> + <ACTION NAME="markersets-toggle-marker" NO_REPEAT="TRUE"> + <CODE> + marker.MarkerSetsPlugin.toggleMarker(view); + </CODE> + </ACTION> + +</ACTIONS> + Added: plugins/MarkerSets/trunk/build.xml =================================================================== --- plugins/MarkerSets/trunk/build.xml (rev 0) +++ plugins/MarkerSets/trunk/build.xml 2009-03-07 14:54:05 UTC (rev 14728) @@ -0,0 +1,74 @@ +<?xml version="1.0"?> + +<project name="MarkerSets" default="dist" basedir="."> + + <property file="build.properties"/> + <property file="../build.properties"/> + <property file="${user.home}/.build.properties"/> + <property file="${user.home}/build.properties"/> + + <property name="jar.name" value="${ant.project.name}.jar"/> + <property name="docs-proc.target" value="xsltproc"/> + + <property name="src.dir" value="."/> + <property name="install.dir" value=".."/> + <property name="build.dir" value="build"/> + + <path id="project.class.path"> + <pathelement location="${jedit.install.dir}/jedit.jar"/> + <pathelement location="${src.dir}"/> + </path> + + <target name="prepare" > + <mkdir dir="${build.dir}" /> + </target> + + <target name="compile" depends="prepare"> + <javac + srcdir="${src.dir}" + destdir="${build.dir}" + deprecation="on" + debug="yes" + includeJavaRuntime="yes" + > + <classpath refid="project.class.path"/> + </javac> + </target> + + <target name="dist" depends="compile"> + <mkdir dir="${install.dir}"/> + + <jar jarfile="${install.dir}/${jar.name}"> + <fileset dir="${build.dir}"/> + <fileset dir="${src.dir}"> + <include name="actions.xml"/> + <include name="dockables.xml"/> + <include name="**/*.props"/> + <include name="**/*.html"/> + <include name="**/*.txt"/> + <include name="**/*.png"/> + </fileset> + </jar> + </target> + + <target name="clean"> + <delete dir="${build.dir}"/> + <delete> + <fileset dir="." includes="**/*~"/> + </delete> + <delete file="doc/index.html"/> + <delete file="doc/docbook-wrapper.xsl"/> + </target> + + <target name="tags"> + <exec executable="ctags"> + <arg value="-f" /> + <arg path="tags_" /> + <arg value="-R" /> + <arg path="." /> + </exec> + </target> + +</project> + +<!-- :indentSize=4:lineSeparator=\n:noTabs=false:tabSize=4: --> Added: plugins/MarkerSets/trunk/description.html =================================================================== --- plugins/MarkerSets/trunk/description.html (rev 0) +++ plugins/MarkerSets/trunk/description.html 2009-03-07 14:54:05 UTC (rev 14728) @@ -0,0 +1,4 @@ +This plugin provides a class hierarchy browser based on information from Ctags. It displays the hierarchy tree (both base and derived classes), as well as the list of members of the selected class, including inherited members (if requested), and provides filters to hide members of specific types. +You can quickly jump to the definition of any of the displayed classes/members. ClassBrowser uses the CtagsInterface plugin to retrieve the tag information and to jump to definitions. +To make the best use of ClassBrowser, configure CtagsInterface to run Ctags with "--fields=+anzKiS". + Added: plugins/MarkerSets/trunk/dockables.xml =================================================================== --- plugins/MarkerSets/trunk/dockables.xml (rev 0) +++ plugins/MarkerSets/trunk/dockables.xml 2009-03-07 14:54:05 UTC (rev 14728) @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<!-- $Id: dockables.xml 7600 2003-12-30 18:46:24Z orutherfurd $ --> + +<!DOCTYPE DOCKABLES SYSTEM "dockables.dtd"> + +<DOCKABLES> + <DOCKABLE NAME="marker-set-manager" MOVABLE="TRUE"> + new marker.MarkerSetManager(view); + </DOCKABLE> +</DOCKABLES> + +<!-- :noTabs=false:lineSeparator=\r\n:tabSize=4:folding=none: --> Added: plugins/MarkerSets/trunk/index.html =================================================================== --- plugins/MarkerSets/trunk/index.html (rev 0) +++ plugins/MarkerSets/trunk/index.html 2009-03-07 14:54:05 UTC (rev 14728) @@ -0,0 +1,10 @@ +<html> +<title>MarkerSets plugin</title> +<body> +<h1>The MarkerSets plugin</h1> +<p>Written by Shlomy Reinstein, March 2009. +<p>The MarkerSets plugin enables you to maintain named sets of markers, where +each set can contain markers from various files. The plugin has a dockable +window where you can view or change the marker sets. +</body> +</html> \ No newline at end of file Added: plugins/MarkerSets/trunk/src/marker/FileMarker.java =================================================================== --- plugins/MarkerSets/trunk/src/marker/FileMarker.java (rev 0) +++ plugins/MarkerSets/trunk/src/marker/FileMarker.java 2009-03-07 14:54:05 UTC (rev 14728) @@ -0,0 +1,32 @@ +package marker; + +public class FileMarker { + String file; + int line; + char shortcut; + + public FileMarker(String file, int line, char shortcut) { + this.file = file; + this.line = line; + this.shortcut = shortcut; + } + + public String toString() { + return file + ":" + line + ":" + shortcut; + } + + @Override + public boolean equals(Object obj) { + if (! (obj instanceof FileMarker)) + return false; + FileMarker other = (FileMarker) obj; + return (file.equals(other.file) && line == other.line); + } + + @Override + public int hashCode() { + return file.hashCode() + line; + } + + +} Added: plugins/MarkerSets/trunk/src/marker/MarkerExtension.java =================================================================== --- plugins/MarkerSets/trunk/src/marker/MarkerExtension.java (rev 0) +++ plugins/MarkerSets/trunk/src/marker/MarkerExtension.java 2009-03-07 14:54:05 UTC (rev 14728) @@ -0,0 +1,39 @@ +package marker; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.util.Collection; + +import org.gjt.sp.jedit.EditPane; +import org.gjt.sp.jedit.textarea.JEditTextArea; +import org.gjt.sp.jedit.textarea.TextAreaExtension; + +public class MarkerExtension extends TextAreaExtension { + private EditPane editPane; + + public MarkerExtension(EditPane editPane) + { + this.editPane = editPane; + } + + public void paintValidLine(Graphics2D gfx, int screenLine, + int physicalLine, int start, int end, int y) + { + String path = editPane.getBuffer().getPath(); + JEditTextArea ta = editPane.getTextArea(); + int width = ta.getGutter().getWidth(); + int lineHeight = ta.getPainter().getFontMetrics().getHeight(); + Collection<MarkerSet> markerSets = MarkerSetsPlugin.getMarkerSets(); + Color c = gfx.getColor(); + for (MarkerSet ms: markerSets) + { + gfx.setColor(ms.getColor()); + FileMarker marker = ms.getMarkerFor(path, physicalLine); + if (marker == null) + continue; + gfx.fillRect(0, y, width, lineHeight); + } + gfx.setColor(c); + } + +} Added: plugins/MarkerSets/trunk/src/marker/MarkerSet.java =================================================================== --- plugins/MarkerSets/trunk/src/marker/MarkerSet.java (rev 0) +++ plugins/MarkerSets/trunk/src/marker/MarkerSet.java 2009-03-07 14:54:05 UTC (rev 14728) @@ -0,0 +1,54 @@ +package marker; + +import java.awt.Color; +import java.util.Vector; + +public class MarkerSet { + + private String name; + private Vector<FileMarker> markers; + private Color color; + + public MarkerSet(String name) { + this.name = name; + color = Color.black; + markers = new Vector<FileMarker>(); + } + + public void setColor(Color c) { color = c; } + public Color getColor() { return color; } + + public String getName() { return name; } + + public void toggle(FileMarker marker) { + if (markers.contains(marker)) + remove(marker); + else + add(marker); + } + + public void add(FileMarker marker) { + if (markers.contains(marker)) + return; + markers.add(marker); + } + + public void remove(FileMarker marker) { + markers.remove(marker); + } + + public Vector<FileMarker> getMarkers() { + return new Vector<FileMarker>(markers); + } + + public FileMarker getMarkerFor(String path, int line) + { + for (int i = 0; i < markers.size(); i++) + { + FileMarker marker = markers.get(i); + if (marker.file.equals(path) && marker.line == line) + return marker; + } + return null; + } +} Added: plugins/MarkerSets/trunk/src/marker/MarkerSetManager.java =================================================================== --- plugins/MarkerSets/trunk/src/marker/MarkerSetManager.java (rev 0) +++ plugins/MarkerSets/trunk/src/marker/MarkerSetManager.java 2009-03-07 14:54:05 UTC (rev 14728) @@ -0,0 +1,53 @@ +package marker; + +import java.awt.BorderLayout; +import java.util.Collections; +import java.util.Vector; + +import javax.swing.JTree; +import javax.swing.JPanel; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.DefaultTreeModel; + +import org.gjt.sp.jedit.View; + +@SuppressWarnings("serial") +public class MarkerSetManager extends JPanel { + private View view; + private DefaultTreeModel model; + private JTree markers; + private DefaultMutableTreeNode root; + + public MarkerSetManager(View view) + { + super(new BorderLayout()); + this.view = view; + root = new DefaultMutableTreeNode(); + model = new DefaultTreeModel(root); + markers = new JTree(model); + markers.setRootVisible(false); + markers.setShowsRootHandles(true); + DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer(); + renderer.setOpenIcon(null); + renderer.setClosedIcon(null); + renderer.setLeafIcon(null); + markers.setCellRenderer(renderer); + add(markers, BorderLayout.CENTER); + } + + public void init() + { + Vector<String> names = MarkerSetsPlugin.getMarkerSetNames(); + Collections.sort(names); + for (String name: names) + { + DefaultMutableTreeNode msNode = new DefaultMutableTreeNode(name); + root.add(msNode); + MarkerSet ms = MarkerSetsPlugin.getMarkerSet(name); + for (FileMarker marker: ms.getMarkers()) + msNode.add(new DefaultMutableTreeNode(marker)); + } + } + +} Added: plugins/MarkerSets/trunk/src/marker/MarkerSetsPlugin.java =================================================================== --- plugins/MarkerSets/trunk/src/marker/MarkerSetsPlugin.java (rev 0) +++ plugins/MarkerSets/trunk/src/marker/MarkerSetsPlugin.java 2009-03-07 14:54:05 UTC (rev 14728) @@ -0,0 +1,145 @@ +package marker; + +import java.awt.Color; +import java.util.Collection; +import java.util.HashMap; +import java.util.Vector; + +import javax.swing.JOptionPane; + +import org.gjt.sp.jedit.Buffer; +import org.gjt.sp.jedit.EBMessage; +import org.gjt.sp.jedit.EBPlugin; +import org.gjt.sp.jedit.EditPane; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.msg.EditPaneUpdate; +import org.gjt.sp.jedit.textarea.Gutter; +import org.gjt.sp.jedit.textarea.JEditTextArea; +import org.gjt.sp.jedit.visitors.JEditVisitorAdapter; + +public class MarkerSetsPlugin extends EBPlugin { + + private static final String MARKER_SET_EXTENSION = "MarkerSetExtension"; + static private final String GLOBAL_SET = "Global"; + private static HashMap<String, MarkerSet> markerSets; + private static MarkerSet active; + + public void start() + { + markerSets = new HashMap<String, MarkerSet>(); + active = addMarkerSet(GLOBAL_SET); + jEdit.visit(new MarkerSetVisitor(true)); + } + + public void stop() + { + jEdit.visit(new MarkerSetVisitor(false)); + markerSets.clear(); + active = null; + } + + private class MarkerSetVisitor extends JEditVisitorAdapter + { + boolean start; + + public MarkerSetVisitor(boolean start) + { + this.start = start; + } + + public void visit(EditPane editPane) { + if (start) + initEditPane(editPane); + else + uninitEditPane(editPane); + } + } + + private void initEditPane(EditPane ep) + { + Gutter g = ep.getTextArea().getGutter(); + MarkerExtension ext = new MarkerExtension(ep); + g.addExtension(ext); + g.putClientProperty(MARKER_SET_EXTENSION, ext); + } + + private void uninitEditPane(EditPane ep) + { + Gutter g = ep.getTextArea().getGutter(); + MarkerExtension ext = (MarkerExtension) + g.getClientProperty(MARKER_SET_EXTENSION); + if (ext != null) + { + g.removeExtension(ext); + g.putClientProperty(MARKER_SET_EXTENSION, null); + } + } + + private void handleEditPaneUpdate(EditPaneUpdate epu) + { + Object event = epu.getWhat(); + EditPane ep = epu.getEditPane(); + if (event == EditPaneUpdate.CREATED) + initEditPane(ep); + else if (event == EditPaneUpdate.DESTROYED) + uninitEditPane(ep); + } + + @Override + public void handleMessage(EBMessage message) + { + if (message instanceof EditPaneUpdate) + handleEditPaneUpdate((EditPaneUpdate) message); + } + + static public Vector<String> getMarkerSetNames() + { + Vector<String> names = new Vector<String>(); + for (String s: markerSets.keySet()) + names.add(s); + return names; + } + + static public MarkerSet getMarkerSet(String name) + { + return markerSets.get(name); + } + + static public Collection<MarkerSet> getMarkerSets() + { + return markerSets.values(); + } + + static private MarkerSet addMarkerSet(String name) + { + MarkerSet ms = new MarkerSet(name); + markerSets.put(name, ms); + return ms; + } + + // Actions + static public void setActiveMarkerSet() + { + String name = JOptionPane.showInputDialog("Set active marker set to:"); + MarkerSet ms = markerSets.get(name); + if (ms == null) + { + ms = addMarkerSet(name); + ms.setColor(Color.green); + } + active = ms; + } + static public void useGlobalMarkerSet() + { + active = markerSets.get(GLOBAL_SET); + } + static public void toggleMarker(View view) + { + Buffer b = view.getBuffer(); + JEditTextArea ta = view.getTextArea(); + FileMarker m = new FileMarker(b.getPath(), ta.getCaretLine(), '\0'); + active.toggle(m); + } +} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2009-06-30 17:26:36
|
Revision: 15615 http://jedit.svn.sourceforge.net/jedit/?rev=15615&view=rev Author: shlomy Date: 2009-06-30 17:26:34 +0000 (Tue, 30 Jun 2009) Log Message: ----------- Initial version of the OCR plugin, an interface to the GOCR tool. Added Paths: ----------- plugins/OCR/ plugins/OCR/trunk/ plugins/OCR/trunk/.classpath plugins/OCR/trunk/.project plugins/OCR/trunk/OCR.props plugins/OCR/trunk/actions.xml plugins/OCR/trunk/bin/ plugins/OCR/trunk/bin/ocr/ plugins/OCR/trunk/bin/ocr/OCRPlugin.class plugins/OCR/trunk/build/ plugins/OCR/trunk/build/classes/ plugins/OCR/trunk/build/classes/OCRPlugin.class plugins/OCR/trunk/build/classes/ocr/ plugins/OCR/trunk/build/classes/ocr/OCRPlugin.class plugins/OCR/trunk/build/docs/ plugins/OCR/trunk/build/extras/ plugins/OCR/trunk/build/extras/OCR.props plugins/OCR/trunk/build/extras/actions.xml plugins/OCR/trunk/build/extras/dockables.xml plugins/OCR/trunk/build.xml plugins/OCR/trunk/description.html plugins/OCR/trunk/dockables.xml plugins/OCR/trunk/index.html plugins/OCR/trunk/src/ plugins/OCR/trunk/src/ocr/ plugins/OCR/trunk/src/ocr/OCRPlugin.java Added: plugins/OCR/trunk/.classpath =================================================================== --- plugins/OCR/trunk/.classpath (rev 0) +++ plugins/OCR/trunk/.classpath 2009-06-30 17:26:34 UTC (rev 15615) @@ -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/OCR/trunk/.project =================================================================== --- plugins/OCR/trunk/.project (rev 0) +++ plugins/OCR/trunk/.project 2009-06-30 17:26:34 UTC (rev 15615) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>OCR</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/OCR/trunk/OCR.props =================================================================== --- plugins/OCR/trunk/OCR.props (rev 0) +++ plugins/OCR/trunk/OCR.props 2009-06-30 17:26:34 UTC (rev 15615) @@ -0,0 +1,30 @@ +plugin.ocr.OCRPlugin.activate=startup + +# general plugin information +plugin.ocr.OCRPlugin.name=OCR +plugin.ocr.OCRPlugin.author=Shlomy Reinstein +plugin.ocr.OCRPlugin.version=0.1 +plugin.ocr.OCRPlugin.depend.0=jdk 1.5 +plugin.ocr.OCRPlugin.depend.1=jedit 04.03.10.00 + +# Label for options/actions/whatever of the plugin +OCRPlugin.label=OCR + +# Options +#plugin.browser.GlobalPlugin.option-pane=GlobalPlugin +#options.GlobalPlugin.code=new options.GlobalOptionPane(); +#options.GlobalPlugin.label=GlobalPlugin +options.ocr.gocrPath=D:\\dl\\gocr047.exe + +# action labels +ocr-read-screen-rect.label=Read text from screen rectangle... +ocr-read-picture.label=Read text from picture file... + +# menu items +plugin.ocr.OCRPlugin.menu=ocr-read-screen-rect ocr-read-picture + +# docs +plugin.ocr.OCRPlugin.docs=index.html +plugin.ocr.OCRPlugin.description=OCR provides an interface to the GOCR tool. + + Added: plugins/OCR/trunk/actions.xml =================================================================== --- plugins/OCR/trunk/actions.xml (rev 0) +++ plugins/OCR/trunk/actions.xml 2009-06-30 17:26:34 UTC (rev 15615) @@ -0,0 +1,18 @@ +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> +<!-- $Id: actions.xml 7606 2004-11-07 15:52:36Z orutherfurd $ --> + +<ACTIONS> + + <ACTION NAME="ocr-read-screen-rect" NO_REPEAT="TRUE"> + <CODE> + ocr.OCRPlugin.readScreenRect(view); + </CODE> + </ACTION> + <ACTION NAME="ocr-read-picture" NO_REPEAT="TRUE"> + <CODE> + ocr.OCRPlugin.readPicture(view); + </CODE> + </ACTION> + +</ACTIONS> + Added: plugins/OCR/trunk/bin/ocr/OCRPlugin.class =================================================================== (Binary files differ) Property changes on: plugins/OCR/trunk/bin/ocr/OCRPlugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/OCR/trunk/build/classes/OCRPlugin.class =================================================================== (Binary files differ) Property changes on: plugins/OCR/trunk/build/classes/OCRPlugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/OCR/trunk/build/classes/ocr/OCRPlugin.class =================================================================== (Binary files differ) Property changes on: plugins/OCR/trunk/build/classes/ocr/OCRPlugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/OCR/trunk/build/extras/OCR.props =================================================================== --- plugins/OCR/trunk/build/extras/OCR.props (rev 0) +++ plugins/OCR/trunk/build/extras/OCR.props 2009-06-30 17:26:34 UTC (rev 15615) @@ -0,0 +1,30 @@ +plugin.ocr.OCRPlugin.activate=startup + +# general plugin information +plugin.ocr.OCRPlugin.name=OCR +plugin.ocr.OCRPlugin.author=Shlomy Reinstein +plugin.ocr.OCRPlugin.version=0.1 +plugin.ocr.OCRPlugin.depend.0=jdk 1.5 +plugin.ocr.OCRPlugin.depend.1=jedit 04.03.10.00 + +# Label for options/actions/whatever of the plugin +OCRPlugin.label=OCR + +# Options +#plugin.browser.GlobalPlugin.option-pane=GlobalPlugin +#options.GlobalPlugin.code=new options.GlobalOptionPane(); +#options.GlobalPlugin.label=GlobalPlugin +options.ocr.gocrPath=D:\\dl\\gocr047.exe + +# action labels +ocr-read-screen-rect.label=Read text from screen rectangle... +ocr-read-picture.label=Read text from picture file... + +# menu items +plugin.ocr.OCRPlugin.menu=ocr-read-screen-rect ocr-read-picture + +# docs +plugin.ocr.OCRPlugin.docs=index.html +plugin.ocr.OCRPlugin.description=OCR provides an interface to the GOCR tool. + + Added: plugins/OCR/trunk/build/extras/actions.xml =================================================================== --- plugins/OCR/trunk/build/extras/actions.xml (rev 0) +++ plugins/OCR/trunk/build/extras/actions.xml 2009-06-30 17:26:34 UTC (rev 15615) @@ -0,0 +1,18 @@ +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> +<!-- $Id: actions.xml 7606 2004-11-07 15:52:36Z orutherfurd $ --> + +<ACTIONS> + + <ACTION NAME="ocr-read-screen-rect" NO_REPEAT="TRUE"> + <CODE> + ocr.OCRPlugin.readScreenRect(view); + </CODE> + </ACTION> + <ACTION NAME="ocr-read-picture" NO_REPEAT="TRUE"> + <CODE> + ocr.OCRPlugin.readPicture(view); + </CODE> + </ACTION> + +</ACTIONS> + Added: plugins/OCR/trunk/build/extras/dockables.xml =================================================================== --- plugins/OCR/trunk/build/extras/dockables.xml (rev 0) +++ plugins/OCR/trunk/build/extras/dockables.xml 2009-06-30 17:26:34 UTC (rev 15615) @@ -0,0 +1,10 @@ +<?xml version="1.0"?> + +<!DOCTYPE DOsCKABLES SYSTEM "dockables.dtd"> + +<DOCKABLES> + <!--DOCKABLE NAME="pattern-browser" MOVABLE="TRUE"> + new browser.GlobalResultsView(view, "-g -x -a"); + </DOCKABLE--> +</DOCKABLES> + Added: plugins/OCR/trunk/build.xml =================================================================== --- plugins/OCR/trunk/build.xml (rev 0) +++ plugins/OCR/trunk/build.xml 2009-06-30 17:26:34 UTC (rev 15615) @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<project name="OCR" default="build" basedir="."> +<!-- + This is a build.xml file for building the CtagsSideKick plugin. +--> + <!-- Read optional properties from various places --> + <!-- Latter ones override previous properties. --> + <property file="build.properties"/> + <property file="../build.properties"/> + <property name="javadoc.packagenames" value="ocr.*" /> + <property name="user-doc.xml" location = "users-guide.xml"/> + <property name="plugin.dependencies" value="CommonControls" /> + <property name="dist.target" value="dist.complete" /> + <property name="compiler.source" value="1.5" /> + <property name="compiler.target" value="1.5" /> + + <import file="${build.support}/plugin-build.xml" /> + + <path id="project.class.path"> + <pathelement location="${jedit.install.dir}/jedit.jar" /> + </path> + +</project> Added: plugins/OCR/trunk/description.html =================================================================== --- plugins/OCR/trunk/description.html (rev 0) +++ plugins/OCR/trunk/description.html 2009-06-30 17:26:34 UTC (rev 15615) @@ -0,0 +1,3 @@ +<html> +<p>OCR provides an interface to the GOCR tool.</p> +</html> Added: plugins/OCR/trunk/dockables.xml =================================================================== --- plugins/OCR/trunk/dockables.xml (rev 0) +++ plugins/OCR/trunk/dockables.xml 2009-06-30 17:26:34 UTC (rev 15615) @@ -0,0 +1,10 @@ +<?xml version="1.0"?> + +<!DOCTYPE DOsCKABLES SYSTEM "dockables.dtd"> + +<DOCKABLES> + <!--DOCKABLE NAME="pattern-browser" MOVABLE="TRUE"> + new browser.GlobalResultsView(view, "-g -x -a"); + </DOCKABLE--> +</DOCKABLES> + Added: plugins/OCR/trunk/index.html =================================================================== --- plugins/OCR/trunk/index.html (rev 0) +++ plugins/OCR/trunk/index.html 2009-06-30 17:26:34 UTC (rev 15615) @@ -0,0 +1,13 @@ +<html> +<head> + <title>OCR</title> +</head> + +<body> +<h1>OCR documentation</h1> +Written by Shlomy Reinstein, June 2009. +<h2>Description</h2> +The OCR plugin provides an interface to the GOCR tool. +<h3>Enjoy!</h3> +</body> +</html> Added: plugins/OCR/trunk/src/ocr/OCRPlugin.java =================================================================== --- plugins/OCR/trunk/src/ocr/OCRPlugin.java (rev 0) +++ plugins/OCR/trunk/src/ocr/OCRPlugin.java 2009-06-30 17:26:34 UTC (rev 15615) @@ -0,0 +1,70 @@ +/* +Copyright (C) 2009 Shlomy Reinstein + +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 ocr; +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStream; +import java.io.InputStreamReader; + +import javax.swing.JFileChooser; +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; + +import org.gjt.sp.jedit.Buffer; +import org.gjt.sp.jedit.EditPlugin; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.jEdit; + + +public class OCRPlugin extends EditPlugin { + static public void readPicture(View view) + { + JFileChooser dlg = new JFileChooser(); + FileFilter filter = new FileNameExtensionFilter("Picture file", "pbm"); + dlg.setFileFilter(filter); + if (dlg.showOpenDialog(view) != JFileChooser.APPROVE_OPTION) + return; + String text = readText(dlg.getSelectedFile()); + Buffer b = jEdit.openFile(view, "imported.txt"); + if (b == null) + return; + b.insert(0, text); + } + + static private String readText(File f) + { + String path = f.getAbsolutePath(); + String exe = jEdit.getProperty("options.ocr.gocrPath"); + String [] cmd = { exe, path }; + try { + Process p = Runtime.getRuntime().exec(cmd); + InputStream is = p.getInputStream(); + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + String line; + StringBuilder sb = new StringBuilder(); + while ((line = reader.readLine()) != null) + sb.append(line + "\n"); + p.waitFor(); + return sb.toString(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rfr...@us...> - 2009-08-08 06:15:57
|
Revision: 15879 http://jedit.svn.sourceforge.net/jedit/?rev=15879&view=rev Author: rfrancois Date: 2009-08-08 06:15:47 +0000 (Sat, 08 Aug 2009) Log Message: ----------- name switch s/jeditr/orchestra/ Added Paths: ----------- plugins/orchestra/ plugins/orchestra/trunk/ plugins/orchestra/trunk/actions.xml plugins/orchestra/trunk/build/ plugins/orchestra/trunk/build.properties plugins/orchestra/trunk/build.properties.sample plugins/orchestra/trunk/build.xml plugins/orchestra/trunk/com/ plugins/orchestra/trunk/com/addictedtor/ plugins/orchestra/trunk/com/addictedtor/jeditr/ plugins/orchestra/trunk/com/addictedtor/jeditr/Installer.java plugins/orchestra/trunk/com/addictedtor/jeditr/JEditROptionPane.java plugins/orchestra/trunk/com/addictedtor/jeditr/JEditRPlugin.java plugins/orchestra/trunk/description.html plugins/orchestra/trunk/dockables.xml plugins/orchestra/trunk/jeditr.props plugins/orchestra/trunk/jeditr_icon.ico plugins/orchestra/trunk/jeditr_icon.png plugins/orchestra/trunk/jeditr_starter.r plugins/orchestra/trunk/lib/ plugins/orchestra/trunk/lib/afcommons.jar plugins/orchestra/trunk/lib/commons-logging-1.1.1.jar plugins/orchestra/trunk/lib/jhlir.jar plugins/orchestra/trunk/lib/log4j-1.2.15.jar plugins/orchestra/trunk/services.xml Added: plugins/orchestra/trunk/actions.xml =================================================================== --- plugins/orchestra/trunk/actions.xml (rev 0) +++ plugins/orchestra/trunk/actions.xml 2009-08-08 06:15:47 UTC (rev 15879) @@ -0,0 +1,6 @@ +<?xml version="1.0"?> +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> + +<ACTIONS> + +</ACTIONS> Added: plugins/orchestra/trunk/build.properties =================================================================== --- plugins/orchestra/trunk/build.properties (rev 0) +++ plugins/orchestra/trunk/build.properties 2009-08-08 06:15:47 UTC (rev 15879) @@ -0,0 +1 @@ +link build.properties.sample \ No newline at end of file Property changes on: plugins/orchestra/trunk/build.properties ___________________________________________________________________ Added: svn:special + * Added: plugins/orchestra/trunk/build.properties.sample =================================================================== --- plugins/orchestra/trunk/build.properties.sample (rev 0) +++ plugins/orchestra/trunk/build.properties.sample 2009-08-08 06:15:47 UTC (rev 15879) @@ -0,0 +1,9 @@ +# where to find jedit.jar +jedit.install.dir=/opt/jedit + +# where to find the support files to build the plugin +build.support=/home/romain/svn/build-support + +# where to install the various jars +install.dir=/home/romain/.jedit/jars + Property changes on: plugins/orchestra/trunk/build.properties.sample ___________________________________________________________________ Added: svn:executable + * Added: plugins/orchestra/trunk/build.xml =================================================================== --- plugins/orchestra/trunk/build.xml (rev 0) +++ plugins/orchestra/trunk/build.xml 2009-08-08 06:15:47 UTC (rev 15879) @@ -0,0 +1,67 @@ +<?xml version="1.0"?> +<project name="jeditr" default="build" basedir="."> + + <property file="build.properties"/> + <property name="dist.target" value="build"/> + <property name="compiler.source" value="1.5"/> + <property name="compiler.target" value="1.5"/> + <property name="compiler.debug" value="on"/> + <property name="lib.dir" value="lib" /> + + <property name="jar_jedit" value="${jedit.install.dir}/jedit.jar"/> + + <property name="jar_afcommons" value="${lib.dir}/afcommons.jar"/> + <property name="jar_jhlir" value="${lib.dir}/jhlir.jar"/> + <property name="jar_log4j" value="${lib.dir}/log4j-1.2.15.jar"/> + <property name="jar_commons_logging" value="${lib.dir}/commons-logging-1.1.1.jar"/> + + <import file="${build.support}/plugin-build.xml"/> + + <selector id="packageFiles"> + <or> + <filename name="jeditr_starter.r"/> + <filename name="jeditr_icon.ico"/> + <filename name="jeditr_icon.png"/> + </or> + </selector> + + <path id="project.class.path"> + <pathelement location="${jar_jedit}"/> + <pathelement location="${jar_afcommons}"/> + <pathelement location="${jar_jhlir}"/> + <pathelement location="${jar_log4j}"/> + <pathelement location="${jar_commons_logging}"/> + </path> + + <target name="build.prepare" depends="clean"> + <mkdir dir="${build.dir}"/> + + <copy file="${jar_afcommons}" todir="${install.dir}" /> + <copy file="${jar_jhlir}" todir="${install.dir}" /> + <copy file="${jar_log4j}" todir="${install.dir}" /> + <copy file="${jar_commons_logging}" todir="${install.dir}" /> + </target> + + <!-- just to make eclipse happy, so that we can + create a java project from existing ant file --> + + <path id="_classpath"> + <pathelement location="${jar_jedit}"/> + <pathelement location="${install.dir}/ErrorList.jar"/> + <pathelement location="${install.dir}/Console.jar"/> + <pathelement location="${install.dir}/SideKick.jar"/> + + <pathelement location="${jar_afcommons}"/> + <pathelement location="${jar_jhlir}"/> + <pathelement location="${jar_log4j}"/> + <pathelement location="${jar_commons_logging}"/> + </path> + + <target name="unused"> + <javac srcdir="."> + <classpath refid="_classpath"/> + </javac> + </target> + + +</project> Added: plugins/orchestra/trunk/com/addictedtor/jeditr/Installer.java =================================================================== --- plugins/orchestra/trunk/com/addictedtor/jeditr/Installer.java (rev 0) +++ plugins/orchestra/trunk/com/addictedtor/jeditr/Installer.java 2009-08-08 06:15:47 UTC (rev 15879) @@ -0,0 +1,157 @@ +package com.addictedtor.jeditr; + +import af.commons.OSTools; +import af.commons.install.FreeDesktop; +import af.commons.install.WindowsDesktop; +import af.commons.io.FileTransfer; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.*; + + +/** + * Installer. + * - Extracts icon and R script files from jars to plugin.home + * - Configures the R script + * - Creates shortcut for JEditR + * + * @author Bernd Bischl <ber...@gm...> + * @author Romain Francois <fra...@fr...> + */ + +public class Installer { + protected static final Log logger = LogFactory.getLog(Installer.class); + + private File jeditHomeDir = null; + private File pluginHomeDir = null; + private File rHomeDir = null; +// private File rJavaDir = null; +// private String rLibPaths = null; + private File shortcutDir = null; + public static final String RSCRIPT_NAME = "jeditr_starter.r"; + public static final String ICON_NAME_WINDOWS = "jeditr_icon.ico"; + public static final String ICON_NAME_LINUX = "jeditr_icon.png"; + + public Installer(String jeditHomeDir, String pluginHomeDir, + String rHomeDir, String shortcutDir) { + this.jeditHomeDir = new File(jeditHomeDir); + this.pluginHomeDir = new File(pluginHomeDir); + this.rHomeDir = new File(rHomeDir); + this.shortcutDir = new File(shortcutDir); + logger.info("Installer was started with:"); + logger.info("JEDIT_HOME:" + this.jeditHomeDir.getAbsolutePath()); + logger.info("PLUGIN_HOME:" + this.pluginHomeDir.getAbsolutePath()); + logger.info("R_HOME:" + this.rHomeDir.getAbsolutePath()); + logger.info("Shortcut dir:" + this.shortcutDir.getAbsolutePath()); + } + + private File extractRScript() { + String script = "", s; + File scriptFile = new File(pluginHomeDir, RSCRIPT_NAME); + logger.info("Extracting R starter script to: " + scriptFile); + try { + InputStream is = this.getClass().getResourceAsStream("/" + RSCRIPT_NAME); + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + BufferedWriter writer = new BufferedWriter( + new FileWriter(scriptFile)); + while((s = reader.readLine()) != null) { + script += s + "\n"; + } + is.close(); + + String javaStr = forwardSlashes(System.getProperty("java.home")); + String javaExeStr; + if (OSTools.isWindows()) + javaExeStr = "javaw.exe"; + else + javaExeStr = "java"; + String jeditStr = forwardSlashes(jeditHomeDir); + + String pluginHomeStr = forwardSlashes(pluginHomeDir.getAbsolutePath()) ; + + logger.info("Replacing the following templates:"); + logger.info("@JAVA_HOME@ :" + javaStr); + logger.info("@JAVA_EXE@ :" + javaExeStr); + logger.info("@JEDIT_HOME@ :" + jeditStr); + logger.info("@PLUGIN_HOME@ :" + pluginHomeDir ); + + + script = script.replace("@JAVA_HOME@", javaStr); + script = script.replace("@JAVA_EXE@", javaExeStr); + script = script.replace("@JEDIT_HOME@", jeditStr); + script = script.replace("@PLUGIN_HOME@", pluginHomeStr); + + File libDir = new File( pluginHomeDir + "/library" ) ; + if( !libDir.exists() ){ + logger.info( "creating R library in plugin home: '" + pluginHomeStr + "/library" ) ; + libDir.mkdirs(); + } else{ + // maybe check that the this actually is a library + } + + writer.write(script); + writer.close(); + } catch (IOException e) { + //todo deal with it better + // should not happen + e.printStackTrace(); + } + logger.info("R starter script done."); + return scriptFile; + } + + private void extractJEditRIcons() throws IOException{ + logger.info("Extracting icons to: " + pluginHomeDir); + FileTransfer.copyResourceToLocalDir(this.getClass().getResource("/"+ICON_NAME_WINDOWS), + ICON_NAME_WINDOWS, pluginHomeDir); + FileTransfer.copyResourceToLocalDir(this.getClass().getResource("/"+ICON_NAME_WINDOWS), + ICON_NAME_LINUX, pluginHomeDir); + logger.info("Extracting icons done."); + } + + private void createShortcutWindows(String targetCmd, File iconFile) throws IOException{ + WindowsDesktop d = new WindowsDesktop(); + d.setExec(targetCmd); + d.setIconpath(iconFile.getAbsolutePath()); + logger.info("Shortcut icon is: " + iconFile); + d.setWorkingDir(pluginHomeDir.getAbsolutePath()); + d.createDesktopEntry(shortcutDir, "JEditR"); + } + + private void createShortcutFreeDesktop(String targetCmd, File iconFile) throws IOException{ + FreeDesktop d = new FreeDesktop(); + d.setExec(targetCmd); + d.setIconpath(iconFile.getAbsolutePath()); + logger.info("Shortcut icon is: " + iconFile); + d.createDesktopEntry(shortcutDir, "JEditR"); + } + + public void install() throws IOException{ + File scriptFile = extractRScript(); + extractJEditRIcons(); + File rExe = new File(new File(rHomeDir, "bin"), "R"); + + boolean createDesktop = true; + if (createDesktop) { + logger.info("Creating shortcut entry in " + shortcutDir.getAbsolutePath()); + String targetCmd = rExe.getAbsolutePath() + " CMD BATCH " + scriptFile.getAbsolutePath(); + logger.info("Shortcut cmd is: " + targetCmd); + if (OSTools.isWindows()) { + createShortcutWindows(targetCmd, new File(pluginHomeDir, ICON_NAME_WINDOWS)); + } else { + createShortcutFreeDesktop(targetCmd, new File(pluginHomeDir, ICON_NAME_LINUX)); + } + logger.info("Shortcut done."); + } + } + + private String forwardSlashes(String s) { + return s.replace("\\", "/"); + } + + private String forwardSlashes(File f) { + return forwardSlashes(f.getAbsolutePath()); + } + +} Added: plugins/orchestra/trunk/com/addictedtor/jeditr/JEditROptionPane.java =================================================================== --- plugins/orchestra/trunk/com/addictedtor/jeditr/JEditROptionPane.java (rev 0) +++ plugins/orchestra/trunk/com/addictedtor/jeditr/JEditROptionPane.java 2009-08-08 06:15:47 UTC (rev 15879) @@ -0,0 +1,140 @@ +package com.addictedtor.jeditr; + +import org.af.jhlir.tools.DirectoryGuesser; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.gjt.sp.jedit.AbstractOptionPane; +import org.gjt.sp.jedit.jEdit; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.util.Hashtable; + + +/** + * Options panel + * + * @author Bernd Bischl <ber...@gm...> + * @author Romain Francois <fra...@fr...> + */ + +public class JEditROptionPane extends AbstractOptionPane implements ActionListener { + protected static final Log logger = LogFactory.getLog(JEditROptionPane.class); + + public static final String OPTION_PREFIX = "options.jeditr."; + private Hashtable<String, JTextField> pathNames = new Hashtable<String, JTextField>(); + private JTextField tfRHome = new JTextField(); + private JTextField tfShortcut = new JTextField(); + + + public JEditROptionPane() { + super("jeditr-optionpane"); + } + + + public void _init() { + addPathPanel("rhome", tfRHome); + addPathPanel("shortcut", tfShortcut); + guessDirs(); + } + + private void addPathPanel(String name, JTextField tf) { + pathNames.put(name, tf); + addSeparator(OPTION_PREFIX + name + ".title"); + addComponent("", makePathPanel(name, tf)); + } + + private void guessDirs() { +// if (tfJavaHome.getText().trim().equals("")) +// tfJavaHome.setText(DirectoryGuesser.guessJavaHome()); + if (tfRHome.getText().trim().equals("")) { + String rHome = DirectoryGuesser.guessRHome(); + logger.info("Guessing R_HOME : " + rHome); + tfRHome.setText(rHome); + } + if (tfShortcut.getText().trim().equals("")) { + String desktop = DirectoryGuesser.guessDesktop(); + logger.info("Guessing shortcut dir : " + desktop); + tfShortcut.setText(desktop); + } + } + + private JPanel makePathPanel(String name, JTextField tf) { + tf.setText(jEdit.getProperty(OPTION_PREFIX + name + ".path")); + JButton pickPath = new JButton(jEdit.getProperty(OPTION_PREFIX + "choose-dir")); + pickPath.setActionCommand("choose-" + name); + JPanel pathPanel = new JPanel(new BorderLayout(0, 0)); + pathPanel.add(tf, BorderLayout.CENTER); + pathPanel.add(pickPath, BorderLayout.EAST); + pickPath.addActionListener(this); + return pathPanel; + } + + + + private void selectDir(String name) { + JFileChooser fc = new JFileChooser(); + fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + int res = fc.showOpenDialog(this); + if (res == JFileChooser.APPROVE_OPTION) { + String dir = fc.getSelectedFile().getAbsolutePath(); + pathNames.get(name).setText(dir); + } + } + + public void actionPerformed(ActionEvent e) { + String ac = e.getActionCommand(); + if (ac.startsWith("choose-")) { + selectDir(ac.substring(7)); + } + } + + + + public void _save() { + + logger.info("Saving options."); + + String rhome = tfRHome.getText(); + String javahome = System.getProperty("java.home"); + String shortcut = tfShortcut.getText(); + + File rhomeFile = new File(rhome); + File shortcutFile = new File(shortcut); + + String err = null; + if (!rhomeFile.exists() || !rhomeFile.isDirectory()) { + err = "R home directory does not exist or is not a proper directory!"; + } + if (!shortcutFile.exists() || !shortcutFile.isDirectory()) { + err = "Directory for shortcut does not exist or is not a proper directory!"; + } + + if (err != null) { + JOptionPane.showMessageDialog(this, err); + } else { + try { +// RCmdBatch rCmdBatch = new RCmdBatch(rhome); +// rCmdBatch.retrieveRInfo(); +// RPackage rp = rCmdBatch.getInstalledPackInfo("rJava"); + Installer i = new Installer( + jEdit.getJEditHome(), + JEditRPlugin.getPluginHomePath(), + rhome, +// rp.getLibpath().getAbsolutePath(), +// rCmdBatch.getLibPaths(), +// javahome, + shortcut + ); + i.install(); + } catch (Exception e) { + // todo handle + e.printStackTrace(); + } + } + logger.info("Saving options done."); + } +} Added: plugins/orchestra/trunk/com/addictedtor/jeditr/JEditRPlugin.java =================================================================== --- plugins/orchestra/trunk/com/addictedtor/jeditr/JEditRPlugin.java (rev 0) +++ plugins/orchestra/trunk/com/addictedtor/jeditr/JEditRPlugin.java 2009-08-08 06:15:47 UTC (rev 15879) @@ -0,0 +1,99 @@ +package com.addictedtor.jeditr; + +import org.apache.log4j.FileAppender; +import org.apache.log4j.Logger; +import org.apache.log4j.PatternLayout; +import org.gjt.sp.jedit.EBMessage; +import org.gjt.sp.jedit.EditPlugin; +import org.gjt.sp.jedit.EBPlugin; +import org.gjt.sp.jedit.jEdit; + +import javax.swing.*; +import java.io.File; + + + +/** + * Main class of the jeditr installer plugin + * + * @author Bernd Bischl <ber...@gm...> + * @author Romain Francois <fra...@fr...> + */ +public class JEditRPlugin extends EBPlugin { + + public static final String NAME = "JEditRPlugin"; + + // log4j + public static final String LOG_FILENAME = "jeditr_installer.log"; + + + // must be public for jedit, but dont call this! + public JEditRPlugin() { + } + + /** + * Start method of the plugin. This is where the magic takes place + */ + @Override + public void start() { + String jeditr_home = System.getProperty("jeditr.home", "") ; + if( jeditr_home.equals("") ){ + startInstallerPlugin(); + } else { + // load the jeditr plugin from the R package tree + String jar = jeditr_home + "/java/R.jar" ; + if((new File( jar ) ).exists() ){ + jEdit.addPluginJAR( jar ) ; + } else { + //todo better handling? + JOptionPane.showMessageDialog(jEdit.getActiveView(), "JEditR: Cannot find R.jar. Please install the jeditr R package and then run the installer plugin for jedit again!"); + } + } + } + + private void startInstallerPlugin() { + // configure log4j + File log = new File(getPluginHome(), LOG_FILENAME); + Logger rootLogger = Logger.getRootLogger(); + FileAppender fa = new FileAppender(); + fa.setFile(log.getAbsolutePath()); + fa.setLayout(new PatternLayout("%-5p - %m%n [%t] (%c:%M at %F:%L)%n")); + fa.setAppend(false); + rootLogger.addAppender(fa); + fa.activateOptions(); + rootLogger.info("jeditr plugin started!"); + rootLogger.info("log4j configured."); + rootLogger.info("log goes to: " + log.getAbsolutePath()); + } + + + + + + + + + + + + + /** + * Stop method of the plugin. Placeholder at the moment. + */ + @Override + public void stop() { + } + + public void handleMessage(EBMessage message) { + // placeholder + } + + /** + * Returns the home of this plugin + */ + public static String getPluginHomePath(){ + return EditPlugin.getPluginHome( JEditRPlugin.class ).getAbsolutePath(); + } + +} + Added: plugins/orchestra/trunk/description.html =================================================================== --- plugins/orchestra/trunk/description.html (rev 0) +++ plugins/orchestra/trunk/description.html 2009-08-08 06:15:47 UTC (rev 15879) @@ -0,0 +1,9 @@ +<html> + <head> + <title>jeditr : jedit as an R IDE</title> + </head> + <body> + This plugin works together with the <code>jeditr</code> + R package to turn jedit into an IDE for R + </body> +</html> Added: plugins/orchestra/trunk/dockables.xml =================================================================== --- plugins/orchestra/trunk/dockables.xml (rev 0) +++ plugins/orchestra/trunk/dockables.xml 2009-08-08 06:15:47 UTC (rev 15879) @@ -0,0 +1,6 @@ +<?xml version="1.0"?> +<!DOCTYPE DOCKABLES SYSTEM "dockables.dtd"> + +<DOCKABLES> +</DOCKABLES> + Added: plugins/orchestra/trunk/jeditr.props =================================================================== --- plugins/orchestra/trunk/jeditr.props (rev 0) +++ plugins/orchestra/trunk/jeditr.props 2009-08-08 06:15:47 UTC (rev 15879) @@ -0,0 +1,30 @@ +plugin.com.addictedtor.jeditr.JEditRPlugin.name=JeditRPlugin +plugin.com.addictedtor.jeditr.JEditRPlugin.author=Romain Francois +plugin.com.addictedtor.jeditr.JEditRPlugin.version=0.0 +plugin.com.addictedtor.jeditr.JEditRPlugin.activate=startup +plugin.com.addictedtor.jeditr.JEditRPlugin.usePluginHome=true +plugin.com.addictedtor.jeditr.JEditRPlugin.description=jedit as an R IDE +plugin.com.addictedtor.jeditr.JEditRPlugin.jars=afcommons.jar jhlir.jar + +plugin.com.addictedtor.jeditr.JEditRPlugin.depend.0=jdk 1.5 +plugin.com.addictedtor.jeditr.JEditRPlugin.depend.1=jedit 04.03.16.00 +plugin.com.addictedtor.jeditr.JEditRPlugin.depend.2=plugin console.ConsolePlugin 4.3 +plugin.com.addictedtor.jeditr.JEditRPlugin.depend.3=plugin errorlist.ErrorListPlugin 1.7 +plugin.com.addictedtor.jeditr.JEditRPlugin.depend.4=plugin sidekick.SideKickPlugin 0.7.5 + +plugin.com.addictedtor.jeditr.JEditRPlugin.jars=afcommons.jar,jhlir.jar,log4j-1.2.15.jar,commons-logging-1.1.1.jar + +# plugin option pane +plugin.com.addictedtor.jeditr.JEditRPlugin.option-pane=jeditr + +# Option pane activation BeanShell snippet +options.jeditr.code=new com.addictedtor.jeditr.JEditROptionPane(); + +# Option pane labels +options.jeditr.label=JEditR + +options.jeditr.choose-dir=Choose +options.jeditr.rhome.title=Set R Home directory +options.jeditr.rhome.path= +options.jeditr.shortcut.title=Set directory for JeditR shortcut +options.jeditr.shortcut.path= Added: plugins/orchestra/trunk/jeditr_icon.ico =================================================================== (Binary files differ) Property changes on: plugins/orchestra/trunk/jeditr_icon.ico ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/orchestra/trunk/jeditr_icon.png =================================================================== (Binary files differ) Property changes on: plugins/orchestra/trunk/jeditr_icon.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/orchestra/trunk/jeditr_starter.r =================================================================== --- plugins/orchestra/trunk/jeditr_starter.r (rev 0) +++ plugins/orchestra/trunk/jeditr_starter.r 2009-08-08 06:15:47 UTC (rev 15879) @@ -0,0 +1,110 @@ +#!/bin/env Rscript + +# {{{ Copyright/licence notice +# :tabSize=2:indentSize=2:noTabs=false:folding=explicit:collapseFolds=1: +# Copyright (c) 2009, Romain Francois <fra...@fr...> +# Copyright (c) 2009, Bernd Bischl <ber...@gm...> +# +# This file is part of the jeditr R package +# +# The jeditr R package 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. +# +# The jeditr R package 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 the jeditr R package. If not, see <http://www.gnu.org/licenses/>. +# }}} + +# {{{ environment variables +SEP <- .Platform$path.sep + +# {{{ R_HOME +R_HOME <- R.home() +Sys.setenv(R_HOME = R_HOME ) +# }}} + +# {{{ add the plugin home to R_LIBS +R_LIBS <- Sys.getenv( "R_LIBS", unset = "" ) +JEDIT_RLIBS <- "@PLUGIN_HOME@/library" +# set by java jeditr installer plugin +R_LIBS <- if( R_LIBS == "" ){ + JEDIT_RLIBS +} else{ + paste( R_LIBS, JEDIT_RLIBS, sep = ":" ) +} +Sys.setenv( R_LIBS = R_LIBS ) +# }}} + +# {{{ JAVA_HOME and java +# set by java jeditr installer plugin, so we always know java_home +JAVA_HOME <- "@JAVA_HOME@" +java_exe <- "@JAVA_EXE@" +java <- file.path( JAVA_HOME, "bin", java_exe ) +if( !file.exists( java ) ){ + stop(paste("no", java_exe, "in bin dir of", JAVA_HOME)) +} +# }}} + +# {{{ JEDIT_HOME and jeddit.jar +# set by java jeditr installer plugin, so we always know jedit_home +JEDIT_HOME <- "@JEDIT_HOME@" +jedit.jar <- file.path( JEDIT_HOME, "jedit.jar" ) +if( !file.exists( jedit.jar ) ){ + stop( "the jedit home directory does not contain a file called jedit.jar" ) +} +# }}} + +# {{{ PATH +Sys.setenv( PATH = + paste( + file.path( R.home(), "bin") , + file.path( JAVA_HOME, "bin" ) , + Sys.getenv('PATH'), + sep= SEP) ) +# }}} + +# {{{ LD_LIBRARY_PATH +LD_LIBRARY_PATH <- Sys.getenv( "LD_LIBRARY_PATH", unset = "" ) +if( LD_LIBRARY_PATH == "" ){ + LD_LIBRARY_PATH <- Sys.getenv( "JAVA_LIBRARY_PATH", unset = "" ) +} +# add JRI +JRI_LD_PATH <- paste( + system.file( "jri", package = "rJava" ), + file.path( R_HOME, "lib") +, sep = SEP ) +LD_LIBRARY_PATH <- if( LD_LIBRARY_PATH == "" ){ + JRI_LD_PATH +} else { + paste( LD_LIBRARY_PATH, JRI_LD_PATH, sep = SEP ) +} +Sys.setenv( LD_LIBRARY_PATH = LD_LIBRARY_PATH ) +# }}} + +# {{{ JEDITR_HOME +JEDITR_HOME = system.file( package = "jeditr" ) +# }}} +# }}} + +# {{{ the command +cmd <- sprintf( '"%s" -Djava.library.path="%s" -Djeditr.home="%s" -Drhome="%s" -jar "%s" ', + java, LD_LIBRARY_PATH, JEDITR_HOME, R_HOME, jedit.jar ) + +# additional parameters +params <- commandArgs( TRUE ) +if( length( params ) ){ + cmd <- paste( cmd, params, sep = " ") +} + +# run asynchronously to suppress shell - at least necessary on windows +system(cmd, wait=FALSE) + +# }}} + Added: plugins/orchestra/trunk/lib/afcommons.jar =================================================================== (Binary files differ) Property changes on: plugins/orchestra/trunk/lib/afcommons.jar ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/orchestra/trunk/lib/commons-logging-1.1.1.jar =================================================================== (Binary files differ) Property changes on: plugins/orchestra/trunk/lib/commons-logging-1.1.1.jar ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/orchestra/trunk/lib/jhlir.jar =================================================================== (Binary files differ) Property changes on: plugins/orchestra/trunk/lib/jhlir.jar ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/orchestra/trunk/lib/log4j-1.2.15.jar =================================================================== (Binary files differ) Property changes on: plugins/orchestra/trunk/lib/log4j-1.2.15.jar ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/orchestra/trunk/services.xml =================================================================== --- plugins/orchestra/trunk/services.xml (rev 0) +++ plugins/orchestra/trunk/services.xml 2009-08-08 06:15:47 UTC (rev 15879) @@ -0,0 +1,4 @@ +<?xml version="1.0"?> +<!DOCTYPE SERVICES SYSTEM "services.dtd"> +<SERVICES> +</SERVICES> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rfr...@us...> - 2009-08-09 08:12:12
|
Revision: 15886 http://jedit.svn.sourceforge.net/jedit/?rev=15886&view=rev Author: rfrancois Date: 2009-08-09 08:12:02 +0000 (Sun, 09 Aug 2009) Log Message: ----------- initial dump of Native plugin Added Paths: ----------- plugins/Native/ plugins/Native/trunk/ plugins/Native/trunk/actions.xml plugins/Native/trunk/build.properties.sample plugins/Native/trunk/build.xml plugins/Native/trunk/com/ plugins/Native/trunk/com/addictedtor/ plugins/Native/trunk/com/addictedtor/nativ/ plugins/Native/trunk/com/addictedtor/nativ/NativeLibraryPathProvider.java plugins/Native/trunk/com/addictedtor/nativ/NativePlugin.java plugins/Native/trunk/description.html plugins/Native/trunk/dockables.xml plugins/Native/trunk/native.props plugins/Native/trunk/services.xml Added: plugins/Native/trunk/actions.xml =================================================================== --- plugins/Native/trunk/actions.xml (rev 0) +++ plugins/Native/trunk/actions.xml 2009-08-09 08:12:02 UTC (rev 15886) @@ -0,0 +1,6 @@ +<?xml version="1.0"?> +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> + +<ACTIONS> + +</ACTIONS> Added: plugins/Native/trunk/build.properties.sample =================================================================== --- plugins/Native/trunk/build.properties.sample (rev 0) +++ plugins/Native/trunk/build.properties.sample 2009-08-09 08:12:02 UTC (rev 15886) @@ -0,0 +1,9 @@ +# where to find jedit.jar +jedit.install.dir=/opt/jedit + +# where to find the support files to build the plugin +build.support=/home/romain/svn/build-support + +# where to install the various jars +install.dir=/home/romain/.jedit/jars + Property changes on: plugins/Native/trunk/build.properties.sample ___________________________________________________________________ Added: svn:executable + * Added: plugins/Native/trunk/build.xml =================================================================== --- plugins/Native/trunk/build.xml (rev 0) +++ plugins/Native/trunk/build.xml 2009-08-09 08:12:02 UTC (rev 15886) @@ -0,0 +1,32 @@ +<?xml version="1.0"?> +<project name="native" default="build" basedir="."> + + <property file="build.properties"/> + <property name="dist.target" value="build"/> + <property name="compiler.source" value="1.5"/> + <property name="compiler.target" value="1.5"/> + <property name="compiler.debug" value="on"/> + + <property name="jar_jedit" value="${jedit.install.dir}/jedit.jar"/> + + <import file="${build.support}/plugin-build.xml"/> + + <path id="project.class.path"> + <pathelement location="${jar_jedit}"/> + </path> + + <!-- just to make eclipse happy, so that we can + create a java project from existing ant file --> + + <path id="_classpath"> + <pathelement location="${jar_jedit}"/> + </path> + + <target name="unused"> + <javac srcdir="."> + <classpath refid="_classpath"/> + </javac> + </target> + + +</project> Added: plugins/Native/trunk/com/addictedtor/nativ/NativeLibraryPathProvider.java =================================================================== --- plugins/Native/trunk/com/addictedtor/nativ/NativeLibraryPathProvider.java (rev 0) +++ plugins/Native/trunk/com/addictedtor/nativ/NativeLibraryPathProvider.java 2009-08-09 08:12:02 UTC (rev 15886) @@ -0,0 +1,15 @@ +package com.addictedtor.nativ ; + +/** + * native library path provider. This is a jedit service + * plugins can implement. + */ +public abstract class NativeLibraryPathProvider { + + /** + * Returns the path of the native library + */ + public abstract String[] getNativeLibraries( ) ; + +} + Added: plugins/Native/trunk/com/addictedtor/nativ/NativePlugin.java =================================================================== --- plugins/Native/trunk/com/addictedtor/nativ/NativePlugin.java (rev 0) +++ plugins/Native/trunk/com/addictedtor/nativ/NativePlugin.java 2009-08-09 08:12:02 UTC (rev 15886) @@ -0,0 +1,56 @@ +package com.addictedtor.nativ ; + +import org.gjt.sp.jedit.EBMessage; +import org.gjt.sp.jedit.EBPlugin; +import org.gjt.sp.jedit.ServiceManager ; + +import org.gjt.sp.jedit.msg.PluginUpdate; + +/** + * @author Romain Francois <fra...@fr...> + */ +public class NativePlugin extends EBPlugin { + + public static final String NAME = "NativePlugin"; + + public NativePlugin() {} + + /** + * Start method of the plugin. This is where the magic takes place + */ + @Override + public void start() { + } + + /** + * Stop method of the plugin. Placeholder at the moment. + */ + @Override + public void stop() { + } + + public void handleMessage(EBMessage message) { + if( message instanceof PluginUpdate){ + PluginUpdate pu = (PluginUpdate)message ; + if( pu.getWhat() == PluginUpdate.LOADED ){ + + NativeLibraryPathProvider service = + (NativeLibraryPathProvider) ServiceManager.getService( + "com.addictedtor.nativ.NativeLibraryPathProvider", pu.getPluginJAR().getPlugin().getClassName() + ); + if( service != null ){ + String[] libraries = service.getNativeLibraries() ; + for( String lib: libraries ){ + try{ + System.load( lib ); + } catch( Exception e){ + e.printStackTrace(); + } + } + } + } + } + } + +} + Added: plugins/Native/trunk/description.html =================================================================== --- plugins/Native/trunk/description.html (rev 0) +++ plugins/Native/trunk/description.html 2009-08-09 08:12:02 UTC (rev 15886) @@ -0,0 +1,9 @@ +<html> + <head> + <title>Native Library Loader/title> + </head> + <body> + This plugin facilitates the loading of native libraries into jedit + </body> +</html> + Added: plugins/Native/trunk/dockables.xml =================================================================== --- plugins/Native/trunk/dockables.xml (rev 0) +++ plugins/Native/trunk/dockables.xml 2009-08-09 08:12:02 UTC (rev 15886) @@ -0,0 +1,6 @@ +<?xml version="1.0"?> +<!DOCTYPE DOCKABLES SYSTEM "dockables.dtd"> + +<DOCKABLES> +</DOCKABLES> + Added: plugins/Native/trunk/native.props =================================================================== --- plugins/Native/trunk/native.props (rev 0) +++ plugins/Native/trunk/native.props 2009-08-09 08:12:02 UTC (rev 15886) @@ -0,0 +1,10 @@ +plugin.com.addictedtor.nativ.NativePlugin.name=Native +plugin.com.addictedtor.nativ.NativePlugin.author=Romain Francois +plugin.com.addictedtor.nativ.NativePlugin.version=0.0 +plugin.com.addictedtor.nativ.NativePlugin.activate=startup +plugin.com.addictedtor.nativ.NativePlugin.usePluginHome=true +plugin.com.addictedtor.nativ.NativePlugin.description=Native Libraries loader + +plugin.com.addictedtor.nativ.NativePlugin.depend.0=jdk 1.5 +plugin.com.addictedtor.nativ.NativePlugin.depend.1=jedit 04.03.17.00 + Added: plugins/Native/trunk/services.xml =================================================================== --- plugins/Native/trunk/services.xml (rev 0) +++ plugins/Native/trunk/services.xml 2009-08-09 08:12:02 UTC (rev 15886) @@ -0,0 +1,4 @@ +<?xml version="1.0"?> +<!DOCTYPE SERVICES SYSTEM "services.dtd"> +<SERVICES> +</SERVICES> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2009-08-16 01:31:48
|
Revision: 15913 http://jedit.svn.sourceforge.net/jedit/?rev=15913&view=rev Author: shlomy Date: 2009-08-16 01:31:41 +0000 (Sun, 16 Aug 2009) Log Message: ----------- Initial, partial version of UpdaterPlugin, whose purpose is to automate updating of jEdit. Added Paths: ----------- plugins/Updater/ plugins/Updater/trunk/ plugins/Updater/trunk/Updater.props plugins/Updater/trunk/actions.xml plugins/Updater/trunk/build.xml plugins/Updater/trunk/index.html plugins/Updater/trunk/src/ plugins/Updater/trunk/src/UpdaterPlugin.java Added: plugins/Updater/trunk/Updater.props =================================================================== --- plugins/Updater/trunk/Updater.props (rev 0) +++ plugins/Updater/trunk/Updater.props 2009-08-16 01:31:41 UTC (rev 15913) @@ -0,0 +1,20 @@ +plugin.UpdaterPlugin.activate=defer + +# general plugin information +plugin.UpdaterPlugin.name=Updater +plugin.UpdaterPlugin.author=Shlomy Reinstein +plugin.UpdaterPlugin.version=0.1 +plugin.UpdaterPlugin.description=Auto-update plugin + +plugin.UpdaterPlugin.depend.0=jdk 1.5 +plugin.UpdaterPlugin.depend.1=jedit 04.03.17.00 + +# action labels +updater-update.label=Update jEdit + +# menu items +plugin.UpdaterPlugin.menu=updater-update + +# docs +plugin.UpdaterPlugin.docs=index.html + Added: plugins/Updater/trunk/actions.xml =================================================================== --- plugins/Updater/trunk/actions.xml (rev 0) +++ plugins/Updater/trunk/actions.xml 2009-08-16 01:31:41 UTC (rev 15913) @@ -0,0 +1,13 @@ +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> +<!-- $Id: actions.xml 7606 2004-11-07 15:52:36Z orutherfurd $ --> + +<ACTIONS> + + <ACTION NAME="updater-update" NO_REPEAT="TRUE"> + <CODE> + UpdaterPlugin.getInstance().updateVersion(); + </CODE> + </ACTION> + +</ACTIONS> + Added: plugins/Updater/trunk/build.xml =================================================================== --- plugins/Updater/trunk/build.xml (rev 0) +++ plugins/Updater/trunk/build.xml 2009-08-16 01:31:41 UTC (rev 15913) @@ -0,0 +1,82 @@ +<?xml version="1.0"?> + +<!-- + + This is the build.xml file for building the Tags plugin. + + It is based on the standard build.xml file for jEdit plugins. + +--> + +<project name="UpdaterPlugin" default="dist" basedir="."> + + <property file="build.properties"/> + <property file="../build.properties"/> + <property file="${user.home}/.build.properties"/> + <property file="${user.home}/build.properties"/> + + <property name="jar.name" value="${ant.project.name}.jar"/> + <property name="docs-proc.target" value="xsltproc"/> + + <property name="src.dir" value="."/> + <property name="install.dir" value=".."/> + <property name="build.dir" value="build"/> + + <path id="project.class.path"> + <pathelement location="${jedit.install.dir}/jedit.jar"/> + <pathelement location="${src.dir}"/> + </path> + + <target name="prepare" > + <mkdir dir="${build.dir}" /> + </target> + + <target name="compile" depends="prepare"> + <javac + srcdir="${src.dir}" + destdir="${build.dir}" + deprecation="on" + debug="yes" + includeJavaRuntime="yes" + > + <classpath refid="project.class.path"/> + </javac> + </target> + + <target name="dist" depends="compile"> + <mkdir dir="${install.dir}"/> + + <jar jarfile="${install.dir}/${jar.name}"> + <fileset dir="${build.dir}"/> + <fileset dir="${src.dir}"> + <include name="actions.xml"/> + <include name="dockables.xml"/> + <include name="**/*.props"/> + <include name="**/*.html"/> + <include name="**/*.txt"/> + <include name="**/*.png"/> + </fileset> + </jar> + </target> + + <target name="clean"> + <delete dir="${build.dir}"/> + <delete> + <fileset dir="." includes="**/*~"/> + </delete> + <delete file="doc/index.html"/> + <delete file="doc/docbook-wrapper.xsl"/> + </target> + + <target name="tags"> + <exec executable="ctags"> + <arg value="-f" /> + <arg path="tags_" /> + <arg value="-R" /> + <arg path="." /> + </exec> + </target> + +</project> + +<!-- :indentSize=4:lineSeparator=\n:noTabs=false:tabSize=4: --> Added: plugins/Updater/trunk/index.html =================================================================== --- plugins/Updater/trunk/index.html (rev 0) +++ plugins/Updater/trunk/index.html 2009-08-16 01:31:41 UTC (rev 15913) @@ -0,0 +1,8 @@ +<html> +<title>UpdaterPlugin</title> +<body> +<h1>UpdaterPlugin</h1> +Written by Shlomy Reinstein, August 2009. +Automatically updates jEdit from the website. +</body> +</html> Added: plugins/Updater/trunk/src/UpdaterPlugin.java =================================================================== --- plugins/Updater/trunk/src/UpdaterPlugin.java (rev 0) +++ plugins/Updater/trunk/src/UpdaterPlugin.java 2009-08-16 01:31:41 UTC (rev 15913) @@ -0,0 +1,159 @@ +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.gjt.sp.jedit.EditPlugin; + +public class UpdaterPlugin extends EditPlugin +{ + static public final String downloadPage = "http://jedit.org/index.php?page=download"; + static private UpdaterPlugin instance; + private File tempInstallerFile; + + @Override + public void start() + { + instance = this; + } + + @Override + public void stop() + { + instance = null; + } + + static public UpdaterPlugin getInstance() + { + return instance; + } + + public String getDownloadLink() + { + String link = null; + URL url; + InputStream in = null; + BufferedReader bin = null; + try + { + url = new URL(downloadPage); + in = url.openStream(); + bin = new BufferedReader(new InputStreamReader(in)); + String line; + Pattern downloadLinkPattern = Pattern.compile( + ".*<a href=\"([^\"]+)\">Java-based installer.*"); + while((line = bin.readLine()) != null) + { + Matcher m = downloadLinkPattern.matcher(line); + if (m.find()) + { + link = m.group(1); + break; + } + } + } + catch(IOException e) + { + } + finally + { + if (bin != null) + { + try + { + bin.close(); + in = null; + } + catch (IOException e) + { + } + } + if (in != null) + { + try + { + in.close(); + } + catch (IOException e) + { + } + } + } + return link; + } + + public void downloadFile(String urlString) + { + URL url; + InputStream in = null; + BufferedInputStream bin = null; + FileOutputStream out = null; + try + { + url = new URL(urlString); + in = url.openStream(); + bin = new BufferedInputStream(in); + tempInstallerFile = File.createTempFile("jedit", "jar"); + System.err.println("Downloading to: " + tempInstallerFile.getAbsolutePath()); + out = new FileOutputStream(tempInstallerFile); + int i; + while((i = bin.read()) != -1) + out.write(i); + } + catch(IOException e) + { + } + finally + { + if (bin != null) + { + try + { + bin.close(); + in = null; + } + catch (IOException e) + { + } + } + if (in != null) + { + try + { + in.close(); + } + catch (IOException e) + { + } + } + if (out != null) + { + try + { + out.close(); + } + catch (IOException e) + { + } + } + } + } + + public void updateVersion() + { + String link = getDownloadLink(); + if (link == null) + { + System.err.println("Download link not found"); + return; + } + System.err.println("Download link: " + link); + downloadFile(link); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2009-08-20 07:14:48
|
Revision: 15999 http://jedit.svn.sourceforge.net/jedit/?rev=15999&view=rev Author: shlomy Date: 2009-08-20 07:14:41 +0000 (Thu, 20 Aug 2009) Log Message: ----------- First version of the DirtyGutter plugin, which marks dirty lines in the gutter. Added Paths: ----------- plugins/LineChangeMarker/ plugins/LineChangeMarker/trunk/ plugins/LineChangeMarker/trunk/.classpath plugins/LineChangeMarker/trunk/.project plugins/LineChangeMarker/trunk/.settings/ plugins/LineChangeMarker/trunk/.settings/org.eclipse.jdt.core.prefs plugins/LineChangeMarker/trunk/LineChangeMarker.props plugins/LineChangeMarker/trunk/bin/ plugins/LineChangeMarker/trunk/bin/lcm/ plugins/LineChangeMarker/trunk/bin/lcm/BufferChangedLines$Range.class plugins/LineChangeMarker/trunk/bin/lcm/BufferChangedLines.class plugins/LineChangeMarker/trunk/bin/lcm/ChangeMarker.class plugins/LineChangeMarker/trunk/bin/lcm/LCMPlugin$1.class plugins/LineChangeMarker/trunk/bin/lcm/LCMPlugin.class plugins/LineChangeMarker/trunk/build/ plugins/LineChangeMarker/trunk/build/classes/ plugins/LineChangeMarker/trunk/build/classes/lcm/ plugins/LineChangeMarker/trunk/build/classes/lcm/BufferChangedLines$Range.class plugins/LineChangeMarker/trunk/build/classes/lcm/BufferChangedLines.class plugins/LineChangeMarker/trunk/build/classes/lcm/ChangeMarker.class plugins/LineChangeMarker/trunk/build/classes/lcm/LCMPlugin$1.class plugins/LineChangeMarker/trunk/build/classes/lcm/LCMPlugin.class plugins/LineChangeMarker/trunk/build/docs/ plugins/LineChangeMarker/trunk/build/extras/ plugins/LineChangeMarker/trunk/build/extras/LineChangeMarker.props plugins/LineChangeMarker/trunk/build/extras/description.html plugins/LineChangeMarker/trunk/build.xml plugins/LineChangeMarker/trunk/description.html plugins/LineChangeMarker/trunk/src/ plugins/LineChangeMarker/trunk/src/lcm/ plugins/LineChangeMarker/trunk/src/lcm/BufferChangedLines.java plugins/LineChangeMarker/trunk/src/lcm/ChangeMarker.java plugins/LineChangeMarker/trunk/src/lcm/LCMPlugin.java Added: plugins/LineChangeMarker/trunk/.classpath =================================================================== --- plugins/LineChangeMarker/trunk/.classpath (rev 0) +++ plugins/LineChangeMarker/trunk/.classpath 2009-08-20 07:14:41 UTC (rev 15999) @@ -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/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> + <classpathentry combineaccessrules="false" kind="src" path="/jEdit"/> + <classpathentry kind="output" path="bin"/> +</classpath> Added: plugins/LineChangeMarker/trunk/.project =================================================================== --- plugins/LineChangeMarker/trunk/.project (rev 0) +++ plugins/LineChangeMarker/trunk/.project 2009-08-20 07:14:41 UTC (rev 15999) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>LineChangeMarker</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/LineChangeMarker/trunk/.settings/org.eclipse.jdt.core.prefs =================================================================== --- plugins/LineChangeMarker/trunk/.settings/org.eclipse.jdt.core.prefs (rev 0) +++ plugins/LineChangeMarker/trunk/.settings/org.eclipse.jdt.core.prefs 2009-08-20 07:14:41 UTC (rev 15999) @@ -0,0 +1,12 @@ +#Wed Aug 19 23:55:22 GMT+02:00 2009 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5 Added: plugins/LineChangeMarker/trunk/LineChangeMarker.props =================================================================== --- plugins/LineChangeMarker/trunk/LineChangeMarker.props (rev 0) +++ plugins/LineChangeMarker/trunk/LineChangeMarker.props 2009-08-20 07:14:41 UTC (rev 15999) @@ -0,0 +1,31 @@ +plugin.lcm.LCMPlugin.activate=startup + +# general plugin information +plugin.lcm.LCMPlugin.name=DirtyGutter +plugin.lcm.LCMPlugin.author=Shlomy Reinstein +plugin.lcm.LCMPlugin.version=0.1 +plugin.lcm.LCMPlugin.description=Marks changed lines (since last save) in gutter. + +plugin.lcm.LCMPlugin.depend.0=jdk 1.5 +plugin.lcm.LCMPlugin.depend.1=jedit 04.03.17.00 + +# action labels +#updater-update-daily.label=Update jEdit to latest daily build + +# menu items +#plugin.updater.UpdaterPlugin.menu=updater-update-release updater-update-daily + +# option pane +#plugin.updater.UpdaterPlugin.option-pane=updater +#options.updater.label=Updater +#options.updater.code=new updater.UpdaterOptions(); +#updater.options.updateLogFile=Write update log to file: + +# docs +plugin.lcm.LCMPlugin.docs=description.html + +# misc +#updater.downloadPage=http://jedit.org/index.php?page=download + +# messages +#updater.msg.downloadLinkNotFound=Cannot find download link on download page. Added: plugins/LineChangeMarker/trunk/bin/lcm/BufferChangedLines$Range.class =================================================================== (Binary files differ) Property changes on: plugins/LineChangeMarker/trunk/bin/lcm/BufferChangedLines$Range.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/LineChangeMarker/trunk/bin/lcm/BufferChangedLines.class =================================================================== (Binary files differ) Property changes on: plugins/LineChangeMarker/trunk/bin/lcm/BufferChangedLines.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/LineChangeMarker/trunk/bin/lcm/ChangeMarker.class =================================================================== (Binary files differ) Property changes on: plugins/LineChangeMarker/trunk/bin/lcm/ChangeMarker.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/LineChangeMarker/trunk/bin/lcm/LCMPlugin$1.class =================================================================== (Binary files differ) Property changes on: plugins/LineChangeMarker/trunk/bin/lcm/LCMPlugin$1.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/LineChangeMarker/trunk/bin/lcm/LCMPlugin.class =================================================================== (Binary files differ) Property changes on: plugins/LineChangeMarker/trunk/bin/lcm/LCMPlugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/LineChangeMarker/trunk/build/classes/lcm/BufferChangedLines$Range.class =================================================================== (Binary files differ) Property changes on: plugins/LineChangeMarker/trunk/build/classes/lcm/BufferChangedLines$Range.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/LineChangeMarker/trunk/build/classes/lcm/BufferChangedLines.class =================================================================== (Binary files differ) Property changes on: plugins/LineChangeMarker/trunk/build/classes/lcm/BufferChangedLines.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/LineChangeMarker/trunk/build/classes/lcm/ChangeMarker.class =================================================================== (Binary files differ) Property changes on: plugins/LineChangeMarker/trunk/build/classes/lcm/ChangeMarker.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/LineChangeMarker/trunk/build/classes/lcm/LCMPlugin$1.class =================================================================== (Binary files differ) Property changes on: plugins/LineChangeMarker/trunk/build/classes/lcm/LCMPlugin$1.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/LineChangeMarker/trunk/build/classes/lcm/LCMPlugin.class =================================================================== (Binary files differ) Property changes on: plugins/LineChangeMarker/trunk/build/classes/lcm/LCMPlugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/LineChangeMarker/trunk/build/extras/LineChangeMarker.props =================================================================== --- plugins/LineChangeMarker/trunk/build/extras/LineChangeMarker.props (rev 0) +++ plugins/LineChangeMarker/trunk/build/extras/LineChangeMarker.props 2009-08-20 07:14:41 UTC (rev 15999) @@ -0,0 +1,31 @@ +plugin.lcm.LCMPlugin.activate=startup + +# general plugin information +plugin.lcm.LCMPlugin.name=DirtyGutter +plugin.lcm.LCMPlugin.author=Shlomy Reinstein +plugin.lcm.LCMPlugin.version=0.1 +plugin.lcm.LCMPlugin.description=Marks changed lines (since last save) in gutter. + +plugin.lcm.LCMPlugin.depend.0=jdk 1.5 +plugin.lcm.LCMPlugin.depend.1=jedit 04.03.17.00 + +# action labels +#updater-update-daily.label=Update jEdit to latest daily build + +# menu items +#plugin.updater.UpdaterPlugin.menu=updater-update-release updater-update-daily + +# option pane +#plugin.updater.UpdaterPlugin.option-pane=updater +#options.updater.label=Updater +#options.updater.code=new updater.UpdaterOptions(); +#updater.options.updateLogFile=Write update log to file: + +# docs +plugin.lcm.LCMPlugin.docs=description.html + +# misc +#updater.downloadPage=http://jedit.org/index.php?page=download + +# messages +#updater.msg.downloadLinkNotFound=Cannot find download link on download page. Added: plugins/LineChangeMarker/trunk/build/extras/description.html =================================================================== --- plugins/LineChangeMarker/trunk/build/extras/description.html (rev 0) +++ plugins/LineChangeMarker/trunk/build/extras/description.html 2009-08-20 07:14:41 UTC (rev 15999) @@ -0,0 +1,2 @@ +The "DirtyGutter" plugin adds special markers to the Gutter to specify +which lines have changed since the last save. Added: plugins/LineChangeMarker/trunk/build.xml =================================================================== --- plugins/LineChangeMarker/trunk/build.xml (rev 0) +++ plugins/LineChangeMarker/trunk/build.xml 2009-08-20 07:14:41 UTC (rev 15999) @@ -0,0 +1,24 @@ +<?xml version="1.0"?> + +<project name="DirtyGutter" default="dist" basedir="."> + + <property file="build.properties"/> + <property file="../build.properties"/> + <property file="${user.home}/.build.properties"/> + <property file="${user.home}/build.properties"/> + <property name="dist.target" value="build" /> + <property name="plugin.dependencies" value="CommonControls"/> + <import file="${build.support}/plugin-build.xml" /> + + <selector id="packageFiles"> + <filename name="description.html" /> + </selector> + + <path id="project.class.path"> + <pathelement location="${jedit.install.dir}/jedit.jar"/> + <pathelement location="${src.dir}"/> + </path> + +</project> + +<!-- :indentSize=4:lineSeparator=\n:noTabs=false:tabSize=4: --> Added: plugins/LineChangeMarker/trunk/description.html =================================================================== --- plugins/LineChangeMarker/trunk/description.html (rev 0) +++ plugins/LineChangeMarker/trunk/description.html 2009-08-20 07:14:41 UTC (rev 15999) @@ -0,0 +1,2 @@ +The "DirtyGutter" plugin adds special markers to the Gutter to specify +which lines have changed since the last save. Added: plugins/LineChangeMarker/trunk/src/lcm/BufferChangedLines.java =================================================================== --- plugins/LineChangeMarker/trunk/src/lcm/BufferChangedLines.java (rev 0) +++ plugins/LineChangeMarker/trunk/src/lcm/BufferChangedLines.java 2009-08-20 07:14:41 UTC (rev 15999) @@ -0,0 +1,186 @@ +/* + * BufferChangedLines - Stores ranges of lines changed in a buffer. + * + * Copyright (C) 2009 Shlomy Reinstein + * + * 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package lcm; +import java.util.Iterator; +import java.util.TreeSet; + + +import org.gjt.sp.jedit.Buffer; +import org.gjt.sp.jedit.buffer.BufferAdapter; +import org.gjt.sp.jedit.buffer.JEditBuffer; + +public class BufferChangedLines extends BufferAdapter +{ + @SuppressWarnings("unchecked") + private static class Range implements Comparable + { + public int first, last; + public Range(int first, int num) + { + this.first = first; + last = first + num - 1; + } + public int compareTo(Object arg0) + { + Range other = (Range) arg0; + // This check enables to use TreeSet<Range>.contains() on a 1-line + // range to see if it's in the set. + if (overlaps(other)) + return 0; + if (first < other.first) + return (-1); + if (first > other.first) + return 1; + return 0; + } + // Returns true if this range overlaps with 'other'. + private boolean overlaps(Range other) + { + /* There are three overlap cases: + * 1. First line of this range is inside 'other'. + * 2. Last line of this range is inside 'other'. + * 3. 'other' is an absolute sub-range of this range. + * Case (1) is covered by the first line below. + * Cases (2) & (3) are identified by the first line of this range + * preceding 'other', and the last line inside 'other' or + * following it. + */ + return (((other.first >= first) && (other.first <= last)) || + ((other.first < first) && (other.last >= first))); + } + // Returns true if this range and 'other' are consecutive. + private boolean consecutive(Range other) + { + return ((other.first == last + 1) || (other.last + 1 == first)); + } + // Returns true if this range and 'other' overlap or are consecutive. + public boolean canMerge(Range other) + { + return overlaps(other) || consecutive(other); + } + // Merge 'other' into this range. + // Note: this.canMerge(other) must be true to call this function. + public void merge(Range other) + { + if (other.first < first) + first = other.first; + if (other.last > last) + last = other.last; + } + // Update the line numbers in this range + public void update(int lineDiff) + { + first += lineDiff; + last += lineDiff; + } + } + + Buffer buffer; + TreeSet<Range> ranges; + + public BufferChangedLines(Buffer buffer) + { + this.buffer = buffer; + ranges = new TreeSet<Range>(); + buffer.addBufferListener(this); + } + + private void printRanges() + { + if (! LCMPlugin.getInstance().isDebugging()) + return; + StringBuilder sb = new StringBuilder("Ranges: "); + Iterator<Range> it = ranges.iterator(); + while (it.hasNext()) + { + Range current = it.next(); + sb.append("[" + current.first + "-" + current.last + "] "); + } + System.err.println(sb.toString()); + } + + @Override + public void contentInserted(JEditBuffer buffer, int startLine, int offset, + int numLines, int length) + { + // Check if the inserted range needs to be merged with an existing one + // Note: numLines==0 for single-line change + Range changed = new Range(startLine, numLines + 1); + updateRanges(changed, numLines); + mergeRanges(changed); + ranges.add(changed); + printRanges(); + } + + @Override + public void contentRemoved(JEditBuffer buffer, int startLine, int offset, + int numLines, int length) + { + // Check if the removed range needs to be merged with an existing one + if (buffer.getLineStartOffset(startLine) == offset) + startLine--; + // Note: numLines==0 for single-line change + Range changed = new Range(startLine, 1); + updateRanges(changed, 0 - numLines); + mergeRanges(changed); + ranges.add(changed); + LCMPlugin.getInstance().repaintAllTextAreas(); + printRanges(); + } + + private void updateRanges(Range changed, int lineDiff) + { + if (lineDiff == 0) + return; + for (Range r: ranges.tailSet(changed)) + r.update(lineDiff); + } + + // Merge all mergable ranges with 'changed', removing them from the set. + private void mergeRanges(Range changed) + { + Iterator<Range> it = ranges.iterator(); + boolean found = false; + while (it.hasNext()) + { + Range current = it.next(); + if (changed.canMerge(current)) + { + found = true; + changed.merge(current); + it.remove(); // Current item will be replaced by merged range + } + else if (found) // Merge all relevant ranges + return; + } + } + + public boolean isChanged(int line) + { + Range r = new Range(line, 1); + return ranges.contains(r); + } + + public void clear() + { + ranges.clear(); + } +} Added: plugins/LineChangeMarker/trunk/src/lcm/ChangeMarker.java =================================================================== --- plugins/LineChangeMarker/trunk/src/lcm/ChangeMarker.java (rev 0) +++ plugins/LineChangeMarker/trunk/src/lcm/ChangeMarker.java 2009-08-20 07:14:41 UTC (rev 15999) @@ -0,0 +1,63 @@ +/* + * ChangeMarker - A text area extension for marking changed lines + * + * Copyright (C) 2009 Shlomy Reinstein + * + * 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package lcm; + +import java.awt.Color; +import java.awt.Graphics2D; + + +import org.gjt.sp.jedit.EditPane; +import org.gjt.sp.jedit.textarea.JEditTextArea; +import org.gjt.sp.jedit.textarea.TextAreaExtension; + + +public class ChangeMarker extends TextAreaExtension +{ + private EditPane editPane; + + public ChangeMarker(EditPane editPane) + { + this.editPane = editPane; + editPane.getTextArea().getGutter().addExtension(this); + } + + public void paintValidLine(Graphics2D gfx, int screenLine, + int physicalLine, int start, int end, int y) + { + BufferChangedLines changes = + LCMPlugin.getInstance().getBufferChangedLines(editPane.getBuffer()); + if ((changes == null) || (! changes.isChanged(physicalLine))) + return; + JEditTextArea ta = editPane.getTextArea(); + int x = 0; + int width = ta.getGutter().getWidth(); + int lineHeight = ta.getPainter().getFontMetrics().getHeight(); + Color c = gfx.getColor(); + gfx.setColor(Color.yellow); + gfx.fillRect(x + width / 2, y, width / 2 - 1, lineHeight); + gfx.setColor(c); + } + + public void remove() + { + editPane.getTextArea().getGutter().removeExtension(this); + } +} Added: plugins/LineChangeMarker/trunk/src/lcm/LCMPlugin.java =================================================================== --- plugins/LineChangeMarker/trunk/src/lcm/LCMPlugin.java (rev 0) +++ plugins/LineChangeMarker/trunk/src/lcm/LCMPlugin.java 2009-08-20 07:14:41 UTC (rev 15999) @@ -0,0 +1,156 @@ +/* + * LCMPlugin - A plugin for marking changed lines in the gutter. + * + * Copyright (C) 2009 Shlomy Reinstein + * + * 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package lcm; + +import java.util.HashMap; + +import org.gjt.sp.jedit.Buffer; +import org.gjt.sp.jedit.EBMessage; +import org.gjt.sp.jedit.EBPlugin; +import org.gjt.sp.jedit.EditPane; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.msg.BufferUpdate; +import org.gjt.sp.jedit.msg.EditPaneUpdate; +import org.gjt.sp.jedit.msg.PropertiesChanged; +import org.gjt.sp.jedit.textarea.JEditTextArea; +import org.gjt.sp.jedit.visitors.JEditVisitorAdapter; + +public class LCMPlugin extends EBPlugin +{ + static private final String DEBUGGING_PROP = "options.LCMPlugin.debug"; + static private LCMPlugin instance; + private HashMap<Buffer, BufferChangedLines> changes; + private HashMap<EditPane, ChangeMarker> markers; + private boolean isDebugging; + + public static LCMPlugin getInstance() + { + return instance; + } + + public BufferChangedLines getBufferChangedLines(Buffer b) + { + synchronized(changes) + { + return changes.get(b); + } + } + + private BufferChangedLines createBufferChangedLines(Buffer b) + { + BufferChangedLines bcl = new BufferChangedLines(b); + synchronized(changes) + { + changes.put(b, bcl); + } + return bcl; + } + + private void removeBufferChangedLines(Buffer b) + { + synchronized(changes) + { + changes.remove(b); + } + } + + @Override + public void handleMessage(EBMessage message) + { + if (message instanceof EditPaneUpdate) + { + EditPaneUpdate epu = (EditPaneUpdate) message; + EditPane ep = epu.getEditPane(); + if ((epu.getWhat() == EditPaneUpdate.CREATED) || + (epu.getWhat() == EditPaneUpdate.BUFFER_CHANGED)) + { + Buffer b = ep.getBuffer(); + if (getBufferChangedLines(b) == null) + createBufferChangedLines(b); + ChangeMarker cm = markers.get(ep); + if (cm == null) + { + cm = new ChangeMarker(ep); + markers.put(ep, cm); + } + } + else if (epu.getWhat() == EditPaneUpdate.DESTROYED) + { + ChangeMarker cm = markers.get(ep); + if (cm != null) + { + cm.remove(); + markers.remove(ep); + } + } + } + else if (message instanceof BufferUpdate) + { + BufferUpdate bu = (BufferUpdate) message; + Buffer b = bu.getBuffer(); + if (bu.getWhat() == BufferUpdate.SAVED) + { + BufferChangedLines bcl = getBufferChangedLines(b); + if (bcl != null) + bcl.clear(); + } + else if (bu.getWhat() == BufferUpdate.CLOSED) + removeBufferChangedLines(b); + } + else if (message instanceof PropertiesChanged) + isDebugging = jEdit.getBooleanProperty(DEBUGGING_PROP, false); + } + + public void repaintAllTextAreas() + { + jEdit.visit(new JEditVisitorAdapter() { + @Override + public void visit(JEditTextArea textArea) { + textArea.getGutter().repaint(); + } + }); + } + + public boolean isDebugging() + { + return isDebugging; + } + + @Override + public void start() + { + instance = this; + changes = new HashMap<Buffer, BufferChangedLines>(); + markers = new HashMap<EditPane, ChangeMarker>(); + isDebugging = jEdit.getBooleanProperty(DEBUGGING_PROP, false); + } + + @Override + public void stop() + { + markers.clear(); + markers = null; + changes.clear(); + changes = null; + instance = null; + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2009-08-20 16:13:09
|
Revision: 16009 http://jedit.svn.sourceforge.net/jedit/?rev=16009&view=rev Author: shlomy Date: 2009-08-20 16:13:03 +0000 (Thu, 20 Aug 2009) Log Message: ----------- Renamed the top level directory to DirtyGutter to match the plugin name. Added Paths: ----------- plugins/DirtyGutter/ Removed Paths: ------------- plugins/LineChangeMarker/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <le...@us...> - 2009-08-30 15:07:16
|
Revision: 16119 http://jedit.svn.sourceforge.net/jedit/?rev=16119&view=rev Author: leshij Date: 2009-08-30 15:07:09 +0000 (Sun, 30 Aug 2009) Log Message: ----------- TreeBufferSwitcher: draft Added Paths: ----------- plugins/TreeBufferSwitcher.iml plugins/TreeBufferSwitcher.props plugins/actions.xml plugins/build.properties plugins/build.xml plugins/src/ plugins/src/treebufferswitcher/ plugins/src/treebufferswitcher/BufferSwitcherEnhanced.java plugins/src/treebufferswitcher/TreeBufferSwitcherPlugin.java plugins/src/treebufferswitcher/model/ plugins/src/treebufferswitcher/model/BufferItem.java plugins/src/treebufferswitcher/model/BufferSwitcherModel.java plugins/src/treebufferswitcher/model/FlatModelBuilder.java plugins/src/treebufferswitcher/model/ModelBuilder.java plugins/src/treebufferswitcher/model/MultiLevelGroupedModelBuilder.java plugins/src/treebufferswitcher/model/OneLevelGroupedModelBuilder.java plugins/src/treebufferswitcher/model/PathItem.java plugins/src/treebufferswitcher/util/ plugins/src/treebufferswitcher/util/PathUtils.java plugins/test/ plugins/test/org/ plugins/test/org/gjt/ plugins/test/org/gjt/sp/ plugins/test/org/gjt/sp/jedit/ plugins/test/org/gjt/sp/jedit/BufferMock.java plugins/test/treebufferswitcher/ plugins/test/treebufferswitcher/model/ plugins/test/treebufferswitcher/model/ModelBuilderTest.java Added: plugins/TreeBufferSwitcher.iml =================================================================== --- plugins/TreeBufferSwitcher.iml (rev 0) +++ plugins/TreeBufferSwitcher.iml 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module relativePaths="true" type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" inherit-compiler-output="true"> + <exclude-output /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" /> + <excludeFolder url="file://$MODULE_DIR$/build" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="module" module-name="jEdit-core" /> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.5.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + </component> +</module> + Added: plugins/TreeBufferSwitcher.props =================================================================== --- plugins/TreeBufferSwitcher.props (rev 0) +++ plugins/TreeBufferSwitcher.props 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,15 @@ +plugin.treebufferswitcher.TreeBufferSwitcherPlugin.activate=startup + +plugin.treebufferswitcher.TreeBufferSwitcherPlugin.name=TreeBufferSwitcher +plugin.treebufferswitcher.TreeBufferSwitcherPlugin.author=Denis Dzenskevich +plugin.treebufferswitcher.TreeBufferSwitcherPlugin.version=0.1 +plugin.treebufferswitcher.TreeBufferSwitcherPlugin.docs=index.html +plugin.treebufferswitcher.TreeBufferSwitcherPlugin.depend.0=jdk 1.6 +plugin.treebufferswitcher.TreeBufferSwitcherPlugin.depend.1=jedit 04.03.18.00 +plugin.treebufferswitcher.TreeBufferSwitcherPlugin.description=Hierarchical buffer switcher with some additional options + +### options +#treebufferswitcher.xxx=yyyy + +### actions +treebufferswitcher.focusbufferswitcher.label=Focus Tree Buffer Switcher Added: plugins/actions.xml =================================================================== --- plugins/actions.xml (rev 0) +++ plugins/actions.xml 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,7 @@ +<?xml version="1.0"?> +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> +<ACTIONS> + <ACTION NAME="treebufferswitcher.focusbufferswitcher"> + <CODE>treebufferswitcher.TreeBufferSwitcherPlugin.focusBufferSwitcher(editPane);</CODE> + </ACTION> +</ACTIONS> Added: plugins/build.properties =================================================================== --- plugins/build.properties (rev 0) +++ plugins/build.properties 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,2 @@ +jedit.install.dir=D:/Java/jedit-new/sandbox/ +instasll.dir=D:/Java/jedit-new/sandbox/jars/ Added: plugins/build.xml =================================================================== --- plugins/build.xml (rev 0) +++ plugins/build.xml 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,27 @@ +<?xml version="1.0"?> +<!-- + This is the standard build.xml file for building the TreeBufferSwitcher plugin. + The 'dist' target compiles the plugin, generates documentation, and creates + the JAR file. Before running the 'dist' target, you will need to choose + whether to generate the documentation using one of these two targets: +--> + +<project name="TreeBufferSwitcher" default="build" basedir="."> + + <property file="build.properties"/> + <property file="../build.properties"/> + + <property name="docs-proc.target" value="xsltproc"/> + <property name="user-doc.xml" location = "users-guide.xml"/> + + <property name="src.dir" value="src"/> + <property name="build.dir" value="build"/> + + <import file="${build.support}/plugin-build.xml" /> + + <path id="project.class.path"> + <pathelement location="${jedit.install.dir}/jedit.jar"/> + <pathelement location="${src.dir}"/> + </path> + +</project> Added: plugins/src/treebufferswitcher/BufferSwitcherEnhanced.java =================================================================== --- plugins/src/treebufferswitcher/BufferSwitcherEnhanced.java (rev 0) +++ plugins/src/treebufferswitcher/BufferSwitcherEnhanced.java 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,284 @@ +package treebufferswitcher; + +import org.gjt.sp.jedit.*; +import org.gjt.sp.jedit.bufferset.BufferSetListener; +import org.gjt.sp.jedit.bufferset.BufferSet; +import org.gjt.sp.jedit.msg.EditPaneUpdate; +import org.gjt.sp.jedit.msg.BufferUpdate; +import org.gjt.sp.util.Log; + +import javax.swing.*; +import javax.swing.event.PopupMenuListener; +import javax.swing.event.PopupMenuEvent; + +import treebufferswitcher.model.BufferSwitcherModel; +import treebufferswitcher.model.BufferItem; +import treebufferswitcher.model.PathItem; + +import java.awt.event.*; +import java.awt.*; + +public class BufferSwitcherEnhanced extends JComboBox implements EBComponent, BufferSetListener { + + private final TreeBufferSwitcherPlugin plugin; + private final EditPane editPane; + private BufferSwitcherModel model; + private BufferSet bufferSet; + private int adjustingDirection = 1; + private boolean updating = false; + + public BufferSwitcherEnhanced(TreeBufferSwitcherPlugin plugin, EditPane editPane) { + this.plugin = plugin; + this.editPane = editPane; + Component textArea = editPane.getTextArea(); + Container container = textArea.getParent(); + container.add(this, BorderLayout.NORTH); + setRenderer(new CellRendererImpl()); + addActionListener(new ActionListenerImpl()); + addFocusListener(new FocusListenerImpl()); + addPopupMenuListener(new PopupMenuListenerImpl()); + EditBus.addToBus(this); + bufferSet = editPane.getBufferSet(); + bufferSet.addBufferSetListener(this); + propertiesChanged(); + dataChanged(); + container.validate(); + } + + public void propertiesChanged() { + setMaximumRowCount(plugin.visibleRowCount); + dataChanged(); + } + + public void dataChanged() { + // if the buffer count becomes 0, then it is guaranteed to + // become 1 very soon, so don't do anything in that case. + if (editPane.getBufferSet().size() == 0) { + return; + } +// updating = true; + model = plugin.modelBuilder.createModel(editPane.getBufferSet().getAllBuffers()); + setModel(model); + setSelectedItem(model.itemByBuffer(editPane.getBuffer())); +// updating = false; + } + + public void dispose() { + bufferSet.removeBufferSetListener(this); + editPane.getBufferSet().removeBufferSetListener(this); + EditBus.removeFromBus(this); + Container container = getParent(); + container.remove(this); + container.validate(); + } + + @Override + public void processKeyEvent(KeyEvent e) { + if (plugin.useShortcuts && isPopupVisible() && e.getKeyChar() != KeyEvent.CHAR_UNDEFINED) { + // if shortcut to buffer is pressed, switch to buffer + int keyIndex = plugin.shortcutsUppercased.indexOf(e.getKeyChar()); + if (keyIndex == -1) { + keyIndex = plugin.shortcutsLowercased.indexOf(e.getKeyChar()); + } + BufferSwitcherModel model = (BufferSwitcherModel)getModel(); + if (keyIndex != -1 && keyIndex < model.buffersCount) { + BufferItem item = model.itemByKeyIndex(keyIndex); + if (item != null) { + setSelectedItem(item); + editPane.setBuffer(item.buffer); + hidePopup(); + e.consume(); + return; + } + } + } + switch (e.getKeyCode()) { + case KeyEvent.VK_UP: + case KeyEvent.VK_PAGE_UP: + adjustingDirection = -1; + break; + case KeyEvent.VK_DOWN: + case KeyEvent.VK_PAGE_DOWN: + adjustingDirection = 1; + break; + case KeyEvent.VK_DELETE: + if (getSelectedItem() instanceof BufferItem) { + BufferItem bufferItem = (BufferItem)getSelectedItem(); + Log.log(Log.DEBUG, this, "Closing buffer: " + bufferItem.buffer.getPath()); + e.consume(); + if (jEdit.closeBuffer(editPane.getView(), bufferItem.buffer)) { + try { + Thread.sleep(plugin.deleteDelay); + } catch (InterruptedException ignore) { + } + SwingUtilities.invokeLater(new Runnable() { + public void run() { + requestFocusInWindow(); + showPopup(); + } + }); + } + } + return; + case KeyEvent.VK_ESCAPE: + hidePopup(); + e.consume(); + return; + } + super.processKeyEvent(e); + } + + @Override + public void setSelectedItem(Object anObject) { + if (anObject instanceof PathItem) { + adjustSelectedIndex(model.getIndexOf(anObject), adjustingDirection); + } else { + super.setSelectedItem(anObject); + } + } + + private void adjustSelectedIndex(int from, int step) { + for (;;) { + if (from < 0) { + adjustSelectedIndex(0, 1); + return; + } + if (from >= model.getSize()) { + adjustSelectedIndex(model.getSize() - 1, -1); + return; + } + if (model.getElementAt(from) instanceof BufferItem) { + break; + } + from += step; + } + setSelectedItem(getItemAt(from)); + } + + public void handleMessage(EBMessage message) { + if (message instanceof EditPaneUpdate) { + EditPaneUpdate editPaneUpdate = (EditPaneUpdate)message; + if (editPaneUpdate.getEditPane() != editPane) { + return; + } + if (editPaneUpdate.getWhat() == EditPaneUpdate.BUFFER_CHANGED) { + setSelectedItem(model.itemByBuffer(editPane.getBuffer())); + } else if (editPaneUpdate.getWhat() == EditPaneUpdate.BUFFERSET_CHANGED) { + bufferSet.removeBufferSetListener(this); + bufferSet = editPane.getBufferSet(); + bufferSet.addBufferSetListener(this); + dataChanged(); + } + } else if (message instanceof BufferUpdate) { + if (((BufferUpdate)message).getWhat() == BufferUpdate.DIRTY_CHANGED) { + BufferUpdate bufferUpdate = (BufferUpdate)message; + BufferItem bufferItem = model.itemByBuffer(bufferUpdate.getBuffer()); + plugin.modelBuilder.updateBuffer(bufferItem); + model.fireItemChanged(bufferItem); + } + } + } + + public void bufferAdded(Buffer buffer, int index) { + dataChanged(); + } + + public void bufferRemoved(Buffer buffer, int index) { + dataChanged(); + } + + public void bufferMoved(Buffer buffer, int oldIndex, int newIndex) { + dataChanged(); + } + + public void bufferSetSorted() { + dataChanged(); + } + + private class CellRendererImpl extends DefaultListCellRenderer { + + private int index; + private int level; + + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + this.index = index; + if (value instanceof BufferItem) { + BufferItem bufferItem = (BufferItem)value; + if (plugin.useShortcuts && index != -1 && bufferItem.keyIndex < plugin.shortcuts.length()) { + char key = plugin.shortcuts.charAt(bufferItem.keyIndex); + value = "<html><font color='red'>" + key + "</font> " + bufferItem.title; + } else { + value = bufferItem.title; + } + super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + setIcon(bufferItem.buffer.getIcon()); + setToolTipText(bufferItem.buffer.getPath()); + level = bufferItem.level; + } else if (value instanceof PathItem) { + PathItem pathItem = (PathItem)value; + super.getListCellRendererComponent(list, pathItem.title, index, false, cellHasFocus); + level = pathItem.level; + } else { + super.getListCellRendererComponent(list, "Bad value: " + value, index, isSelected, cellHasFocus); + } + return this; + } + + @Override + protected void paintComponent(Graphics g) { + boolean offset = index != -1 && isPopupVisible() && level != 0; + if (offset) { + g.translate(level * plugin.treeLevelOffset, 0); + } + super.paintComponent(g); + if (offset) { + g.translate(- level * plugin.treeLevelOffset, 0); + } + } + + } + + private class FocusListenerImpl extends FocusAdapter { + + @Override + public void focusLost(FocusEvent e) { + editPane.getTextArea().requestFocus(); + } + + } + + private class PopupMenuListenerImpl implements PopupMenuListener { + + public void popupMenuCanceled(PopupMenuEvent e) { + editPane.requestFocus(); + } + + public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { + editPane.requestFocus(); + } + + public void popupMenuWillBecomeVisible(PopupMenuEvent e) { + } + + } + + private class ActionListenerImpl implements ActionListener { + + public void actionPerformed(ActionEvent e) { + if (!updating) { + Log.log(Log.DEBUG, this, "actionPerformed: " + e.getActionCommand()); + Object item = getSelectedItem(); + if (item instanceof BufferItem) { + BufferItem bufferItem = (BufferItem)item; + if (editPane.getBuffer() != bufferItem.buffer) { + updating = true; + editPane.setBuffer(bufferItem.buffer, false); + updating = false; + } + } + } + } + + } + +} \ No newline at end of file Added: plugins/src/treebufferswitcher/TreeBufferSwitcherPlugin.java =================================================================== --- plugins/src/treebufferswitcher/TreeBufferSwitcherPlugin.java (rev 0) +++ plugins/src/treebufferswitcher/TreeBufferSwitcherPlugin.java 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,127 @@ +package treebufferswitcher; + +import org.gjt.sp.jedit.*; +import org.gjt.sp.jedit.visitors.JEditVisitorAdapter; +import org.gjt.sp.jedit.msg.EditPaneUpdate; +import org.gjt.sp.jedit.msg.PropertiesChanged; +import treebufferswitcher.model.*; +import treebufferswitcher.model.MultiLevelGroupedModelBuilder; + +import java.util.Map; +import java.util.HashMap; + +// !!! add configuration dialog and load/save properties +public class TreeBufferSwitcherPlugin extends EBPlugin { + + // settings + // !!! encapsulate and read from props + public boolean enabled = true; + public GroupingMode groupingMode = GroupingMode.COMPACT_MULTI_LEVEL_GROUPING; + public boolean useShortcuts = true; + public String shortcuts = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + public int visibleRowCount = 24; + public int treeLevelOffset = 16; + public int deleteDelay = 60; + // state + private static TreeBufferSwitcherPlugin instance; + public String shortcutsUppercased; + public String shortcutsLowercased; + private Map<EditPane, BufferSwitcherEnhanced> bufferSwitcherMap = new HashMap<EditPane, BufferSwitcherEnhanced>(); + + public ModelBuilder modelBuilder; + + public TreeBufferSwitcherPlugin() { + instance = this; + } + + @Override + public void start() { + propertiesChanged(); + } + + @Override + public void stop() { + ensureInstalled(false); + } + + public static void focusBufferSwitcher(EditPane editPane) { + BufferSwitcherEnhanced bufferSwitcher = instance.bufferSwitcherMap.get(editPane); + if (bufferSwitcher != null) { + bufferSwitcher.requestFocus(); + bufferSwitcher.showPopup(); + } + } + + @Override + public void handleMessage(EBMessage message) { + if (enabled && message instanceof EditPaneUpdate) { + EditPaneUpdate editPaneUpdate = (EditPaneUpdate)message; + if (editPaneUpdate.getWhat() == EditPaneUpdate.CREATED) { + editPaneCreated(editPaneUpdate.getEditPane()); + } else if (editPaneUpdate.getWhat() == EditPaneUpdate.DESTROYED) { + editPaneDestroyed(editPaneUpdate.getEditPane()); + } + } + if (message instanceof PropertiesChanged) { + propertiesChanged(); + } + } + + private void ensureInstalled(final boolean install) { + jEdit.visit(new JEditVisitorAdapter() { + @Override + public void visit(EditPane editPane) { + ensureInstalled(install, editPane); + } + }); + } + + private void ensureInstalled(boolean install, EditPane editPane) { + if (install) { + if (!bufferSwitcherMap.containsKey(editPane)) { + editPaneCreated(editPane); + } + } else { + if (bufferSwitcherMap.containsKey(editPane)) { + editPaneDestroyed(editPane); + } + } + } + + private void editPaneCreated(EditPane editPane) { + BufferSwitcherEnhanced bufferSwitcher = new BufferSwitcherEnhanced(this, editPane); + bufferSwitcherMap.put(editPane, bufferSwitcher); + } + + private void editPaneDestroyed(EditPane editPane) { + BufferSwitcherEnhanced bufferSwitcher = bufferSwitcherMap.get(editPane); + if (bufferSwitcher != null) { + bufferSwitcher.dispose(); + bufferSwitcherMap.remove(editPane); + } + } + + private void propertiesChanged() { + // !!! read properties + switch (groupingMode) { + case NO_GROUPING: modelBuilder = new FlatModelBuilder(); break; + case ONE_LEVEL_GROUPING: modelBuilder = new OneLevelGroupedModelBuilder(); break; + case MULTI_LEVEL_GROUPING: modelBuilder = new MultiLevelGroupedModelBuilder(false); break; + case COMPACT_MULTI_LEVEL_GROUPING: modelBuilder = new MultiLevelGroupedModelBuilder(true); break; + } + shortcutsUppercased = shortcuts.toUpperCase(); + shortcutsLowercased = shortcuts.toLowerCase(); + ensureInstalled(enabled); + for (BufferSwitcherEnhanced bufferSwitcher : bufferSwitcherMap.values()) { + bufferSwitcher.propertiesChanged(); + } + } + + public enum GroupingMode { + NO_GROUPING, + ONE_LEVEL_GROUPING, + MULTI_LEVEL_GROUPING, + COMPACT_MULTI_LEVEL_GROUPING + } + +} \ No newline at end of file Added: plugins/src/treebufferswitcher/model/BufferItem.java =================================================================== --- plugins/src/treebufferswitcher/model/BufferItem.java (rev 0) +++ plugins/src/treebufferswitcher/model/BufferItem.java 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,19 @@ +package treebufferswitcher.model; + +import org.gjt.sp.jedit.Buffer; + +public class BufferItem { + + public final Buffer buffer; + public String title; + public final int level; + public final int keyIndex; + + BufferItem(Buffer buffer, String title, int level, int keyIndex) { + this.buffer = buffer; + this.title = title; + this.level = level; + this.keyIndex = keyIndex; + } + +} \ No newline at end of file Added: plugins/src/treebufferswitcher/model/BufferSwitcherModel.java =================================================================== --- plugins/src/treebufferswitcher/model/BufferSwitcherModel.java (rev 0) +++ plugins/src/treebufferswitcher/model/BufferSwitcherModel.java 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,52 @@ +package treebufferswitcher.model; + +import org.gjt.sp.jedit.Buffer; + +import javax.swing.*; + +public class BufferSwitcherModel extends DefaultComboBoxModel { + + public final int buffersCount; + public boolean adjusting; + public final Object[] items; + + public BufferSwitcherModel(Object items[]) { + super(items); + this.items = items; + int buffersCountLocal = 0; + for (Object item : items) { + if (item instanceof BufferItem) { + ++buffersCountLocal; + } + } + buffersCount = buffersCountLocal; + } + + public BufferItem itemByKeyIndex(int keyIndex) { + for (Object item : items) { + if (item instanceof BufferItem) { + if (((BufferItem)item).keyIndex == keyIndex) { + return (BufferItem)item; + } + } + } + return null; + } + + public BufferItem itemByBuffer(Buffer buffer) { + for (Object item : items) { + if (item instanceof BufferItem) { + if (((BufferItem)item).buffer == buffer) { + return (BufferItem)item; + } + } + } + return null; + } + + public void fireItemChanged(BufferItem bufferItem) { + int index = getIndexOf(bufferItem); + fireContentsChanged(this, index, index); + } + +} \ No newline at end of file Added: plugins/src/treebufferswitcher/model/FlatModelBuilder.java =================================================================== --- plugins/src/treebufferswitcher/model/FlatModelBuilder.java (rev 0) +++ plugins/src/treebufferswitcher/model/FlatModelBuilder.java 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,22 @@ +package treebufferswitcher.model; + +import org.gjt.sp.jedit.Buffer; + +import javax.swing.*; + +public class FlatModelBuilder implements ModelBuilder { + + public BufferSwitcherModel createModel(Buffer[] buffers) { + BufferItem[] items = new BufferItem[buffers.length]; + for (int i=0; i<buffers.length; ++i) { + // TODO: add an option to format title as jEdit does ("filename (title)") + items[i] = new BufferItem(buffers[i], buffers[i].getPath(), 0, i); + } + return new BufferSwitcherModel(items); + } + + public void updateBuffer(BufferItem bufferItem) { + bufferItem.title = bufferItem.buffer.getPath(); + } + +} \ No newline at end of file Added: plugins/src/treebufferswitcher/model/ModelBuilder.java =================================================================== --- plugins/src/treebufferswitcher/model/ModelBuilder.java (rev 0) +++ plugins/src/treebufferswitcher/model/ModelBuilder.java 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,13 @@ +package treebufferswitcher.model; + +import org.gjt.sp.jedit.Buffer; + +import javax.swing.*; + +public interface ModelBuilder { + + public BufferSwitcherModel createModel(Buffer[] buffers); + + public void updateBuffer(BufferItem bufferItem); + +} \ No newline at end of file Added: plugins/src/treebufferswitcher/model/MultiLevelGroupedModelBuilder.java =================================================================== --- plugins/src/treebufferswitcher/model/MultiLevelGroupedModelBuilder.java (rev 0) +++ plugins/src/treebufferswitcher/model/MultiLevelGroupedModelBuilder.java 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,113 @@ +package treebufferswitcher.model; + +import org.gjt.sp.jedit.Buffer; + +import javax.swing.*; +import java.util.List; +import java.util.Map; +import java.util.ArrayList; +import java.util.TreeMap; + +import treebufferswitcher.util.PathUtils; + +// TODO: refactor CompactMultiLevelGroupedModelBuilder out of this +public class MultiLevelGroupedModelBuilder implements ModelBuilder { + + private final boolean compact; + private List<String> topLevelGroups; + private Map<String, List<String>> groups; + private Map<String, List<Buffer>> elements; + private int keyIndex; + + public MultiLevelGroupedModelBuilder(boolean compact) { + this.compact = compact; + } + + public BufferSwitcherModel createModel(Buffer[] buffers) { + // prepare groups + topLevelGroups = new ArrayList<String>(); + groups = new TreeMap<String, List<String>>(); + elements = new TreeMap<String, List<Buffer>>(); + for (Buffer buffer : buffers) { + String path = buffer.getPath(); + boolean isBuffer = true; + while (!path.isEmpty()) { + String parentPath = PathUtils.getParentOfPath(path); + if (isBuffer) { + List<Buffer> parent = elements.get(parentPath); + if (parent == null) { + parent = new ArrayList<Buffer>(); + elements.put(parentPath, parent); + } + parent.add(buffer); + } else { + List<String> parent = groups.get(parentPath); + if (parent == null) { + parent = new ArrayList<String>(); + groups.put(parentPath, parent); + } + if (!parent.contains(path)) { + parent.add(path); + } + } + isBuffer = false; + if (parentPath.isEmpty() && !topLevelGroups.contains(path)) { + topLevelGroups.add(path); + } + path = parentPath; + } + } + // compose flat array + keyIndex = -1; + List<Object> items = new ArrayList<Object>(groups.size() + buffers.length); + for (String topLevelGroup : topLevelGroups) { + if (compact) { + appendTreeCompact(items, topLevelGroup, topLevelGroup, 0); + } else { + appendTree(items, topLevelGroup, 0); + } + } + return new BufferSwitcherModel(items.toArray()); + } + + public void updateBuffer(BufferItem bufferItem) { + bufferItem.title = bufferItem.buffer.getName(); + } + + private void appendTree(List<Object> items, String parent, int level) { + items.add(new PathItem(PathUtils.getLastPathComponent(parent), level)); + List<String> subgroups = groups.get(parent); + if (subgroups != null) { + for (String subgroup : subgroups) { + appendTree(items, subgroup, level + 1); + } + } + List<Buffer> subelements = elements.get(parent); + if (subelements != null) { + for (Buffer subelement : subelements) { + items.add(new BufferItem(subelement, subelement.getName(), level + 1, ++keyIndex)); + } + } + } + + private void appendTreeCompact(List<Object> items, String parent, String title, int level) { + List<String> subgroups = groups.get(parent); + if (subgroups != null && subgroups.size() == 1) { + appendTreeCompact(items, subgroups.get(0), title + "/" + PathUtils.getLastPathComponent(subgroups.get(0)), level); + } else { + items.add(new PathItem(title, level)); + if (subgroups != null) { + for (String subgroup : subgroups) { + appendTreeCompact(items, subgroup, PathUtils.getLastPathComponent(subgroup), level + 1); + } + } + } + List<Buffer> subelements = elements.get(parent); + if (subelements != null) { + for (Buffer subelement : subelements) { + items.add(new BufferItem(subelement, subelement.getName(), level + 1, ++keyIndex)); + } + } + } + +} \ No newline at end of file Added: plugins/src/treebufferswitcher/model/OneLevelGroupedModelBuilder.java =================================================================== --- plugins/src/treebufferswitcher/model/OneLevelGroupedModelBuilder.java (rev 0) +++ plugins/src/treebufferswitcher/model/OneLevelGroupedModelBuilder.java 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,43 @@ +package treebufferswitcher.model; + +import org.gjt.sp.jedit.Buffer; + +import javax.swing.*; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.ArrayList; + +import treebufferswitcher.util.PathUtils; + +public class OneLevelGroupedModelBuilder implements ModelBuilder { + + public BufferSwitcherModel createModel(Buffer[] buffers) { + // prepare groups + Map<String, List<Buffer>> groups = new TreeMap<String, List<Buffer>>(); + for (Buffer buffer : buffers) { + String parentPath = PathUtils.getParentOfPath(buffer.getPath()); + List<Buffer> parent = groups.get(parentPath); + if (parent == null) { + parent = new ArrayList<Buffer>(); + groups.put(parentPath, parent); + } + parent.add(buffer); + } + // compose flat array + List<Object> items = new ArrayList<Object>(groups.size() + buffers.length); + int keyIndex = -1; + for (Map.Entry<String, List<Buffer>> group : groups.entrySet()) { + items.add(new PathItem(group.getKey(), 0)); + for (Buffer buffer : group.getValue()) { + items.add(new BufferItem(buffer, buffer.getName(), 1, ++keyIndex)); + } + } + return new BufferSwitcherModel(items.toArray()); + } + + public void updateBuffer(BufferItem bufferItem) { + bufferItem.title = bufferItem.buffer.getName(); + } + +} \ No newline at end of file Added: plugins/src/treebufferswitcher/model/PathItem.java =================================================================== --- plugins/src/treebufferswitcher/model/PathItem.java (rev 0) +++ plugins/src/treebufferswitcher/model/PathItem.java 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,18 @@ +package treebufferswitcher.model; + +public class PathItem { + + public final String title; + public final int level; + + PathItem(String title, int level) { + this.title = title; + this.level = level; + } + + @Override + public String toString() { + return title; + } + +} \ No newline at end of file Added: plugins/src/treebufferswitcher/util/PathUtils.java =================================================================== --- plugins/src/treebufferswitcher/util/PathUtils.java (rev 0) +++ plugins/src/treebufferswitcher/util/PathUtils.java 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,25 @@ +package treebufferswitcher.util; + +public class PathUtils { + + public static String getParentOfPath(String path) { + int lastDelimiterIndex = path.lastIndexOf('/'); + if (lastDelimiterIndex == -1) + lastDelimiterIndex = path.lastIndexOf('\\'); + if (lastDelimiterIndex != -1) { + return path.substring(0, lastDelimiterIndex); + } + return ""; + } + + public static String getLastPathComponent(String path) { + int lastDelimiterIndex = path.lastIndexOf('/'); + if (lastDelimiterIndex == -1) + lastDelimiterIndex = path.lastIndexOf('\\'); + if (lastDelimiterIndex != -1) { + return path.substring(lastDelimiterIndex + 1); + } + return path; + } + +} \ No newline at end of file Added: plugins/test/org/gjt/sp/jedit/BufferMock.java =================================================================== --- plugins/test/org/gjt/sp/jedit/BufferMock.java (rev 0) +++ plugins/test/org/gjt/sp/jedit/BufferMock.java 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,14 @@ +package org.gjt.sp.jedit; + +import java.util.Map; +import java.util.HashMap; + +public class BufferMock extends Buffer { + + private static Map EMPTY_MAP = new HashMap(); + + public BufferMock(String path) { + super(path, false, false, EMPTY_MAP); + } + +} \ No newline at end of file Added: plugins/test/treebufferswitcher/model/ModelBuilderTest.java =================================================================== --- plugins/test/treebufferswitcher/model/ModelBuilderTest.java (rev 0) +++ plugins/test/treebufferswitcher/model/ModelBuilderTest.java 2009-08-30 15:07:09 UTC (rev 16119) @@ -0,0 +1,118 @@ +package treebufferswitcher.model; + +import org.gjt.sp.jedit.BufferMock; +import org.gjt.sp.jedit.jEdit; +import static org.junit.Assert.*; +import org.junit.Test; +import org.junit.BeforeClass; + +import javax.swing.*; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; + +import treebufferswitcher.model.PathItem; +import treebufferswitcher.model.BufferItem; +import treebufferswitcher.model.FlatModelBuilder; +import treebufferswitcher.model.OneLevelGroupedModelBuilder; +import treebufferswitcher.model.MultiLevelGroupedModelBuilder; + +public class ModelBuilderTest { + + @BeforeClass + public static void setUpClass() throws Exception { + // mock jedit to allow creation of new buffers + Class propertyManagerClass = Class.forName("org.gjt.sp.jedit.PropertyManager"); + Constructor propertyManagerConstructor = propertyManagerClass.getDeclaredConstructor(); + propertyManagerConstructor.setAccessible(true); + Object propertyManager = propertyManagerConstructor.newInstance(); + Field propertyManagerField = jEdit.class.getDeclaredField("propMgr"); + propertyManagerField.setAccessible(true); + propertyManagerField.set(null, propertyManager); + } + + @Test + public void testFlatModelBuilder() { + BufferMock[] src = mockBuffers("1/2/a.txt", "1/2/b.txt", "3/c.txt"); + assertModel(new FlatModelBuilder().createModel(src), + "1/2/a.txt", "1/2/b.txt", "3/c.txt"); + } + + @Test + public void testOneLevelModelBuilder() { + BufferMock[] src = mockBuffers("1/2/a.txt", "1/3/b.txt", "1/2/c.txt", "1/d.txt"); + assertModel(new OneLevelGroupedModelBuilder().createModel(src), + "1", "> d.txt", "1/2", "> a.txt", "> c.txt", "1/3", "> b.txt"); + } + + @Test + public void testMultiLevelModelBuilder() { + BufferMock[] src = mockBuffers("1/2/a.txt", "1/3/b.txt", "1/2/c.txt", "1/d.txt"); + assertModel(new treebufferswitcher.model.MultiLevelGroupedModelBuilder(false).createModel(src), + "1", "> 2", "> > a.txt", "> > c.txt", "> 3", "> > b.txt", "> d.txt"); + } + + @Test + public void testCompactMultiLevelModelBuilder() { + BufferMock[] src = mockBuffers("1/2/a.txt", "1/3/b.txt", "1/2/c.txt", "1/4/5/e.txt", "1/d.txt"); + assertModel(new MultiLevelGroupedModelBuilder(true).createModel(src), + "1", "> 2", "> > a.txt", "> > c.txt", "> 3", "> > b.txt", "> 4/5", "> > e.txt", "> d.txt"); + } + + private static BufferMock[] mockBuffers(String... paths) { + BufferMock[] r = new BufferMock[paths.length]; + for (int i=0; i<paths.length; ++i) { + r[i] = new BufferMock(paths[i]); + } + return r; + } + + private static void assertModel(ComboBoxModel model, String... expected) { + DefaultComboBoxModel m = (DefaultComboBoxModel)model; + try { + assertEquals(expected.length, m.getSize()); + for (int i=0; i<expected.length; ++i) { + Object item = model.getElementAt(i); + assertEquals(expected[i], itemToPath(item)); + } + } catch (AssertionError e) { + StringBuilder msg = new StringBuilder(); + msg.append("Model doesn't equal to expected:\nExpected:\n"); + for (String item : expected) { + msg.append("\t").append(item).append("\n"); + } + msg.append("Actual:\n"); + for (int i=0; i<model.getSize(); ++i) { + msg.append("\t").append(itemToPath(model.getElementAt(i))).append("\n"); + } + throw new AssertionError(msg.toString()); + } + int keyIndex = -1; + for (int i=0; i<model.getSize(); ++i) { + Object item = model.getElementAt(i); + if (item instanceof BufferItem) { + assertEquals(++keyIndex, ((BufferItem)item).keyIndex); + } + } + } + + private static String itemToPath(Object item) { + if (item instanceof PathItem) { + PathItem pathItem = (PathItem)item; + return repeat("> ", pathItem.level) + pathItem.title; + } else if (item instanceof BufferItem) { + BufferItem bufferItem = (BufferItem)item; + return repeat("> ", bufferItem.level) + bufferItem.title; + } else { + throw new UnsupportedOperationException("Bad item class: " + item.getClass().getName()); + } + } + + private static String repeat(String s, int n) { + StringBuilder r = new StringBuilder(); + for (int i=0; i<n; ++i) { + r.append(s); + } + return r.toString(); + } + +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <le...@us...> - 2009-08-30 15:11:57
|
Revision: 16120 http://jedit.svn.sourceforge.net/jedit/?rev=16120&view=rev Author: leshij Date: 2009-08-30 15:11:46 +0000 (Sun, 30 Aug 2009) Log Message: ----------- TreeBufferSwitcher: fixing location Added Paths: ----------- plugins/TreeBufferSwitcher/src/ Removed Paths: ------------- plugins/src/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <le...@us...> - 2009-08-30 15:13:58
|
Revision: 16121 http://jedit.svn.sourceforge.net/jedit/?rev=16121&view=rev Author: leshij Date: 2009-08-30 15:13:49 +0000 (Sun, 30 Aug 2009) Log Message: ----------- TreeBufferSwitcher: fixing location Added Paths: ----------- plugins/TreeBufferSwitcher/test/ Removed Paths: ------------- plugins/test/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <le...@us...> - 2009-08-30 15:18:25
|
Revision: 16124 http://jedit.svn.sourceforge.net/jedit/?rev=16124&view=rev Author: leshij Date: 2009-08-30 15:18:19 +0000 (Sun, 30 Aug 2009) Log Message: ----------- TreeBufferSwitcher: fixing location Added Paths: ----------- plugins/TreeBufferSwitcher/TreeBufferSwitcher.props Removed Paths: ------------- plugins/TreeBufferSwitcher.props Copied: plugins/TreeBufferSwitcher/TreeBufferSwitcher.props (from rev 16123, plugins/TreeBufferSwitcher.props) =================================================================== --- plugins/TreeBufferSwitcher/TreeBufferSwitcher.props (rev 0) +++ plugins/TreeBufferSwitcher/TreeBufferSwitcher.props 2009-08-30 15:18:19 UTC (rev 16124) @@ -0,0 +1,15 @@ +plugin.treebufferswitcher.TreeBufferSwitcherPlugin.activate=startup + +plugin.treebufferswitcher.TreeBufferSwitcherPlugin.name=TreeBufferSwitcher +plugin.treebufferswitcher.TreeBufferSwitcherPlugin.author=Denis Dzenskevich +plugin.treebufferswitcher.TreeBufferSwitcherPlugin.version=0.1 +plugin.treebufferswitcher.TreeBufferSwitcherPlugin.docs=index.html +plugin.treebufferswitcher.TreeBufferSwitcherPlugin.depend.0=jdk 1.6 +plugin.treebufferswitcher.TreeBufferSwitcherPlugin.depend.1=jedit 04.03.18.00 +plugin.treebufferswitcher.TreeBufferSwitcherPlugin.description=Hierarchical buffer switcher with some additional options + +### options +#treebufferswitcher.xxx=yyyy + +### actions +treebufferswitcher.focusbufferswitcher.label=Focus Tree Buffer Switcher Deleted: plugins/TreeBufferSwitcher.props =================================================================== --- plugins/TreeBufferSwitcher.props 2009-08-30 15:16:34 UTC (rev 16123) +++ plugins/TreeBufferSwitcher.props 2009-08-30 15:18:19 UTC (rev 16124) @@ -1,15 +0,0 @@ -plugin.treebufferswitcher.TreeBufferSwitcherPlugin.activate=startup - -plugin.treebufferswitcher.TreeBufferSwitcherPlugin.name=TreeBufferSwitcher -plugin.treebufferswitcher.TreeBufferSwitcherPlugin.author=Denis Dzenskevich -plugin.treebufferswitcher.TreeBufferSwitcherPlugin.version=0.1 -plugin.treebufferswitcher.TreeBufferSwitcherPlugin.docs=index.html -plugin.treebufferswitcher.TreeBufferSwitcherPlugin.depend.0=jdk 1.6 -plugin.treebufferswitcher.TreeBufferSwitcherPlugin.depend.1=jedit 04.03.18.00 -plugin.treebufferswitcher.TreeBufferSwitcherPlugin.description=Hierarchical buffer switcher with some additional options - -### options -#treebufferswitcher.xxx=yyyy - -### actions -treebufferswitcher.focusbufferswitcher.label=Focus Tree Buffer Switcher This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <le...@us...> - 2009-08-30 15:20:01
|
Revision: 16125 http://jedit.svn.sourceforge.net/jedit/?rev=16125&view=rev Author: leshij Date: 2009-08-30 15:19:51 +0000 (Sun, 30 Aug 2009) Log Message: ----------- TreeBufferSwitcher: fixing location Added Paths: ----------- plugins/TreeBufferSwitcher/actions.xml Removed Paths: ------------- plugins/actions.xml Copied: plugins/TreeBufferSwitcher/actions.xml (from rev 16124, plugins/actions.xml) =================================================================== --- plugins/TreeBufferSwitcher/actions.xml (rev 0) +++ plugins/TreeBufferSwitcher/actions.xml 2009-08-30 15:19:51 UTC (rev 16125) @@ -0,0 +1,7 @@ +<?xml version="1.0"?> +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> +<ACTIONS> + <ACTION NAME="treebufferswitcher.focusbufferswitcher"> + <CODE>treebufferswitcher.TreeBufferSwitcherPlugin.focusBufferSwitcher(editPane);</CODE> + </ACTION> +</ACTIONS> Deleted: plugins/actions.xml =================================================================== --- plugins/actions.xml 2009-08-30 15:18:19 UTC (rev 16124) +++ plugins/actions.xml 2009-08-30 15:19:51 UTC (rev 16125) @@ -1,7 +0,0 @@ -<?xml version="1.0"?> -<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> -<ACTIONS> - <ACTION NAME="treebufferswitcher.focusbufferswitcher"> - <CODE>treebufferswitcher.TreeBufferSwitcherPlugin.focusBufferSwitcher(editPane);</CODE> - </ACTION> -</ACTIONS> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <le...@us...> - 2009-08-30 15:22:11
|
Revision: 16126 http://jedit.svn.sourceforge.net/jedit/?rev=16126&view=rev Author: leshij Date: 2009-08-30 15:22:02 +0000 (Sun, 30 Aug 2009) Log Message: ----------- TreeBufferSwitcher: fixing location Added Paths: ----------- plugins/TreeBufferSwitcher/build.xml Removed Paths: ------------- plugins/build.xml Copied: plugins/TreeBufferSwitcher/build.xml (from rev 16125, plugins/build.xml) =================================================================== --- plugins/TreeBufferSwitcher/build.xml (rev 0) +++ plugins/TreeBufferSwitcher/build.xml 2009-08-30 15:22:02 UTC (rev 16126) @@ -0,0 +1,27 @@ +<?xml version="1.0"?> +<!-- + This is the standard build.xml file for building the TreeBufferSwitcher plugin. + The 'dist' target compiles the plugin, generates documentation, and creates + the JAR file. Before running the 'dist' target, you will need to choose + whether to generate the documentation using one of these two targets: +--> + +<project name="TreeBufferSwitcher" default="build" basedir="."> + + <property file="build.properties"/> + <property file="../build.properties"/> + + <property name="docs-proc.target" value="xsltproc"/> + <property name="user-doc.xml" location = "users-guide.xml"/> + + <property name="src.dir" value="src"/> + <property name="build.dir" value="build"/> + + <import file="${build.support}/plugin-build.xml" /> + + <path id="project.class.path"> + <pathelement location="${jedit.install.dir}/jedit.jar"/> + <pathelement location="${src.dir}"/> + </path> + +</project> Deleted: plugins/build.xml =================================================================== --- plugins/build.xml 2009-08-30 15:19:51 UTC (rev 16125) +++ plugins/build.xml 2009-08-30 15:22:02 UTC (rev 16126) @@ -1,27 +0,0 @@ -<?xml version="1.0"?> -<!-- - This is the standard build.xml file for building the TreeBufferSwitcher plugin. - The 'dist' target compiles the plugin, generates documentation, and creates - the JAR file. Before running the 'dist' target, you will need to choose - whether to generate the documentation using one of these two targets: ---> - -<project name="TreeBufferSwitcher" default="build" basedir="."> - - <property file="build.properties"/> - <property file="../build.properties"/> - - <property name="docs-proc.target" value="xsltproc"/> - <property name="user-doc.xml" location = "users-guide.xml"/> - - <property name="src.dir" value="src"/> - <property name="build.dir" value="build"/> - - <import file="${build.support}/plugin-build.xml" /> - - <path id="project.class.path"> - <pathelement location="${jedit.install.dir}/jedit.jar"/> - <pathelement location="${src.dir}"/> - </path> - -</project> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2009-09-12 03:54:54
|
Revision: 16194 http://jedit.svn.sourceforge.net/jedit/?rev=16194&view=rev Author: voxmea Date: 2009-09-12 03:54:44 +0000 (Sat, 12 Sep 2009) Log Message: ----------- Initial import of Vimage Added Paths: ----------- plugins/Vimage/ plugins/Vimage/branches/ plugins/Vimage/tags/ plugins/Vimage/trunk/ plugins/Vimage/trunk/Vimage.props plugins/Vimage/trunk/actions.xml plugins/Vimage/trunk/build.xml plugins/Vimage/trunk/defaults/ plugins/Vimage/trunk/defaults/command plugins/Vimage/trunk/defaults/input plugins/Vimage/trunk/defaults/normal plugins/Vimage/trunk/defaults/pending plugins/Vimage/trunk/defaults/visual plugins/Vimage/trunk/doc/ plugins/Vimage/trunk/doc/index.html plugins/Vimage/trunk/vimage/ plugins/Vimage/trunk/vimage/ExBar.java plugins/Vimage/trunk/vimage/VimageActions.java plugins/Vimage/trunk/vimage/VimageCommand.java plugins/Vimage/trunk/vimage/VimageInputHandler.java plugins/Vimage/trunk/vimage/VimageMap.java plugins/Vimage/trunk/vimage/VimageOperation.java plugins/Vimage/trunk/vimage/VimageParser.java plugins/Vimage/trunk/vimage/VimagePlugin.java plugins/Vimage/trunk/vimage/VimageRecorder.java Added: plugins/Vimage/trunk/Vimage.props =================================================================== --- plugins/Vimage/trunk/Vimage.props (rev 0) +++ plugins/Vimage/trunk/Vimage.props 2009-09-12 03:54:44 UTC (rev 16194) @@ -0,0 +1,10 @@ +plugin.vimage.VimagePlugin.activate=startup +plugin.vimage.VimagePlugin.name=Vimage +plugin.vimage.VimagePlugin.author=Matthew Gilbert +plugin.vimage.VimagePlugin.docs=doc/index.html +plugin.vimage.VimagePlugin.version=0.0.1 +plugin.vimage.VimagePlugin.depend.0=jedit 04.03.15.00 +plugin.vimage.VimagePlugin.depend.1=jdk 1.5 +plugin.vimage.VimagePlugin.description=None +plugin.vimage.VimagePlugin.longdescription= + Added: plugins/Vimage/trunk/actions.xml =================================================================== --- plugins/Vimage/trunk/actions.xml (rev 0) +++ plugins/Vimage/trunk/actions.xml 2009-09-12 03:54:44 UTC (rev 16194) @@ -0,0 +1,184 @@ +<?xml version="1.0"?> + +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> +<ACTIONS> + <ACTION NAME="vimage.start"> + <CODE> + vimage.VimagePlugin.startVimage(); + </CODE> + </ACTION> + + <ACTION NAME="vimage.stop"> + <CODE> + vimage.VimagePlugin.stopVimage(); + </CODE> + </ACTION> + + <ACTION NAME="vimage.ex-bar"> + <CODE> + vimage.VimagePlugin.gotoExBar(view, ""); + </CODE> + </ACTION> + + <ACTION NAME="vimage.reload-maps"> + <CODE> + vimage.VimagePlugin.reloadMaps(); + </CODE> + </ACTION> + + <ACTION NAME="vimage.empty-command"> + <CODE> + </CODE> + </ACTION> + + <ACTION NAME="vimage.begin-line-text"> + <CODE> + vimage.VimageActions.goto_line_text_start(view, textArea, false); + </CODE> + </ACTION> + + <ACTION NAME="vimage.select-begin-line-text"> + <CODE> + vimage.VimageActions.goto_line_text_start(view, textArea, true); + </CODE> + </ACTION> + + <ACTION NAME="vimage.forward-till-char"> + <CODE> + vimage.VimageActions.find_char_on_line(view, true, false, -1, new String(new char[] {vimage_key.input})); + </CODE> + </ACTION> + + <ACTION NAME="vimage.select-forward-till-char"> + <CODE> + vimage.VimageActions.find_char_on_line(view, true, true, -1, new String(new char[] {vimage_key.input})); + </CODE> + </ACTION> + + <ACTION NAME="vimage.backward-till-char"> + <CODE> + vimage.VimageActions.find_char_on_line(view, false, false, 1, new String(new char[] {vimage_key.input})); + </CODE> + </ACTION> + + <ACTION NAME="vimage.select-backward-till-char"> + <CODE> + vimage.VimageActions.find_char_on_line(view, false, true, 1, new String(new char[] {vimage_key.input})); + </CODE> + </ACTION> + + <ACTION NAME="vimage.forward-char"> + <CODE> + vimage.VimageActions.find_char_on_line(view, true, false, 0, new String(new char[] {vimage_key.input})); + </CODE> + </ACTION> + + <ACTION NAME="vimage.select-forward-char"> + <CODE> + vimage.VimageActions.find_char_on_line(view, true, true, 0, new String(new char[] {vimage_key.input})); + </CODE> + </ACTION> + + <ACTION NAME="vimage.backward-char"> + <CODE> + vimage.VimageActions.find_char_on_line(view, false, false, 0, new String(new char[] {vimage_key.input})); + </CODE> + </ACTION> + + <ACTION NAME="vimage.select-backward-char"> + <CODE> + vimage.VimageActions.find_char_on_line(view, false, true, 0, new String(new char[] {vimage_key.input})); + </CODE> + </ACTION> + + <ACTION NAME="vimage.select-line"> + <CODE> + vimage.VimageActions.select_line(textArea); + </CODE> + </ACTION> + + <ACTION NAME="vimage.select-prev-line"> + <CODE> + vimage.VimageActions.select_line(textArea, -1); + </CODE> + </ACTION> + + <ACTION NAME="vimage.select-next-line"> + <CODE> + vimage.VimageActions.select_line(textArea, 1); + </CODE> + </ACTION> + + <ACTION NAME="vimage.goto-line"> + <CODE> + vimage.VimageActions.goto_line(view, textArea, vimage_count, false); + </CODE> + </ACTION> + + <ACTION NAME="vimage.select-goto-line"> + <CODE> + vimage.VimageActions.goto_line(view, textArea, vimage_count, true); + </CODE> + </ACTION> + + <ACTION NAME="vimage.delete-insert"> + <CODE> + vimage.VimageActions.cut(view, vimage_mode, textArea, vimage_mode.getRegister()); + vimage_mode.setMode("imap"); + </CODE> + </ACTION> + + <ACTION NAME="vimage.cut"> + <CODE> + vimage.VimageActions.cut(view, vimage_mode, textArea, vimage_mode.getRegister()); + </CODE> + </ACTION> + + <ACTION NAME="vimage.copy"> + <CODE> + vimage.VimageActions.copy(view, vimage_mode, textArea, vimage_mode.getRegister()); + </CODE> + </ACTION> + + <ACTION NAME="vimage.paste"> + <CODE> + vimage.VimageActions.paste(view, textArea, vimage_mode.getRegister(), true); + </CODE> + </ACTION> + + <ACTION NAME="vimage.paste-prev"> + <CODE> + vimage.VimageActions.paste(view, textArea, vimage_mode.getRegister(), false); + </CODE> + </ACTION> + + <ACTION NAME="vimage.swap-case"> + <CODE> + vimage.VimageActions.swap_case(textArea); + </CODE> + </ACTION> + + <ACTION NAME="vimage.replay-default"> + <CODE> + vimage_mode.playRecording('$'); + </CODE> + </ACTION> + + <ACTION NAME="vimage.replay-record"> + <CODE> + vimage_mode.playRecording(vimage_key.input); + </CODE> + </ACTION> + + <ACTION NAME="vimage.paste-record"> + <CODE> + vimage_mode.pasteRecording(vimage_key.input); + </CODE> + </ACTION> + + <ACTION NAME="vimage.show-keybindings"> + <CODE> + vimage.VimagePlugin.printKeyBindings(view); + </CODE> + </ACTION> +</ACTIONS> Added: plugins/Vimage/trunk/build.xml =================================================================== --- plugins/Vimage/trunk/build.xml (rev 0) +++ plugins/Vimage/trunk/build.xml 2009-09-12 03:54:44 UTC (rev 16194) @@ -0,0 +1,83 @@ +<?xml version="1.0"?> + +<!-- + + This is the build.xml file for building the Vimage plugin. + + It is based on the standard build.xml file for jEdit plugins. + +--> + +<project name="Vimage" default="dist" basedir="."> + + <property file="build.properties"/> + <property file="../build.properties"/> + <property file="${user.home}/.build.properties"/> + <property file="${user.home}/build.properties"/> + + <property name="jar.name" value="${ant.project.name}.jar"/> + + <property name="jedit.install.dir" value="../.."/> + <property name="src.dir" value="."/> + <property name="install.dir" value=".."/> + <property name="build.dir" value="build"/> + + <path id="project.class.path"> + <pathelement location="${jedit.install.dir}/jedit.jar"/> + <pathelement location="${install.dir}/TextObjects.jar"/> + <pathelement location="${src.dir}"/> + </path> + + <target name="init"> + <mkdir dir="${build.dir}"/> + </target> + + <target name="compile" depends="init"> + <javac + srcdir="${src.dir}" + destdir="${build.dir}" + deprecation="on" + debug="yes" + includes="vimage/**" + includeJavaRuntime="yes" + target="1.5" + source="1.5" + > + <classpath refid="project.class.path"/> + <compilerarg value="-Xlint:unchecked"/> + </javac> + </target> + + <target name="dist" depends="compile"> + <mkdir dir="${install.dir}"/> + + <jar jarfile="${install.dir}/${jar.name}"> + <fileset dir="${build.dir}"/> + <fileset dir="${src.dir}"> + <include name="actions.xml"/> + <include name="**/*.props"/> + <include name="**/*.html"/> + <include name="**/*.bsh"/> + <include name="defaults/*"/> + <exclude name=".bzr/**"/> + </fileset> + </jar> + </target> + + <target name="clean"> + <delete dir="${build.dir}"/> + <delete> + <fileset dir="." includes="**/*~"/> + </delete> + </target> + + <target name="tags"> + <exec executable="ctags"> + <arg value="-R" /> + <arg path="." /> + </exec> + </target> + +</project> + +<!-- :indentSize=4:lineSeparator=\n:noTabs=false:tabSize=4: --> Added: plugins/Vimage/trunk/defaults/command =================================================================== --- plugins/Vimage/trunk/defaults/command (rev 0) +++ plugins/Vimage/trunk/defaults/command 2009-09-12 03:54:44 UTC (rev 16194) @@ -0,0 +1,17 @@ + +command w { _("save"); } +command x { _("save"); _("close-buffer"); } +command ts { _("tags-tagstack"); } +command ta { _("tags-enter-and-follow-tag"); } +command sp { _("split-horizontal"); } +command q { _("close-view"); } +command new { _("new-file"); } +command marks { _("view-markers"); } +command e { _("open-file"); } +command b { _(jEdit.getProperty("vimage.buffer-switcher")); } +command bn { _("next-buffer"); } +command bp { _("prev-buffer"); } +command bw { _("close-buffer"); } +command sd { _("search-in-directory"); } +command sb { _("search-in-open-buffers"); } + Added: plugins/Vimage/trunk/defaults/input =================================================================== --- plugins/Vimage/trunk/defaults/input (rev 0) +++ plugins/Vimage/trunk/defaults/input 2009-09-12 03:54:44 UTC (rev 16194) @@ -0,0 +1,3 @@ +// vimage + +imap C+n { _("complete-word"); } Added: plugins/Vimage/trunk/defaults/normal =================================================================== --- plugins/Vimage/trunk/defaults/normal (rev 0) +++ plugins/Vimage/trunk/defaults/normal 2009-09-12 03:54:44 UTC (rev 16194) @@ -0,0 +1,225 @@ +// vimage + +nmap i { __("imap"); } +nmap a { + int pos = textArea.getCaretPosition(); + if (pos < (textArea.getLineEndOffset(textArea.getLineOfOffset(pos)) - 1)) + _("next-char"); + __("imap"); +} +nmap v { __("vmap"); } +nmap V { __("vmap"); _("line-home"); _("vimage.select-line"); mode.pushMode("ignore-left-right"); } +ignore-left-right l { } +ignore-left-right RIGHT { } +ignore-left-right h { } +ignore-left-right LEFT { } +ignore-left-right k { + _("vimage.select-prev-line"); + mode.pushMode("ignore-left-right"); +} +ignore-left-right UP { + _("vimage.select-prev-line"); + mode.pushMode("ignore-left-right"); +} +ignore-left-right j { + _("vimage.select-next-line"); + mode.pushMode("ignore-left-right"); +} +ignore-left-right DOWN { + _("vimage.select-next-line"); + mode.pushMode("ignore-left-right"); +} +ignore-left-right G { + if (count == 0) { + count = textArea.getLineCount(); + } + // Input count is 1 based, jEdit lines are 0 based. + offset = count - (textArea.getCaretLine() + 1); + vimage.VimageActions.select_line(textArea, offset); + mode.pushMode("ignore-left-right"); + mode.setCount(0); +} + +nmap o { _("line-end"); _("insert-newline-indent"); __("imap"); } +nmap O { _("line-home"); _("insert-newline"); _("prev-line"); _("indent-lines"); __("imap"); } + +nmap r { __("overwrite-key"); } +overwrite-key * { + buffer.beginCompoundEdit(); + _("delete"); + textArea.userInput(key.input); + buffer.endCompoundEdit(); + _("prev-char"); +} +nmap R { __("imap"); textArea.setOverwriteEnabled(true); } + +nmap / { _("quick-search"); } +nmap * { _("quick-search-word"); } +nmap n { _("find-next"); _("select-none"); } +nmap N { _("find-prev"); _("select-none"); } + +nmap z { mode.setMode("z-prefix"); } +z-prefix z { _("scroll-and-center"); } +z-prefix t { vimage.VimageActions.scroll(textArea, false, -1); _("vimage.empty-command"); } +z-prefix b { vimage.VimageActions.scroll(textArea, false, 1); _("vimage.empty-command"); } + +nmap J { _("join-lines"); } +nmap d { + Selection sel = textArea.getSelectionAtOffset(textArea.getCaretPosition()); + if (sel != null) { + _("vimage.cut"); + return; + } + mode.pushMode("d-select-line"); + _("vimage.cut", "omap"); + //__("omap"); +} +d-select-line d { _("vimage.select-line"); } +nmap c { mode.pushMode("c-select-line"); _("vimage.delete-insert", "omap"); } +c-select-line c { _("select-line"); } +nmap x { + if (textArea.getLineText(textArea.getCaretLine()).equals("")) + return; + int pos = textArea.getCaretPosition(); + if (pos < (textArea.getLineEndOffset(textArea.getLineOfOffset(pos)) - 1)) { + _("select-next-char"); + _("vimage.cut"); + return; + } + _("prev-char"); + _("select-next-char"); + _("vimage.cut"); +} +nmap y { + Selection sel = textArea.getSelectionAtOffset(textArea.getCaretPosition()); + if (sel != null) { + _("vimage.copy"); + return; + } + mode.pushMode("y-select-line"); + _("vimage.copy", "omap"); +} +y-select-line y { _("vimage.select-next-line"); } +nmap p { _("vimage.paste"); } +nmap P { _("vimage.paste-prev"); } + +nmap ~ { _("vimage.swap-case"); } + +nmap u { _("undo"); } +nmap C+r { _("redo"); } + +nmap LEFT { _("prev-char"); } +nmap h { _("prev-char"); } +nmap RIGHT { _("next-char"); } +nmap l { _("next-char"); } +nmap UP { _("prev-line"); } +nmap k { _("prev-line"); } +nmap DOWN { _("next-line"); } +nmap j { _("next-line"); } + +nmap C+d { _("next-page"); } +nmap PAGE_DOWN { _("next-page"); } +nmap C+b { _("prev-page"); } +nmap PAGE_UP { _("prev-page"); } + +nmap w { _("next-word-std"); } +nmap b { _("prev-word-std"); } + +nmap % { _("match-bracket"); } +nmap $ { + /* + line_start = textArea.getLineStartOffset(textArea.getCaretLine()); + line_end = textArea.getLineEndOffset(textArea.getCaretLine()); + textArea.moveCaretPosition(java.lang.Math.max(line_start, line_end - 2)); + textArea.scrollToCaret(true); + */ + _("line-end"); +} +nmap 0 { + if (mode.getCount() == 0) + _("line-home"); + mode.addDigit(0); +} +nmap ^ { _("vimage.begin-line-text"); } +nmap < { __("left-prefix"); } +left-prefix < { _("shift-left"); } +nmap > { __("right-prefix"); } +right-prefix > { _("shift-right"); } + +nmap t { __("t-key"); } +t-key * { _("vimage.forward-till-char"); } +nmap T { __("T-key"); } +T-key * { _("vimage.backward-till-char"); } +nmap f { __("f-key"); } +f-key * { _("vimage.forward-char"); } +nmap F { __("F-key"); } +F-key * { _("vimage.backward-char"); } + +nmap G { _("vimage.goto-line"); } +nmap g { __("g-prefix"); } +g-prefix g { if (vimage_count == 0) vimage_count = 1; _("vimage.goto-line"); } +g-prefix v { + sel = mode.getLastSelection(); + if (sel != null) { + mode.clearState(); + __("vmap"); + textArea.setSelection(sel); + } +} + +nmap " { __("register-key"); } +register-key * { mode.setRegister(key.input); } + +nmap : { _("vimage.ex-bar"); } + +nmap m { __("mark-key"); } +mark-key * { + char c = key.input; + Marker marker = buffer.getMarker(c); + if (marker != null) + buffer.removeMarker(textArea.getLineOfOffset(marker.getPosition())); + buffer.addMarker(c, textArea.getCaretPosition()); +} +nmap ' { __("goto-line-marker-key"); } +goto-line-marker-key * { + char c = key.input; + Marker marker = buffer.getMarker(c); + if (marker == null) + return; + textArea.setCaretPosition(textArea.getLineStartOffset(textArea.getLineOfOffset(marker.getPosition()))); +} +nmap ` { __("goto-position-marker-key"); } +goto-position-marker-key * { + char c = key.input; + Marker marker = buffer.getMarker(c); + if (marker == null) + return; + textArea.setCaretPosition(marker.getPosition()); +} + +nmap . { _("vimage.replay-default"); } +nmap q { + if (mode.isRecording()) { + mode.stopRecording(); + return; + } + __("record-key"); +} +record-key * { mode.startRecording(key.input); } +nmap @ { __("record-play-key"); } +record-play-key * { _("vimage.replay-record"); } +nmap # { __("record-paste-key"); } +record-paste-key * { _("vimage.paste-record"); } + +nmap = { __("equal-prefix"); } +equal-prefix = { _("indent-lines"); } + +nmap 1 { mode.addDigit(1); } +nmap 2 { mode.addDigit(2); } +nmap 3 { mode.addDigit(3); } +nmap 4 { mode.addDigit(4); } +nmap 5 { mode.addDigit(5); } +nmap 6 { mode.addDigit(6); } +nmap 7 { mode.addDigit(7); } +nmap 8 { mode.addDigit(8); } +nmap 9 { mode.addDigit(9); } Added: plugins/Vimage/trunk/defaults/pending =================================================================== --- plugins/Vimage/trunk/defaults/pending (rev 0) +++ plugins/Vimage/trunk/defaults/pending 2009-09-12 03:54:44 UTC (rev 16194) @@ -0,0 +1,123 @@ +// vimage + +omap LEFT { _("select-prev-char"); } +omap h { _("select-prev-char"); } +omap RIGHT { _("select-next-char"); } +omap l { _("select-next-char"); } +omap UP { _("select-prev-line"); } +omap k { _("select-prev-line"); } +omap DOWN { _("select-next-line"); } +omap j { _("select-next-line"); } + +omap C+d { _("select-next-page"); } +omap C+b { _("select-prev-page"); } + +omap w { _("select-next-word-std"); } +omap b { _("select-prev-word-std"); } + +omap % { _("match-bracket"); } +omap $ { _("select-line-end"); } +omap 0 { _("select-line-home"); } +omap ^ { _("vimage.select-begin-line-text"); } + +omap G { _("vimage.select-goto-line"); } +omap g { __("visual-g-prefix"); } + +omap t { __("visual-t-key"); } +omap T { __("visual-T-key"); } +omap f { __("visual-f-key"); } +omap F { __("visual-F-key"); } + +omap i { __("to-in-prefix"); } +to-in-prefix w { _("textobjects.select-in-word"); } +to-in-prefix s { _("textobjects.select-in-sentence"); } +to-in-prefix p { _("textobjects.select-in-paragraph"); } +to-in-prefix { { _("textobjects.select-in-brace"); mode.pushMode("to-in-next-key"); } +to-in-prefix } { _("textobjects.select-in-brace"); mode.pushMode("to-in-next-key"); } +to-in-prefix [ { _("textobjects.select-in-bracket"); mode.pushMode("to-in-next-key"); } +to-in-prefix ] { _("textobjects.select-in-bracket"); mode.pushMode("to-in-next-key"); } +to-in-prefix ` { _("textobjects.select-in-back-tick"); } +to-in-prefix " { _("textobjects.select-in-quote"); } +to-in-prefix ' { _("textobjects.select-in-tick"); } +to-in-prefix < { _("textobjects.select-in-angle"); mode.pushMode("to-in-next-key"); } +to-in-prefix > { _("textobjects.select-in-angle"); mode.pushMode("to-in-next-key"); } +to-in-prefix ( { _("textobjects.select-in-paren"); mode.pushMode("to-in-next-key"); } +to-in-prefix ) { _("textobjects.select-in-paren"); mode.pushMode("to-in-next-key"); } +to-in-prefix c { _("textobjects.select-in-comment"); } +to-in-prefix i { _("textobjects.select-in-indent"); } +to-in-next-key * { + Selection sel = textArea.getSelectionAtOffset(textArea.getCaretPosition()); + if (sel == null) { + mode.runKeyInMode(mode.getMode(), key); + return; + } + int offset = sel.getEnd() + 2; + offset = java.lang.Math.min(offset, textArea.getBufferLength()); + + String blocks = "{[(<}])>"; + int index = blocks.indexOf(key.input); + if (index != -1) { + int pair_index = (index + (blocks.length() / 2)) % blocks.length(); + int open = Math.min(index, pair_index); + int close = Math.max(index, pair_index); + String pair = blocks.substring(open, open + 1) + blocks.substring(close, close + 1); + Selection res = textobjects.TextObjectsPlugin.block(textArea, offset, false, pair); + if (res != null) { + textArea.setSelection(res); + } + mode.pushMode("to-in-next-key"); + return; + } + mode.runKeyInMode(mode.getMode(), key); +} + +omap a { __("to-a-prefix"); } +to-a-prefix w { _("textobjects.select-a-word"); } +to-a-prefix s { _("textobjects.select-a-sentence"); } +to-a-prefix p { _("textobjects.select-a-paragraph"); } +to-a-prefix { { _("textobjects.select-a-brace"); mode.pushMode("to-a-next-key"); } +to-a-prefix } { _("textobjects.select-a-brace"); mode.pushMode("to-a-next-key"); } +to-a-prefix [ { _("textobjects.select-a-bracket"); mode.pushMode("to-a-next-key"); } +to-a-prefix ] { _("textobjects.select-a-bracket"); mode.pushMode("to-a-next-key"); } +to-a-prefix ` { _("textobjects.select-a-back-tick"); } +to-a-prefix " { _("textobjects.select-a-quote"); } +to-a-prefix ' { _("textobjects.select-a-tick"); } +to-a-prefix < { _("textobjects.select-a-angle"); mode.pushMode("to-a-next-key"); } +to-a-prefix > { _("textobjects.select-a-angle"); mode.pushMode("to-a-next-key"); } +to-a-prefix ( { _("textobjects.select-a-paren"); mode.pushMode("to-a-next-key"); } +to-a-prefix ) { _("textobjects.select-a-paren"); mode.pushMode("to-a-next-key"); } +to-a-prefix c { _("textobjects.select-a-comment"); } +to-a-prefix i { _("textobjects.select-a-indent"); } +to-a-next-key * { + Selection sel = textArea.getSelectionAtOffset(textArea.getCaretPosition()); + if (sel == null) + return; + int offset = sel.getEnd() + 1; + offset = java.lang.Math.min(offset, textArea.getBufferLength()); + + String blocks = "{[(<}])>"; + int index = blocks.indexOf(key.input); + if (index != -1) { + int pair_index = (index + (blocks.length() / 2)) % blocks.length(); + int open = Math.min(index, pair_index); + int close = Math.max(index, pair_index); + String pair = blocks.substring(open, open + 1) + blocks.substring(close, close + 1); + Selection res = textobjects.TextObjectsPlugin.block(textArea, offset, true, pair); + if (res != null) { + textArea.setSelection(res); + } + mode.pushMode("to-a-next-key"); + return; + } + mode.runKeyInMode(mode.getMode(), key); +} + +omap 1 { mode.addDigit(1); mode.pushMode("digits"); } +omap 2 { mode.addDigit(2); mode.pushMode("digits"); } +omap 3 { mode.addDigit(3); mode.pushMode("digits"); } +omap 4 { mode.addDigit(4); mode.pushMode("digits"); } +omap 5 { mode.addDigit(5); mode.pushMode("digits"); } +omap 6 { mode.addDigit(6); mode.pushMode("digits"); } +omap 7 { mode.addDigit(7); mode.pushMode("digits"); } +omap 8 { mode.addDigit(8); mode.pushMode("digits"); } +omap 9 { mode.addDigit(9); mode.pushMode("digits"); } Added: plugins/Vimage/trunk/defaults/visual =================================================================== --- plugins/Vimage/trunk/defaults/visual (rev 0) +++ plugins/Vimage/trunk/defaults/visual 2009-09-12 03:54:44 UTC (rev 16194) @@ -0,0 +1,81 @@ +// vimage + +vmap r { __("visual-overwrite-key"); } +visual-overwrite-key * { + Selection selection = textArea.getSelectionAtOffset(textArea.getCaretPosition()); + if (selection == null) + return; + StringBuffer sbuf = new StringBuffer(); + for (int i = selection.getStart(); i < selection.getEnd(); ++i) + sbuf.append(key.input); + textArea.setSelectedText(sbuf.toString()); +} + +vmap LEFT { _("select-prev-char"); } +vmap h { _("select-prev-char"); } +vmap RIGHT { _("select-next-char"); } +vmap l { _("select-next-char"); } +vmap UP { _("select-prev-line"); } +vmap k { _("select-prev-line"); } +vmap DOWN { _("select-next-line"); } +vmap j { _("select-next-line"); } + +vmap C+d { _("select-next-page"); } +vmap PAGE_DOWN { _("select-next-page"); } +vmap C+b { _("select-prev-page"); } +vmap PAGE_UP { _("select-prev-page"); } + +vmap w { _("select-next-word-std"); } +vmap b { _("select-prev-word-std"); } + +vmap % { _("match-bracket"); } +vmap $ { _("select-line-end"); } +vmap 0 { + if (mode.getCount() == 0) + _("select-line-home"); + mode.addDigit(0); +} +vmap ^ { _("vimage.select-begin-line-text"); } + +vmap G { _("vimage.select-goto-line"); } +vmap g { __("visual-g-prefix"); } +visual-g-prefix g { _("select-document-home"); } + +vmap t { __("visual-t-key"); } +visual-t-key * { _("vimage.select-forward-till-char"); } +vmap T { __("visual-T-key"); } +visual-T-key * { _("vimage.select-backward-till-char"); } +vmap f { __("visual-f-key"); } +visual-f-key * { _("vimage.select-forward-char"); } +vmap F { __("visual-F-key"); } +visual-F-key * { _("vimage.select-backward-char"); } + +vmap > { _("shift-right"); __("nmap"); } +vmap < { _("shift-left"); __("nmap"); } + +vmap a { __("to-a-prefix"); } +vmap i { __("to-in-prefix"); } + +vmap d { if (textArea.getSelection().length != 0) { _("vimage.cut"); __("nmap"); } } +vmap c { if (textArea.getSelection().length != 0) { _("vimage.delete-insert"); __("imap"); } } +vmap x { if (textArea.getSelection().length != 0) { _("vimage.cut"); __("nmap"); } } +vmap y { if (textArea.getSelection().length != 0) { _("vimage.copy"); __("nmap"); } } +vmap p { _("vimage.paste"); __("nmap"); } +vmap P { _("vimage.paste"); __("nmap"); } + +vmap ~ { _("vimage.swap-case"); __("nmap"); } + +vmap = { _("indent-lines"); __("nmap"); } + +nmap " { __("register-key"); } + +vmap 1 { mode.addDigit(1); } +vmap 2 { mode.addDigit(2); } +vmap 3 { mode.addDigit(3); } +vmap 4 { mode.addDigit(4); } +vmap 5 { mode.addDigit(5); } +vmap 6 { mode.addDigit(6); } +vmap 7 { mode.addDigit(7); } +vmap 8 { mode.addDigit(8); } +vmap 9 { mode.addDigit(9); } + Added: plugins/Vimage/trunk/doc/index.html =================================================================== --- plugins/Vimage/trunk/doc/index.html (rev 0) +++ plugins/Vimage/trunk/doc/index.html 2009-09-12 03:54:44 UTC (rev 16194) @@ -0,0 +1,182 @@ +<html> + <head> + <title>Vimage Plugin Documentation</title> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> + </head> + <body> + + <h1>Vimage</h1> + + <h2>Introduction</h2> + + <p>Vimage is a jEdit plugin that adds Vim like key binding emulation to + jEdit. The plugin provides a flexible modal input layer and a set of + actions which emulate Vim.</p> + + <p>Familiarity with Vim is expected. Vimage is currently incomplete + and doesn't emulate the entirety of Vim's keybindings. In addition, + some Vimage operations don't mimic the Vim counterparts exactly (for + example, word based cursor movement).</p> + + <h2>Key Bindings</h2> + + <p>Vimage comes equipped with a default set of keybindings that + approximates most of Vim. The keybindings can be extended by + providing new key mapping files.</p> + + <h3>User Mappings</h3> + + <p>Vimage keybindings are defined in simple text files. They + have the following layout: + <b><pre>MODE_NAME KEY_COMBINATION { BeanShell Action }</pre></b> + <b>MODE_NAME</b> + instructs the Vimage mapping parser which mode owns the + following key/action pair. Vimage provides a flexible modal + input system supporting an unlimited number of input modes. + Each mode is a grouping of keyboard shortcuts and associated + actions. The current mode can be changed through the + BeanShell Action. Vimage actually supports 2 current modes, + the current base mode and the current overlay mode. As the + names imply, the overlay mode adds or overrides key/action + pairs of the base mode. We'll give more specifics and + examples of modes later.<br><br> + <b>KEY_COMBINATION</b> + defines the key combination that will trigger the + following BeanShell action block. These are written in + standard jEdit keyboard shortcut syntax. See below and + Appendix A. in the jEdit Help for more examples.<br><br> + <b>{ BeanShell Action }</b> + is a standard BeanShell block that will be invoked when + Vimage is in mode MODE_NAME and KEY_COMBINATION is pressed. + Vimage adds some special variables to the BeanShell + namespace which are outlined below. </p> + + <h3>User Mapping Directory</h3> + + <p>Vimage looks in the jEdit settings directory for a + sub-directory named mappings. It loads every file in the + mappings directory parsing the contained key mapping + declarations.</p> + + <h2>Quick Mapping Tutorial</h2> + + <p>We're going to add a mapping to Vimage which invokes the SideKick + tree (SideKick is a great jEdit plugin which shows the structure of + the current buffer). + <ol> + <li>Start by creating the mappings directory: + <ol> + <li>Open jEdit's open file dialog. + <li>Change directories to the jEdit settings directory + (typically ~/.jedit, but varies by platform, see <i>The + jEdit Settings Directory</i> in the jEdit help for more + info). + <li>Open the Command menu and choose "New Directory". + <li>Name the new directory mappings. + <li>Change into the newly created mappings directory. + </ol> + <li>Create a new file, let's name it nmap. The filename doesn't + matter, it is typically convenient to name the files after the + mode defined in the file (nmap is one of the 4 default modes + provided by Vimage and is the default mode). + <li>Add the following text to the file and save it: + <pre>nmap C+MINUS { _("sidekick-tree"); }</pre> + <li>Tell Vimage to reload the mappings using the Vimage action + <i>vimage.reload-maps</i> (see <i>The Action Bar</i> in the + jEdit help for how to use actions with the action bar). + <li>Finally, use the new shortcut. Hit escape to make sure + Vimage is in the nmap mode, then press C+MINUS (control and + minus at the same time). If you have the SideKick plugin + installed you should now be looking the tree dockable. + </ol> + </p> + + <h2>Mappings in Depth</h2> + + <h3>BeanShell Namespace Additions</h3> + + <p>Vimage adds the following variables to the Vimage BeanShell + namespace (the namespace in which all mapping actions are + executed). + <ul> + <li><b>count</b> is the current count. Most Vimage + operations can be repeated by first supplying an + optional count. + <li><b>key</b> is the key that triggered the action. + This is explained more in the <i>Mappings That Take a + Key</i> section. It is an instance of jEdit's + KeyEventTranslator.Key class. + <li><b>mode</b> is the Vimage mode object. Its public + interface can be accessed through this variable. + </ul> + + <p>Vimage adds the following functions to the Vimage BeanShell + namespace. + <ul> + <li><b>_(String a)</b> executes the jEdit action a. + <li><b>__(String m)</b> causes Vimage to switch to + mode m. + </ul> + + <h3>Mappings That Take a Key</h3> + + <p>For some shortcuts it's not enough to be triggered, they need + additional input in the form of a key press. For example, the + standard Vim command to move to the next letter on a line + requires the character as input. Vimage supports this through + special mode names.</p> + + <p>Modes that end in "-key" are special. They should only have a + single key mapping - "*". For example, here is the default + mapping to select a register: + <pre>nmap " { __("register-key"); }</pre> + <pre>register-key * { mode.setRegister(key.input); }</pre> + + <p>"-key" modes are expected to take only a single character as + input. After the "-key" action is executed, the mode is + automatically put back to the last used base mode (see the next + section about base modes).</p> + + <h2>The 5 Base Modes</h2> + + <p>Vimage adds 5 modes by default. They are nmap, imap, vmap, + omap, and command. + <ul> + <li><b>nmap</b> is the default mode. This corresponds to + Vim's normal mode. Pressing escape causes Vimage to + return to normal mode. This key binding can not be + overridden. + <li><b>imap</b> is the input mode. This mode corresponds + to entering text. Any keys that don't match a key/action + pair are passed as input to jEdit's textarea. + <li><b>vmap</b> is the visual selection mode. In this + mode cursor movement will extend the selection. + <li><b>omap</b> is the operator pending mode. For + example, with no select hitting "d" in nmap will cause + Vimage to enter omap waiting for another keystroke + indication what to delete. + <li><b>command</b> is a special mode corresponding to + the Vimage command line. The command line is accessed + using the ':' key from the nmap mode. Currently this + mode is limited in that arguments supplied on the + command line are not forwarded to the action. + </ul> + + <h2>Overlay Modes</h2> + + <p>Occasionally it makes sense to add or override key/action pairs + while maintaining the base mode. Vimage supports this through the + mode.pushMode function. For example, to support line-wise commands + when a key is pressed twice (e.g. dd, yy, cc, etc.), the default key + bindings push an overlay mode that change the key binding for the + duplicate key. + + <h2>Viewing the Mappings</h2> + + <p>Vimage provides a <i>vimage.show-keybindings</i> action which + prints the current modes and their key/action pairs to a new jEdit + buffer. + + + </body> +</html> Added: plugins/Vimage/trunk/vimage/ExBar.java =================================================================== --- plugins/Vimage/trunk/vimage/ExBar.java (rev 0) +++ plugins/Vimage/trunk/vimage/ExBar.java 2009-09-12 03:54:44 UTC (rev 16194) @@ -0,0 +1,207 @@ + +/* + * ExBar.java - Vimage plugin + * + * Copyright (C) 2005 Ollie Rutherfurd <ol...@je...> + * Copyright (C) 2009 Matthew Gilbert <gi...@vo...> + * + * 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package vimage; + +import java.awt.event.*; +import java.awt.*; +import java.util.Arrays; +import javax.swing.event.*; +import javax.swing.*; +import org.gjt.sp.jedit.*; +import org.gjt.sp.jedit.gui.*; +import org.gjt.sp.util.Log; +import org.gjt.sp.jedit.bsh.NameSpace; +import org.gjt.sp.jedit.bsh.BshMethod; + +public class ExBar extends JPanel +{ + protected View view; + protected HistoryTextField input; + protected RolloverButton close; + protected VimageMap map; + + public ExBar(final View view) + { + setLayout(new BoxLayout(this,BoxLayout.X_AXIS)); + + this.view = view; + + //add(Box.createHorizontalStrut(2)); + add(input = new ExTextField()); + input.setEnterAddsToHistory(true); // ??? really wanted + Dimension max = input.getPreferredSize(); + max.width = Integer.MAX_VALUE; + input.setMaximumSize(max); + input.addActionListener(new ActionHandler()); + // XXX input.getDocument().addDocumentListener(new DocumentHandler()); + + close = new RolloverButton(GUIUtilities.loadIcon("closebox.gif")); + close.addActionListener(new ActionHandler()); + close.setToolTipText(jEdit.getProperty("view.action.close-tooltip")); + add(close); + } + + public HistoryTextField getField() + { + return input; + } + + public void goToExBar(String text) + { + input.setText(text); + input.requestFocus(); + } + + private void invoke() + { + final View view = this.view; + view.removeToolBar(this); + view.getTextArea().requestFocus(); + SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + //view.getTextArea().requestFocus(); + VimageInputHandler vih; + vih = (VimageInputHandler)view.getInputHandler(); + VimageMap map = vih.getMap(); + + String text = input.getText(); + + // First word is the command, pass everything else as argv + String[] parts = text.split("(?<!\\\\)\\s"); + if (parts.length == 0) + return; + String command = parts[0]; + String[] argv = new String[] {}; + if (parts.length > 1) { + try { + java.util.List<String> list = Arrays.asList(parts); + list = list.subList(1, parts.length - 1); + argv = list.toArray(argv); + } catch (java.lang.Exception ex) { + Log.log(Log.DEBUG, this, ex); + } + } + + try { + final BshMethod method = map.get("command", command); + if(method == null) + { + // Maybe a jEdit action? + if (parts.length == 1) { + EditAction ea = jEdit.getAction(command); + if (ea != null) { + ea.invoke(view); + return; + } + } + + Log.log(Log.DEBUG, this, "no match for: " + input.getText()); + Toolkit.getDefaultToolkit().beep(); + return; + } + + try { + NameSpace namespace = new NameSpace(BeanShell.getNameSpace(), "Vimage"); + namespace.setVariable("mode", vih); + namespace.setVariable("argv", argv); + BeanShell.runCachedBlock(method, view, namespace); + } catch (java.lang.Exception ex) { + Log.log(Log.DEBUG, this, "command failed: " + ex); + } + } catch (java.lang.Exception ex) { + Log.log(Log.ERROR, this, ex); + } + } + }); + } + + private void close(boolean reset) + { + view.removeToolBar(this); + view.getTextArea().requestFocus(); + } + + class ActionHandler implements ActionListener + { + public void actionPerformed(ActionEvent evt) + { + if(evt.getSource() == close) + close(true); + else + invoke(); + } + } + + class ExTextField extends HistoryTextField + { + ExTextField() + { + super("ex"); + setSelectAllOnFocus(false); + } + + /* + public boolean isManagingFocus() + { + return true; + } + */ + + public boolean getFocusTraversalKeysEnabled() + { + return false; + } + + public void processKeyEvent(KeyEvent evt) + { + evt = KeyEventWorkaround.processKeyEvent(evt); + if(evt == null) + return; + int keyCode = evt.getKeyCode(); + switch(evt.getID()) + { + case KeyEvent.KEY_PRESSED: + if(keyCode == KeyEvent.VK_ESCAPE) + { + evt.consume(); + close(true); + return; + } + else if(keyCode == KeyEvent.VK_BACK_SPACE) + { + // XXX this is pretty crappy + if(input.getText().length() == 1) + { + evt.consume(); + input.setText(""); + close(true); + return; + } + } + } + super.processKeyEvent(evt); + } + } +} Added: plugins/Vimage/trunk/vimage/VimageActions.java =================================================================== --- plugins/Vimage/trunk/vimage/VimageActions.java (rev 0) +++ plugins/Vimage/trunk/vimage/VimageActions.java 2009-09-12 03:54:44 UTC (rev 16194) @@ -0,0 +1,380 @@ + +/* + +Copyright (C) 2005 Ollie Rutherfurd <ol...@je...> +Copyright (C) 2009 Matthew Gilbert + +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 vimage; + +import java.lang.Class; +import java.lang.Math; + +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.textarea.Selection; +import org.gjt.sp.jedit.textarea.TextArea; +import org.gjt.sp.jedit.textarea.JEditTextArea; +import org.gjt.sp.jedit.Buffer; +import org.gjt.sp.jedit.EditAction; +import org.gjt.sp.util.Log; +import org.gjt.sp.jedit.Registers; +import org.gjt.sp.jedit.gui.InputHandler; +import org.gjt.sp.jedit.TextUtilities; + +public class VimageActions +{ + protected static int start_line; + + protected static void _(View view, String action) + { + EditAction ea = jEdit.getAction(action); + if (ea == null) + return; + ea.invoke(view); + } + + public static void goto_line_text_start(View view, TextArea text_area, boolean select) + { + int line_number = text_area.getCaretLine(); + String line_text = text_area.getLineText(line_number); + int i = 0; + while (java.lang.Character.isWhitespace(line_text.charAt(i)) && (i < line_text.length())) { + ++i; + } + if (select) { + int pos = text_area.getCaretPosition(); + text_area.setCaretPosition(text_area.getLineStartOffset(line_number) + i); + text_area.resizeSelection(pos, text_area.getCaretPosition(), 0, false); + } else { + text_area.setCaretPosition(text_area.getLineStartOffset(line_number) + i); + } + } + + /** + * Support for f, F, t, and T. + */ + public static void find_char_on_line(View view, boolean forward, + boolean select, int offset, + String ch) + { + Buffer buffer = view.getBuffer(); + int caretLine = view.getTextArea().getCaretLine(); + int startOffset = view.getTextArea().getLineStartOffset(caretLine); + int endOffset = view .getTextArea().getLineEndOffset(caretLine); + int caret = view.getTextArea().getCaretPosition(); + int index = -1; + + String text = null; + if(forward) + { + if(caret+1 >= buffer.getLength()) + { + return; + } + int len = endOffset - (caret+1); + if(endOffset >= buffer.getLength()) + len--; + text = view.getTextArea().getText(caret+1,len); + index = text.indexOf(ch); + } + else + { + text = view.getTextArea().getText(startOffset,caret-startOffset); + index = text.lastIndexOf(ch); + } + + if(index > -1) + { + if(forward) + index = caret + index + 1; + else + index = startOffset + index; + + if(offset != 0) + index += offset; + + if(select) + { + // extend selection through match char + if(forward) + index++; + int mn = Math.min(caret, index); + int mx = Math.max(caret, index); + Selection s = new Selection.Range(mn,mx); + if(view.getTextArea().isMultipleSelectionEnabled()) + view.getTextArea().addToSelection(s); + else + // XXX don't want to add if disjointed + view.getTextArea().addToSelection(s); + } + view.getTextArea().moveCaretPosition(index); + } + } + + public static void goto_line(View view, TextArea text_area, int count, boolean select) + { + if (count == 0) { + if (select) + _(view, "select-document-end"); + else + _(view, "document-end"); + return; + } + + // getLineStartOffset takes 0 based line numbers, so subtract 1 from + // count. + int line = count - 1; + if (line >= text_area.getLineCount()) + return; + text_area.setCaretPosition(text_area.getLineStartOffset(line)); + if (select) { + int pos = text_area.getCaretPosition(); + Selection sel = text_area.getSelectionAtOffset(pos); + if (sel == null) + text_area.resizeSelection(pos, text_area.getCaretPosition(), 0, false); + else + text_area.resizeSelection(sel.getStart(), text_area.getCaretPosition(), 0, false); + } + } + + public static void cut(View view, VimageInputHandler mode, TextArea text_area, char reg_name) + { + Selection ds = view.getTextArea().getSelectionAtOffset(view.getTextArea().getCaretPosition()); + if (ds == null) { + return; + } + if (mode.isIterating()) { + Registers.append(text_area, reg_name, "", true); + } else { + Registers.cut(text_area, reg_name); + } + } + + public static void copy(View view, VimageInputHandler mode, TextArea text_area, char reg_name) + { + Registers.copy(text_area, reg_name); + } + + public static void paste(View view, TextArea text_area, char reg_name, boolean after_caret) + { + int pos = text_area.getCaretPosition(); + Selection sel = text_area.getSelectionAtOffset(pos); + if (after_caret && (sel == null)) { + int line_end = text_area.getLineEndOffset(text_area.getCaretLine()); + pos += 1; + // Don't let after_caret move past the newline at the end of the + // line, so take min of pos and (line_end - 1). + // Ordering is important here. (line_end - 1) may be -1, so make sure the max + // call comes second. + pos = java.lang.Math.min(line_end - 1, pos); + pos = java.lang.Math.max(0, pos); + } + + if (sel != null) { + Registers.paste(text_area, reg_name); + return; + } + + // Make a guess that anything that ends with a newline is line-wise. + // eek. + Registers.Register reg = Registers.getRegister(reg_name); + if (reg == null) + return; + Buffer b = view.getBuffer(); + String reg_text = reg.toString(); + boolean linewise = reg_text.endsWith("\n"); + if (sel == null) { + if (linewise) { + if (after_caret) { + pos = text_area.getLineEndOffset(text_area.getCaretLine()); + } else { + pos = text_area.getLineStartOffset(text_area.getCaretLine()); + } + } + } + pos = java.lang.Math.min(text_area.getBufferLength(), pos); + pos = java.lang.Math.max(0, pos); + b.insert(pos, reg_text); + if (!linewise) { + if (after_caret) { + text_area.setCaretPosition(pos + reg_text.length()); + } else { + text_area.setCaretPosition(pos); + } + } + } + + public static void swap_case(TextArea text_area) + { + text_area.getBuffer().beginCompoundEdit(); + try { + Selection[] selections = text_area.getSelection(); + if (selections.length == 0) { + int pos = text_area.getCaretPosition(); + Selection.Range sel = new Selection.Range(pos, pos + 1); + text_area.setSelection(sel); + selections = text_area.getSelection(); + } + for (int i = 0; i < selections.length; ++i) { + Selection sel = selections[i]; + int start = sel.getStart(); + int end = sel.getEnd(); + String text = text_area.getText(start, end-start); + StringBuffer new_text = new StringBuffer(); + for (int j = 0; j < text.length(); ++j) { + char c = text.charAt(j); + if (java.lang.Character.isUpperCase(c)) { + c = java.lang.Character.toLowerCase(c); + } else { + c = java.lang.Character.toUpperCase(c); + } + new_text.append(c); + } + text_area.getBuffer().remove(start, end - start); + text_area.getBuffer().insert(start, new_text.toString()); + } + } catch (java.lang.Exception ex) { + Log.log(Log.DEBUG, ex, ex); + } finally { + text_area.getBuffer().endCompoundEdit(); + } + } + + public static void select_line(TextArea text_area) + { + start_line = text_area.getCaretLine(); + select_line(text_area, 0); + } + + public static void select_line(TextArea text_area, int line_offset) + { + if (text_area.getBufferLength() == 0) + return; + + int pos = text_area.getCaretPosition(); + int caret_line = text_area.getCaretLine(); + int max_line = Math.max(0, text_area.getLineCount() - 1); + + Selection orig = text_area.getSelectionAtOffset(pos); + // If caret is at the end of the document, create at least a 1 character + // selection. This fixes the case where the last line in a document is a + // blank line. Without (pos - 1) then no selection will be created for + // that line (jEdit doesn't do 0 width selections). We want to select + // the newline of the previous line anyway. + if ((orig == null) && (pos == text_area.getBufferLength())) { + orig = new Selection.Range(pos - 1, pos); + } else if (orig == null) { + // No selection, just select the current line + int line = text_area.getCaretLine(); + int start = text_area.getLineStartOffset(line); + int end = Math.min(text_area.getLineEndOffset(line), text_area.getBufferLength()); + + if (end == text_area.getBufferLength()) { + // Add in the previous line like below. + start = Math.max(0, start - 1); + } + Selection sel = new Selection.Range(start, end); + text_area.setSelection(sel); + return; + } + + int sel_line_start = text_area.getLineOfOffset(orig.getStart()); + int sel_line_end = text_area.getLineOfOffset(orig.getEnd()); + + // The following are fixups to how lines are selected. jEdit includes + + // If caret is at the end, then we've selected one character back, so + // increment sel_line_start. + if (orig.getEnd() == text_area.getBufferLength()) { + sel_line_start = text_area.getLineOfOffset(Math.min(text_area.getBufferLength(), + orig.getStart() + 1)); + if (text_area.getLineText(max_line).equals("") && + (sel_line_start < (max_line - 1)) ) + { + sel_line_end = text_area.getLineOfOffset(Math.max(0, orig.getEnd() - 1)); + } + } + // Subtract 1 because line selections always include the newline which + // extends to the next line, unless already at the end. + if (orig.getEnd() != text_area.getBufferLength()) { + sel_line_end = text_area.getLineOfOffset(Math.max(0, orig.getEnd() - 1)); + } + + if (sel_line_end > caret_line) { + // Adjust the end line since we've moved past the caret + sel_line_end += line_offset; + sel_line_end = Math.min(sel_line_end, max_line); + text_area.scrollTo(sel_line_end, 0, true); + } else { + sel_line_start += line_offset; + // If at the last line, then sel_line_end == caret_line so we end up + // here, we still shouldn't try to go past the last line. + sel_line_start = Math.min(Math.max(sel_line_start, 0), max_line); + text_area.scrollTo(sel_line_start, 0, true); + } + + // Flip-flop start and end if line_offset has caused start and end to + // flip-flop. + int start = Math.min(sel_line_start, sel_line_end); + int end = Math.max(sel_line_start, sel_line_end); + + int caret_start = text_area.getLineStartOffset(start); + int caret_end = text_area.getLineEndOffset(end); + caret_end = Math.min(caret_end, text_area.getBufferLength()); + + // This is causing not to be able to re-select only the last line. + // FIXME: some check. + if (caret_end == text_area.getBufferLength()) { + // Want to delete the last line, so delete the previous new-line + // if it exists. + caret_start -= 1; + } + caret_start = Math.max(0, caret_start); + + Selection sel = new Selection.Range(caret_start, caret_end); + text_area.setSelection(sel); + } + + /** + * Scroll the text area relative to the caret position, + * depending on the value of <code>position</code>. + * @param textArea + * @param select whether or not to select text + * @param count new caret line, if > 0 + * @param position -1 = caret at top, 0 = center, 1 = bottom + */ + public static void scroll(JEditTextArea textArea, boolean select, int position) + { + int firstLine = textArea.getFirstLine(); + int visibleLines = textArea.getVisibleLines(); + int caretLine = textArea.getScreenLineOfOffset(textArea.getCaretPosition()); + int offset = 0; + + if(position < 0) + offset = (firstLine + caretLine) - textArea.getElectricScroll(); + else if(position > 0) + // not sure why -2 is needed, but without it, the + // caret line ends up in the electric scroll area + offset = firstLine - (((visibleLines - caretLine) - textArea.getElectricScroll())-2); + else + offset = (firstLine + caretLine - (visibleLines / 2)); + + textArea.setFirstLine(offset); + } +} + Added: plugins/Vimage/trunk/vimage/VimageCommand.java =================================================================== --- plugins/Vimage/trunk/vimage/VimageCommand.java (rev 0) +++ plugins/Vimage/trunk/vimage/VimageCommand.java 2009-09-12 03:54:44 UTC (rev 16194) @@ -0,0 +1,110 @@ + +/* +Copyright (C) 2009 Matthew Gilbert + +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 vimage; + +/* Class to hold a single command. This class knows how to trigger execution and + what order to apply the jEdit snippets. It's also responsible for recording + commands for macros. + */ + + +import java.lang.Class; +import java.lang.String; + +import java.util.Vector; + +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.EditAction; +import org.gjt.sp.util.Log; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.textarea.TextArea; + +public class VimageCommand +{ + protected Vector<String> prologue; + protected Vector<String> epilogue; + + protected Vector<String> edit; + protected Vector<String> movement; + protected int count; + + protected View view; + + protected void run_actions(Vector<String> action_names) + { + for (String s : action_names) { + EditAction ea = jEdit.getAction(s); + if (ea == null) { + Log.log(Log.ERROR, this, "Could not find action for string \"" + s + "\""); + continue; + } + ea.invoke(view); + } + } + + public VimageCommand(View view_) + { + prologue = new Vector<String>(); + epilogue = new Vector<String>(); + edit = new Vector<String>(); + movement = new Vector<String>(); + count = 0; + view = view_; + } + + public void addEdit(String edit_) + { + String[] edit = {edit_}; + addEdit(edit); + } + public void addEdit(String[] edits_) + { + edit.addAll(java.util.Arrays.asList(edits_)); + eval(); + } + + public void addMovement(String movement_) + { + String[] movement = {movement_}; + addMovement(movement); + } + public void addMovement(String[] movements_) + { + movement.addAll(java.util.Arrays.asList(movements_)); + eval(); ... [truncated message content] |
From: <sh...@us...> - 2009-11-14 14:40:02
|
Revision: 16480 http://jedit.svn.sourceforge.net/jedit/?rev=16480&view=rev Author: shlomy Date: 2009-11-14 14:39:51 +0000 (Sat, 14 Nov 2009) Log Message: ----------- initial version of a console automation plugin, similar to the "Expect" tool. Added Paths: ----------- plugins/ConsoleAutomation/ plugins/ConsoleAutomation/trunk/ plugins/ConsoleAutomation/trunk/.classpath plugins/ConsoleAutomation/trunk/.project plugins/ConsoleAutomation/trunk/ConsoleAutomation.props plugins/ConsoleAutomation/trunk/LICENSE.txt plugins/ConsoleAutomation/trunk/actions.xml plugins/ConsoleAutomation/trunk/bin/ plugins/ConsoleAutomation/trunk/bin/automation/ plugins/ConsoleAutomation/trunk/bin/automation/Connection$1.class plugins/ConsoleAutomation/trunk/bin/automation/Connection$CharHandler.class plugins/ConsoleAutomation/trunk/bin/automation/Connection$LineHandler.class plugins/ConsoleAutomation/trunk/bin/automation/Connection$PatternHandler.class plugins/ConsoleAutomation/trunk/bin/automation/Connection$SubstrHandler.class plugins/ConsoleAutomation/trunk/bin/automation/Connection.class plugins/ConsoleAutomation/trunk/bin/automation/ConnectionDockable.class plugins/ConsoleAutomation/trunk/bin/automation/ConnectionWindow.class plugins/ConsoleAutomation/trunk/bin/automation/ConsoleAutomationPlugin.class plugins/ConsoleAutomation/trunk/build/ plugins/ConsoleAutomation/trunk/build/classes/ plugins/ConsoleAutomation/trunk/build/classes/automation/ plugins/ConsoleAutomation/trunk/build/classes/automation/Connection$1.class plugins/ConsoleAutomation/trunk/build/classes/automation/Connection$CharHandler.class plugins/ConsoleAutomation/trunk/build/classes/automation/Connection$LineHandler.class plugins/ConsoleAutomation/trunk/build/classes/automation/Connection$PatternHandler.class plugins/ConsoleAutomation/trunk/build/classes/automation/Connection$SubstrHandler.class plugins/ConsoleAutomation/trunk/build/classes/automation/Connection.class plugins/ConsoleAutomation/trunk/build/classes/automation/ConnectionDockable.class plugins/ConsoleAutomation/trunk/build/classes/automation/ConnectionWindow.class plugins/ConsoleAutomation/trunk/build/classes/automation/ConsoleAutomationPlugin.class plugins/ConsoleAutomation/trunk/build/docs/ plugins/ConsoleAutomation/trunk/build/extras/ plugins/ConsoleAutomation/trunk/build/extras/ConsoleAutomation.props plugins/ConsoleAutomation/trunk/build/extras/actions.xml plugins/ConsoleAutomation/trunk/build/extras/description.html plugins/ConsoleAutomation/trunk/build/extras/dockables.xml plugins/ConsoleAutomation/trunk/build.xml plugins/ConsoleAutomation/trunk/description.html plugins/ConsoleAutomation/trunk/dockables.xml plugins/ConsoleAutomation/trunk/index.html plugins/ConsoleAutomation/trunk/src/ plugins/ConsoleAutomation/trunk/src/automation/ plugins/ConsoleAutomation/trunk/src/automation/Connection.java plugins/ConsoleAutomation/trunk/src/automation/ConnectionDockable.java plugins/ConsoleAutomation/trunk/src/automation/ConnectionWindow.java plugins/ConsoleAutomation/trunk/src/automation/ConsoleAutomationPlugin.java Added: plugins/ConsoleAutomation/trunk/.classpath =================================================================== --- plugins/ConsoleAutomation/trunk/.classpath (rev 0) +++ plugins/ConsoleAutomation/trunk/.classpath 2009-11-14 14:39:51 UTC (rev 16480) @@ -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/ConsoleAutomation/trunk/.project =================================================================== --- plugins/ConsoleAutomation/trunk/.project (rev 0) +++ plugins/ConsoleAutomation/trunk/.project 2009-11-14 14:39:51 UTC (rev 16480) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>ConsoleAutomation</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/ConsoleAutomation/trunk/ConsoleAutomation.props =================================================================== --- plugins/ConsoleAutomation/trunk/ConsoleAutomation.props (rev 0) +++ plugins/ConsoleAutomation/trunk/ConsoleAutomation.props 2009-11-14 14:39:51 UTC (rev 16480) @@ -0,0 +1,26 @@ +plugin.marker.MarkerSetsPlugin.activate=startup + +# general plugin information +plugin.automation.ConsoleAutomationPlugin.name=ConsoleAutomation +plugin.automation.ConsoleAutomationPlugin.author=Shlomy Reinstein +plugin.automation.ConsoleAutomationPlugin.version=0.1 +plugin.automation.ConsoleAutomationPlugin.description=\ +This plugin enables automation of telnet sessions. +plugin.marker.MarkerSetsPlugin.depend.0=jdk 1.5 +plugin.marker.MarkerSetsPlugin.depend.1=jedit 04.03.18.00 + +# action labels +console-automation-connect.label=Create a connection + +# menu items +plugin.automation.ConsoleAutomationPlugin.menu=\ + console-automation-connect + +# dockables +console-automation.title=Console Automation +console-automation.longtitle=Console Automation - Connections +console-automation.label=Console Automation + +# docs +plugin.automation.ConsoleAutomationPlugin.docs=description.html + Added: plugins/ConsoleAutomation/trunk/LICENSE.txt =================================================================== --- plugins/ConsoleAutomation/trunk/LICENSE.txt (rev 0) +++ plugins/ConsoleAutomation/trunk/LICENSE.txt 2009-11-14 14:39:51 UTC (rev 16480) @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. Added: plugins/ConsoleAutomation/trunk/actions.xml =================================================================== --- plugins/ConsoleAutomation/trunk/actions.xml (rev 0) +++ plugins/ConsoleAutomation/trunk/actions.xml 2009-11-14 14:39:51 UTC (rev 16480) @@ -0,0 +1,16 @@ +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> +<!-- $Id: actions.xml 7606 2004-11-07 15:52:36Z orutherfurd $ --> + +<ACTIONS> + + <ACTION NAME="console-automation-connect" NO_REPEAT="TRUE"> + <CODE> + import automation.*; + ConsoleAutomationPlugin plugin = (ConsoleAutomationPlugin) + jEdit.getPlugin("automation.ConsoleAutomationPlugin"); + plugin.showConnectionDialog(); + </CODE> + </ACTION> + +</ACTIONS> + Added: plugins/ConsoleAutomation/trunk/bin/automation/Connection$1.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/bin/automation/Connection$1.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/bin/automation/Connection$CharHandler.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/bin/automation/Connection$CharHandler.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/bin/automation/Connection$LineHandler.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/bin/automation/Connection$LineHandler.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/bin/automation/Connection$PatternHandler.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/bin/automation/Connection$PatternHandler.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/bin/automation/Connection$SubstrHandler.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/bin/automation/Connection$SubstrHandler.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/bin/automation/Connection.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/bin/automation/Connection.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/bin/automation/ConnectionDockable.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/bin/automation/ConnectionDockable.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/bin/automation/ConnectionWindow.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/bin/automation/ConnectionWindow.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/bin/automation/ConsoleAutomationPlugin.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/bin/automation/ConsoleAutomationPlugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/build/classes/automation/Connection$1.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/build/classes/automation/Connection$1.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/build/classes/automation/Connection$CharHandler.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/build/classes/automation/Connection$CharHandler.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/build/classes/automation/Connection$LineHandler.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/build/classes/automation/Connection$LineHandler.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/build/classes/automation/Connection$PatternHandler.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/build/classes/automation/Connection$PatternHandler.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/build/classes/automation/Connection$SubstrHandler.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/build/classes/automation/Connection$SubstrHandler.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/build/classes/automation/Connection.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/build/classes/automation/Connection.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/build/classes/automation/ConnectionDockable.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/build/classes/automation/ConnectionDockable.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/build/classes/automation/ConnectionWindow.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/build/classes/automation/ConnectionWindow.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/build/classes/automation/ConsoleAutomationPlugin.class =================================================================== (Binary files differ) Property changes on: plugins/ConsoleAutomation/trunk/build/classes/automation/ConsoleAutomationPlugin.class ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: plugins/ConsoleAutomation/trunk/build/extras/ConsoleAutomation.props =================================================================== --- plugins/ConsoleAutomation/trunk/build/extras/ConsoleAutomation.props (rev 0) +++ plugins/ConsoleAutomation/trunk/build/extras/ConsoleAutomation.props 2009-11-14 14:39:51 UTC (rev 16480) @@ -0,0 +1,26 @@ +plugin.marker.MarkerSetsPlugin.activate=startup + +# general plugin information +plugin.automation.ConsoleAutomationPlugin.name=ConsoleAutomation +plugin.automation.ConsoleAutomationPlugin.author=Shlomy Reinstein +plugin.automation.ConsoleAutomationPlugin.version=0.1 +plugin.automation.ConsoleAutomationPlugin.description=\ +This plugin enables automation of telnet sessions. +plugin.marker.MarkerSetsPlugin.depend.0=jdk 1.5 +plugin.marker.MarkerSetsPlugin.depend.1=jedit 04.03.18.00 + +# action labels +console-automation-connect.label=Create a connection + +# menu items +plugin.automation.ConsoleAutomationPlugin.menu=\ + console-automation-connect + +# dockables +console-automation.title=Console Automation +console-automation.longtitle=Console Automation - Connections +console-automation.label=Console Automation + +# docs +plugin.automation.ConsoleAutomationPlugin.docs=description.html + Added: plugins/ConsoleAutomation/trunk/build/extras/actions.xml =================================================================== --- plugins/ConsoleAutomation/trunk/build/extras/actions.xml (rev 0) +++ plugins/ConsoleAutomation/trunk/build/extras/actions.xml 2009-11-14 14:39:51 UTC (rev 16480) @@ -0,0 +1,16 @@ +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> +<!-- $Id: actions.xml 7606 2004-11-07 15:52:36Z orutherfurd $ --> + +<ACTIONS> + + <ACTION NAME="console-automation-connect" NO_REPEAT="TRUE"> + <CODE> + import automation.*; + ConsoleAutomationPlugin plugin = (ConsoleAutomationPlugin) + jEdit.getPlugin("automation.ConsoleAutomationPlugin"); + plugin.showConnectionDialog(); + </CODE> + </ACTION> + +</ACTIONS> + Added: plugins/ConsoleAutomation/trunk/build/extras/description.html =================================================================== --- plugins/ConsoleAutomation/trunk/build/extras/description.html (rev 0) +++ plugins/ConsoleAutomation/trunk/build/extras/description.html 2009-11-14 14:39:51 UTC (rev 16480) @@ -0,0 +1 @@ +This plugin enables automation of telnet sessions, similar to the 'Expect' tool. \ No newline at end of file Added: plugins/ConsoleAutomation/trunk/build/extras/dockables.xml =================================================================== --- plugins/ConsoleAutomation/trunk/build/extras/dockables.xml (rev 0) +++ plugins/ConsoleAutomation/trunk/build/extras/dockables.xml 2009-11-14 14:39:51 UTC (rev 16480) @@ -0,0 +1,13 @@ +<?xml version="1.0"?> +<!-- $Id: dockables.xml 7600 2003-12-30 18:46:24Z orutherfurd $ --> + +<!DOCTYPE DOCKABLES SYSTEM "dockables.dtd"> + +<DOCKABLES> + <DOCKABLE NAME="console-automation" MOVABLE="TRUE"> + import automation.*; + new ConnectionDockable(); + </DOCKABLE> +</DOCKABLES> + +<!-- :noTabs=false:lineSeparator=\r\n:tabSize=4:folding=none: --> Added: plugins/ConsoleAutomation/trunk/build.xml =================================================================== --- plugins/ConsoleAutomation/trunk/build.xml (rev 0) +++ plugins/ConsoleAutomation/trunk/build.xml 2009-11-14 14:39:51 UTC (rev 16480) @@ -0,0 +1,21 @@ +<?xml version="1.0"?> + +<project name="ConsoleAutomation" default="dist" basedir="."> + + <property file="build.properties"/> + <property file="../build.properties"/> + <property file="${user.home}/.build.properties"/> + <property file="${user.home}/build.properties"/> + <property name="dist.target" value="build" /> + <import file="${build.support}/plugin-build.xml" /> + + <selector id="packageFiles"> + <filename name="description.html" /> + </selector> + + <path id="project.class.path"> + <pathelement location="${jedit.install.dir}/jedit.jar"/> + <pathelement location="${src.dir}"/> + </path> + +</project> Added: plugins/ConsoleAutomation/trunk/description.html =================================================================== --- plugins/ConsoleAutomation/trunk/description.html (rev 0) +++ plugins/ConsoleAutomation/trunk/description.html 2009-11-14 14:39:51 UTC (rev 16480) @@ -0,0 +1 @@ +This plugin enables automation of telnet sessions, similar to the 'Expect' tool. \ No newline at end of file Added: plugins/ConsoleAutomation/trunk/dockables.xml =================================================================== --- plugins/ConsoleAutomation/trunk/dockables.xml (rev 0) +++ plugins/ConsoleAutomation/trunk/dockables.xml 2009-11-14 14:39:51 UTC (rev 16480) @@ -0,0 +1,13 @@ +<?xml version="1.0"?> +<!-- $Id: dockables.xml 7600 2003-12-30 18:46:24Z orutherfurd $ --> + +<!DOCTYPE DOCKABLES SYSTEM "dockables.dtd"> + +<DOCKABLES> + <DOCKABLE NAME="console-automation" MOVABLE="TRUE"> + import automation.*; + new ConnectionDockable(); + </DOCKABLE> +</DOCKABLES> + +<!-- :noTabs=false:lineSeparator=\r\n:tabSize=4:folding=none: --> Added: plugins/ConsoleAutomation/trunk/index.html =================================================================== --- plugins/ConsoleAutomation/trunk/index.html (rev 0) +++ plugins/ConsoleAutomation/trunk/index.html 2009-11-14 14:39:51 UTC (rev 16480) @@ -0,0 +1,10 @@ +<html> +<title>MarkerSets plugin</title> +<body> +<h1>The MarkerSets plugin</h1> +<p>Written by Shlomy Reinstein, March 2009. +<p>The MarkerSets plugin enables you to maintain named sets of markers, where +each set can contain markers from various files. The plugin has a dockable +window where you can view or change the marker sets. +</body> +</html> \ No newline at end of file Added: plugins/ConsoleAutomation/trunk/src/automation/Connection.java =================================================================== --- plugins/ConsoleAutomation/trunk/src/automation/Connection.java (rev 0) +++ plugins/ConsoleAutomation/trunk/src/automation/Connection.java 2009-11-14 14:39:51 UTC (rev 16480) @@ -0,0 +1,191 @@ +package automation; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.net.Socket; +import java.net.UnknownHostException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Connection +{ + private String host; + private int port; + private Socket socket; + private BufferedWriter writer; + private InputStreamReader reader; + private CharHandler outputHandler; + private LineHandler expectPrefixHandler; + private LineHandler expectLineHandler; + private Object expectHandlerLock = new Object(); + + public interface CharHandler + { + void handle(char c); + } + public interface LineHandler + { + // Returns true to continue reading, false to stop reading + boolean handle(String line); + } + public Connection(String host, int port) + { + this.host = host; + this.port = port; + } + public void connect() throws UnknownHostException, IOException + { + socket = new Socket(host, port); + reader = new InputStreamReader(socket.getInputStream()); + writer = new BufferedWriter(new OutputStreamWriter( + socket.getOutputStream())); + start(); + } + public void disconnect() throws IOException + { + reader.close(); + writer.close(); + socket.close(); + } + public void send(String s) throws IOException + { + if (! s.endsWith("\n")) + s = s + "\n"; + writer.write(s); + } + public String expectSubstr(String s, boolean prefix) + throws IOException, InterruptedException + { + SubstrHandler h = new SubstrHandler(s); + synchronized(expectHandlerLock) + { + if (prefix) + expectPrefixHandler = h; + else + expectLineHandler = h; + } + synchronized(h) + { + h.wait(); + } + return h.line; + } + public Matcher expectPattern(Pattern p, boolean prefix) + throws IOException, InterruptedException + { + PatternHandler h = new PatternHandler(p); + synchronized(expectHandlerLock) + { + if (prefix) + expectPrefixHandler = h; + else + expectLineHandler = h; + } + synchronized(h) + { + h.wait(); + } + return h.m; + } + // Attach an output listener + public void setOutputHandler(CharHandler h) + { + outputHandler = h; + } + + private void start() + { + Runnable r = new Runnable() { + public void run() { + try + { + processOutput(); + } catch (IOException e) + { + e.printStackTrace(); + } + } + }; + new Thread(r).start(); + } + private void processOutput() throws IOException + { + StringBuilder s = new StringBuilder(); + int i; + while ((i = reader.read()) != -1) + { + char c = (char) i; + if (outputHandler != null) + outputHandler.handle(c); + if (c == '\n') + { + synchronized(expectHandlerLock) + { + if (expectLineHandler != null) + { + if (! expectLineHandler.handle(s.toString())) + expectLineHandler = null; + } + } + s.setLength(0); + continue; + } + s.append(c); + synchronized(expectHandlerLock) + { + if (expectPrefixHandler != null) + { + if (! expectPrefixHandler.handle(s.toString())) + expectPrefixHandler = null; + } + } + } + } + + private static class SubstrHandler implements LineHandler + { + private String s; // the substring to look for + public String line; // the line where the substring was found + public SubstrHandler(String s) + { + this.s = s; + } + public boolean handle(String line) + { + if (line.contains(s)) + { + this.line = line; + synchronized(this) + { + notifyAll(); + } + return false; + } + return true; + } + } + private static class PatternHandler implements LineHandler + { + private Pattern p; + public Matcher m; + public PatternHandler(Pattern p) + { + this.p = p; + } + public boolean handle(String line) + { + m = p.matcher(line); + if (m.find()) + { + synchronized(this) + { + notifyAll(); + } + return false; + } + return true; + } + } +} Added: plugins/ConsoleAutomation/trunk/src/automation/ConnectionDockable.java =================================================================== --- plugins/ConsoleAutomation/trunk/src/automation/ConnectionDockable.java (rev 0) +++ plugins/ConsoleAutomation/trunk/src/automation/ConnectionDockable.java 2009-11-14 14:39:51 UTC (rev 16480) @@ -0,0 +1,24 @@ +package automation; + +import java.awt.BorderLayout; + +import javax.swing.JPanel; +import javax.swing.JTabbedPane; + +@SuppressWarnings("serial") +public class ConnectionDockable extends JPanel +{ + private JTabbedPane tabs; + + public ConnectionDockable() + { + setLayout(new BorderLayout()); + tabs = new JTabbedPane(); + add(tabs); + } + public void add(Connection c) + { + ConnectionWindow cw = new ConnectionWindow(c); + tabs.addTab("Connection " + tabs.getTabCount(), cw); + } +} Added: plugins/ConsoleAutomation/trunk/src/automation/ConnectionWindow.java =================================================================== --- plugins/ConsoleAutomation/trunk/src/automation/ConnectionWindow.java (rev 0) +++ plugins/ConsoleAutomation/trunk/src/automation/ConnectionWindow.java 2009-11-14 14:39:51 UTC (rev 16480) @@ -0,0 +1,80 @@ +package automation; + +import java.awt.BorderLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JButton; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.JTextPane; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; + +import org.gjt.sp.jedit.jEdit; + +import automation.Connection.CharHandler; + +@SuppressWarnings("serial") +public class ConnectionWindow extends JPanel implements CharHandler, + ActionListener +{ + private Connection c; + private JTextPane console; + private JTextField input; + private JButton send; + private JButton expect; + + public ConnectionWindow(Connection c) + { + this.c = c; + setLayout(new BorderLayout()); + console = new JTextPane(); + add(console, BorderLayout.CENTER); + JPanel top = new JPanel(); + add(top, BorderLayout.NORTH); + input = new JTextField(40); + top.add(input); + send = new JButton("Send"); + top.add(send); + send.addActionListener(this); + expect = new JButton("Expect"); + top.add(expect); + expect.addActionListener(this); + c.setOutputHandler(this); + } + + public void handle(char c) + { + Document d = console.getDocument(); + try + { + System.out.print(c); + d.insertString(d.getLength(), String.valueOf(c), null); + } catch (BadLocationException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void actionPerformed(ActionEvent e) + { + try + { + String s = input.getText(); + if (e.getSource() == send) + c.send(s); + else if (e.getSource() == expect) + c.expectSubstr(s, true); + input.setText(""); + } + catch (Exception e1) + { + e1.printStackTrace(); + JOptionPane.showMessageDialog(jEdit.getActiveView(), + "Could not perform action, exception: " + e1.getStackTrace()); + } + } +} Added: plugins/ConsoleAutomation/trunk/src/automation/ConsoleAutomationPlugin.java =================================================================== --- plugins/ConsoleAutomation/trunk/src/automation/ConsoleAutomationPlugin.java (rev 0) +++ plugins/ConsoleAutomation/trunk/src/automation/ConsoleAutomationPlugin.java 2009-11-14 14:39:51 UTC (rev 16480) @@ -0,0 +1,55 @@ +package automation; + +import javax.swing.JOptionPane; + +import org.gjt.sp.jedit.EBPlugin; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.gui.DockableWindowManager; + +public class ConsoleAutomationPlugin extends EBPlugin { + + private static final String CONNECTION_DOCKABLE = "console-automation"; + private ConnectionDockable dockable; + + public void start() + { + } + + public void stop() + { + } + + public void showConnectionDialog() + { + String s = JOptionPane.showInputDialog("Please enter host:port - "); + if (s == null) + return; + int sep = s.lastIndexOf(":"); + String host = s.substring(0, sep); + String port = s.substring(sep + 1); + connect(host, Integer.valueOf(port)); + } + public void connect(String host, int port) + { + Connection c = new Connection(host, port); + try + { + c.connect(); + DockableWindowManager dwm = jEdit.getActiveView().getDockableWindowManager(); + dockable = (ConnectionDockable) + dwm.getDockable(CONNECTION_DOCKABLE); + if (dockable == null) + { + dwm.addDockableWindow(CONNECTION_DOCKABLE); + dockable = (ConnectionDockable) + dwm.getDockable(CONNECTION_DOCKABLE); + } + dockable.add(c); + } catch (Exception e) + { + e.printStackTrace(); + } + } + +} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |