From: <k_s...@us...> - 2008-08-02 20:02:03
|
Revision: 13156 http://jedit.svn.sourceforge.net/jedit/?rev=13156&view=rev Author: k_satoda Date: 2008-08-02 20:01:59 +0000 (Sat, 02 Aug 2008) Log Message: ----------- Added "initialize" as a keyword in ruby mode to be used in completion and to help speling it. (A part of SF.net Patch #1783765) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/modes/ruby.xml Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-08-02 19:32:19 UTC (rev 13155) +++ jEdit/trunk/doc/CHANGES.txt 2008-08-02 20:01:59 UTC (rev 13156) @@ -109,6 +109,9 @@ - Fix word separators in LaTeX mode (SF #1982712) +- Added "initialize" as a keyword in ruby mode. + (SF.net Patch #1783765 - Suraj Kurapati) + }}} {{{ API Changes Modified: jEdit/trunk/modes/ruby.xml =================================================================== --- jEdit/trunk/modes/ruby.xml 2008-08-02 19:32:19 UTC (rev 13155) +++ jEdit/trunk/modes/ruby.xml 2008-08-02 20:01:59 UTC (rev 13156) @@ -379,6 +379,7 @@ <KEYWORD2>load</KEYWORD2> <KEYWORD2>require</KEYWORD2> + <KEYWORD2>initialize</KEYWORD2> <OPERATOR>and</OPERATOR> <OPERATOR>not</OPERATOR> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Vam...@us...> - 2008-08-10 19:22:01
|
Revision: 13256 http://jedit.svn.sourceforge.net/jedit/?rev=13256&view=rev Author: Vampire0 Date: 2008-08-10 19:21:55 +0000 (Sun, 10 Aug 2008) Log Message: ----------- Updated the version number to 4.3pre16. Modified Paths: -------------- jEdit/trunk/build.xml jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/jEdit.java Modified: jEdit/trunk/build.xml =================================================================== --- jEdit/trunk/build.xml 2008-08-09 13:44:47 UTC (rev 13255) +++ jEdit/trunk/build.xml 2008-08-10 19:21:55 UTC (rev 13256) @@ -10,9 +10,9 @@ <!-- jEdit Version --> <property name="jedit.version" - value="4.3pre15" /> + value="4.3pre16" /> <property name="jedit.build.number" - value="04.03.15.00" /> + value="04.03.16.00" /> <!-- Target Java Versions --> <property name="target.java.version" Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-08-09 13:44:47 UTC (rev 13255) +++ jEdit/trunk/doc/CHANGES.txt 2008-08-10 19:21:55 UTC (rev 13256) @@ -1,5 +1,20 @@ JEDIT 4.3 VERSION HISTORY +{{{ Version 4.3pre16 + +Thanks to Bj\xF6rn "Vampire" Kautler for contributing to this release. + +{{{ Bug Fixes + + +}}} +{{{ Miscellaneous + + +}}} + +}}} + {{{ Version 4.3pre15 Thanks to Bj\xF6rn "Vampire" Kautler, Marcelo Vanzin, Matthieu Casanova, @@ -55,6 +70,7 @@ - Better field control on Appearance and Saving & backups option panes (#2015210) (Matthieu Casanova) + }}} {{{ Miscellaneous @@ -142,6 +158,7 @@ - New NumericTextField class. It is a TextField that accept only numeric values (Matthieu Casanova) + }}} }}} Modified: jEdit/trunk/org/gjt/sp/jedit/jEdit.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2008-08-09 13:44:47 UTC (rev 13255) +++ jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2008-08-10 19:21:55 UTC (rev 13256) @@ -89,7 +89,7 @@ public static String getBuild() { // (major).(minor).(<99 = preX, 99 = final).(bug fix) - return "04.03.15.00"; + return "04.03.16.00"; } //}}} //{{{ main() method This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-08-10 20:54:58
|
Revision: 13259 http://jedit.svn.sourceforge.net/jedit/?rev=13259&view=rev Author: shlomy Date: 2008-08-10 20:54:46 +0000 (Sun, 10 Aug 2008) Log Message: ----------- Merging my docking_framework branch back into the main trunk. This adds a few new features to the jEdit core: 1. A pluggable docking framework, which can be provided as a service by plugins. To choose the docking framework, use Global Options -> Docking. The original jEdit dockable window manager is named 'Original'. If you get the MyDoggyPlugin plugin, you can select between Original and MyDoggy. 2. Named perspectives - you can now save the docking layout in a file, and load it any time later from a file. Also, once you save the layout in a file, you get an action that loads the layout from this file, and you can bind this action to a keyboard shortcut or toolbar button just like any other action. The actions to load/save the layout are available through the View->Docking menu, and the action set for keyboard shortcuts or toolbar buttons is named "Docking layouts" (in Global Options dialog). 3. Mode-specific perspectives - you can associate the docking layout with an edit mode, each edit mode having its own layout. You can have jEdit automatically save the layout of an edit mode when you switch to another, and automatically load the layout of an edit mode when you enter the mode. The auto load/save of mode-specific layout can be set using Global Options -> Docking. Implementation-wise, several major changes were done to support a pluggable docking framework: 1. Management of toolbars and split configuration (of edit panes) is managed entirely by the core - the docking framework is unaware of it. The framework just gets a panel to be used as the center component, and the core sets its contents with the split configuration and the toolbars when needed. 2. The docking layout has been abstracted out of ViewConfig, and is now delegated to the docking framework for persistence. 3. A new DockingLayoutManager class listens to edit bus messages and responds to edit mode changes by saving/loading the docking layout if the appropriate options are set. Modified Paths: -------------- jEdit/trunk/org/gjt/sp/jedit/GUIUtilities.java jEdit/trunk/org/gjt/sp/jedit/PerspectiveManager.java jEdit/trunk/org/gjt/sp/jedit/SettingsXML.java jEdit/trunk/org/gjt/sp/jedit/View.java jEdit/trunk/org/gjt/sp/jedit/actions.xml jEdit/trunk/org/gjt/sp/jedit/gui/DockableLayout.java jEdit/trunk/org/gjt/sp/jedit/gui/DockablePanel.java jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowContainer.java jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowFactory.java jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowManager.java jEdit/trunk/org/gjt/sp/jedit/gui/FloatingWindowContainer.java jEdit/trunk/org/gjt/sp/jedit/gui/PanelWindowContainer.java jEdit/trunk/org/gjt/sp/jedit/jEdit.java jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props jEdit/trunk/org/gjt/sp/jedit/options/DockingOptionPane.java jEdit/trunk/org/gjt/sp/jedit/services.xml Added Paths: ----------- jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowManagerImpl.java jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowManagerProvider.java jEdit/trunk/org/gjt/sp/jedit/gui/DockingLayoutManager.java jEdit/trunk/org/gjt/sp/jedit/gui/IDockingFrameworkProvider.java Property Changed: ---------------- jEdit/trunk/ jEdit/trunk/org/gjt/sp/util/ReverseCharSequence.java Property changes on: jEdit/trunk ___________________________________________________________________ Added: svn:mergeinfo + /jEdit/branches/docking_framework:13128-13258 Modified: jEdit/trunk/org/gjt/sp/jedit/GUIUtilities.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/GUIUtilities.java 2008-08-10 19:30:39 UTC (rev 13258) +++ jEdit/trunk/org/gjt/sp/jedit/GUIUtilities.java 2008-08-10 20:54:46 UTC (rev 13259) @@ -1171,7 +1171,7 @@ } //}}} //{{{ UnixWorkaround class - static class UnixWorkaround + public static class UnixWorkaround { Window win; String name; @@ -1181,7 +1181,7 @@ boolean windowOpened; //{{{ UnixWorkaround constructor - UnixWorkaround(Window win, String name, Rectangle desired, + public UnixWorkaround(Window win, String name, Rectangle desired, int extState) { this.win = win; Modified: jEdit/trunk/org/gjt/sp/jedit/PerspectiveManager.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/PerspectiveManager.java 2008-08-10 19:30:39 UTC (rev 13258) +++ jEdit/trunk/org/gjt/sp/jedit/PerspectiveManager.java 2008-08-10 20:54:46 UTC (rev 13259) @@ -22,12 +22,14 @@ package org.gjt.sp.jedit; +import java.io.File; import java.io.IOException; import java.util.LinkedList; import java.util.Collection; import org.xml.sax.Attributes; import org.xml.sax.InputSource; +import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import org.gjt.sp.util.Log; @@ -118,7 +120,8 @@ if(perspectiveXML == null) return; - + File perspectiveFile = new File(perspectiveXML.toString()); + // backgrounded if(jEdit.getBufferCount() == 0) return; @@ -205,25 +208,8 @@ out.write("\" />"); out.write(lineSep); - out.write("<DOCKING LEFT=\""); - out.write(config.left == null ? "" : config.left); - out.write("\" TOP=\""); - out.write(config.top == null ? "" : config.top); - out.write("\" RIGHT=\""); - out.write(config.right == null ? "" : config.right); - out.write("\" BOTTOM=\""); - out.write(config.bottom == null ? "" : config.bottom); - out.write("\" LEFT_POS=\""); - out.write(String.valueOf(config.leftPos)); - out.write("\" TOP_POS=\""); - out.write(String.valueOf(config.topPos)); - out.write("\" RIGHT_POS=\""); - out.write(String.valueOf(config.rightPos)); - out.write("\" BOTTOM_POS=\""); - out.write(String.valueOf(config.bottomPos)); - out.write("\" />"); - out.write(lineSep); - + config.docking.savePerspective(perspectiveFile, out, lineSep); + out.write("</VIEW>"); out.write(lineSep); } @@ -267,12 +253,15 @@ View.ViewConfig config; boolean restoreFiles; String autoReload, autoReloadDialog; - + DefaultHandler dockingLayoutHandler; + PerspectiveHandler(boolean restoreFiles) { this.restoreFiles = restoreFiles; config = new View.ViewConfig(); charData = new StringBuffer(); + config.docking = View.getDockingFrameworkProvider().createDockingLayout(); + dockingLayoutHandler = config.docking.getPerspectiveHandler(); } @Override @@ -292,6 +281,11 @@ String value = attrs.getValue(i); attribute(name, value); } + try { + dockingLayoutHandler.startElement(uri, localName, qName, attrs); + } catch (SAXException e) { + e.printStackTrace(); + } } private void attribute(String aname, String value) @@ -308,22 +302,6 @@ config.extState = Integer.parseInt(value); else if(aname.equals("PLAIN")) config.plainView = ("TRUE".equals(value)); - else if(aname.equals("TOP")) - config.top = value; - else if(aname.equals("LEFT")) - config.left = value; - else if(aname.equals("BOTTOM")) - config.bottom = value; - else if(aname.equals("RIGHT")) - config.right = value; - else if(aname.equals("TOP_POS")) - config.topPos = Integer.parseInt(value); - else if(aname.equals("LEFT_POS")) - config.leftPos = Integer.parseInt(value); - else if(aname.equals("BOTTOM_POS")) - config.bottomPos = Integer.parseInt(value); - else if(aname.equals("RIGHT_POS")) - config.rightPos = Integer.parseInt(value); else if(aname.equals("AUTORELOAD")) autoReload = value; else if(aname.equals("AUTORELOAD_DIALOG")) @@ -371,7 +349,12 @@ { view = jEdit.newView(view,null,config); config = new View.ViewConfig(); - } + } else + try { + dockingLayoutHandler.endElement(uri, localName, name); + } catch (SAXException e) { + e.printStackTrace(); + } } @Override Modified: jEdit/trunk/org/gjt/sp/jedit/SettingsXML.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/SettingsXML.java 2008-08-10 19:30:39 UTC (rev 13258) +++ jEdit/trunk/org/gjt/sp/jedit/SettingsXML.java 2008-08-10 20:54:46 UTC (rev 13259) @@ -43,7 +43,7 @@ * - Making backup on each save. * - Detection of change on disk. */ -class SettingsXML +public class SettingsXML { //{{{ Saver class /** @@ -129,6 +129,11 @@ file = new File(MiscUtilities.constructPath( settingsDirectory, filename)); } //}}} + + public SettingsXML(File f) + { + file = f; + } //{{{ fileExits() method /** Modified: jEdit/trunk/org/gjt/sp/jedit/View.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/View.java 2008-08-10 19:30:39 UTC (rev 13258) +++ jEdit/trunk/org/gjt/sp/jedit/View.java 2008-08-10 20:54:46 UTC (rev 13259) @@ -23,30 +23,67 @@ package org.gjt.sp.jedit; //{{{ Imports -import org.gjt.sp.jedit.visitors.JEditVisitorAdapter; -import org.gjt.sp.jedit.visitors.JEditVisitor; -import javax.swing.event.*; -import javax.swing.*; -import java.awt.*; -import java.awt.event.*; +import java.awt.AWTEvent; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Container; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.Rectangle; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.io.IOException; import java.io.StreamTokenizer; import java.io.StringReader; import java.net.Socket; -import java.util.*; +import java.util.ArrayList; import java.util.List; +import java.util.Stack; -import org.gjt.sp.jedit.msg.*; -import org.gjt.sp.jedit.gui.*; -import org.gjt.sp.jedit.search.*; -import org.gjt.sp.jedit.textarea.*; -import org.gjt.sp.jedit.textarea.TextArea; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JSplitPane; +import javax.swing.LayoutFocusTraversalPolicy; +import javax.swing.SwingUtilities; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; + +import org.gjt.sp.jedit.bufferset.BufferSet; +import org.gjt.sp.jedit.bufferset.BufferSetManager; +import org.gjt.sp.jedit.gui.ActionBar; +import org.gjt.sp.jedit.gui.DefaultInputHandler; +import org.gjt.sp.jedit.gui.DockableWindowFactory; +import org.gjt.sp.jedit.gui.DockableWindowManager; +import org.gjt.sp.jedit.gui.HistoryModel; +import org.gjt.sp.jedit.gui.IDockingFrameworkProvider; +import org.gjt.sp.jedit.gui.InputHandler; +import org.gjt.sp.jedit.gui.StatusBar; +import org.gjt.sp.jedit.gui.ToolBarManager; +import org.gjt.sp.jedit.gui.VariableGridLayout; +import org.gjt.sp.jedit.gui.DockableWindowManager.DockingLayout; import org.gjt.sp.jedit.input.InputHandlerProvider; +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.msg.SearchSettingsChanged; +import org.gjt.sp.jedit.msg.ViewUpdate; import org.gjt.sp.jedit.options.GeneralOptionPane; -import org.gjt.sp.jedit.bufferset.BufferSet; -import org.gjt.sp.jedit.bufferset.BufferSetManager; +import org.gjt.sp.jedit.search.CurrentBufferSet; +import org.gjt.sp.jedit.search.SearchAndReplace; +import org.gjt.sp.jedit.search.SearchBar; +import org.gjt.sp.jedit.textarea.JEditTextArea; +import org.gjt.sp.jedit.textarea.ScrollListener; +import org.gjt.sp.jedit.textarea.TextArea; +import org.gjt.sp.jedit.visitors.JEditVisitor; +import org.gjt.sp.jedit.visitors.JEditVisitorAdapter; +import org.gjt.sp.util.Log; import org.gjt.sp.util.StandardUtilities; -import org.gjt.sp.util.Log; //}}} /** @@ -96,6 +133,12 @@ //{{{ ToolBar-related constants + public static final String VIEW_DOCKING_FRAMEWORK_PROPERTY = "view.docking.framework"; + private static final String ORIGINAL_DOCKING_FRAMEWORK = "Original"; + public static final String DOCKING_FRAMEWORK_PROVIDER_SERVICE = + "org.gjt.sp.jedit.gui.DockingFrameworkProvider"; + private static IDockingFrameworkProvider dockingFrameworkProvider = null; + //{{{ Groups /** * The group of tool bars above the DockableWindowManager @@ -215,6 +258,21 @@ return dockableWindowManager; } //}}} + static public String getDockingFrameworkName() { + String framework = jEdit.getProperty( + VIEW_DOCKING_FRAMEWORK_PROPERTY, ORIGINAL_DOCKING_FRAMEWORK); + return framework; + } + static public IDockingFrameworkProvider getDockingFrameworkProvider() { + if (dockingFrameworkProvider == null) + { + String framework = getDockingFrameworkName(); + dockingFrameworkProvider = (IDockingFrameworkProvider) + ServiceManager.getService( + DOCKING_FRAMEWORK_PROVIDER_SERVICE, framework); + } + return dockingFrameworkProvider; + } //{{{ getToolBar() method /** * Returns the view's tool bar. @@ -608,6 +666,15 @@ return split(JSplitPane.HORIZONTAL_SPLIT); } //}}} + private Component mainContent = null; + private void setMainContent(Component c) { + if (mainContent != null) + mainPanel.remove(mainContent); + mainContent = c; + mainPanel.add(mainContent, BorderLayout.CENTER); + mainPanel.revalidate(); + mainPanel.repaint(); + } //{{{ split() method /** * Splits the view. @@ -671,8 +738,8 @@ newSplitPane.setLeftComponent(oldEditPane); newSplitPane.setRightComponent(newEditPane); - oldParent.add(newSplitPane,0); - oldParent.revalidate(); + setMainContent(newSplitPane); + } SwingUtilities.invokeLater(new Runnable() @@ -709,12 +776,8 @@ _editPane.close(); } - JComponent parent = (JComponent)splitPane.getParent(); + setMainContent(editPane); - parent.remove(splitPane); - parent.add(editPane,0); - parent.revalidate(); - splitPane = null; updateTitle(); @@ -766,16 +829,14 @@ else parentSplit.setRightComponent(editPane); parentSplit.setDividerLocation(pos); + parent.revalidate(); } else { - parent.remove(comp); - parent.add(editPane,0); + setMainContent(editPane); splitPane = null; } - parent.revalidate(); - updateTitle(); editPane.focusOnTextArea(); @@ -991,6 +1052,7 @@ config.plainView = isPlainView(); config.splitConfig = getSplitConfig(); config.extState = getExtendedState(); + config.docking = dockableWindowManager.getDockingLayout(config); String prefix = config.plainView ? "plain-view" : "view"; switch (config.extState) { @@ -1024,17 +1086,6 @@ config.height = getHeight(); break; } - - config.top = dockableWindowManager.getTopDockingArea().getCurrent(); - config.left = dockableWindowManager.getLeftDockingArea().getCurrent(); - config.bottom = dockableWindowManager.getBottomDockingArea().getCurrent(); - config.right = dockableWindowManager.getRightDockingArea().getCurrent(); - - config.topPos = dockableWindowManager.getTopDockingArea().getDimension(); - config.leftPos = dockableWindowManager.getLeftDockingArea().getDimension(); - config.bottomPos = dockableWindowManager.getBottomDockingArea().getDimension(); - config.rightPos = dockableWindowManager.getRightDockingArea().getDimension(); - return config; } //}}} @@ -1215,9 +1266,12 @@ setIconImage(GUIUtilities.getEditorIcon()); - dockableWindowManager = new DockableWindowManager(this, - DockableWindowFactory.getInstance(),config); - + mainPanel = new JPanel(); + mainPanel.setLayout(new BorderLayout()); + dockableWindowManager = getDockingFrameworkProvider().create(this, + DockableWindowFactory.getInstance(), config); + dockableWindowManager.setMainPanel(mainPanel); + topToolBars = new JPanel(new VariableGridLayout( VariableGridLayout.FIXED_NUM_COLUMNS, 1)); @@ -1305,7 +1359,8 @@ private boolean closed; private DockableWindowManager dockableWindowManager; - + private JPanel mainPanel; + private JPanel topToolBars; private JPanel bottomToolBars; private ToolBarManager toolBarManager; @@ -1458,25 +1513,16 @@ //{{{ setSplitConfig() method private void setSplitConfig(Buffer buffer, String splitConfig) { - if(editPane != null) - dockableWindowManager.remove(editPane); - - if(splitPane != null) - dockableWindowManager.remove(splitPane); - try { Component comp = restoreSplitConfig(buffer,splitConfig); - dockableWindowManager.add(comp,0); + setMainContent(comp); } catch(IOException e) { // this should never throw an exception. throw new InternalError(); } - - dockableWindowManager.revalidate(); - dockableWindowManager.repaint(); } //}}} //{{{ restoreSplitConfig() method @@ -1635,10 +1681,8 @@ } else { - dockableWindowManager.add(topToolBars, - DockableLayout.TOP_TOOLBARS,0); - dockableWindowManager.add(bottomToolBars, - DockableLayout.BOTTOM_TOOLBARS,0); + mainPanel.add(topToolBars, BorderLayout.NORTH); + mainPanel.add(bottomToolBars, BorderLayout.SOUTH); if (showStatus) getContentPane().add(BorderLayout.SOUTH,status); } @@ -1847,14 +1891,11 @@ //{{{ ViewConfig class public static class ViewConfig { + public int x, y, width, height, extState; public boolean plainView; public String splitConfig; - public int x, y, width, height, extState; - - // dockables - public String top, left, bottom, right; - public int topPos, leftPos, bottomPos, rightPos; - + public DockingLayout docking; + public ViewConfig() { } @@ -1867,7 +1908,7 @@ y = jEdit.getIntegerProperty(prefix + ".y",0); width = jEdit.getIntegerProperty(prefix + ".width",0); height = jEdit.getIntegerProperty(prefix + ".height",0); - extState = jEdit.getIntegerProperty(prefix + ".extendedState",NORMAL); + extState = jEdit.getIntegerProperty(prefix + ".extendedState",JFrame.NORMAL); } public ViewConfig(boolean plainView, String splitConfig, @@ -1883,6 +1924,25 @@ } } //}}} + public void adjust(View parent, ViewConfig config) { + if(config.width != 0 && config.height != 0) + { + Rectangle desired = new Rectangle( + config.x, config.y, config.width, config.height); + if(OperatingSystem.isX11() && Debug.GEOMETRY_WORKAROUND) + { + new GUIUtilities.UnixWorkaround(this,"view",desired,config.extState); + } + else + { + setBounds(desired); + setExtendedState(config.extState); + } + } + else + setLocationRelativeTo(parent); + } + //{{{ MyFocusTraversalPolicy class private static class MyFocusTraversalPolicy extends LayoutFocusTraversalPolicy { @@ -1910,4 +1970,5 @@ } }//}}} //}}} + } Modified: jEdit/trunk/org/gjt/sp/jedit/actions.xml =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/actions.xml 2008-08-10 19:30:39 UTC (rev 13258) +++ jEdit/trunk/org/gjt/sp/jedit/actions.xml 2008-08-10 20:54:46 UTC (rev 13259) @@ -692,6 +692,30 @@ </CODE> </ACTION> +<ACTION NAME="perspective-save" NO_REPEAT="TRUE"> + <CODE> + DockingLayoutManager.saveAs(view); + </CODE> +</ACTION> + +<ACTION NAME="perspective-load" NO_REPEAT="TRUE"> + <CODE> + DockingLayoutManager.load(view); + </CODE> +</ACTION> + +<ACTION NAME="perspective-save-current-mode" NO_REPEAT="TRUE"> + <CODE> + DockingLayoutManager.saveCurrentModeLayout(view); + </CODE> +</ACTION> + +<ACTION NAME="perspective-load-current-mode" NO_REPEAT="TRUE"> + <CODE> + DockingLayoutManager.loadCurrentModeLayout(view); + </CODE> +</ACTION> + <ACTION NAME="plugin-manager"> <CODE> PluginManager.showPluginManager(view); Modified: jEdit/trunk/org/gjt/sp/jedit/gui/DockableLayout.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/gui/DockableLayout.java 2008-08-10 19:30:39 UTC (rev 13258) +++ jEdit/trunk/org/gjt/sp/jedit/gui/DockableLayout.java 2008-08-10 20:54:46 UTC (rev 13259) @@ -32,16 +32,12 @@ // jEdit's UI layout static final String CENTER = BorderLayout.CENTER; - public static final String TOP_TOOLBARS = "top-toolbars"; - public static final String BOTTOM_TOOLBARS = "bottom-toolbars"; - static final String TOP_BUTTONS = "top-buttons"; static final String LEFT_BUTTONS = "left-buttons"; static final String BOTTOM_BUTTONS = "bottom-buttons"; static final String RIGHT_BUTTONS = "right-buttons"; private boolean alternateLayout; - private Component topToolbars, bottomToolbars; private Component center; /* No good */ @@ -85,10 +81,6 @@ { if(cons == null || CENTER.equals(cons)) center = comp; - else if(TOP_TOOLBARS.equals(cons)) - topToolbars = comp; - else if(BOTTOM_TOOLBARS.equals(cons)) - bottomToolbars = comp; else if(DockableWindowManager.TOP.equals(cons)) top = (DockablePanel)comp; else if(DockableWindowManager.LEFT.equals(cons)) @@ -112,10 +104,6 @@ { if(center == comp) center = null; - else if(comp == topToolbars) - topToolbars = null; - else if(comp == bottomToolbars) - bottomToolbars = null; else if(comp == top) top = null; else if(comp == left) @@ -141,12 +129,8 @@ Dimension _center = (center == null ? new Dimension(0,0) : center.getPreferredSize()); - Dimension _topToolbars = (topToolbars == null - ? new Dimension(0,0) - : topToolbars.getPreferredSize()); - Dimension _bottomToolbars = (bottomToolbars == null - ? new Dimension(0,0) - : bottomToolbars.getPreferredSize()); + Dimension _topToolbars = new Dimension(0,0); + Dimension _bottomToolbars = new Dimension(0,0); prefSize.height = _top.height + _bottom.height + _center.height + _topButtons.height + _bottomButtons.height @@ -177,12 +161,8 @@ { Dimension size = parent.getSize(); - Dimension _topToolbars = (topToolbars == null - ? new Dimension(0,0) - : topToolbars.getPreferredSize()); - Dimension _bottomToolbars = (bottomToolbars == null - ? new Dimension(0,0) - : bottomToolbars.getPreferredSize()); + Dimension _topToolbars = new Dimension(0,0); + Dimension _bottomToolbars = new Dimension(0,0); int topButtonHeight = -1; int bottomButtonHeight = -1; @@ -404,29 +384,6 @@ _height); //}}} } - //{{{ Position tool bars if they are managed by us - if(topToolbars != null) - { - topToolbars.setBounds( - leftButtonWidth + leftWidth, - topButtonHeight + topHeight, - size.width - leftWidth - rightWidth - - leftButtonWidth - rightButtonWidth, - _topToolbars.height); - } - - if(bottomToolbars != null) - { - bottomToolbars.setBounds( - leftButtonWidth + leftWidth, - size.height - bottomHeight - - bottomButtonHeight - - _bottomToolbars.height, - size.width - leftWidth - rightWidth - - leftButtonWidth - rightButtonWidth, - _bottomToolbars.height); - } //}}} - //{{{ Position center (edit pane, or split pane) if(center != null) { Modified: jEdit/trunk/org/gjt/sp/jedit/gui/DockablePanel.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/gui/DockablePanel.java 2008-08-10 19:30:39 UTC (rev 13258) +++ jEdit/trunk/org/gjt/sp/jedit/gui/DockablePanel.java 2008-08-10 20:54:46 UTC (rev 13259) @@ -44,7 +44,7 @@ class DockablePanel extends JPanel { private PanelWindowContainer panel; - private DockableWindowManager wm; + private DockableWindowManagerImpl wm; //{{{ DockablePanel constructor DockablePanel(PanelWindowContainer panel) @@ -123,14 +123,14 @@ position.equals(DockableWindowManager.BOTTOM)) { if(dimension != 0 && height <= PanelWindowContainer.SPLITTER_WIDTH) - panel.show(null); + panel.show((DockableWindowManagerImpl.Entry) null); else panel.setDimension(height); } else { if(dimension != 0 && width <= PanelWindowContainer.SPLITTER_WIDTH) - panel.show(null); + panel.show((DockableWindowManagerImpl.Entry) null); else panel.setDimension(width); } Modified: jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowContainer.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowContainer.java 2008-08-10 19:30:39 UTC (rev 13258) +++ jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowContainer.java 2008-08-10 20:54:46 UTC (rev 13259) @@ -28,9 +28,9 @@ */ interface DockableWindowContainer { - void register(DockableWindowManager.Entry entry); - void remove(DockableWindowManager.Entry entry); - void unregister(DockableWindowManager.Entry entry); - void show(DockableWindowManager.Entry entry); - boolean isVisible(DockableWindowManager.Entry entry); + void register(DockableWindowManagerImpl.Entry entry); + void remove(DockableWindowManagerImpl.Entry entry); + void unregister(DockableWindowManagerImpl.Entry entry); + void show(DockableWindowManagerImpl.Entry entry); + boolean isVisible(DockableWindowManagerImpl.Entry entry); } Modified: jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowFactory.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowFactory.java 2008-08-10 19:30:39 UTC (rev 13258) +++ jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowFactory.java 2008-08-10 20:54:46 UTC (rev 13259) @@ -166,6 +166,11 @@ return retVal; } //}}} + public Window getDockableWindowFactory(String name) + { + return dockableWindowFactories.get(name); + } + //{{{ getDockableWindowIterator() method Iterator<Window> getDockableWindowIterator() { Modified: jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowManager.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowManager.java 2008-08-10 19:30:39 UTC (rev 13258) +++ jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowManager.java 2008-08-10 20:54:46 UTC (rev 13259) @@ -1,148 +1,35 @@ -/* - * DockableWindowManager.java - manages dockable windows - * :tabSize=8:indentSize=8:noTabs=false: - * :folding=explicit:collapseFolds=1: - * - * Copyright (C) 2000, 2005 Slava Pestov - * - * 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 org.gjt.sp.jedit.gui; -//{{{ Imports -import java.awt.Color; -import java.awt.Component; -import java.awt.Graphics; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; -import java.util.*; +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; -import javax.swing.AbstractButton; import javax.swing.JComponent; -import javax.swing.JMenuItem; import javax.swing.JPanel; -import javax.swing.JPopupMenu; -import javax.swing.SwingUtilities; import org.gjt.sp.jedit.EBComponent; import org.gjt.sp.jedit.EBMessage; import org.gjt.sp.jedit.EditBus; -import org.gjt.sp.jedit.PluginJAR; +import org.gjt.sp.jedit.SettingsXML; import org.gjt.sp.jedit.View; import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.View.ViewConfig; import org.gjt.sp.jedit.gui.KeyEventTranslator.Key; import org.gjt.sp.jedit.msg.DockableWindowUpdate; -import org.gjt.sp.jedit.msg.PluginUpdate; import org.gjt.sp.jedit.msg.PropertiesChanged; import org.gjt.sp.util.Log; -//}}} +import org.xml.sax.helpers.DefaultHandler; -/** - * <p>Keeps track of all dockable windows for a single View, and provides - * an API for getting/showing/hiding them. </p> - * - * <p>Each {@link org.gjt.sp.jedit.View} has an instance of this class.</p> - * - * <p><b>dockables.xml:</b></p> - * - * <p>Dockable window definitions are read from <code>dockables.xml</code> files - * contained inside plugin JARs. A dockable definition file has the following - * form: </p> - * - * <pre><?xml version="1.0"?> - *<!DOCTYPE DOCKABLES SYSTEM "dockables.dtd"> - *<DOCKABLES> - * <DOCKABLE NAME="<i>dockableName</i>" MOVABLE="TRUE|FALSE"> - * // Code to create the dockable - * </DOCKABLE> - *</DOCKABLES></pre> - * - * <p>The MOVABLE attribute specifies the behavior when the docking position of - * the dockable window is changed. If MOVABLE is TRUE, the existing instance of - * the dockable window is moved to the new docking position, and if the dockable - * window implements the DockableWindow interface (see {@link DockableWindow}), - * it is also notified about the change in docking position before it is moved. - * If MOVABLE is FALSE, the BeanShell code is invoked to get the instance of - * the dockable window to put in the new docking position. Typically, the - * BeanShell code returns a new instance of the dockable window, and the state - * of the existing instance is not preserved after the change. It is therefore - * recommended to set MOVABLE to TRUE for all dockables in order to make them - * preserve their state when they are moved. For backward compatibility reasons, - * this attribute is set to FALSE by default.</p> - * <p>More than one <code><DOCKABLE></code> tag may be present. The code that - * creates the dockable can reference any BeanShell built-in variable - * (see {@link org.gjt.sp.jedit.BeanShell}), along with a variable - * <code>position</code> whose value is one of - * {@link #FLOATING}, {@link #TOP}, {@link #LEFT}, {@link #BOTTOM}, - * and {@link #RIGHT}. </p> - * - * <p>The following properties must be defined for each dockable window: </p> - * - * <ul> - * <li><code><i>dockableName</i>.title</code> - the string to show on the dockable - * button. </li> - * <li><code><i>dockableName</i>.label</code> - The string to use for generating - * menu items and action names. </li> - * <li><code><i>dockableName</i>.longtitle</code> - (optional) the string to use - * in the dockable's floating window title (when it is floating). - * If not specified, the <code><i>dockableName</i>.title</code> property is used. </li> - * </ul> - * - * A number of actions are automatically created for each dockable window: - * - * <ul> - * <li><code><i>dockableName</i></code> - opens the dockable window.</li> - * <li><code><i>dockableName</i>-toggle</code> - toggles the dockable window's visibility.</li> - * <li><code><i>dockableName</i>-float</code> - opens the dockable window in a new - * floating window.</li> - * </ul> - * - * Note that only the first action needs a <code>label</code> property, the - * rest have automatically-generated labels. - * - * <p> <b>Implementation details:</b></p> - * - * <p> When an instance of this class is initialized by the {@link org.gjt.sp.jedit.View} - * class, it - * iterates through the list of registered dockable windows (from jEdit itself, - * and any loaded plugins) and - * examines options supplied by the user in the <b>Global - * Options</b> dialog box. Any plugins designated for one of the - * four docking positions are displayed.</p> - * - * <p> To create an instance of a dockable window, the <code>DockableWindowManager</code> - * finds and executes the BeanShell code extracted from the appropriate - * <code>dockables.xml</code> file. This code will typically consist of a call - * to the constructor of the dockable window component. The result of the - * BeanShell expression, typically a newly constructed component, is placed - * in a window managed by this class. </p> - * - * @see org.gjt.sp.jedit.View#getDockableWindowManager() - * - * @author Slava Pestov - * @author John Gellene (API documentation) - * @version $Id$ - * @since jEdit 2.6pre3 - */ -public class DockableWindowManager extends JPanel implements EBComponent +@SuppressWarnings("serial") +public abstract class DockableWindowManager extends JPanel implements EBComponent { + //{{{ Constants /** * Floating position. @@ -174,84 +61,69 @@ */ public static final String RIGHT = "right"; //}}} - - //{{{ Data members - private final View view; - private final DockableWindowFactory factory; - /** A mapping from Strings to Entry objects. */ - private final Map<String, Entry> windows; - private final PanelWindowContainer left; - private final PanelWindowContainer right; - private final PanelWindowContainer top; - private final PanelWindowContainer bottom; - private final List<Entry> clones; - - private Entry lastEntry; - public Stack showStack = new Stack(); - // }}} - - //{{{ getRegisteredDockableWindows() method - /** - * @since jEdit 4.3pre2 + public static abstract class DockingLayout { + public DockingLayout() { + } + public void setPlainView(boolean plain) { + } + abstract public DefaultHandler getPerspectiveHandler(); + abstract public void savePerspective(File file, SettingsXML.Saver out, String lineSep) throws IOException; + } + + /* + * Docking framework interface methods */ - public static String[] getRegisteredDockableWindows() + abstract public void setMainPanel(JPanel panel); + public void setDockingLayout(DockingLayout docking) { - return DockableWindowFactory.getInstance() - .getRegisteredDockableWindows(); - } //}}} + // By default, use the docking positions specified by the jEdit properties + Iterator<Entry<String, String>> iterator = positions.entrySet().iterator(); + while (iterator.hasNext()) + { + Entry<String, String> entry = iterator.next(); + String dockable = entry.getKey(); + String position = entry.getValue(); + if (! position.equals(FLOATING)) + showDockableWindow(dockable); + } + } + abstract public void showDockableWindow(String name); + abstract public void hideDockableWindow(String name); + abstract public JComponent floatDockableWindow(String name); + abstract public boolean isDockableWindowDocked(String name); + abstract public boolean isDockableWindowVisible(String name); + abstract public void closeCurrentArea(); + abstract public DockingLayout getDockingLayout(ViewConfig config); + protected void dockingPositionChanged(String dockableName, + String oldPosition, String newPosition) + { + } + public void dockableTitleChanged(String dockable, String newTitle) + { + } + protected interface DockingArea { + void showMostRecent(); + String getCurrent(); + void show(String name); + } + abstract public DockingArea getLeftDockingArea(); + abstract public DockingArea getRightDockingArea(); + abstract public DockingArea getTopDockingArea(); + abstract public DockingArea getBottomDockingArea(); - //{{{ DockableWindowManager constructor - /** - * Creates a new dockable window manager. - * @param view The view - * @param factory A {@link DockableWindowFactory}, usually - * <code>DockableWindowFactory.getInstance()</code>. - * @param config A docking configuration - * @since jEdit 2.6pre3 + /* + * Data members */ - public DockableWindowManager(View view, DockableWindowFactory factory, - View.ViewConfig config) - { - setLayout(new DockableLayout()); - this.view = view; - this.factory = factory; - windows = new HashMap<String, Entry>(); - clones = new ArrayList<Entry>(); - - top = new PanelWindowContainer(this,TOP,config.topPos); - left = new PanelWindowContainer(this,LEFT,config.leftPos); - bottom = new PanelWindowContainer(this,BOTTOM,config.bottomPos); - right = new PanelWindowContainer(this,RIGHT,config.rightPos); - - add(DockableLayout.TOP_BUTTONS,top.buttonPanel); - add(DockableLayout.LEFT_BUTTONS,left.buttonPanel); - add(DockableLayout.BOTTOM_BUTTONS,bottom.buttonPanel); - add(DockableLayout.RIGHT_BUTTONS,right.buttonPanel); - - add(TOP,top.dockablePanel); - add(LEFT,left.dockablePanel); - add(BOTTOM,bottom.dockablePanel); - add(RIGHT,right.dockablePanel); - } //}}} - - //{{{ init() method - /** - * Initialises dockable window manager. Do not call this method directly. + protected View view; + protected DockableWindowFactory factory; + protected Map<String, JComponent> windows = new HashMap<String, JComponent>(); + + /* + * Base class methods */ - public void init() - { - EditBus.addToBus(this); - Iterator<DockableWindowFactory.Window> entries = factory.getDockableWindowIterator(); - - while(entries.hasNext()) - addEntry(entries.next()); - - propertiesChanged(); - } //}}} - // {{{ closeListener() method /** * @@ -282,80 +154,149 @@ return view; } //}}} - //{{{ floatDockableWindow() method + //{{{ getRegisteredDockableWindows() method /** - * Opens a new instance of the specified dockable window in a floating - * container. - * @param name The dockable window name - * @return The new dockable window instance - * @since jEdit 4.1pre2 + * @since jEdit 4.3pre2 */ - public JComponent floatDockableWindow(String name) + public JComponent getDockable(String name) { - Entry entry = windows.get(name); - if(entry == null) - { - Log.log(Log.ERROR,this,"Unknown dockable window: " + name); - return null; - } - - // create a copy of this dockable window and float it - Entry newEntry = new Entry(entry.factory,FLOATING); - newEntry.win = newEntry.factory.createDockableWindow(view,FLOATING); - - if(newEntry.win != null) - { - FloatingWindowContainer fwc = new FloatingWindowContainer(this,true); - newEntry.container = fwc; - newEntry.container.register(newEntry); - newEntry.container.show(newEntry); - - - } - clones.add(newEntry); - return newEntry.win; - } //}}} - - //{{{ showDockableWindow() method + return windows.get(name); + } + + //{{{ getDockableTitle() method /** - * Opens the specified dockable window. - * @param name The dockable window name - * @since jEdit 2.6pre3 + * Returns the title of the specified dockable window. + * @param name The name of the dockable window. + * @since jEdit 4.1pre5 */ - public void showDockableWindow(String name) + public String getDockableTitle(String name) { - lastEntry = windows.get(name); - if(lastEntry == null) + return longTitle(name); + }//}}} + + //{{{ setDockableTitle() method + /** + * Changes the .longtitle property of a dockable window, which corresponds to the + * title shown when it is floating (not docked). Fires a change event that makes sure + * all floating dockables change their title. + * + * @param dockableName the name of the dockable, as specified in the dockables.xml + * @param newTitle the new .longtitle you want to see above it. + * @since 4.3pre5 + * + */ + public void setDockableTitle(String dockable, String title) + { + String propName = getLongTitlePropertyName(dockable); + String oldTitle = jEdit.getProperty(propName); + jEdit.setProperty(propName, title); + firePropertyChange(propName, oldTitle, title); + dockableTitleChanged(dockable, title); + } + // }}} + + //{{{ getDockableTitle() method + public static String[] getRegisteredDockableWindows() + { + return DockableWindowFactory.getInstance() + .getRegisteredDockableWindows(); + } //}}} + + public void handleMessage(EBMessage msg) { + if (msg instanceof DockableWindowUpdate) { - Log.log(Log.ERROR,this,"Unknown dockable window: " + name); + if(((DockableWindowUpdate)msg).getWhat() == DockableWindowUpdate.PROPERTIES_CHANGED) + propertiesChanged(); + } + else if (msg instanceof PropertiesChanged) + propertiesChanged(); + } + + private Map<String, String> positions = new HashMap<String, String>(); + + protected void propertiesChanged() + { + if(view.isPlainView()) return; + + String[] dockables = factory.getRegisteredDockableWindows(); + for(int i = 0; i < dockables.length; i++) + { + String dockable = dockables[i]; + String oldPosition = positions.get(dockable); + String newPosition = getDockablePosition(dockable); + if ((oldPosition == null) || (! newPosition.equals(oldPosition))) + { + positions.put(dockable, newPosition); + dockingPositionChanged(dockable, oldPosition, newPosition); + } } + + } + public DockableWindowManager(View view, DockableWindowFactory instance, + ViewConfig config) + { + this.view = view; + this.factory = instance; + } + public void init() + { + EditBus.addToBus(this); - if(lastEntry.win == null) + Iterator<DockableWindowFactory.Window> entries = factory.getDockableWindowIterator(); + while(entries.hasNext()) { - lastEntry.win = lastEntry.factory.createDockableWindow( - view,lastEntry.position); + DockableWindowFactory.Window window = entries.next(); + String dockable = window.name; + positions.put(dockable, getDockablePosition(dockable)); } + } + public void close() + { + EditBus.removeFromBus(this); + } - if(lastEntry.win != null) + protected JComponent createDockable(String name) + { + DockableWindowFactory.Window wf = factory.getDockableWindowFactory(name); + if (wf == null) { - if(lastEntry.position.equals(FLOATING) - && lastEntry.container == null) - { - FloatingWindowContainer fwc = new FloatingWindowContainer( - this,view.isPlainView()); - lastEntry.container = fwc; - lastEntry.container.register(lastEntry); - } - showStack.push(name); - lastEntry.container.show(lastEntry); - Object reason = DockableWindowUpdate.ACTIVATED; - EditBus.send(new DockableWindowUpdate(this, reason, name)); + Log.log(Log.ERROR,this,"Unknown dockable window: " + name); + return null; } - else - /* an error occurred */; - } //}}} + String position = getDockablePosition(name); + JComponent window = wf.createDockableWindow(view, position); + if (window != null) + windows.put(name, window); + return window; + } + protected String getDockablePosition(String name) + { + return jEdit.getProperty(name + ".dock-position", FLOATING); + } + private String getLongTitlePropertyName(String dockableName) + { + return dockableName + ".longtitle"; + } + public String longTitle(String name) + { + String title = jEdit.getProperty(getLongTitlePropertyName(name)); + if (title == null) + return shortTitle(name); + return title; + } + public String shortTitle(String name) + { + String title = jEdit.getProperty(name + ".title"); + if(title == null) + return "NO TITLE PROPERTY: " + name; + return title; + } + /* + * Derived methods + */ + //{{{ addDockableWindow() method /** * Opens the specified dockable window. As of jEdit 4.0pre1, has the @@ -368,30 +309,7 @@ showDockableWindow(name); } //}}} - //{{{ hideDockableWindow() method - /** - * Hides the specified dockable window. - * @param name The dockable window name - * @since jEdit 2.6pre3 - */ - public void hideDockableWindow(String name) - { - - Entry entry = windows.get(name); - if(entry == null) - { - Log.log(Log.ERROR,this,"Unknown dockable window: " + name); - return; - } - - - - if(entry.win == null) - return; - - entry.container.show(null); - } //}}} - + //{{{ removeDockableWindow() method /** * Hides the specified dockable window. As of jEdit 4.2pre1, has the @@ -404,6 +322,7 @@ hideDockableWindow(name); } //}}} + //{{{ toggleDockableWindow() method /** * Toggles the visibility of the specified dockable window. @@ -433,695 +352,54 @@ return getDockable(name); } //}}} - //{{{ getDockable() method + //{{{ KeyHandler class /** - * Returns the specified dockable window. - * - * Note that this method - * will return null if the dockable has not been added yet. - * Make sure you call {@link #addDockableWindow(String)} first. - * - * For historical reasons, this - * does the same thing as {@link #getDockableWindow(String)}. - * - * @param name The name of the dockable window - * @since jEdit 4.0pre1 - */ - public JComponent getDockable(String name) - { - - Entry entry = windows.get(name); - if(entry == null || entry.win == null) - return null; - else - return entry.win; - } //}}} - - //{{{ getDockableTitle() method - /** - * Returns the title of the specified dockable window. - * @param name The name of the dockable window. - * @since jEdit 4.1pre5 - */ - public String getDockableTitle(String name) - { - Entry e = windows.get(name); - return e.longTitle(); - } //}}} - - //{{{ setDockableTitle() method - /** - * Changes the .longtitle property of a dockable window, which corresponds to the - * title shown when it is floating (not docked). Fires a change event that makes sure - * all floating dockables change their title. + * This keyhandler responds to only two key events - those corresponding to + * the close-docking-area action event. * - * @param dockableName the name of the dockable, as specified in the dockables.xml - * @param newTitle the new .longtitle you want to see above it. - * @since 4.3pre5 - * + * @author ezust */ - public void setDockableTitle(String dockableName, String newTitle) { - Entry entry = windows.get(dockableName); - String propName = entry.factory.name + ".longtitle"; - String oldTitle = jEdit.getProperty(propName); - jEdit.setProperty(propName, newTitle); - firePropertyChange(propName, oldTitle, newTitle); - } - // }}} - - //{{{ isDockableWindowVisible() method - /** - * Returns if the specified dockable window is visible. - * @param name The dockable window name - */ - public boolean isDockableWindowVisible(String name) - { - Entry entry = windows.get(name); - if(entry == null || entry.win == null) - return false; - else - return entry.container.isVisible(entry); - } //}}} - - //{{{ isDockableWindowDocked() method - /** - * Returns if the specified dockable window is docked into the - * view. - * @param name The dockable's name - * @since jEdit 4.0pre2 - */ - public boolean isDockableWindowDocked(String name) - { - Entry entry = windows.get(name); - if(entry == null) - return false; - else - return !entry.position.equals(FLOATING); - } //}}} - - //{{{ closeCurrentArea() method - /** - * Closes the most recently focused dockable. - * @since jEdit 4.1pre3 - */ - public void closeCurrentArea() - { - // I don't know of any other way to fix this, since invoking this - // command from a menu results in the focus owner being the menu - // until the menu goes away. - SwingUtilities.invokeLater(new Runnable() + class KeyHandler extends KeyAdapter { + static final String action = "close-docking-area"; + Key b1, b2; + String name; + + public KeyHandler(String dockableName) { - public void run() - { - /* Try to hide the last entry that was shown */ - try { - String dockableName = showStack.pop().toString(); - hideDockableWindow(dockableName); - return; - } - catch (Exception e) {} - - Component comp = view.getFocusOwner(); - while(comp != null) - { - //System.err.println(comp.getClass()); - if(comp instanceof DockablePanel) - { - DockablePanel panel = (DockablePanel) comp; - - PanelWindowContainer container = panel.getWindowContainer(); - - container.show(null); - return; - } +/* + String prefixStr = null; - comp = comp.getParent(); - } - - getToolkit().beep(); - } - }); - } //}}} - - //{{{ close() method - /** - * Called when the view is being closed. - * @since jEdit 2.6pre3 - */ - public void close() - { - EditBus.removeFromBus(this); - - for (Entry entry : windows.values()) - { - if (entry.win != null) - entry.container.unregister(entry); - } - - for (Entry clone : clones) - { - if (clone.win != null) - clone.container.unregister(clone); - } - } //}}} - - //{{{ getTopDockingArea() method - public PanelWindowContainer getTopDockingArea() - { - return top; - } //}}} - - //{{{ getLeftDockingArea() method - public PanelWindowContainer getLeftDockingArea() - { - return left; - } //}}} - - //{{{ getBottomDockingArea() method - public PanelWindowContainer getBottomDockingArea() - { - return bottom; - } //}}} - - //{{{ getRightDockingArea() method - public PanelWindowContainer getRightDockingArea() - { - return right; - } //}}} - - //{{{ createPopupMenu() method - public JPopupMenu createPopupMenu( - final DockableWindowContainer container, - final String dockable, - final boolean clone) - { - JPopupMenu popup = new JPopupMenu(); - if(dockable == null && container instanceof PanelWindowContainer) - { - ActionListener listener = new ActionListener() + StringTokenizer st = new StringTokenizer(keyBinding); + while(st.hasMoreTokens()) { - public void actionPerformed(ActionEvent evt) - { - showDockableWindow(evt.getActionCommand()); - } - }; + String keyCodeStr = st.nextToken(); + if(prefixStr == null) + prefixStr = keyCodeStr; + else + prefixStr = prefixStr + " " + keyCodeStr; - String[] dockables = ((PanelWindowContainer) - container).getDockables(); - Map<String,String> dockableMap = new TreeMap<String, String>(); - for (int i = 0; i < dockables.length; i++) - { - String action = dockables[i]; - dockableMap.put(getDockableTitle(action), action); - } - for (Map.Entry<String, String> entry : dockableMap.entrySet()) - { - JMenuItem item = new JMenuItem(entry.getKey()); - item.setActionCommand(entry.getValue()); - item.addActionListener(listener); - popup.add(item); - } - } - else - { - JMenuItem caption = new JMenuItem(getDockableTitle(dockable)); - caption.setEnabled(false); - popup.add(caption); - popup.addSeparator(); - String currentPos = jEdit.getProperty(dockable + ".dock-position",FLOATING); - if(!clone) - { - String[] positions = { FLOATING, TOP, LEFT, BOTTOM, RIGHT }; - for(int i = 0; i < positions.length; i++) - { - final String pos = positions[i]; - if(pos.equals(currentPos)) - continue; + KeyEventTranslator.Key keyStroke = KeyEventTranslator.parseKey(keyCodeStr); + if(keyStroke == null) + return; - JMenuItem moveMenuItem = new JMenuItem(jEdit.getProperty("view.docking.menu-" - + pos)); - - moveMenuItem.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent evt) - { - jEdit.setProperty(dockable + ".dock-position",pos); - EditBus.send(new DockableWindowUpdate( - DockableWindowManager.this, - DockableWindowUpdate.PROPERTIES_CHANGED, - null - )); - showDockableWindow(dockable); - } - }); - popup.add(moveMenuItem); - } - - popup.addSeparator(); - } - - JMenuItem cloneMenuItem = new JMenuItem(jEdit.getProperty("view.docking.menu-clone")); - - cloneMenuItem.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent evt) + if(st.hasMoreTokens()) { - floatDockableWindow(dockable); - } - }); - popup.add(cloneMenuItem); - - popup.addSeparator(); - - JMenuItem closeMenuItem = new JMenuItem(jEdit.getProperty("view.docking.menu-close")); - - closeMenuItem.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent evt) - { - if(clone) - ((FloatingWindowContainer)container).dispose(); + Object o = current.get(keyStroke); + if(o instanceof Hashtable) + current = (Hashtable)o; else - removeDockableWindow(dockable); - } - }); - popup.add(closeMenuItem); - - if(!(clone || currentPos.equals(FLOATING))) - { - JMenuItem undockMenuItem = new JMenuItem(jEdit.getProperty("view.docking.menu-undock")); - - undockMenuItem.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent evt) { - jEdit.setProperty(dockable + ".dock-position",FLOATING); - EditBus.send(new DockableWindowUpdate( - DockableWindowManager.this, - DockableWindowUpdate.PROPERTIES_CHANGED, - null - )); - // Reset the window, propertiesChanged() doesn't - // reset it for MOVABLE windows. - Entry entry = windows.get(dockable); - if (entry == null) - Log.log(Log.ERROR,this,"Unknown dockable window: " + dockable); - else - entry.win = null; + Hashtable hash = new Hashtable(); + hash.put(PREFIX_STR,prefixStr); + o = hash; + current.put(keyStroke,o); + current = (Hashtable)o; } - }); - popup.add(undockMenuItem); - } - } - - return popup; - } //}}} - - //{{{ paintChildren() method - public void paintChildren(Graphics g) - { - super.paintChildren(g); - - if(resizeRect != null) - { - g.setColor(Color.darkGray); - g.fillRect(resizeRect.x,resizeRect.y, - resizeRect.width,resizeRect.height); - } - } //}}} - - //{{{ handleMessage() method - public void handleMessage(EBMessage msg) - { - if(msg instanceof DockableWindowUpdate) - { - if(((DockableWindowUpdate)msg).getWhat() - == DockableWindowUpdate.PROPERTIES_CHANGED) - propertiesChanged(); - } - else if(msg instanceof PropertiesChanged) - propertiesChanged(); - else if(msg instanceof PluginUpdate) - { - PluginUpdate pmsg = (PluginUpdate)msg; - if(pmsg.getWhat() == PluginUpdate.LOADED) - { - Iterator<DockableWindowFactory.Window> iter = factory.getDockableWindowIterator(); - - while(iter.hasNext()) - { - DockableWindowFactory.Window w = iter.next(); - if(w.plugin == pmsg.getPluginJAR()) - addEntry(w); } - - propertiesChanged(); - } - else if(pmsg.isExiting()) - { - // we don't care - } - else if(pmsg.getWhat() == PluginUpdate.DEACTIVATED) - { - Iterator<Entry> iter = getAllPluginEntries( - pmsg.getPluginJAR(),false); - while(iter.hasNext()) - { - Entry entry = iter.next(); - if(entry.container != null) - entry.container.remove(entry); - } - } - else if(pmsg.getWhat() == PluginUpdate.UNLOADED) - { - Iterator<Entry> iter = getAllPluginEntries( - pmsg.getPluginJAR(),true); - while(iter.hasNext()) - { - Entry entry = iter.next(); - if(entry.container != null) - { - entry.container.unregister(entry); - entry.win = null; - entry.container = null; - } - } - } - } - } //}}} - - //{{{ Package-private members - int resizePos; - /** - * This is the rectangle you drag to resize the split. - * It is used with non continuous layout. - */ - Rectangle resizeRect; - - //{{{ setResizePos() method - void setResizePos(int resizePos, PanelWindowContainer resizing) - { - this.resizePos = resizePos; - - if(resizePos < 0) - resizePos = 0; - - if (continuousLayout) - return; - - Rectangle newResizeRect = new Rectangle(0,0, - PanelWindowContainer.SPLITTER_WIDTH - 2, - PanelWindowContainer.SPLITTER_WIDTH - 2); - if(resizing == top) - { - resizePos = Math.min(resizePos,getHeight() - - top.buttonPanel.getHeight() - - bottom.dockablePanel.getHeight() - - bottom.buttonPanel.getHeight() - - PanelWindowContainer.SPLITTER_WIDTH); - newResizeRect.x = top.dockablePanel.getX() + 1; - newResizeRect.y = resizePos + top.buttonPanel.getHeight() + 1; - newResizeRect.width = top.dockablePanel.getWidth() - 2; - } - else if(resizing == left) - { - resizePos = Math.min(resizePos,getWidth() - - left.buttonPanel.getWidth() - - right.dockablePanel.getWidth() - - right.buttonPanel.getWidth() - - PanelWindowContainer.SPLITTER_WIDTH); - newResizeRect.x = resizePos + left.buttonPanel.getWidth() + 1; - newResizeRect.y = left.dockablePanel.getY() + 1; - newResizeRect.height = left.dockablePanel.getHeight() - 2; - } - else if(resizing == bottom) - { - resizePos = Math.min(resizePos,getHeight() - - bottom.buttonPanel.getHeight() - - top.dockablePanel.getHeight() - - top.buttonPanel.getHeight() - - PanelWindowContainer.SPLITTER_WIDTH); - newResizeRect.x = bottom.dockablePanel.getX() + 1; - newResizeRect.y = getHeight() - bottom.buttonPanel.getHeight() - resizePos - - PanelWindowContainer.SPLITTER_WIDTH + 2; - newResizeRect.width = bottom.dockablePanel.getWidth() - 2; - } - else if(resizing == right) - { - resizePos = Math.min(resizePos,getWidth() - - right.buttonPanel.getWidth() - - left.dockablePanel.getWidth() - - left.buttonPanel.getWidth() - - PanelWindowContainer.SPLITTER_WIDTH); - newResizeRect.x = getWidth() - right.buttonPanel.getWidth() - resizePos - - PanelWindowContainer.SPLITTER_WIDTH + 1; - newResizeRect.y = right.dockablePanel.getY() + 1; - newResizeRect.height = right.dockablePanel.getHeight() - 2; - } - - Rectangle toRepaint; - if(resizeRect == null) - toRepaint = newResizeRect; - else - toRepaint = resizeRect.union(newResizeRect); - resizeRect = newResizeRect; - repaint(toRepaint); - } //}}} - - //{{{ finishResizing() method - void finishResizing() - { - resizeRect = null; - repaint(); - } //}}} - - //}}} - - //{{{ propertiesChanged() method - private void propertiesChanged() - { - if(view.isPlainView()) - return; - - ((DockableLayout)getLayout()).setAlternateLayout( - jEdit.getBooleanProperty("view.docking.alternateLayout")); - - String[] windowList = factory.getRegisteredDockableWindows(); - - for(int i = 0; i < windowList.length; i++) - { - String dockable = windowList[i]; - Entry entry = windows.get(dockable); - - String newPosition = jEdit.getProperty(dockable - + ".dock-position",FLOATING); - if(newPosition.equals(entry.position)) - { - continue; - } - - entry.position = newPosition; - if(entry.container != null) - { - entry.container.unregister(entry); - entry.container = null; - if (entry.factory.movable) - { - if (entry.win instanceof DockableWindow) - ((DockableWindow)entry.win).move(newPosition); - } else - entry.win = null; + current.put(keyStroke,action); } - - if(newPosition.equals(FLOATING)) - { - } - - else - { - if(newPosition.equals(TOP)) - entry.container = top; - else if(newPosition.equals(LEFT)) - entry.container = left; - else if(newPosition.equals(BOTTOM)) - entry.container = bottom; - else if(newPosition.equals(RIGHT)) - entry.container = right; - else - { - Log.log(Log.WARNING,this, - "Unknown position: " - + newPosition); - continue; - } - - entry.container.register(entry); - } - } - - top.sortDockables(); - left.sortDockables(); - bottom.sortDockables(); - right.sortDockables(); - - continuousLayout = jEdit.getBooleanProperty("appearance.continuousLayout"); - revalidate(); - repaint(); - } //}}} - - //{{{ addEntry() method - private void addEntry(DockableWindowFactory.Window factory) - { - Entry e; - if(view.isPlainView()) - { - // don't show menu items to dock into a plain view - e = new Entry(factory,FLOATING); - } - else - { - e = new Entry(factory); - if(e.position.equals(FLOATING)) - /* nothing to do */; - else if(e.position.equals(TOP)) - e.container = top; - else if(e.position.equals(LEFT)) - e.container = left; - else if(e.position.equals(BOTTOM)) - e.container = bottom; - else if(e.position.equals(RIGHT)) - e.container = right; - else - { - Log.log(Log.WARNING,this, - "Unknown position: " - + e.position); - } - - if(e.container != null) - e.container.register(e); - } - windows.put(factory.name,e); - } //}}} - - //{{{ getAllPluginEntries() method - /** - * If remove is false, only remove from clones list, otherwise remove - * from both entries and clones. - */ - private Iterator<Entry> getAllPluginEntries(PluginJAR plugin, boolean remove) - { - List<Entry> returnValue = new LinkedList<Entry>(); - Iterator<Entry> iter = windows.values().iterator(); - while(iter.hasNext()) - { - Entry entry = iter.next(); - if(entry.factory.plugin == plugin) - { - returnValue.add(entry); - if(remove) - iter.remove(); - } - } - - iter = clones.iterator(); - while(iter.hasNext()) - { - Entry entry = iter.next(); - if(entry.factory.plugin == plugin) - { - returnValue.add(entry); - iter.remove(); - } - } - - return returnValue.iterator(); - } //}}} - - private boolean continuousLayout; - - //{{{ Entry class - cla... [truncated message content] |
From: <k_s...@us...> - 2008-08-12 18:31:42
|
Revision: 13283 http://jedit.svn.sourceforge.net/jedit/?rev=13283&view=rev Author: k_satoda Date: 2008-08-12 18:31:39 +0000 (Tue, 12 Aug 2008) Log Message: ----------- Eliminated needless references to Buffer from KillRing, which often held closed buffers in memory after editing. The actual path was KillRing.ring -> UndoManager.Remove.mgr -> UndoManager.buffer. jProfiler helped. Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/buffer/KillRing.java jEdit/trunk/org/gjt/sp/jedit/buffer/UndoManager.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-08-12 18:30:14 UTC (rev 13282) +++ jEdit/trunk/doc/CHANGES.txt 2008-08-12 18:31:39 UTC (rev 13283) @@ -6,6 +6,7 @@ {{{ Bug Fixes +- Closed buffers were often kept in memory. (Kazutoshi Satoda) }}} {{{ Miscellaneous Modified: jEdit/trunk/org/gjt/sp/jedit/buffer/KillRing.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/buffer/KillRing.java 2008-08-12 18:30:14 UTC (rev 13282) +++ jEdit/trunk/org/gjt/sp/jedit/buffer/KillRing.java 2008-08-12 18:31:39 UTC (rev 13283) @@ -51,15 +51,15 @@ { int newSize = Math.max(1, historySize); if(ring == null) - ring = new UndoManager.Remove[newSize]; + ring = new UndoManager.RemovedContent[newSize]; else if(newSize != ring.length) { - UndoManager.Remove[] newRing = new UndoManager.Remove[ + UndoManager.RemovedContent[] newRing = new UndoManager.RemovedContent[ newSize]; int newCount = Math.min(getSize(),newSize); for(int i = 0; i < newCount; i++) { - newRing[i] = (UndoManager.Remove)getElementAt(i); + newRing[i] = (UndoManager.RemovedContent)getElementAt(i); } ring = newRing; count = newCount; @@ -94,20 +94,20 @@ */ protected void reset(List source) { - UndoManager.Remove[] newRing - = new UndoManager.Remove[source.size()]; + UndoManager.RemovedContent[] newRing + = new UndoManager.RemovedContent[source.size()]; int i = 0; for(Object x: source) { - UndoManager.Remove element; + UndoManager.RemovedContent element; if(x instanceof String) { - element = new UndoManager.Remove( - null,0,0,(String)x); + element = new UndoManager.RemovedContent( + (String)x); } else { - element = (UndoManager.Remove)x; + element = (UndoManager.RemovedContent)x; } newRing[i++] = element; } @@ -157,7 +157,7 @@ called by the 'Paste Deleted' dialog where the performance is not exactly vital */ remove(index); - add((UndoManager.Remove)value); + add((UndoManager.RemovedContent)value); } //}}} //}}} @@ -165,7 +165,7 @@ //{{{ Package-private members //{{{ changed() method - void changed(UndoManager.Remove rem) + void changed(UndoManager.RemovedContent rem) { if(rem.inKillRing) { @@ -194,7 +194,7 @@ } //}}} //{{{ add() method - void add(UndoManager.Remove rem) + void add(UndoManager.RemovedContent rem) { // compare existing entries' hashcode with this int length = (wrap ? ring.length : count); @@ -244,7 +244,7 @@ { if(wrap) { - UndoManager.Remove[] newRing = new UndoManager.Remove[ + UndoManager.RemovedContent[] newRing = new UndoManager.RemovedContent[ ring.length]; int newCount = 0; for(int j = 0; j < ring.length; j++) @@ -273,7 +273,7 @@ //}}} //{{{ Private members - private UndoManager.Remove[] ring; + private UndoManager.RemovedContent[] ring; private int count; private boolean wrap; private static KillRing killRing = new KillRing(); Modified: jEdit/trunk/org/gjt/sp/jedit/buffer/UndoManager.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/buffer/UndoManager.java 2008-08-12 18:30:14 UTC (rev 13282) +++ jEdit/trunk/org/gjt/sp/jedit/buffer/UndoManager.java 2008-08-12 18:31:39 UTC (rev 13283) @@ -188,19 +188,19 @@ Remove rem = (Remove)toMerge; if(rem.offset == offset) { - rem.str = rem.str.concat(text); - rem.hashcode = rem.str.hashCode(); + rem.content.str = rem.content.str.concat(text); + rem.content.hashcode = rem.content.str.hashCode(); rem.length += length; - KillRing.getInstance().changed(rem); + KillRing.getInstance().changed(rem.content); return; } else if(offset + length == rem.offset) { - rem.str = text.concat(rem.str); - rem.hashcode = rem.str.hashCode(); + rem.content.str = text.concat(rem.content.str); + rem.content.hashcode = rem.content.str.hashCode(); rem.length += length; rem.offset = offset; - KillRing.getInstance().changed(rem); + KillRing.getInstance().changed(rem.content); return; } } @@ -217,7 +217,7 @@ else addEdit(rem); - KillRing.getInstance().add(rem); + KillRing.getInstance().add(rem.content); } //}}} //{{{ resetClearDirty method @@ -350,8 +350,28 @@ String str; } //}}} + //{{{ RemovedContent clas + // This class is held in KillRing. + public static class RemovedContent + { + String str; + int hashcode; + boolean inKillRing; + + public RemovedContent(String str) + { + this.str = str; + this.hashcode = str.hashCode(); + } + + public String toString() + { + return str; + } + }// }}} + //{{{ Remove class - public static class Remove extends Edit + static class Remove extends Edit { //{{{ Remove constructor Remove(UndoManager mgr, int offset, int length, String str) @@ -359,14 +379,13 @@ this.mgr = mgr; this.offset = offset; this.length = length; - this.str = str; - hashcode = str.hashCode(); + this.content = new RemovedContent(str); } //}}} //{{{ undo() method int undo() { - mgr.buffer.insert(offset,str); + mgr.buffer.insert(offset,content.str); if(mgr.undoClearDirty == this) mgr.buffer.setDirty(false); return offset + length; @@ -381,18 +400,10 @@ return offset; } //}}} - //{{{ toString() method - public String toString() - { - return str; - } //}}} - UndoManager mgr; int offset; int length; - String str; - int hashcode; - boolean inKillRing; + final RemovedContent content; } //}}} //{{{ CompoundEdit class This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <k_s...@us...> - 2008-08-12 18:41:22
|
Revision: 13284 http://jedit.svn.sourceforge.net/jedit/?rev=13284&view=rev Author: k_satoda Date: 2008-08-12 18:41:18 +0000 (Tue, 12 Aug 2008) Log Message: ----------- Eliminated needless references to Buffer from HyperSearchFileNode, which sometimes held closed buffers in memory. jProfiler helped. Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/search/HyperSearchFileNode.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-08-12 18:31:39 UTC (rev 13283) +++ jEdit/trunk/doc/CHANGES.txt 2008-08-12 18:41:18 UTC (rev 13284) @@ -13,9 +13,15 @@ }}} +{{{ API Changes +- A public field buffer in HyperSearchFileNode was removed. Use + getBuffer() instead. (Kazutoshi Satoda) + }}} +}}} + {{{ Version 4.3pre15 Thanks to Bj\xF6rn "Vampire" Kautler, Marcelo Vanzin, Matthieu Casanova, Modified: jEdit/trunk/org/gjt/sp/jedit/search/HyperSearchFileNode.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/search/HyperSearchFileNode.java 2008-08-12 18:31:39 UTC (rev 13283) +++ jEdit/trunk/org/gjt/sp/jedit/search/HyperSearchFileNode.java 2008-08-12 18:41:18 UTC (rev 13284) @@ -36,7 +36,6 @@ public class HyperSearchFileNode implements HyperSearchNode { public String path; - public Buffer buffer; public boolean showFullPath = true; private static String fileSep = System.getProperty("file.separator"); @@ -55,9 +54,7 @@ //{{{ getBuffer() method public Buffer getBuffer(View view) { - if(buffer == null) - buffer = jEdit.openFile(view,path); - return buffer; + return jEdit.openFile(view,path); } //}}} //{{{ goTo() method @@ -86,8 +83,7 @@ return false; HyperSearchFileNode otherResult = (HyperSearchFileNode)compareObj; - return path.equals(MiscUtilities.resolveSymlinks(otherResult.path)) - && buffer.equals(otherResult.buffer); + return path.equals(MiscUtilities.resolveSymlinks(otherResult.path)); }//}}} /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2008-08-13 15:40:59
|
Revision: 13288 http://jedit.svn.sourceforge.net/jedit/?rev=13288&view=rev Author: ezust Date: 2008-08-13 15:40:52 +0000 (Wed, 13 Aug 2008) Log Message: ----------- Moved buffer list options together with buffer set options in View option pane. Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/gui/DynamicContextMenuService.java jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props jEdit/trunk/org/gjt/sp/jedit/options/GeneralOptionPane.java jEdit/trunk/org/gjt/sp/jedit/options/ViewOptionPane.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-08-13 14:07:24 UTC (rev 13287) +++ jEdit/trunk/doc/CHANGES.txt 2008-08-13 15:40:52 UTC (rev 13288) @@ -10,8 +10,9 @@ }}} {{{ Miscellaneous +- Moved buffer list sorting options from General to View Option Pane + with other bufferset options. - }}} {{{ API Changes Modified: jEdit/trunk/org/gjt/sp/jedit/gui/DynamicContextMenuService.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/gui/DynamicContextMenuService.java 2008-08-13 14:07:24 UTC (rev 13287) +++ jEdit/trunk/org/gjt/sp/jedit/gui/DynamicContextMenuService.java 2008-08-13 15:40:52 UTC (rev 13288) @@ -25,7 +25,7 @@ * Use this to determine the location of the caret, or the edit mode of the buffer, etc. * @param evt a mouseEvent that triggered this menu request, or null * @return an array of menu items - * or null if there is no appropriate actions to be added at this time + * or null if there are no appropriate actions to be added at this time */ public abstract JMenuItem[] createMenu(JEditTextArea ta, MouseEvent evt); Modified: jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2008-08-13 14:07:24 UTC (rev 13287) +++ jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2008-08-13 15:40:52 UTC (rev 13288) @@ -1722,8 +1722,6 @@ options.general.restore=Restore previously open files on startup options.general.restore.remote=... including remote files over VFS options.general.restore.cli=... including file names specified on the command line -options.general.sortBuffers=Sort buffer list (takes effect after restart) -options.general.sortByName=Sort buffer list by file name, instead of path name options.general.newkeyhandling=Use simplified keyboard handling options.general.newkeyhandling.tooltip=(Experimental) some international Linux users prefer this mode, but it may go away soon since regular keyboard handling works better. options.general.encodingDetectors=List of encoding autodetectors: @@ -2076,6 +2074,8 @@ options.view.beepOnSearchAutoWrap=Beep when searching automatically wraps options.view.showBufferSwitcher=Show buffer switcher options.view.bufferSwitcherMaxRowsCount=Visible rows in buffer switcher: +options.view.sortBuffers=Sort buffer sets (takes effect after restart) +options.view.sortByName=Sort buffer sets by file name, instead of path name options.editpane.bufferset.default=BufferSet scope for new EditPanes: options.editpane.bufferset.contain=New BufferSets contain: options.editpane.bufferset.newbufferset.copy=copy of current BufferSet Modified: jEdit/trunk/org/gjt/sp/jedit/options/GeneralOptionPane.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/options/GeneralOptionPane.java 2008-08-13 14:07:24 UTC (rev 13287) +++ jEdit/trunk/org/gjt/sp/jedit/options/GeneralOptionPane.java 2008-08-13 15:40:52 UTC (rev 13288) @@ -66,8 +66,6 @@ private JCheckBox restore; private JCheckBox restoreRemote; private JCheckBox restoreCLI; - private JCheckBox sortBuffers; - private JCheckBox sortByName; //}}} //{{{ GeneralOptionPane constructor @@ -192,27 +190,7 @@ restoreCLI.setEnabled(restore.isSelected()); addComponent(restoreCLI); - /* Sort buffers */ - sortBuffers = new JCheckBox(jEdit.getProperty( - "options.general.sortBuffers")); - sortBuffers.setSelected(jEdit.getBooleanProperty("sortBuffers")); - sortBuffers.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent evt) - { - sortByName.setEnabled(sortBuffers.isSelected()); - } - }); - - addComponent(sortBuffers); - - /* Sort buffers by names */ - sortByName = new JCheckBox(jEdit.getProperty( - "options.general.sortByName")); - sortByName.setSelected(jEdit.getBooleanProperty("sortByName")); - sortByName.setEnabled(sortBuffers.isSelected()); - addComponent(sortByName); - + hypersearchResultsWarning = new JTextField(jEdit.getProperty("hypersearch.maxWarningResults")); addComponent(jEdit.getProperty("options.general.hypersearch.maxWarningResults"), hypersearchResultsWarning); @@ -268,8 +246,6 @@ jEdit.setBooleanProperty("restore",restore.isSelected()); jEdit.setBooleanProperty("restore.cli",restoreCLI.isSelected()); jEdit.setBooleanProperty("restore.remote", restoreRemote.isSelected()); - jEdit.setBooleanProperty("sortBuffers",sortBuffers.isSelected()); - jEdit.setBooleanProperty("sortByName",sortByName.isSelected()); try { jEdit.setIntegerProperty("hypersearch.maxWarningResults", Integer.parseInt(hypersearchResultsWarning.getText())); Modified: jEdit/trunk/org/gjt/sp/jedit/options/ViewOptionPane.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/options/ViewOptionPane.java 2008-08-13 14:07:24 UTC (rev 13287) +++ jEdit/trunk/org/gjt/sp/jedit/options/ViewOptionPane.java 2008-08-13 15:40:52 UTC (rev 13288) @@ -24,6 +24,7 @@ import javax.swing.border.*; import javax.swing.*; + import java.awt.event.*; import java.awt.*; import org.gjt.sp.jedit.*; @@ -128,7 +129,6 @@ defaultBufferSet.setSelectedItem(BufferSet.Scope.fromString(jEdit.getProperty("editpane.bufferset.default"))); addComponent(jEdit.getProperty("options.editpane.bufferset.default"), defaultBufferSet); - newBufferSetBehavior = new JComboBox(); newBufferSetBehavior.addItem(BufferSetManager.NewBufferSetAction.copy); newBufferSetBehavior.addItem(BufferSetManager.NewBufferSetAction.empty); @@ -137,6 +137,31 @@ addComponent(new JLabel(jEdit.getProperty("options.editpane.bufferset.contain")), newBufferSetBehavior); + + /* Sort buffers */ + sortBuffers = new JCheckBox(jEdit.getProperty( + "options.view.sortBuffers")); + sortBuffers.setSelected(jEdit.getBooleanProperty("sortBuffers")); + sortBuffers.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent evt) + { + sortByName.setEnabled(sortBuffers.isSelected()); + } + }); + + addComponent(sortBuffers); + + /* Sort buffers by names */ + sortByName = new JCheckBox(jEdit.getProperty( + "options.view.sortByName")); + sortByName.setSelected(jEdit.getBooleanProperty("sortByName")); + sortByName.setEnabled(sortBuffers.isSelected()); + addComponent(sortByName); + + + + } //}}} //{{{ _save() method @@ -161,6 +186,9 @@ bufferSwitcherMaxRowCount.getText()); jEdit.setProperty("editpane.bufferset.default", defaultBufferSet.getSelectedItem().toString()); jEdit.setProperty("editpane.bufferset.new", newBufferSetBehavior.getSelectedItem().toString()); + jEdit.setBooleanProperty("sortBuffers",sortBuffers.isSelected()); + jEdit.setBooleanProperty("sortByName",sortByName.isSelected()); + } //}}} //{{{ Private members @@ -174,6 +202,9 @@ private JTextField bufferSwitcherMaxRowCount; private JComboBox defaultBufferSet; private JComboBox newBufferSetBehavior; + private JCheckBox sortBuffers; + private JCheckBox sortByName; + //}}} //{{{ ActionHandler class This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <k_s...@us...> - 2008-08-19 15:21:40
|
Revision: 13371 http://jedit.svn.sourceforge.net/jedit/?rev=13371&view=rev Author: k_satoda Date: 2008-08-19 15:21:37 +0000 (Tue, 19 Aug 2008) Log Message: ----------- Fixed RuntimeException "Invalid screen line cout" which happened when scrolling in a compound edit. (SF.net patch #1990960) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/textarea/DisplayManager.java jEdit/trunk/org/gjt/sp/jedit/textarea/FirstLine.java jEdit/trunk/org/gjt/sp/jedit/textarea/ScrollLineCount.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-08-19 06:00:00 UTC (rev 13370) +++ jEdit/trunk/doc/CHANGES.txt 2008-08-19 15:21:37 UTC (rev 13371) @@ -8,6 +8,9 @@ - Closed buffers were often kept in memory. (Kazutoshi Satoda) +- Error "Invalid screen line count" was shown when scrolling in a + compound edit. (SF.net patch #1990960 - Kazutoshi Satoda) + }}} {{{ Miscellaneous - Moved buffer list sorting options from General to View Option Pane Modified: jEdit/trunk/org/gjt/sp/jedit/textarea/DisplayManager.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/DisplayManager.java 2008-08-19 06:00:00 UTC (rev 13370) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/DisplayManager.java 2008-08-19 15:21:37 UTC (rev 13371) @@ -188,9 +188,7 @@ */ public final int getScreenLineCount(int line) { - if(!screenLineMgr.isScreenLineCountValid(line)) - throw new RuntimeException("Invalid screen line count: " + line); - + updateScreenLineCount(line); return screenLineMgr.getScreenLineCount(line); } //}}} @@ -756,7 +754,6 @@ if(!isLineVisible(i)) { // important: not screenLineMgr.getScreenLineCount() - updateScreenLineCount(i); int screenLines = getScreenLineCount(i); if(firstLine.physicalLine >= i) { @@ -786,7 +783,7 @@ i = getNextVisibleLine(i); while(i != -1 && i <= end) { - int screenLines = screenLineMgr.getScreenLineCount(i); + int screenLines = getScreenLineCount(i); if(i < firstLine.physicalLine) { firstLine.scrollLine -= screenLines; @@ -815,8 +812,7 @@ { firstLine.physicalLine = getPrevVisibleLine( firstLine.physicalLine); - firstLine.scrollLine -= - screenLineMgr.getScreenLineCount( + firstLine.scrollLine -= getScreenLineCount( firstLine.physicalLine); } firstLine.callChanged = true; Modified: jEdit/trunk/org/gjt/sp/jedit/textarea/FirstLine.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/FirstLine.java 2008-08-19 06:00:00 UTC (rev 13370) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/FirstLine.java 2008-08-19 15:21:37 UTC (rev 13371) @@ -114,10 +114,6 @@ if(i >= oldPhysicalLine) break; - int before = scrollLine; - displayManager.updateScreenLineCount(i); - if(before != scrollLine) - throw new RuntimeException(this + " nudged"); scrollLine += displayManager.getScreenLineCount(i); int nextLine = displayManager.getNextVisibleLine(i); @@ -129,7 +125,6 @@ physicalLine = i; - displayManager.updateScreenLineCount(i); int screenLines = displayManager.getScreenLineCount(physicalLine); if(skew >= screenLines) skew = screenLines - 1; Modified: jEdit/trunk/org/gjt/sp/jedit/textarea/ScrollLineCount.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/ScrollLineCount.java 2008-08-19 06:00:00 UTC (rev 13370) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/ScrollLineCount.java 2008-08-19 15:21:37 UTC (rev 13371) @@ -51,10 +51,6 @@ int scrollLine = 0; while(physicalLine != -1) { - int before = scrollLine; - displayManager.updateScreenLineCount(physicalLine); - if(before != scrollLine) - throw new RuntimeException(this + " nudged"); scrollLine += displayManager .getScreenLineCount(physicalLine); physicalLine = displayManager This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <k_s...@us...> - 2008-08-23 07:52:01
|
Revision: 13400 http://jedit.svn.sourceforge.net/jedit/?rev=13400&view=rev Author: k_satoda Date: 2008-08-23 07:51:57 +0000 (Sat, 23 Aug 2008) Log Message: ----------- Enabled reverse regex search. (SF.net patch #1923613) There is a known problem with "$", but accepting this looks a good way for now because this is a very basic feature. The problem will be addressed later as a bug. Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props jEdit/trunk/org/gjt/sp/jedit/search/PatternSearchMatcher.java jEdit/trunk/org/gjt/sp/jedit/search/SearchAndReplace.java jEdit/trunk/org/gjt/sp/jedit/search/SearchBar.java jEdit/trunk/org/gjt/sp/jedit/search/SearchDialog.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-08-23 04:19:46 UTC (rev 13399) +++ jEdit/trunk/doc/CHANGES.txt 2008-08-23 07:51:57 UTC (rev 13400) @@ -3,7 +3,7 @@ {{{ Version 4.3pre16 Thanks to Bj\xF6rn "Vampire" Kautler, Kazutoshi Satoda, Alan Ezust, -and Shlomy Reinstein for contributing to this release. +Shlomy Reinstein, and Greg Merrill for contributing to this release. {{{ Bug Fixes @@ -16,6 +16,10 @@ {{{ Miscellaneous - Moved buffer list sorting options from General to View Option Pane with other bufferset options. (Alan Ezust) + +- Enabled reverse regex search. (SF.net patch #1923613 - Greg Merrill) + NOTE: There is a known problem with "$". + }}} {{{ Docker Plugin features merged into jEdit Core Modified: jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2008-08-23 04:19:46 UTC (rev 13399) +++ jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2008-08-23 07:51:57 UTC (rev 13400) @@ -1438,12 +1438,6 @@ (if applicable) are set correctly. #}}} -#{{{ Reverse regular expression search not supported dialog -regexp-reverse.title=Not Supported -regexp-reverse.message=Cannot search backwards for a regular expression.\n\ - Either search forwards or disable regular expressions. -#}}} - #{{{ Can only search local directories dialog remote-dir-search.title=Non-Local Directory Chosen remote-dir-search.message=You have elected to search a non-local directory.\n\ Modified: jEdit/trunk/org/gjt/sp/jedit/search/PatternSearchMatcher.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/search/PatternSearchMatcher.java 2008-08-23 04:19:46 UTC (rev 13399) +++ jEdit/trunk/org/gjt/sp/jedit/search/PatternSearchMatcher.java 2008-08-23 07:51:57 UTC (rev 13400) @@ -24,6 +24,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.gjt.sp.util.ReverseCharSequence; + /** * A regular expression string matcher using java.util.regex. * @see java.util.regex.Pattern @@ -74,8 +76,10 @@ * @param firstTime If false and the search string matched at the * start offset with length zero, automatically * find next match - * @param reverse Unsupported for PatternSearchMatcher. Should - * always be "false". + * @param reverse If true find match prior to current match + * (this is done by searching from the beginning to + * just prior to the current match, so will be inefficient + * for large buffers) * * @return A {@link SearchMatcher.Match} object. * @since jEdit 4.3pre5 @@ -83,6 +87,19 @@ public SearchMatcher.Match nextMatch(CharSequence text, boolean start, boolean end, boolean firstTime, boolean reverse) { + // "For the mean time, there is no way to automatically generate a sexeger" + // + // http://japhy.perlmonk.org/sexeger/sexeger.html + // + // So ... for reverse regex searches we will search + // the string in the forward direction and + // return the last match. + + // Since we search the String in the forward direction, + // (even for reverse searches) un-reverse the ReverseCharSequence. + if (text instanceof ReverseCharSequence) + text = ((ReverseCharSequence)text).baseSequence(); + if (re == null) re = Pattern.compile(pattern, flags); @@ -90,31 +107,50 @@ if (!match.find()) return null; - // if we're not at the start of the buffer, and the pattern - // begins with "^" and matched the beginning of the region - // being matched, ignore the match and try the next one. - if (!start && match.start() == 0 - && re.pattern().charAt(0) == '^' && !match.find()) - return null; + while (true) { + // if we're not at the start of the buffer, and the pattern + // begins with "^" and matched the beginning of the region + // being matched, ignore the match and try the next one. + if (!start && match.start() == 0 + && re.pattern().charAt(0) == '^' && !match.find()) + return null; + + // similarly, if we're not at the end of the buffer and we + // match the end of the text, and the pattern ends with a "$", + // return null. + if (!end && match.end() == (text.length() - 1) + && pattern.charAt(pattern.length() - 1) == '$') + return null; + + returnValue.substitutions = new String[match.groupCount() + 1]; + for(int i = 0; i < returnValue.substitutions.length; i++) + { + returnValue.substitutions[i] = match.group(i); + } + + int _start = match.start(); + int _end = match.end(); + + returnValue.start = _start; + returnValue.end = _end; + + // For non-reversed searches, we break immediately + // to return the first match. For reversed searches, + // we continue until no more matches are found + if (!reverse || !match.find()) { + break; + } + } - // similarly, if we're not at the end of the buffer and we - // match the end of the text, and the pattern ends with a "$", - // return null. - if (!end && match.end() == (text.length() - 1) - && pattern.charAt(pattern.length() - 1) == '$') - return null; - - returnValue.substitutions = new String[match.groupCount() + 1]; - for(int i = 0; i < returnValue.substitutions.length; i++) - { - returnValue.substitutions[i] = match.group(i); + if (reverse) { + // The caller assumes we are searching a reversed + // CharSegment, so we need to reverse the indices + // before returning + int len = returnValue.end - returnValue.start; + returnValue.start = text.length() - returnValue.end; + returnValue.end = returnValue.start + len; } - int _start = match.start(); - int _end = match.end(); - - returnValue.start = _start; - returnValue.end = _end; return returnValue; } //}}} Modified: jEdit/trunk/org/gjt/sp/jedit/search/SearchAndReplace.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/search/SearchAndReplace.java 2008-08-23 04:19:46 UTC (rev 13399) +++ jEdit/trunk/org/gjt/sp/jedit/search/SearchAndReplace.java 2008-08-23 07:51:57 UTC (rev 13400) @@ -447,11 +447,6 @@ } boolean _reverse = reverse && fileset instanceof CurrentBufferSet; - if(_reverse && regexp) - { - GUIUtilities.error(comp,"regexp-reverse",null); - return false; - } try { Modified: jEdit/trunk/org/gjt/sp/jedit/search/SearchBar.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/search/SearchBar.java 2008-08-23 04:19:46 UTC (rev 13399) +++ jEdit/trunk/org/gjt/sp/jedit/search/SearchBar.java 2008-08-23 07:51:57 UTC (rev 13400) @@ -211,12 +211,6 @@ //{{{ Incremental search else { - if(reverse && SearchAndReplace.getRegexp()) - { - GUIUtilities.error(view,"regexp-reverse",null); - return; - } - // on enter, start search from end // of current match to find next one int start; Modified: jEdit/trunk/org/gjt/sp/jedit/search/SearchDialog.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/search/SearchDialog.java 2008-08-23 04:19:46 UTC (rev 13399) +++ jEdit/trunk/org/gjt/sp/jedit/search/SearchDialog.java 2008-08-23 07:51:57 UTC (rev 13400) @@ -691,8 +691,7 @@ && !searchSelection.isSelected()); boolean reverseEnabled = !hyperSearch.isSelected() - && searchCurrentBuffer.isSelected() - && !regexp.isSelected(); + && searchCurrentBuffer.isSelected(); searchBack.setEnabled(reverseEnabled); searchForward.setEnabled(reverseEnabled); if(!reverseEnabled) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <k_s...@us...> - 2008-08-23 09:57:32
|
Revision: 13404 http://jedit.svn.sourceforge.net/jedit/?rev=13404&view=rev Author: k_satoda Date: 2008-08-23 09:57:25 +0000 (Sat, 23 Aug 2008) Log Message: ----------- Expanded care for black hole bugs (SF.net bug #950961, #1193683), to handle ... - multi line edit including folded line, - more folding modes other than 'explicit', - and modification at the middle of folded range. (SF.net patch #1999448) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/textarea/BufferHandler.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-08-23 09:25:30 UTC (rev 13403) +++ jEdit/trunk/doc/CHANGES.txt 2008-08-23 09:57:25 UTC (rev 13404) @@ -12,6 +12,9 @@ - Error "Invalid screen line count" was shown when scrolling in a compound edit. (SF.net patch #1990960 - Kazutoshi Satoda) +- Folded lines sometimes became invisible. + (SF.net patch #1999448 - Kazutoshi Satoda) + }}} {{{ Miscellaneous - Moved buffer list sorting options from General to View Option Pane Modified: jEdit/trunk/org/gjt/sp/jedit/textarea/BufferHandler.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/BufferHandler.java 2008-08-23 09:25:30 UTC (rev 13403) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/BufferHandler.java 2008-08-23 09:57:25 UTC (rev 13404) @@ -168,16 +168,9 @@ */ public void preContentInserted(JEditBuffer buffer, int startLine, int offset, int numLines, int length) { - if (textArea.getDisplayManager() == displayManager && numLines != 0) + if(textArea.getDisplayManager() == displayManager) { - //{{{ fix for black hole bug - // if you remove the {{{ at a fold start, the fold is removed so it must be expanded otherwise }}} - // the text remains invisible - if (buffer.isFoldStart(startLine)) - { - displayManager.expandFold(startLine, false); - } - // }}} + getReadyToBreakFold(startLine); } } //}}} @@ -203,31 +196,25 @@ if(textArea.getDisplayManager() == displayManager) { - //{{{ fix for black hole bug - // if you remove the {{{ at a fold start, the fold is removed so it must be expanded otherwise }}} - // the text remains invisible - int endLine = startLine + numLines; - if (buffer.isFoldStart(endLine)) + if(numLines == 0) { - if (numLines == 0) + getReadyToBreakFold(startLine); + } + else + { + int lastLine = startLine + numLines; + if(offset != buffer.getLineStartOffset(startLine) + || offset + length != buffer.getLineStartOffset(lastLine)) { - String endLineText = buffer.getLineText(endLine); - int i = endLineText.indexOf("{{{"); // }}} - if (i != -1) - { - int lineStartOffset = buffer.getLineStartOffset(endLine); - if (offset < lineStartOffset + i + 3 && offset + length > lineStartOffset + i) - { - displayManager.expandFold(endLine, false); - } - } + getReadyToBreakFold(startLine); + getReadyToBreakFold(lastLine); } else { - displayManager.expandFold(endLine, false); + // The removal wll not modify + // any remaining lines. } } - // }}} if(numLines != 0) { @@ -455,4 +442,14 @@ endLine); } } //}}} + + //{{{ getReadyToBreakFold() method + // This is a fix for black hole bug. + // If you modify a part of folded lines, like {{{ (followed by }}}), + // the fold is removed so it must be expanded otherwise the text + // remains invisible. + private void getReadyToBreakFold(int line) + { + displayManager.expandFold(line, false); + } //}}} } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2008-08-27 02:32:12
|
Revision: 13436 http://jedit.svn.sourceforge.net/jedit/?rev=13436&view=rev Author: ezust Date: 2008-08-27 02:32:08 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Fixed some doc comments. Standardized some shortcuts - F3 for find-next, Ctrl-G for goto line, and Ctrl-L for focus on editpane and center caret on screen (emacs like) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/doc/FAQ/faq-problems.xml jEdit/trunk/org/gjt/sp/jedit/ActionContext.java jEdit/trunk/org/gjt/sp/jedit/IPropertyManager.java jEdit/trunk/org/gjt/sp/jedit/JEditActionContext.java jEdit/trunk/org/gjt/sp/jedit/ServiceManager.java jEdit/trunk/org/gjt/sp/jedit/View.java jEdit/trunk/org/gjt/sp/jedit/buffer/DefaultFoldHandlerProvider.java jEdit/trunk/org/gjt/sp/jedit/buffer/FoldHandlerProvider.java jEdit/trunk/org/gjt/sp/jedit/bufferset/BufferSetManager.java jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowManager.java jEdit/trunk/org/gjt/sp/jedit/gui/StatusBar.java jEdit/trunk/org/gjt/sp/jedit/jedit_keys.props jEdit/trunk/org/gjt/sp/util/IOUtilities.java jEdit/trunk/org/gjt/sp/util/StringList.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-08-27 01:12:21 UTC (rev 13435) +++ jEdit/trunk/doc/CHANGES.txt 2008-08-27 02:32:08 UTC (rev 13436) @@ -38,7 +38,7 @@ - A public field buffer in HyperSearchFileNode was removed. Use getBuffer() instead. (Kazutoshi Satoda) -- A new service, DockableWindowManagerProvier, makes it possible +- A new service, DockableWindowManagerProvider, makes it possible for plugins to offer alternate docking managers. (Shlomy Reinstein) }}} Modified: jEdit/trunk/doc/FAQ/faq-problems.xml =================================================================== --- jEdit/trunk/doc/FAQ/faq-problems.xml 2008-08-27 01:12:21 UTC (rev 13435) +++ jEdit/trunk/doc/FAQ/faq-problems.xml 2008-08-27 02:32:08 UTC (rev 13436) @@ -296,29 +296,6 @@ </answer> </qandaentry> </qandadiv> - <!--********************************************************* Mac OS --> - <qandadiv id="macos-problems"> - <title>Mac OS Problems</title> - <qandaentry> - <question id="blurry-tabs"> - <para>Why are the tabs for docked windows blurry under OS X - 10.2?</para> - </question> - <answer> - <para>In Mac OS X 10.2 Apple enabled Hardware Acceleration - for Java by default. Unfortunately it had some bugs. This is - the result of one of these bugs. The only way to avoid this - problem is to disable hardware acceleration for jEdit or - your whole system. To disable it in jEdit you will need to - edit the following file: - jEdit/jEdit.app/Contents/Resources/MRJApp.properties You - will need to add the line - <userinput>com.apple.hwaccel=false</userinput>. This is done - for you in the Mac OS X plugin.</para> - </answer> - </qandaentry> - </qandadiv> - <!--***************************************************** Unix/Linux --> <qandadiv id="unix-problems"> <title>Unix/Linux Problems</title> <qandaentry> @@ -332,8 +309,8 @@ </programlisting> </question> <answer> - <para> Make sure the version of Java you are running is 1.5 or higher. Default installations of Linux still include a gij compiler which is only 1.4 compliant. - the do not normally include a java5 jre or even jdk, so you often must install it manually. In debian/ubuntu, + <para> Make sure the version of Java you are running is Sun Java 1.5 or higher. Default installations of Linux still include a gij compiler which is only 1.4 compliant or not fully Sun compliant. + Some do not include a java5 jre or even jdk, so you may need to install it manually. In debian/ubuntu, <literal> apt-get install sun-java5-jdk </literal> </para> </answer> Modified: jEdit/trunk/org/gjt/sp/jedit/ActionContext.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/ActionContext.java 2008-08-27 01:12:21 UTC (rev 13435) +++ jEdit/trunk/org/gjt/sp/jedit/ActionContext.java 2008-08-27 02:32:08 UTC (rev 13436) @@ -58,7 +58,7 @@ /** * Returns the specified action. * @param name The action name - * @return a EditAction or null if it doesn't exists + * @return a EditAction or null if it doesn't exist * @since jEdit 4.2pre1 */ @Override Modified: jEdit/trunk/org/gjt/sp/jedit/IPropertyManager.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/IPropertyManager.java 2008-08-27 01:12:21 UTC (rev 13435) +++ jEdit/trunk/org/gjt/sp/jedit/IPropertyManager.java 2008-08-27 02:32:08 UTC (rev 13436) @@ -35,7 +35,7 @@ /** * Returns a String property * @param name the name of the property - * @return the string property or null if it doesn't exists + * @return the string property or null if it doesn't exist */ String getProperty(String name); } Modified: jEdit/trunk/org/gjt/sp/jedit/JEditActionContext.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/JEditActionContext.java 2008-08-27 01:12:21 UTC (rev 13435) +++ jEdit/trunk/org/gjt/sp/jedit/JEditActionContext.java 2008-08-27 02:32:08 UTC (rev 13436) @@ -118,7 +118,7 @@ /** * Returns the specified action. * @param name The action name - * @return a JEditAbstractEditAction or null if it doesn't exists + * @return a JEditAbstractEditAction or null if it doesn't exist * @since jEdit 4.3pre13 */ public F getAction(String name) Modified: jEdit/trunk/org/gjt/sp/jedit/ServiceManager.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/ServiceManager.java 2008-08-27 01:12:21 UTC (rev 13435) +++ jEdit/trunk/org/gjt/sp/jedit/ServiceManager.java 2008-08-27 02:32:08 UTC (rev 13436) @@ -340,7 +340,7 @@ * Returns the fold handler with the specified name, or null if * there is no registered handler with that name. * @param name The name of the desired fold handler - * @return the FoldHandler or null if it doesn't exists + * @return the FoldHandler or null if it doesn't exist * @since jEdit 4.3pre10 */ public FoldHandler getFoldHandler(String name) Modified: jEdit/trunk/org/gjt/sp/jedit/View.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/View.java 2008-08-27 01:12:21 UTC (rev 13435) +++ jEdit/trunk/org/gjt/sp/jedit/View.java 2008-08-27 02:32:08 UTC (rev 13436) @@ -1620,7 +1620,7 @@ buffer = jEdit.getBuffer(path); if (buffer == null) { - Log.log(Log.WARNING, this, "Error buffer " + path + " doesn't exists"); + Log.log(Log.WARNING, this, "Buffer " + path + " doesn't exist"); } else { Modified: jEdit/trunk/org/gjt/sp/jedit/buffer/DefaultFoldHandlerProvider.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/buffer/DefaultFoldHandlerProvider.java 2008-08-27 01:12:21 UTC (rev 13435) +++ jEdit/trunk/org/gjt/sp/jedit/buffer/DefaultFoldHandlerProvider.java 2008-08-27 02:32:08 UTC (rev 13436) @@ -37,7 +37,7 @@ * there is no registered handler with that name. * * @param name The name of the desired fold handler - * @return the FoldHandler or null if it doesn't exists + * @return the FoldHandler or null if it doesn't exist * @since jEdit 4.3pre10 */ public FoldHandler getFoldHandler(String name) Modified: jEdit/trunk/org/gjt/sp/jedit/buffer/FoldHandlerProvider.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/buffer/FoldHandlerProvider.java 2008-08-27 01:12:21 UTC (rev 13435) +++ jEdit/trunk/org/gjt/sp/jedit/buffer/FoldHandlerProvider.java 2008-08-27 02:32:08 UTC (rev 13436) @@ -33,7 +33,7 @@ * Returns the fold handler with the specified name, or null if * there is no registered handler with that name. * @param name The name of the desired fold handler - * @return the FoldHandler or null if it doesn't exists + * @return the FoldHandler or null if it doesn't exist * @since jEdit 4.3pre10 */ FoldHandler getFoldHandler(String name); Modified: jEdit/trunk/org/gjt/sp/jedit/bufferset/BufferSetManager.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/bufferset/BufferSetManager.java 2008-08-27 01:12:21 UTC (rev 13435) +++ jEdit/trunk/org/gjt/sp/jedit/bufferset/BufferSetManager.java 2008-08-27 02:32:08 UTC (rev 13436) @@ -119,7 +119,7 @@ //{{{ getViewBufferSet() methods /** * Returns a view bufferSet for the given view. - * If it doesn't exists it is created + * If it doesn't exist it is created * * @param view a view * @return the view's bufferSet @@ -138,7 +138,7 @@ //{{{ getEditPaneBufferSet() method /** * Returns a EditPane bufferSet for the given EditPane. - * If it doesn't exists it is created + * If it doesn't exist it is created * * @param editPane the editPAne * @return the EditPane's bufferSet Modified: jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowManager.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowManager.java 2008-08-27 01:12:21 UTC (rev 13435) +++ jEdit/trunk/org/gjt/sp/jedit/gui/DockableWindowManager.java 2008-08-27 02:32:08 UTC (rev 13436) @@ -292,8 +292,8 @@ * title shown when it is floating (not docked). Fires a change event that makes sure * all floating dockables change their title. * - * @param dockableName the name of the dockable, as specified in the dockables.xml - * @param newTitle the new .longtitle you want to see above it. + * @param dockable the name of the dockable, as specified in the dockables.xml + * @param title the new .longtitle you want to see above it. * @since 4.3pre5 * */ Modified: jEdit/trunk/org/gjt/sp/jedit/gui/StatusBar.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/gui/StatusBar.java 2008-08-27 01:12:21 UTC (rev 13435) +++ jEdit/trunk/org/gjt/sp/jedit/gui/StatusBar.java 2008-08-27 02:32:08 UTC (rev 13436) @@ -140,7 +140,7 @@ Widget widget = getWidget(token); if (widget == null) { - Log.log(Log.WARNING, this, "Widget " + token + " doesn't exists"); + Log.log(Log.WARNING, this, "Widget " + token + " doesn't exist"); continue; } Component c = widget.getComponent(); @@ -444,7 +444,7 @@ (StatusWidgetFactory) ServiceManager.getService("org.gjt.sp.jedit.gui.statusbar.StatusWidget", name); if (widgetFactory == null) { - Log.log(Log.ERROR, this, "Widget " + name + " doesn't exists"); + Log.log(Log.ERROR, this, "Widget " + name + " doesn't exist"); return null; } return widgetFactory.getWidget(view); Modified: jEdit/trunk/org/gjt/sp/jedit/jedit_keys.props =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jedit_keys.props 2008-08-27 01:12:21 UTC (rev 13435) +++ jEdit/trunk/org/gjt/sp/jedit/jedit_keys.props 2008-08-27 02:32:08 UTC (rev 13436) @@ -19,12 +19,12 @@ delete-line.shortcut=C+d # C+e is a prefix find.shortcut=C+f -find-next.shortcut=C+g +find-next.shortcut=F3 # C+h is not usable on MacOS X indent-lines.shortcut=C+i join-lines.shortcut=C+j swap-marker.shortcut=C+k -goto-line.shortcut=C+l +goto-line.shortcut=C+g # C+m is a prefix new-file.shortcut=C+n open-file.shortcut=C+o @@ -92,6 +92,7 @@ select-line-range.shortcut=C+e C+l add-marker.shortcut=C+e C+m center-caret.shortcut=C+e C+n +scroll-and-center=C+l open-path.shortcut=C+e C+o vertical-paste.shortcut=C+e C+p replace-in-selection.shortcut=C+e C+r Modified: jEdit/trunk/org/gjt/sp/util/IOUtilities.java =================================================================== --- jEdit/trunk/org/gjt/sp/util/IOUtilities.java 2008-08-27 01:12:21 UTC (rev 13435) +++ jEdit/trunk/org/gjt/sp/util/IOUtilities.java 2008-08-27 02:32:08 UTC (rev 13436) @@ -132,7 +132,7 @@ * Returns the length of a file. If it is a directory it will calculate recursively the length. * * @param file the file or directory - * @return the length of the file or directory. If the file doesn't exists it will return 0 + * @return the length of the file or directory. If the file doesn't exist it will return 0 * @since 4.3pre10 */ public static long fileLength(File file) Modified: jEdit/trunk/org/gjt/sp/util/StringList.java =================================================================== --- jEdit/trunk/org/gjt/sp/util/StringList.java 2008-08-27 01:12:21 UTC (rev 13435) +++ jEdit/trunk/org/gjt/sp/util/StringList.java 2008-08-27 02:32:08 UTC (rev 13436) @@ -28,7 +28,7 @@ // {{{ StringList class /** - * A List<String> with some perl-like convenience functions (split/join primarily), + * A List<String> with some perl-like convenience functions (split/join primarily), * and easy conversion to/from arrays. * @since jEdit 4.3pre7 */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2008-08-27 03:03:14
|
Revision: 13437 http://jedit.svn.sourceforge.net/jedit/?rev=13437&view=rev Author: ezust Date: 2008-08-27 03:03:09 +0000 (Wed, 27 Aug 2008) Log Message: ----------- - New option in saving/backup: Suppress "file not saved" warning on Untitled buffers. Related to that, "file not saved" warning is no longer shown for buffers (untitled or not) with length=0. -- (request # 2068307 - Alan Ezust ) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/gui/CloseDialog.java jEdit/trunk/org/gjt/sp/jedit/jEdit.java jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props jEdit/trunk/org/gjt/sp/jedit/options/SaveBackupOptionPane.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-08-27 02:32:08 UTC (rev 13436) +++ jEdit/trunk/doc/CHANGES.txt 2008-08-27 03:03:09 UTC (rev 13437) @@ -24,6 +24,12 @@ - Enabled reverse regex search. (SF.net patch #1923613 - Greg Merrill) NOTE: There is a known problem with "$". (SF.net bug #2069249) +- New option in saving/backup: Suppress "file not saved" warning + on Untitled buffers. Related to that, "file not saved" warning + is no longer shown for buffers (untitled or not) with length=0. + -- (request # 2068307 - Alan Ezust ) + + }}} {{{ Docker Plugin features merged into jEdit Core Modified: jEdit/trunk/org/gjt/sp/jedit/gui/CloseDialog.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/gui/CloseDialog.java 2008-08-27 02:32:08 UTC (rev 13436) +++ jEdit/trunk/org/gjt/sp/jedit/gui/CloseDialog.java 2008-08-27 03:03:09 UTC (rev 13437) @@ -64,11 +64,14 @@ Buffer[] buffers = jEdit.getBuffers(); for(int i = 0; i < buffers.length; i++) { + Buffer buffer = buffers[i]; - if(buffer.isDirty()) - { - bufferModel.addElement(buffer.getPath()); - } + boolean addBuffer = buffer.isDirty(); + if (buffer.getLength() == 0) addBuffer = false; + if (buffer.isNewFile() && jEdit.getBooleanProperty("suppressNotSavedConfirmUntitled")) + addBuffer=false; + if(addBuffer) + bufferModel.addElement(buffer.getPath()); } centerPanel.add(BorderLayout.CENTER,new JScrollPane(bufferList)); Modified: jEdit/trunk/org/gjt/sp/jedit/jEdit.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2008-08-27 02:32:08 UTC (rev 13436) +++ jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2008-08-27 03:03:09 UTC (rev 13437) @@ -1698,7 +1698,13 @@ return false; } - if(buffer.isDirty()) + boolean showNotSaved = buffer.isDirty(); + if (buffer.getLength() == 0) showNotSaved = false; + if (buffer.isNewFile() && + jEdit.getBooleanProperty("suppressNotSavedConfirmUntitled")) + showNotSaved = false; + + if(showNotSaved) { Object[] args = { buffer.getName() }; int result = GUIUtilities.confirm(view,"notsaved",args, Modified: jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2008-08-27 02:32:08 UTC (rev 13436) +++ jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2008-08-27 03:03:09 UTC (rev 13437) @@ -1935,6 +1935,7 @@ options.save-back.twoStageSave=Two-stage save (safer but resets file owner on Unix) options.save-back.confirmSaveAll="Save All Buffers" asks for confirmation options.save-back.autosaveUntitled=Autosave untitled buffers +options.save-back.suppressNotSavedConfirmUntitled=Suppress "not saved" confirm dialog for Untitled buffers #}}} #{{{ Shortcuts pane Modified: jEdit/trunk/org/gjt/sp/jedit/options/SaveBackupOptionPane.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/options/SaveBackupOptionPane.java 2008-08-27 02:32:08 UTC (rev 13436) +++ jEdit/trunk/org/gjt/sp/jedit/options/SaveBackupOptionPane.java 2008-08-27 03:03:09 UTC (rev 13437) @@ -70,10 +70,15 @@ /* Autosave untitled buffers */ autosaveUntitled = new JCheckBox(jEdit.getProperty( "options.save-back.autosaveUntitled")); + suppressNotSavedConfirmUntitled = new JCheckBox(jEdit.getProperty( + "options.save-back.suppressNotSavedConfirmUntitled")); + suppressNotSavedConfirmUntitled.setSelected( + jEdit.getBooleanProperty("suppressNotSavedConfirmUntitled")); + autosaveUntitled.setSelected(jEdit.getBooleanProperty("autosaveUntitled")); addComponent(autosaveUntitled); + addComponent(suppressNotSavedConfirmUntitled); - /* Backup count */ backups = new NumericTextField(jEdit.getProperty("backups"), true); addComponent(jEdit.getProperty("options.save-back.backups"),backups); @@ -122,7 +127,8 @@ boolean newAutosave = autosaveUntitled.isSelected(); boolean oldAutosave = jEdit.getBooleanProperty("autosaveUntitled"); jEdit.setBooleanProperty("autosaveUntitled", newAutosave); - + jEdit.setBooleanProperty("suppressNotSavedConfirmUntitled", + suppressNotSavedConfirmUntitled.isSelected() ); if ((!newAutosave || jEdit.getIntegerProperty("autosave",0) == 0) && oldAutosave) { Buffer[] buffers = jEdit.getBuffers(); @@ -141,6 +147,7 @@ private JCheckBox confirmSaveAll; private JTextField autosave; private JCheckBox autosaveUntitled; + private JCheckBox suppressNotSavedConfirmUntitled; private JTextField backups; private JTextField backupDirectory; private JTextField backupPrefix; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2008-09-03 06:16:10
|
Revision: 13508 http://jedit.svn.sourceforge.net/jedit/?rev=13508&view=rev Author: ezust Date: 2008-09-03 06:16:06 +0000 (Wed, 03 Sep 2008) Log Message: ----------- - New option in saving/backup: Calculate MD5 hash to see if the file as loaded from disk is the same as what is in the buffer. Request # 2077326 Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/Buffer.java jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props jEdit/trunk/org/gjt/sp/jedit/options/SaveBackupOptionPane.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-09-03 04:59:58 UTC (rev 13507) +++ jEdit/trunk/doc/CHANGES.txt 2008-09-03 06:16:06 UTC (rev 13508) @@ -27,9 +27,12 @@ - New option in saving/backup: Suppress "file not saved" warning on Untitled buffers. Related to that, "file not saved" warning is no longer shown for buffers (untitled or not) with length=0. - -- (request # 2068307 - Alan Ezust ) + -- (request # 2068307 - Alan Ezust) + +- New option in saving/backup: Calculate MD5 hash to see if the + file as loaded from disk is the same as what is in the buffer. + -- (Request # 2077326 - Alan Ezust) - }}} {{{ Docker Plugin features merged into jEdit Core Modified: jEdit/trunk/org/gjt/sp/jedit/Buffer.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/Buffer.java 2008-09-03 04:59:58 UTC (rev 13507) +++ jEdit/trunk/org/gjt/sp/jedit/Buffer.java 2008-09-03 06:16:06 UTC (rev 13508) @@ -49,6 +49,9 @@ import java.io.File; import java.io.IOException; import java.net.Socket; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Arrays; import java.util.Enumeration; import java.util.Hashtable; import java.util.Vector; @@ -854,6 +857,9 @@ jEdit.getBooleanProperty("suppressNotSavedConfirmUntitled")) d = false; } + else if (d && jEdit.getBooleanProperty("useMD5forDirtyCalculation")) { + d = !Arrays.equals(calculateHash(), md5hash); + } super.setDirty(d); boolean editable = isEditable(); @@ -1686,6 +1692,7 @@ private File file; private File autosaveFile; private long modTime; + private byte[] md5hash; private final Vector<Marker> markers; @@ -1870,9 +1877,23 @@ return true; } //}}} + /** @returns an MD5 hash of the contents of the buffer */ + private byte[] calculateHash() { + try { + MessageDigest digest = java.security.MessageDigest.getInstance("MD5"); + digest.update(getText(0, getLength()).getBytes()); + return digest.digest(); + } + catch (NoSuchAlgorithmException nsae) { + Log.log(Log.ERROR, this, "Can't Calculate MD5 hash!", nsae); + } + } + + //{{{ finishLoading() method private void finishLoading() { + md5hash = calculateHash(); parseBufferLocalProperties(); // AHA! // this is probably the only way to fix this Modified: jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2008-09-03 04:59:58 UTC (rev 13507) +++ jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2008-09-03 06:16:06 UTC (rev 13508) @@ -1938,6 +1938,7 @@ options.save-back.confirmSaveAll="Save All Buffers" asks for confirmation options.save-back.autosaveUntitled=Autosave untitled buffers options.save-back.suppressNotSavedConfirmUntitled=Don't show "file not saved" dialog when closing Untitled buffers +options.save-back.useMD5forDirtyCalculation=Use MD5 hash calculations to check if isDirty() #}}} #{{{ Shortcuts pane Modified: jEdit/trunk/org/gjt/sp/jedit/options/SaveBackupOptionPane.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/options/SaveBackupOptionPane.java 2008-09-03 04:59:58 UTC (rev 13507) +++ jEdit/trunk/org/gjt/sp/jedit/options/SaveBackupOptionPane.java 2008-09-03 06:16:06 UTC (rev 13508) @@ -70,14 +70,23 @@ /* Autosave untitled buffers */ autosaveUntitled = new JCheckBox(jEdit.getProperty( "options.save-back.autosaveUntitled")); + autosaveUntitled.setSelected(jEdit.getBooleanProperty("autosaveUntitled")); + addComponent(autosaveUntitled); + suppressNotSavedConfirmUntitled = new JCheckBox(jEdit.getProperty( "options.save-back.suppressNotSavedConfirmUntitled")); suppressNotSavedConfirmUntitled.setSelected( jEdit.getBooleanProperty("suppressNotSavedConfirmUntitled")); - - autosaveUntitled.setSelected(jEdit.getBooleanProperty("autosaveUntitled")); - addComponent(autosaveUntitled); addComponent(suppressNotSavedConfirmUntitled); + + useMD5forDirtyCalculation = new JCheckBox(jEdit.getProperty( + "options.save-back.useMD5forDirtyCalculation")); + useMD5forDirtyCalculation.setSelected( + jEdit.getBooleanProperty("useMD5forDirtyCalculation")); + addComponent(useMD5forDirtyCalculation); + + + /* Backup count */ backups = new NumericTextField(jEdit.getProperty("backups"), true); @@ -128,7 +137,9 @@ boolean oldAutosave = jEdit.getBooleanProperty("autosaveUntitled"); jEdit.setBooleanProperty("autosaveUntitled", newAutosave); jEdit.setBooleanProperty("suppressNotSavedConfirmUntitled", - suppressNotSavedConfirmUntitled.isSelected() ); + suppressNotSavedConfirmUntitled.isSelected()); + jEdit.setBooleanProperty("useMD5forDirtyCalculation", + useMD5forDirtyCalculation.isSelected()); if ((!newAutosave || jEdit.getIntegerProperty("autosave",0) == 0) && oldAutosave) { Buffer[] buffers = jEdit.getBuffers(); @@ -148,6 +159,7 @@ private JTextField autosave; private JCheckBox autosaveUntitled; private JCheckBox suppressNotSavedConfirmUntitled; + private JCheckBox useMD5forDirtyCalculation; private JTextField backups; private JTextField backupDirectory; private JTextField backupPrefix; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <k_s...@us...> - 2008-09-03 18:20:04
|
Revision: 13512 http://jedit.svn.sourceforge.net/jedit/?rev=13512&view=rev Author: k_satoda Date: 2008-09-03 18:19:56 +0000 (Wed, 03 Sep 2008) Log Message: ----------- Added a new action new-file-in-mode to give an ability like "New X" in some IDEs. (SF.net patch #1829669) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/actions.xml jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props jEdit/trunk/org/gjt/sp/jedit/jedit_keys.props Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-09-03 17:31:06 UTC (rev 13511) +++ jEdit/trunk/doc/CHANGES.txt 2008-09-03 18:19:56 UTC (rev 13512) @@ -3,7 +3,8 @@ {{{ Version 4.3pre16 Thanks to Bj\xF6rn "Vampire" Kautler, Kazutoshi Satoda, Alan Ezust, -Shlomy Reinstein, and Greg Merrill for contributing to this release. +Shlomy Reinstein, Greg Merrill, and Eric Berry for contributing to this +release. {{{ Bug Fixes @@ -18,6 +19,7 @@ }}} {{{ Miscellaneous + - Moved buffer list sorting options from General to View Option Pane with other bufferset options. (Alan Ezust) @@ -33,8 +35,11 @@ file as loaded from disk is the same as what is in the buffer. -- (Request # 2077326 - Alan Ezust) +- New action new-file-in-mode, which opens a dialog listing the + available modes, the user can select one and a new file is created + under that mode. (SF.net patch #1829669 - Eric Berry) + }}} - {{{ Docker Plugin features merged into jEdit Core - New actions: View - Docking - Load|Save docking layout (of current mode) You can save named dockable layouts, analogous to Eclipse perspectives, Modified: jEdit/trunk/org/gjt/sp/jedit/actions.xml =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/actions.xml 2008-09-03 17:31:06 UTC (rev 13511) +++ jEdit/trunk/org/gjt/sp/jedit/actions.xml 2008-09-03 18:19:56 UTC (rev 13512) @@ -565,6 +565,28 @@ </CODE> </ACTION> +<ACTION NAME="new-file-in-mode"> + <CODE> + Mode[] modes = jEdit.getModes(); + Mode currentMode = buffer.getMode(); + String dialogTitle = jEdit.getProperty("new-file-in-mode.dialog.title"); + String dialogMessage = jEdit.getProperty("new-file-in-mode.dialog.message"); + Mode choice = (Mode)JOptionPane.showInputDialog( + view, + dialogMessage, + dialogTitle, + JOptionPane.QUESTION_MESSAGE, + null, + modes, + currentMode); + if(choice != null) { + Buffer newBuffer = jEdit.newFile(view); + view.goToBuffer(newBuffer); + newBuffer.setMode(choice); + } + </CODE> +</ACTION> + <ACTION NAME="new-view"> <CODE> jEdit.newView(view); Modified: jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2008-09-03 17:31:06 UTC (rev 13511) +++ jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2008-09-03 18:19:56 UTC (rev 13512) @@ -188,6 +188,7 @@ #{{{ File menu file=new-file \ + new-file-in-mode \ open-file \ %recent-files \ - \ @@ -211,6 +212,10 @@ file.label=$File new-file.label=$New new-file.icon.small=16x16/actions/document-new.png +new-file-in-mode.label=New In $Mode +new-file-in-mode.icon.small=16x16/actions/document-new.png +new-file-in-mode.dialog.title=New File +new-file-in-mode.dialog.message=With Edit Mode: open-file.label=$Open... open-file.icon.small=16x16/actions/document-open.png reload.label=$Reload @@ -952,7 +957,7 @@ Ben Williams\n\ Bertalan Fodor\n\ Bill McMilleon\n\ - Bj\xF6rn "Vampire" Kautler\n\ + Bjrn "Vampire" Kautler\n\ Brad Mace\n\ Brant Langer Gurganus\n\ Brett Smith\n\ Modified: jEdit/trunk/org/gjt/sp/jedit/jedit_keys.props =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jedit_keys.props 2008-09-03 17:31:06 UTC (rev 13511) +++ jEdit/trunk/org/gjt/sp/jedit/jedit_keys.props 2008-09-03 18:19:56 UTC (rev 13512) @@ -27,6 +27,7 @@ goto-line.shortcut=C+g # C+m is a prefix new-file.shortcut=C+n +new-file-in-mode.shortcut=CS+n open-file.shortcut=C+o print.shortcut=C+p exit.shortcut=C+q This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <k_s...@us...> - 2008-09-06 07:48:32
|
Revision: 13533 http://jedit.svn.sourceforge.net/jedit/?rev=13533&view=rev Author: k_satoda Date: 2008-09-06 07:48:29 +0000 (Sat, 06 Sep 2008) Log Message: ----------- Removed FastRepaintManager because the effect seemed to be not noticeable and not stable over runtime environments, while it broke Background plugin (SF.net Plugin Bugs #1620694) and consumed much memory. Some performance measures were reported in this thread on jedit-devel. "[ jEdit-devel ] Disabling FastRepaintManager" http://www.nabble.com/Disabling-FastRepaintManager-to19210597.html Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/textarea/BufferHandler.java jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java jEdit/trunk/org/gjt/sp/jedit/textarea/TextAreaPainter.java Removed Paths: ------------- jEdit/trunk/org/gjt/sp/jedit/textarea/FastRepaintManager.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-09-05 08:22:04 UTC (rev 13532) +++ jEdit/trunk/doc/CHANGES.txt 2008-09-06 07:48:29 UTC (rev 13533) @@ -39,6 +39,12 @@ available modes, the user can select one and a new file is created under that mode. (SF.net patch #1829669 - Eric Berry) +- Removed own back buffers for textarea, which were meant to speed up + painting textare, because the effect seemed to be not noticeable and + not stable over runtime environments, while it broke Background plugin + (SF.net Plugin Bugs #1620694) and consumed much memory. + (Kazutoshi Satoda) + }}} {{{ Docker Plugin features merged into jEdit Core - New actions: View - Docking - Load|Save docking layout (of current mode) Modified: jEdit/trunk/org/gjt/sp/jedit/textarea/BufferHandler.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/BufferHandler.java 2008-09-05 08:22:04 UTC (rev 13532) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/BufferHandler.java 2008-09-06 07:48:29 UTC (rev 13533) @@ -424,7 +424,6 @@ private void delayUpdate(int startLine, int endLine) { textArea.chunkCache.invalidateChunksFromPhys(startLine); - textArea.repaintMgr.setFastScroll(false); if(!delayedUpdate) { Deleted: jEdit/trunk/org/gjt/sp/jedit/textarea/FastRepaintManager.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/FastRepaintManager.java 2008-09-05 08:22:04 UTC (rev 13532) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/FastRepaintManager.java 2008-09-06 07:48:29 UTC (rev 13533) @@ -1,163 +0,0 @@ -/* - * FastRepaintManager.java - * :tabSize=8:indentSize=8:noTabs=false: - * :folding=explicit:collapseFolds=1: - * - * Copyright (C) 2005 Slava Pestov - * - * 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 org.gjt.sp.jedit.textarea; - -//{{{ Imports -import java.awt.*; -//}}} - -/** - * Manages blitting the offscreen graphics context to speed up scrolling. - * The text area does not use Swing's built-in double buffering, so that - * we have access to the graphics context for fast scrolling. - * @author Slava Pestov - * @version $Id$ - */ -class FastRepaintManager -{ - //{{{ FastRepaintManager constructor - FastRepaintManager(TextArea textArea, - TextAreaPainter painter) - { - this.textArea = textArea; - this.painter = painter; - } //}}} - - //{{{ updateGraphics() method - /** - * Prepare the graphics environment. - * This is only called by the TextAreaPainter when it is resized - */ - void updateGraphics() - { - if(gfx != null) - gfx.dispose(); - - int width = painter.getWidth(); - int height = painter.getHeight(); - /* A little hack */ - if(width <= 0) - width = 1; - if(height <= 0) - height = 1; - img = painter.getGraphicsConfiguration() - .createCompatibleImage(width,height, - Transparency.OPAQUE); - gfx = (Graphics2D)img.getGraphics(); - gfx.clipRect(0,0,painter.getWidth(),painter.getHeight()); - fastScroll = false; - } //}}} - - //{{{ getGraphics() method - Graphics2D getGraphics() - { - return gfx; - } //}}} - - //{{{ RepaintLines class - static class RepaintLines - { - final int first; - final int last; - - RepaintLines(int first, int last) - { - this.first = first; - this.last = last; - } - - @Override - public String toString() - { - return "RepaintLines[" + first + ',' + last + ']'; - } - } //}}} - - //{{{ prepareGraphics() method - RepaintLines prepareGraphics(Rectangle clipRect, int firstLine, - Graphics2D gfx) - { - gfx.setFont(painter.getFont()); - gfx.setColor(painter.getBackground()); - - int lineHeight = gfx.getFontMetrics().getHeight(); - - if(fastScroll) - { - int lineDelta = this.firstLine - firstLine; - int visibleLines = textArea.getVisibleLines(); - - if(lineDelta > -visibleLines - && lineDelta < visibleLines) - { - int yDelta = lineDelta * lineHeight; - if(lineDelta < 0) - { - gfx.copyArea(0,-yDelta,painter.getWidth(), - painter.getHeight() + yDelta,0,yDelta); - return new RepaintLines( - visibleLines + this.firstLine - - firstLine - 1, - visibleLines - 1); - } - else if(lineDelta > 0) - { - gfx.copyArea(0,0,painter.getWidth(), - painter.getHeight() - yDelta,0,yDelta); - return new RepaintLines(0, - this.firstLine - firstLine); - } - } - } - - // Because the clipRect's height is usually an even multiple - // of the font height, we subtract 1 from it, otherwise one - // too many lines will always be painted. - return new RepaintLines( - clipRect.y / lineHeight, - (clipRect.y + clipRect.height - 1) / lineHeight); - } //}}} - - //{{{ paint() method - void paint(Graphics g) - { - firstLine = textArea.getFirstLine(); - g.drawImage(img,0,0,null); - } //}}} - - //{{{ setFastScroll() method - void setFastScroll(boolean fastScroll) - { - this.fastScroll = fastScroll; - } //}}} - - //{{{ Private members - private final TextArea textArea; - private final TextAreaPainter painter; - private Graphics2D gfx; - private Image img; - private boolean fastScroll; - /* Most recently rendered first line */ - private int firstLine; - //}}} -} Modified: jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java 2008-09-05 08:22:04 UTC (rev 13532) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java 2008-09-06 07:48:29 UTC (rev 13533) @@ -268,7 +268,6 @@ selectionManager = new SelectionManager(this); chunkCache = new ChunkCache(this); painter = new TextAreaPainter(this); - repaintMgr = new FastRepaintManager(this,painter); gutter = new Gutter(this); gutter.setMouseActionsProvider(new MouseActions(propertyManager, "gutter")); listenerList = new EventListenerList(); @@ -544,7 +543,6 @@ this.buffer.beginCompoundEdit(); chunkCache.setBuffer(buffer); - repaintMgr.setFastScroll(false); propertiesChanged(); if(displayManager != null) @@ -4795,7 +4793,6 @@ displayManager.notifyScreenLineChanges(); } - repaintMgr.setFastScroll(false); chunkCache.invalidateAll(); gutter.repaint(); painter.repaint(); @@ -4860,7 +4857,6 @@ final Segment lineSegment = new Segment(); MouseInputAdapter mouseHandler; final ChunkCache chunkCache; - final FastRepaintManager repaintMgr; DisplayManager displayManager; final SelectionManager selectionManager; /** @@ -4974,7 +4970,6 @@ //{{{ foldStructureChanged() method void foldStructureChanged() { - repaintMgr.setFastScroll(false); chunkCache.invalidateAll(); recalculateLastPhysicalLine(); repaint(); @@ -5225,8 +5220,6 @@ if(!buffer.isTransactionInProgress()) _finishCaretUpdate(); /* otherwise DisplayManager.BufferChangeHandler calls */ - - repaintMgr.setFastScroll(false); } //}}} //{{{ fireCaretEvent() method Modified: jEdit/trunk/org/gjt/sp/jedit/textarea/TextAreaPainter.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/TextAreaPainter.java 2008-09-05 08:22:04 UTC (rev 13532) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/TextAreaPainter.java 2008-09-06 07:48:29 UTC (rev 13533) @@ -169,8 +169,6 @@ textArea.propertiesChanged(); textArea.updateMaxHorizontalScrollWidth(); textArea.scrollBarsInitialized = true; - - textArea.repaintMgr.updateGraphics(); } //}}} //{{{ getFocusTraversalKeysEnabled() method @@ -740,7 +738,7 @@ gfx.setColor(getBackground()); gfx.fillRect(clipRect.x,clipRect.y,clipRect.width,clipRect.height); } - else if(Debug.DISABLE_FASTREPAINTMANAGER) + else { long prepareTime = System.nanoTime(); // Because the clipRect's height is usually an even multiple @@ -763,36 +761,7 @@ if(Debug.PAINT_TIMER && numLines >= 1) Log.log(Log.DEBUG,this,"repainting " + numLines + " lines took " + prepareTime + "/" + linesTime + " ns"); } - else - { - Graphics2D backBuffer = textArea.repaintMgr.getGraphics(); - long prepareTime = System.nanoTime(); - FastRepaintManager.RepaintLines lines - = textArea.repaintMgr.prepareGraphics(clipRect, - textArea.getFirstLine(),backBuffer); - prepareTime = (System.nanoTime() - prepareTime); - - long linesTime = System.nanoTime(); - int numLines = (lines.last - lines.first + 1); - int y = lines.first * lineHeight; - backBuffer.fillRect(0,y,getWidth(),numLines * lineHeight); - extensionMgr.paintScreenLineRange(textArea,backBuffer, - lines.first,lines.last,y,lineHeight); - linesTime = (System.nanoTime() - linesTime); - - textArea.repaintMgr.setFastScroll( - clipRect.equals(new Rectangle(0,0, - getWidth(),getHeight()))); - - long blitTime = System.nanoTime(); - textArea.repaintMgr.paint(gfx); - blitTime = (System.nanoTime() - blitTime); - - if(Debug.PAINT_TIMER && numLines >= 1) - Log.log(Log.DEBUG,this,"repainting " + numLines + " lines took " + prepareTime + "/" + linesTime + "/" + blitTime + " ns"); - } - textArea.updateMaxHorizontalScrollWidth(); } //}}} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <k_s...@us...> - 2008-09-06 13:17:45
|
Revision: 13537 http://jedit.svn.sourceforge.net/jedit/?rev=13537&view=rev Author: k_satoda Date: 2008-09-06 13:17:40 +0000 (Sat, 06 Sep 2008) Log Message: ----------- Replaced createGlyphVector() to layoutGlyphVector() to improve rendering of complex text layout in TextArea. (SF.net bug #981012) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/syntax/Chunk.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-09-06 11:11:16 UTC (rev 13536) +++ jEdit/trunk/doc/CHANGES.txt 2008-09-06 13:17:40 UTC (rev 13537) @@ -45,6 +45,9 @@ (SF.net Plugin Bugs #1620694) and consumed much memory. (Kazutoshi Satoda) +- Improved rendering of complex text layout (like Indic text) in text + area. (SF.net bug #981012 - Kazutoshi Satoda) + }}} {{{ Docker Plugin features merged into jEdit Core - New actions: View - Docking - Load|Save docking layout (of current mode) Modified: jEdit/trunk/org/gjt/sp/jedit/syntax/Chunk.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/syntax/Chunk.java 2008-09-06 11:11:16 UTC (rev 13536) +++ jEdit/trunk/org/gjt/sp/jedit/syntax/Chunk.java 2008-09-06 13:17:40 UTC (rev 13537) @@ -308,8 +308,15 @@ str = new String(seg.array,seg.offset + offset,length); - gv = style.getFont().createGlyphVector( - fontRenderContext, str); + int textStart = seg.offset + offset; + int textLimit = textStart + length; + // FIXME: Need BiDi support. + int layoutFlags = Font.LAYOUT_LEFT_TO_RIGHT + | Font.LAYOUT_NO_START_CONTEXT + | Font.LAYOUT_NO_LIMIT_CONTEXT; + gv = style.getFont().layoutGlyphVector( + fontRenderContext, + seg.array, textStart, textLimit, layoutFlags); Rectangle2D logicalBounds = gv.getLogicalBounds(); width = (float)logicalBounds.getWidth(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2008-09-06 23:08:27
|
Revision: 13550 http://jedit.svn.sourceforge.net/jedit/?rev=13550&view=rev Author: kpouer Date: 2008-09-06 23:08:22 +0000 (Sat, 06 Sep 2008) Log Message: ----------- fixed escape char in shellscript (bug and patch 2080891) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/modes/shellscript.xml Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-09-06 23:01:17 UTC (rev 13549) +++ jEdit/trunk/doc/CHANGES.txt 2008-09-06 23:08:22 UTC (rev 13550) @@ -3,20 +3,21 @@ {{{ Version 4.3pre16 Thanks to Bj\xF6rn "Vampire" Kautler, Kazutoshi Satoda, Alan Ezust, -Shlomy Reinstein, Greg Merrill, and Eric Berry for contributing to this -release. +Shlomy Reinstein, Greg Merrill, Kevin Hunter, and Eric Berry for contributing to +this release. {{{ Bug Fixes - Closed buffers were often kept in memory. (Kazutoshi Satoda) - Error "Invalid screen line count" was shown when scrolling in a - compound edit. (SF.net patch #1990960 - Kazutoshi Satoda) + compound edit. (SF.net patch #1990960 - Kazutoshi Satoda) - Folded lines sometimes became invisible after breaking the fold structure; like explicit fold markers, or indents. (SF.net patch #1999448 - Kazutoshi Satoda) +- Fixed char escape in shellscript (#2080891) (Kevin Hunter) }}} {{{ Miscellaneous @@ -28,10 +29,10 @@ - New option in saving/backup: Suppress "file not saved" warning on Untitled buffers. Related to that, "file not saved" warning - is no longer shown for buffers (untitled or not) with length=0. + is no longer shown for buffers (untitled or not) with length=0. -- (request # 2068307 - Alan Ezust) - -- New option in saving/backup: Calculate MD5 hash to see if the + +- New option in saving/backup: Calculate MD5 hash to see if the file as loaded from disk is the same as what is in the buffer. -- (Request # 2077326 - Alan Ezust) @@ -53,7 +54,7 @@ - New actions: View - Docking - Load|Save docking layout (of current mode) You can save named dockable layouts, analogous to Eclipse perspectives, on a global or per-mode basis. (Shlomy Reinstein) - + - New action: View - Docking - Toggle Docked Areas. (Alan Ezust) }}} {{{ API Changes @@ -63,7 +64,7 @@ - A new service, DockableWindowManagerProvider, makes it possible for plugins to offer alternate docking managers. (Shlomy Reinstein) - + }}} }}} Modified: jEdit/trunk/modes/shellscript.xml =================================================================== --- jEdit/trunk/modes/shellscript.xml 2008-09-06 23:01:17 UTC (rev 13549) +++ jEdit/trunk/modes/shellscript.xml 2008-09-06 23:08:22 UTC (rev 13550) @@ -8,7 +8,7 @@ <PROPERTY NAME="indentOpenBrackets" VALUE="{" /> <PROPERTY NAME="indentCloseBrackets" VALUE="}" /> </PROPS> - <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE"> + <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE" ESCAPE="\"> <!-- Comments --> <EOL_SPAN TYPE="COMMENT2">#!</EOL_SPAN> <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2008-09-09 08:38:47
|
Revision: 13629 http://jedit.svn.sourceforge.net/jedit/?rev=13629&view=rev Author: kpouer Date: 2008-09-09 08:26:44 +0000 (Tue, 09 Sep 2008) Log Message: ----------- When closing a view or an EditPane, the dirty buffers of it's bufferSet are now added to the previous EditPane (2091052) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/bufferset/BufferSetManager.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-09-09 02:15:51 UTC (rev 13628) +++ jEdit/trunk/doc/CHANGES.txt 2008-09-09 08:26:44 UTC (rev 13629) @@ -2,9 +2,9 @@ {{{ Version 4.3pre16 -Thanks to Bj\xF6rn "Vampire" Kautler, Kazutoshi Satoda, Alan Ezust, -Shlomy Reinstein, Greg Merrill, Kevin Hunter, and Eric Berry for contributing to -this release. +Thanks to Bj\xF6rn "Vampire" Kautler, Kazutoshi Satoda, Matthieu Casanova, +Alan Ezust, Shlomy Reinstein, Greg Merrill, Kevin Hunter, and Eric Berry for +contributing to this release. {{{ Bug Fixes @@ -18,6 +18,9 @@ (SF.net patch #1999448 - Kazutoshi Satoda) - Fixed char escape in shellscript (#2080891) (Kevin Hunter) + +- When closing a view or an EditPane, the dirty buffers of it's bufferSet are + now added to the previous EditPane (#2091052) (Matthieu Casanova) }}} {{{ Miscellaneous Modified: jEdit/trunk/org/gjt/sp/jedit/bufferset/BufferSetManager.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/bufferset/BufferSetManager.java 2008-09-09 02:15:51 UTC (rev 13628) +++ jEdit/trunk/org/gjt/sp/jedit/bufferset/BufferSetManager.java 2008-09-09 08:26:44 UTC (rev 13629) @@ -85,7 +85,7 @@ BufferSet viewBufferSet = viewBufferSetMap.remove(view); if (viewBufferSet != null) { - viewBufferSet.getAllBuffers(new BufferSetClosed(viewBufferSet)); + viewBufferSet.getAllBuffers(new BufferSetClosed(view, viewBufferSet)); } } } @@ -99,7 +99,7 @@ BufferSet editPaneBufferSet = editPaneBufferSetMap.remove(editPane); if (editPaneBufferSet != null) { - editPaneBufferSet.getAllBuffers(new BufferSetClosed(editPaneBufferSet)); + editPaneBufferSet.getAllBuffers(new BufferSetClosed(editPane, editPaneBufferSet)); } } } @@ -160,7 +160,7 @@ * Merge the content of the source bufferSet into the target bufferSet * @param target the target bufferSet * @param source the source bufferSet - * @see org.gjt.sp.jedit.EditPane#setBuffer(org.gjt.sp.jedit.Buffer) + * @see org.gjt.sp.jedit.EditPane#setBuffer(org.gjt.sp.jedit.Buffer) */ public void mergeBufferSet(BufferSet target, BufferSet source) { @@ -176,7 +176,7 @@ * Count the bufferSets in which the buffer is. * @param buffer the buffer * @return the number of buffersets in which buffer is - * @see org.gjt.sp.jedit.jEdit#closeBuffer(org.gjt.sp.jedit.EditPane, org.gjt.sp.jedit.Buffer) + * @see org.gjt.sp.jedit.jEdit#closeBuffer(org.gjt.sp.jedit.EditPane, org.gjt.sp.jedit.Buffer) */ public int countBufferSets(Buffer buffer) { @@ -405,13 +405,77 @@ //{{{ BufferSetClosed class private class BufferSetClosed extends BufferSetAdapter { + /** The closed bufferSet. */ private BufferSet closedBufferSet; - private BufferSetClosed(BufferSet closedBufferSet) + /** + * The closed view. + * If there is a closed view, there is no closed edit pane + */ + private View closedView; + + /** + * The closed EditPane. + * If there is a closed edit pane, there is no closed view + */ + private EditPane closedEditPane; + + /** The previous editPane where to put dirty buffers if necessary. */ + private EditPane prevEditPane; + + //{{{ BufferSetClosed constructors + private BufferSetClosed(View closedView, + BufferSet closedBufferSet) { + this.closedView = closedView; this.closedBufferSet = closedBufferSet; + init(); } + private BufferSetClosed(EditPane closedEditPane, + BufferSet closedBufferSet) + { + this.closedEditPane = closedEditPane; + this.closedBufferSet = closedBufferSet; + init(); + } //}}} + + + //{{{ init() method + private void init() + { + if (closedView != null) + { + View prev = closedView.getPrev(); + if (prev != null) + { + prevEditPane = prev.getEditPane(); + } + } + else + { + View view = closedEditPane.getView(); + EditPane[] editPanes = view.getEditPanes(); + for (EditPane editPane : editPanes) + { + if (editPane != closedEditPane) + { + prevEditPane = editPane; + break; + } + } + if (prevEditPane == null) + { + View prev = view.getPrev(); + if (prev != null) + { + prevEditPane = prev.getEditPane(); + } + } + } + } //}}} + + //{{{ bufferAdded() method @Override public void bufferAdded(Buffer buffer, int index) { @@ -422,19 +486,31 @@ // the buffer do not belong to any other BufferSet if (buffer.isDirty()) { - EditPane editPane = jEdit.getActiveView().getEditPane(); - Log.log(Log.MESSAGE, this, "The buffer " + buffer + " was removed from a BufferSet, it is dirty, adding it to " + editPane); - // the buffer is dirty, I open it in the first edit pane (is it a good choice ?) - editPane.setBuffer(buffer); + if (prevEditPane != null) + { + Log.log(Log.MESSAGE, this, + "The buffer " + buffer + + " was removed from a BufferSet, it is dirty, adding it to " + + prevEditPane); + prevEditPane.setBuffer(buffer); + } + else + { + Log.log(Log.ERROR, this, + "The buffer " + buffer + + " was removed from a BufferSet, it is dirty, but there is no other edit pane"); + } } else { // the buffer is not dirty I close it - Log.log(Log.MESSAGE, this, "The buffer " + buffer + " was removed from a BufferSet, it is clean, closing it"); + Log.log(Log.MESSAGE, this, "The buffer " + + buffer + " was removed from a BufferSet, it is clean, closing it"); jEdit._closeBuffer(null, buffer); } } - } + } //}}} + } //}}} //}}} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2008-09-09 09:25:27
|
Revision: 13631 http://jedit.svn.sourceforge.net/jedit/?rev=13631&view=rev Author: kpouer Date: 2008-09-09 09:25:21 +0000 (Tue, 09 Sep 2008) Log Message: ----------- the two listeners that were added to the LogListModel were never removed (2100926) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/gui/LogViewer.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-09-09 08:50:59 UTC (rev 13630) +++ jEdit/trunk/doc/CHANGES.txt 2008-09-09 09:25:21 UTC (rev 13631) @@ -21,6 +21,9 @@ - When closing a view or an EditPane, the dirty buffers of it's bufferSet are now added to the previous EditPane (#2091052) (Matthieu Casanova) + +- A memory leak fixed in the Activity Log panel (#2100926) (Matthieu Casanova, + Kazutoshi Satoda) }}} {{{ Miscellaneous @@ -44,7 +47,7 @@ under that mode. (SF.net patch #1829669 - Eric Berry) - Removed own back buffers for textarea, which were meant to speed up - painting textare, because the effect seemed to be not noticeable and + painting textarea, because the effect seemed to be not noticeable and not stable over runtime environments, while it broke Background plugin (SF.net Plugin Bugs #1620694) and consumed much memory. (Kazutoshi Satoda) Modified: jEdit/trunk/org/gjt/sp/jedit/gui/LogViewer.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/gui/LogViewer.java 2008-09-09 08:50:59 UTC (rev 13630) +++ jEdit/trunk/org/gjt/sp/jedit/gui/LogViewer.java 2008-09-09 09:25:21 UTC (rev 13631) @@ -94,21 +94,8 @@ caption.add(copy); ListModel model = Log.getLogListModel(); - listModel = new FilteredListModel(model) - { - @Override - public String prepareFilter(String filter) - { - return filter.toLowerCase(); - } - - @Override - public boolean passFilter(int row, String filter) - { - return delegated.getElementAt(row).toString().toLowerCase().contains(filter); - } - }; - model.addListDataListener(new ListHandler()); + listModel = new MyFilteredListModel(model); + model.removeListDataListener(listModel); list = new LogList(listModel); listModel.setList(list); add(BorderLayout.NORTH,caption); @@ -142,6 +129,9 @@ public void addNotify() { super.addNotify(); + ListModel model = Log.getLogListModel(); + model.addListDataListener(listModel); + model.addListDataListener(listHandler = new ListHandler()); if(tailIsOn) scrollToTail(); @@ -153,7 +143,10 @@ public void removeNotify() { super.removeNotify(); - + ListModel model = Log.getLogListModel(); + model.removeListDataListener(listModel); + model.removeListDataListener(listHandler); + listHandler = null; EditBus.removeFromBus(this); } //}}} @@ -164,6 +157,7 @@ } //}}} //{{{ Private members + private ListHandler listHandler; private final FilteredListModel listModel; private final JList list; private final JButton copy; @@ -199,13 +193,13 @@ private void scrollLaterIfRequired() { if (tailIsOn) - SwingUtilities.invokeLater(new Runnable() - { - public void run() + SwingUtilities.invokeLater(new Runnable() { - scrollToTail(); - } - }); + public void run() + { + scrollToTail(); + } + }); } //}}} //}}} @@ -365,4 +359,24 @@ return this; } } + + private static class MyFilteredListModel extends FilteredListModel + { + MyFilteredListModel(ListModel model) + { + super(model); + } + + @Override + public String prepareFilter(String filter) + { + return filter.toLowerCase(); + } + + @Override + public boolean passFilter(int row, String filter) + { + return delegated.getElementAt(row).toString().toLowerCase().contains(filter); + } + } } \ 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: <kp...@us...> - 2008-09-09 16:41:51
|
Revision: 13632 http://jedit.svn.sourceforge.net/jedit/?rev=13632&view=rev Author: kpouer Date: 2008-09-09 16:41:47 +0000 (Tue, 09 Sep 2008) Log Message: ----------- When starting jEdit without a settings directory an error happened when saving backup of setting files Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/jEdit.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-09-09 09:25:21 UTC (rev 13631) +++ jEdit/trunk/doc/CHANGES.txt 2008-09-09 16:41:47 UTC (rev 13632) @@ -24,6 +24,9 @@ - A memory leak fixed in the Activity Log panel (#2100926) (Matthieu Casanova, Kazutoshi Satoda) + +- When starting jEdit without a settings directory an error happened when saving + backup of setting files (Matthieu Casanova) }}} {{{ Miscellaneous Modified: jEdit/trunk/org/gjt/sp/jedit/jEdit.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2008-09-09 09:25:21 UTC (rev 13631) +++ jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2008-09-09 16:41:47 UTC (rev 13632) @@ -2471,7 +2471,7 @@ */ public static void backupSettingsFile(File file) { - if(settingsDirectory == null) + if(settingsDirectory == null || !file.exists()) return; String backupDir = MiscUtilities.constructPath( This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <k_s...@us...> - 2008-09-10 16:39:41
|
Revision: 13639 http://jedit.svn.sourceforge.net/jedit/?rev=13639&view=rev Author: k_satoda Date: 2008-09-10 16:39:38 +0000 (Wed, 10 Sep 2008) Log Message: ----------- Added an easy way to add some encoding detectors with regex, and actual detectors, "html" and "python", for instances. Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/services.xml Added Paths: ----------- jEdit/trunk/org/gjt/sp/jedit/io/RegexEncodingDetector.java Removed Paths: ------------- jEdit/trunk/org/gjt/sp/jedit/io/BufferLocalEncodingDetector.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-09-10 12:26:02 UTC (rev 13638) +++ jEdit/trunk/doc/CHANGES.txt 2008-09-10 16:39:38 UTC (rev 13639) @@ -58,6 +58,12 @@ - Improved rendering of complex text layout (like Indic text) in text area. (SF.net bug #981012 - Kazutoshi Satoda) +- Added some new encoding detectors which reads some lines at the top of + file and search for encoding declaration pattern in regex. + - html: finds "\bcharset=(ENCODING)" + - python: finds "coding[=:]\s*(ENCODING)" + (Kazutoshi Satoda) + }}} {{{ Docker Plugin features merged into jEdit Core - New actions: View - Docking - Load|Save docking layout (of current mode) Deleted: jEdit/trunk/org/gjt/sp/jedit/io/BufferLocalEncodingDetector.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/io/BufferLocalEncodingDetector.java 2008-09-10 12:26:02 UTC (rev 13638) +++ jEdit/trunk/org/gjt/sp/jedit/io/BufferLocalEncodingDetector.java 2008-09-10 16:39:38 UTC (rev 13639) @@ -1,62 +0,0 @@ -/* - * :tabSize=8:indentSize=8:noTabs=false: - * :folding=explicit:collapseFolds=1: - * - * Copyright (C) 2007 Kazutoshi Satoda - * - * 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 org.gjt.sp.jedit.io; - -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.BufferedReader; -import java.io.IOException; - -/** - * An encoding detector which finds buffer-local-property syntax. - * - * This reads the sample in the system default encoding for first 10 - * lines and look for ":encoding=..." syntax. This can fail if the - * stream cannot be read in the system default encoding or - * ":encoding=..." is not placed at near the top of the stream. - * - * @since 4.3pre10 - * @author Kazutoshi Satoda - */ -public class BufferLocalEncodingDetector implements EncodingDetector -{ - public String detectEncoding(InputStream sample) throws IOException - { - BufferedReader reader - = new BufferedReader(new InputStreamReader(sample)); - int i = 0; - while (i < 10) - { - i++; - String line = reader.readLine(); - if (line == null) - return null; - int pos = line.indexOf(":encoding="); - if (pos != -1) - { - int p2 = line.indexOf(':', pos + 10); - String encoding = line.substring(pos + 10, p2); - return encoding; - } - } - return null; - } -} Copied: jEdit/trunk/org/gjt/sp/jedit/io/RegexEncodingDetector.java (from rev 13638, jEdit/trunk/org/gjt/sp/jedit/io/BufferLocalEncodingDetector.java) =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/io/RegexEncodingDetector.java (rev 0) +++ jEdit/trunk/org/gjt/sp/jedit/io/RegexEncodingDetector.java 2008-09-10 16:39:38 UTC (rev 13639) @@ -0,0 +1,102 @@ +/* + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2008 Kazutoshi Satoda + * + * 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 org.gjt.sp.jedit.io; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.BufferedReader; +import java.io.IOException; +import java.util.regex.Pattern; +import java.util.regex.Matcher; + +/** + * An encoding detector which finds regex pattern. + * + * This reads the sample in the system default encoding for first 10 + * lines and look for a regex pattern. This can fail if the + * stream cannot be read in the system default encoding or the + * pattern is not found at near the top of the stream. + * + * @since 4.3pre16 + * @author Kazutoshi Satoda + */ +public class RegexEncodingDetector implements EncodingDetector +{ + /** + * A regex pattern matches to "Charset names" specified for + * java.nio.charset.Charset. + * @see http://java.sun.com/j2se/1.5.0/docs/api/java/nio/charset/Charset.html#names + */ + public static final String VALID_ENCODING_PATTERN + = "\\p{Alnum}[\\p{Alnum}\\-.:_]*"; + + private final Pattern pattern; + private final String replacement; + + public RegexEncodingDetector(String pattern, String replacement) + { + this.pattern = Pattern.compile(pattern); + this.replacement = replacement; + } + + public String detectEncoding(InputStream sample) throws IOException + { + BufferedReader reader + = new BufferedReader(new InputStreamReader(sample)); + for (int i = 0; i < 10; ++i) + { + String line = reader.readLine(); + if (line == null) + return null; + Matcher matcher = pattern.matcher(line); + if (matcher.find()) + { + String extracted = extractReplacement( + matcher, replacement); + if (EncodingServer.hasEncoding(extracted)) + { + return extracted; + } + } + } + return null; + } + + /** + * Returns a replaced string for a Matcher which has been matched + * by find() method. + */ + private static String extractReplacement(Matcher found + , String replacement) + { + /* + * It doesn't make sense to read before start, but + * appendReplacement() requires to to it. + */ + int found_start = found.start(); + int found_end = found.end(); + int source_length = found_end - found_start; + StringBuffer replaced = new StringBuffer(found_start + + (source_length * 2)); + found.appendReplacement(replaced, replacement); + return replaced.substring(found_start); + } +} Property changes on: jEdit/trunk/org/gjt/sp/jedit/io/RegexEncodingDetector.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:mergeinfo + /jEdit/branches/docking_framework/org/gjt/sp/jedit/io/BufferLocalEncodingDetector.java:13128-13258 Added: svn:eol-style + native Modified: jEdit/trunk/org/gjt/sp/jedit/services.xml =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/services.xml 2008-09-10 12:26:02 UTC (rev 13638) +++ jEdit/trunk/org/gjt/sp/jedit/services.xml 2008-09-10 16:39:38 UTC (rev 13639) @@ -48,9 +48,20 @@ new XMLEncodingDetector(); </SERVICE> <SERVICE CLASS="org.gjt.sp.jedit.io.EncodingDetector" NAME="buffer-local-property"> - new BufferLocalEncodingDetector(); + new RegexEncodingDetector(":encoding=([^:]+):", "$1"); </SERVICE> - + <SERVICE CLASS="org.gjt.sp.jedit.io.EncodingDetector" NAME="html"> + new RegexEncodingDetector( + "\\bcharset=(" + RegexEncodingDetector.VALID_ENCODING_PATTERN + ")", + "$1"); + </SERVICE> + <SERVICE CLASS="org.gjt.sp.jedit.io.EncodingDetector" NAME="python"> + new RegexEncodingDetector( + "coding[=:]\s*(" + RegexEncodingDetector.VALID_ENCODING_PATTERN + ")", + "$1"); + </SERVICE> + + <!-- {{{ Status Bar widgets --> <SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidget" NAME="mode"> import org.gjt.sp.jedit.gui.statusbar.*; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2008-09-11 21:45:56
|
Revision: 13643 http://jedit.svn.sourceforge.net/jedit/?rev=13643&view=rev Author: kpouer Date: 2008-09-11 21:45:52 +0000 (Thu, 11 Sep 2008) Log Message: ----------- applied patch 2096752 Modified Paths: -------------- jEdit/trunk/build.xml jEdit/trunk/org/gjt/sp/jedit/Registers.java jEdit/trunk/org/gjt/sp/jedit/actions.xml jEdit/trunk/org/gjt/sp/jedit/buffer/JEditBuffer.java jEdit/trunk/org/gjt/sp/jedit/jEdit.java jEdit/trunk/org/gjt/sp/jedit/syntax/ModeProvider.java jEdit/trunk/org/gjt/sp/jedit/textarea/JEditTextArea.java jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java jEdit/trunk/org/gjt/sp/jedit/textarea/TextAreaMouseHandler.java jEdit/trunk/org/gjt/sp/jedit/textarea/TextAreaPainter.java jEdit/trunk/org/gjt/sp/jedit/textarea/textarea.actions.xml Added Paths: ----------- jEdit/trunk/org/gjt/sp/jedit/textarea/JEditEmbeddedTextArea.java jEdit/trunk/org/gjt/sp/jedit/textarea/StandaloneTextArea.java Modified: jEdit/trunk/build.xml =================================================================== --- jEdit/trunk/build.xml 2008-09-11 19:01:29 UTC (rev 13642) +++ jEdit/trunk/build.xml 2008-09-11 21:45:52 UTC (rev 13643) @@ -4,16 +4,16 @@ <description> This is an ant build.xml file for building jEdit - Programmer's Text Editor. </description> - + <property file="build.properties" prefix="config" /> - + <!-- jEdit Version --> <property name="jedit.version" value="4.3pre16" /> <property name="jedit.build.number" value="04.03.16.00" /> - + <!-- Target Java Versions --> <property name="target.java.version" value="1.5" /> @@ -21,7 +21,7 @@ value="1.5+" /> <property name="slackware.target.java.version" value="1_5_0_07-i586-1" /> - + <!-- Various Paths --> <property name="config.build.dir" value="build" /> @@ -50,7 +50,7 @@ value="jedit${jedit.version}install" /> <property name="mac.disk.image.filename" value="jedit${jedit.version}install.dmg" /> - + <!-- Miscellaneous --> <property name="config.build.debuglevel" value="lines,vars,source" /> @@ -58,7 +58,7 @@ value="true" /> <property name="config.build.compilerarg" value="-Xlint:unchecked" /> - + <target name="init" unless="init.done"> <echo message="Buildfile for ${ant.project.name} (${ant.file})" @@ -73,7 +73,7 @@ <property name="init.done" value="true" /> </target> - + <target name="clean" depends="init" description="clean up intermediate files"> @@ -85,7 +85,7 @@ includes="docbook-wrapper-*.xsl" /> </delete> </target> - + <target name="clean-all" depends="init" description="clean up build.dir and dist.dir completely"> @@ -98,7 +98,7 @@ includes="docbook-wrapper-*.xsl" /> </delete> </target> - + <target name="compile" depends="init"> <mkdir dir="${classes.dir}/core" /> @@ -122,9 +122,15 @@ <target name="prepare-textArea" depends="init"> + <delete includeemptydirs="true" + failonerror="false"> + <fileset dir="${textAreaPackage}/src"/> + </delete> + <mkdir dir="${textAreaPackage}/src" /> <copy todir="${textAreaPackage}/src"> <fileset dir="."> + <include name="modes/*.xml"/> <include name="org/gjt/sp/jedit/bsh/*"/> <include name="org/gjt/sp/jedit/bsh/**/*"/> @@ -147,7 +153,8 @@ <include name="org/gjt/sp/jedit/gui/KeyEventWorkaround.java"/> <include name="org/gjt/sp/jedit/gui/MutableListModel.java"/> <include name="org/gjt/sp/jedit/gui/ShortcutPrefixActiveEvent.java"/> - + <include name="org/gjt/sp/jedit/gui/HistoryModel.java"/> + <include name="org/gjt/sp/jedit/gui/HistoryModelSaver.java"/> <include name="org/gjt/sp/jedit/indent/*.java"/> <include name="org/gjt/sp/jedit/input/AbstractInputHandler.java"/> @@ -177,6 +184,7 @@ <include name="org/gjt/sp/jedit/textarea/ScrollLayout.java"/> <include name="org/gjt/sp/jedit/textarea/ScrollLineCount.java"/> <include name="org/gjt/sp/jedit/textarea/ScrollListener.java"/> + <include name="org/gjt/sp/jedit/textarea/StandaloneTextArea.java"/> <include name="org/gjt/sp/jedit/textarea/StatusListener.java"/> <include name="org/gjt/sp/jedit/textarea/StructureMatcher.java"/> <include name="org/gjt/sp/jedit/textarea/TextArea.java"/> @@ -199,6 +207,8 @@ <include name="org/gjt/sp/jedit/Mode.java"/> <include name="org/gjt/sp/jedit/OperatingSystem.java"/> <include name="org/gjt/sp/jedit/RegistersListener.java"/> + <include name="org/gjt/sp/jedit/RegistersListener.java"/> + <include name="org/gjt/sp/jedit/Registers.java"/> <include name="org/gjt/sp/jedit/RegisterSaver.java"/> <include name="org/gjt/sp/jedit/SelectionManager.java"/> <include name="org/gjt/sp/jedit/TextUtilities.java"/> @@ -206,6 +216,7 @@ <include name="org/gjt/sp/jedit/actions.dtd"/> <include name="org/gjt/sp/jedit/jedit.props"/> <include name="org/gjt/sp/jedit/jedit_keys.props"/> + <include name="modes/*"/> <include name="org/gjt/sp/util/Log*.java"/> @@ -218,7 +229,7 @@ <include name="org/gjt/sp/util/XMLUtilities.java"/> </fileset> </copy> - + </target> <target name="compile-textArea" @@ -235,7 +246,7 @@ encoding="UTF-8"> </javac> </target> - + <target name="build" depends="init,compile" description="build the jEdit JAR-file with full debug-information"> @@ -256,7 +267,7 @@ <include name="org/gjt/sp/jedit/icons/**/*.gif" /> <include name="org/gjt/sp/jedit/icons/**/*.jpg" /> <include name="org/gjt/sp/jedit/icons/**/*.png" /> - </fileset> + </fileset> </jar> <copy todir="${jar.location}"> <fileset dir="."> @@ -267,17 +278,17 @@ </fileset> </copy> </target> - + <target name="build-textArea" depends="init,compile-textArea" description="build the textArea JAR-file with full debug-information"> <mkdir dir="${jar.location}" /> <jar destfile="${jar.location}/${ant.project.name}-textArea.jar" - compress="false" - duplicate="fail" - index="true"> + compress="false" + duplicate="fail" + index="true"> <fileset dir="${textAreaPackage}/build/" /> - <fileset dir="${textAreaPackage}/src"> + <fileset dir="${textAreaPackage}/src"> <include name="org/gjt/sp/jedit/textarea/*.xml"/> <include name="org/gjt/sp/jedit/syntax/xmode.dtd"/> <include name="org/gjt/sp/jedit/actions.dtd"/> @@ -285,11 +296,11 @@ <include name="org/gjt/sp/jedit/jedit_keys.props"/> </fileset> <manifest> - <attribute name="Main-Class" value="org.gjt.sp.jedit.textarea.TextArea"/> + <attribute name="Main-Class" value="org.gjt.sp.jedit.textarea.StandaloneTextArea"/> </manifest> </jar> </target> - + <target name="run" depends="init,build" description="run jEdit"> @@ -300,7 +311,7 @@ <arg value="-noserver" /> </java> </target> - + <target name="run-debug" depends="init,build" description="run jEdit with debug listening enabled"> @@ -312,7 +323,7 @@ <arg value="-noserver" /> </java> </target> - + <target name="generate-docbook-wrapper" if="format" depends="init"> @@ -342,7 +353,7 @@ append="true" level="error" /> </target> - + <target name="generate-doc-faq" depends="init" if="doc.output.location" @@ -364,7 +375,7 @@ file="${config.docbook.catalog}" /> </exec> </target> - + <target name="generate-doc-news" depends="init" if="doc.output.location" @@ -386,7 +397,7 @@ file="${config.docbook.catalog}" /> </exec> </target> - + <target name="generate-doc-users-guide" depends="init" if="doc.output.location" @@ -408,11 +419,11 @@ file="${config.docbook.catalog}" /> </exec> </target> - + <target name="userdocs" depends="init,docs-html,docs-javadoc" description="generate HTML and JavaDoc API docs (needs xsltproc)" /> - + <target name="docs-upload" depends="userdocs" description="upload generated documentation to public website (needs xsltproc and rsync)" > @@ -428,7 +439,7 @@ <arg value="plugins.jedit.org:/home/groups/j/je/jedit/htdocs/" /> </exec> </target> - + <target name="docs-html" depends="init" description="generate HTML docs (needs xsltproc)"> @@ -480,7 +491,7 @@ </fileset> </copy> </target> - + <target name="generate-javadoc" depends="init" unless="javadoc.is.up.to.date"> @@ -517,7 +528,7 @@ packages="com.microstar.xml*" /> </javadoc> </target> - + <target name="docs-javadoc" depends="init" description="generate JavaDoc API docs"> @@ -556,7 +567,7 @@ </filterchain> </copy> </target> - + <target name="generate-pdf-users-guide" depends="init" if="paper.type" @@ -610,7 +621,7 @@ format="application/pdf" messagelevel="info" /> </target> - + <target name="docs-pdf" depends="init" if="paper.type"> @@ -637,7 +648,7 @@ type="file" /> <antcall target="generate-pdf-users-guide" /> </target> - + <target name="docs-pdf-a4" depends="init" description="generate PDF users-guide with A4 paper size (needs xsltproc and fop)"> @@ -646,7 +657,7 @@ value="A4" /> </antcall> </target> - + <target name="docs-pdf-USletter" depends="init" description="generate PDF users-guide with US letter paper size (needs xsltproc and fop)"> @@ -655,7 +666,7 @@ value="USletter" /> </antcall> </target> - + <target name="compile-installer" depends="init"> <mkdir dir="${classes.dir}/installer" /> @@ -674,7 +685,7 @@ <compilerarg line="${config.build.compilerarg}" /> </javac> </target> - + <target name="compile-default-plugins-for-dist" depends="init"> <ant dir="jars/LatestVersion" @@ -714,7 +725,7 @@ value="${dist.dir}" /> </ant> </target> - + <target name="dist-java" depends="init" description="build the Java-installer"> @@ -846,7 +857,7 @@ </condition> <antcall target="dist-cleanup" /> </target> - + <target name="dist-manuals" depends="init" description="build the PDF-manuals"> @@ -869,7 +880,7 @@ </condition> <antcall target="dist-cleanup" /> </target> - + <target name="dist-src" depends="init" description="build the src-archive"> @@ -886,7 +897,7 @@ prefix="build-support/" /> </tar> </target> - + <target name="compile-jarbundler" depends="init"> <mkdir dir="${classes.dir}/jarbundler" /> @@ -905,7 +916,7 @@ <compilerarg line="${config.build.compilerarg}" /> </javac> </target> - + <target name="dist-mac-finish" depends="init" unless="build.on.non.mac" @@ -1001,7 +1012,7 @@ </condition> <antcall target="dist-cleanup" /> </target> - + <target name="prepare-dist-mac-finish" depends="init" if="build.on.non.mac"> @@ -1020,7 +1031,7 @@ ${config.dist.dir}/startup/**" compression="bzip2" /> </target> - + <target name="dist-mac" depends="init" description="build the Mac OS X disk image (DMG-file)"> @@ -1048,7 +1059,7 @@ </condition> <antcall target="dist-cleanup" /> </target> - + <target name="prepare-dist-files" depends="init"> <antcall target="build"> @@ -1093,7 +1104,7 @@ <gzip src="${dist.dir}/classes/package-files/linux/jedit.1" destfile="${dist.dir}/classes/package-files/linux/jedit.1.gz" /> </target> - + <target name="dist-slackware" depends="init" description="build the Slackware Package"> @@ -1155,7 +1166,7 @@ </condition> <antcall target="dist-cleanup" /> </target> - + <target name="compile-ar" depends="init"> <mkdir dir="${classes.dir}/ar" /> @@ -1174,7 +1185,7 @@ <compilerarg line="${config.build.compilerarg}" /> </javac> </target> - + <target name="compile-deb" depends="init"> <mkdir dir="${classes.dir}/deb" /> @@ -1193,7 +1204,7 @@ <compilerarg line="${config.build.compilerarg}" /> </javac> </target> - + <target name="compile-calculatesize" depends="init"> <mkdir dir="${classes.dir}/calculatesize" /> @@ -1212,7 +1223,7 @@ <compilerarg line="${config.build.compilerarg}" /> </javac> </target> - + <target name="dist-deb" depends="init" description="build the DEB Package"> @@ -1333,7 +1344,7 @@ </condition> <antcall target="dist-cleanup" /> </target> - + <target name="dist-win-finish" depends="init" unless="build.on.non.win" @@ -1383,7 +1394,7 @@ </condition> <antcall target="dist-cleanup" /> </target> - + <target name="prepare-dist-win-finish" depends="init" if="build.on.non.win"> @@ -1405,7 +1416,7 @@ ${config.dist.dir}/startup/**" compression="bzip2" /> </target> - + <target name="dist-win" depends="init" description="build the Windows installer (EXE-file)"> @@ -1427,12 +1438,12 @@ </condition> <antcall target="dist-cleanup" /> </target> - - <target name="install" depends="build" + + <target name="install" depends="build" description="install built files to config.install.dir"> <copy todir="${config.install.dir}" file="${build.dir}/jedit.jar" /> </target> - + <target name="dist" depends="init" description="build all distribution files"> @@ -1449,7 +1460,7 @@ value="true" /> <antcall target="dist-cleanup" /> </target> - + <target name="dist-cleanup" depends="init"> <delete includeemptydirs="true"> Modified: jEdit/trunk/org/gjt/sp/jedit/Registers.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/Registers.java 2008-09-11 19:01:29 UTC (rev 13642) +++ jEdit/trunk/org/gjt/sp/jedit/Registers.java 2008-09-11 21:45:52 UTC (rev 13643) @@ -363,21 +363,6 @@ return registers; } //}}} - //{{{ getRegisterStatusPrompt() method - /** - * Returns the status prompt for the given register action. Only - * intended to be called from <code>actions.xml</code>. - * @since jEdit 4.2pre2 - */ - public static String getRegisterStatusPrompt(String action) - { - String registerNameString = getRegisterNameString(); - return jEdit.getProperty("view.status." + action, - new String[] {registerNameString == null ? - jEdit.getProperty("view.status.no-registers") : - registerNameString}); - } //}}} - //{{{ getRegisterNameString() method /** * Returns a string of all defined registers, used by the status bar Modified: jEdit/trunk/org/gjt/sp/jedit/actions.xml =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/actions.xml 2008-09-11 19:01:29 UTC (rev 13642) +++ jEdit/trunk/org/gjt/sp/jedit/actions.xml 2008-09-11 21:45:52 UTC (rev 13643) @@ -169,7 +169,7 @@ <ACTION NAME="copy-append-string-register" NO_REPEAT="TRUE" NO_RECORD="TRUE"> <CODE> view.getInputHandler().readNextChar( - Registers.getRegisterStatusPrompt("copy-append-string-register"), + jEdit.getRegisterStatusPrompt("copy-append-string-register"), "Registers.append(textArea,__char__,\"\\n\",false);"); </CODE> </ACTION> @@ -177,7 +177,7 @@ <ACTION NAME="copy-string-register" NO_REPEAT="TRUE" NO_RECORD="TRUE"> <CODE> view.getInputHandler().readNextChar( - Registers.getRegisterStatusPrompt("copy-string-register"), + jEdit.getRegisterStatusPrompt("copy-string-register"), "Registers.copy(textArea,__char__);"); </CODE> </ACTION> @@ -197,7 +197,7 @@ <ACTION NAME="cut-append-string-register" NO_REPEAT="TRUE" NO_RECORD="TRUE"> <CODE> view.getInputHandler().readNextChar( - Registers.getRegisterStatusPrompt("cut-append-string-register"), + jEdit.getRegisterStatusPrompt("cut-append-string-register"), "Registers.append(textArea,__char__,\"\\n\",true);"); </CODE> </ACTION> @@ -205,7 +205,7 @@ <ACTION NAME="cut-string-register" NO_REPEAT="TRUE" NO_RECORD="TRUE"> <CODE> view.getInputHandler().readNextChar( - Registers.getRegisterStatusPrompt("cut-string-register"), + jEdit.getRegisterStatusPrompt("cut-string-register"), "Registers.cut(textArea,__char__);"); </CODE> </ACTION> @@ -709,7 +709,7 @@ <ACTION NAME="paste-string-register" NO_REPEAT="TRUE" NO_RECORD="TRUE"> <CODE> view.getInputHandler().readNextChar( - Registers.getRegisterStatusPrompt("paste-string-register"), + jEdit.getRegisterStatusPrompt("paste-string-register"), "Registers.paste(textArea,__char__,false);"); </CODE> </ACTION> @@ -1450,7 +1450,7 @@ <ACTION NAME="vertical-paste-string-register" NO_REPEAT="TRUE" NO_RECORD="TRUE"> <CODE> view.getInputHandler().readNextChar( - Registers.getRegisterStatusPrompt("vertical-paste-string-register"), + jEdit.getRegisterStatusPrompt("vertical-paste-string-register"), "Registers.paste(textArea,__char__,true);"); </CODE> </ACTION> Modified: jEdit/trunk/org/gjt/sp/jedit/buffer/JEditBuffer.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/buffer/JEditBuffer.java 2008-09-11 19:01:29 UTC (rev 13642) +++ jEdit/trunk/org/gjt/sp/jedit/buffer/JEditBuffer.java 2008-09-11 21:45:52 UTC (rev 13643) @@ -2218,6 +2218,20 @@ return returnValue; } //}}} + + //{{{ setUndoLimit() method + /** + * Set the undo limit of the Undo Manager. + * + * @param limit the new limit + * @since jEdit 4.3pre16 + */ + public void setUndoLimit(int limit) + { + if (undoMgr != null) + undoMgr.setLimit(limit); + } //}}} + //}}} //{{{ Protected members Modified: jEdit/trunk/org/gjt/sp/jedit/jEdit.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2008-09-11 19:01:29 UTC (rev 13642) +++ jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2008-09-11 21:45:52 UTC (rev 13643) @@ -2538,16 +2538,12 @@ * * @return a textarea * @since 4.3pre13 + * @deprecated use new JEditEmbeddedTextArea() instead */ + @Deprecated public static TextArea createTextArea() { - final TextArea textArea = TextArea._createTextArea(true, propertyManager); - - EditPane.initPainter(textArea.getPainter()); - textArea.setBuffer(new JEditBuffer()); - textArea.getBuffer().setMode(ModeProvider.instance.getMode("text")); - - return textArea; + return new JEditEmbeddedTextArea(); } // }}} //{{{ exit() method @@ -2684,6 +2680,21 @@ } } //}}} + //{{{ getRegisterStatusPrompt() method + /** + * Returns the status prompt for the given register action. Only + * intended to be called from <code>actions.xml</code>. + * @since jEdit 4.3pre16 + */ + public static String getRegisterStatusPrompt(String action) + { + String registerNameString = Registers.getRegisterNameString(); + return jEdit.getProperty("view.status." + action, + new String[] {registerNameString == null ? + jEdit.getProperty("view.status.no-registers") : + registerNameString}); + } //}}} + //}}} //{{{ Package-private members Modified: jEdit/trunk/org/gjt/sp/jedit/syntax/ModeProvider.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/syntax/ModeProvider.java 2008-09-11 19:01:29 UTC (rev 13642) +++ jEdit/trunk/org/gjt/sp/jedit/syntax/ModeProvider.java 2008-09-11 21:45:52 UTC (rev 13643) @@ -32,6 +32,7 @@ import java.io.BufferedInputStream; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; @@ -145,8 +146,18 @@ try { grammar = new BufferedInputStream( - new FileInputStream(fileName)); + new FileInputStream(fileName)); + } + catch (FileNotFoundException e1) + { + InputStream resource = ModeProvider.class.getResourceAsStream(fileName); + if (resource == null) + error(fileName, e1); + grammar = new BufferedInputStream(resource); + } + try + { InputSource isrc = new InputSource(grammar); isrc.setSystemId("jedit.jar"); parser.setContentHandler(xmh); Added: jEdit/trunk/org/gjt/sp/jedit/textarea/JEditEmbeddedTextArea.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/JEditEmbeddedTextArea.java (rev 0) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/JEditEmbeddedTextArea.java 2008-09-11 21:45:52 UTC (rev 13643) @@ -0,0 +1,48 @@ +/* + * StandaloneTextArea.java - A TextArea that can be embedded in applications + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2008 Matthieu Casanova + * + * 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 org.gjt.sp.jedit.textarea; + +import org.gjt.sp.jedit.input.InputHandlerProvider; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.EditPane; +import org.gjt.sp.jedit.syntax.ModeProvider; +import org.gjt.sp.jedit.buffer.JEditBuffer; + +/** + * @author Matthieu Casanova + */ +public class JEditEmbeddedTextArea extends TextArea +{ + //{{{ TextArea constructor + /** + * Instantiate a TextArea. + */ + public JEditEmbeddedTextArea() + { + super(jEdit.getPropertyManager(), null); + initInputHandler(); + EditPane.initPainter(getPainter()); + JEditBuffer buffer = new JEditBuffer(); + buffer.setMode(ModeProvider.instance.getMode("text")); + setBuffer(buffer); + } //}}} +} Modified: jEdit/trunk/org/gjt/sp/jedit/textarea/JEditTextArea.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/JEditTextArea.java 2008-09-11 19:01:29 UTC (rev 13642) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/JEditTextArea.java 2008-09-11 21:45:52 UTC (rev 13643) @@ -30,7 +30,6 @@ import java.awt.Point; import java.awt.event.MouseEvent; -import javax.swing.JPopupMenu; import javax.swing.JMenuItem; import org.gjt.sp.jedit.*; @@ -61,7 +60,6 @@ { super(jEdit.getPropertyManager(), view); enableEvents(AWTEvent.FOCUS_EVENT_MASK | AWTEvent.KEY_EVENT_MASK); - popupEnabled = true; this.view = view; } //}}} @@ -455,53 +453,9 @@ //{{{ Instance variables private View view; - private JPopupMenu popup; - - private boolean popupEnabled; //}}} //}}} - //{{{ isRightClickPopupEnabled() method - /** - * Returns if the right click popup menu is enabled. The Gestures - * plugin uses this API. - * @since jEdit 4.2pre13 - */ - public boolean isRightClickPopupEnabled() - { - return popupEnabled; - } //}}} - - //{{{ setRightClickPopupEnabled() method - /** - * Sets if the right click popup menu is enabled. The Gestures - * plugin uses this API. - * @since jEdit 4.2pre13 - */ - public void setRightClickPopupEnabled(boolean popupEnabled) - { - this.popupEnabled = popupEnabled; - } //}}} - - //{{{ getRightClickPopup() method - /** - * Returns the right click popup menu. - */ - public final JPopupMenu getRightClickPopup() - { - return popup; - } //}}} - - //{{{ setRightClickPopup() method - /** - * Sets the right click popup menu. - * @param popup The popup - */ - public final void setRightClickPopup(JPopupMenu popup) - { - this.popup = popup; - } //}}} - //{{{ handlePopupTrigger() method /** * Do the same thing as right-clicking on the text area. The Gestures Added: jEdit/trunk/org/gjt/sp/jedit/textarea/StandaloneTextArea.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/StandaloneTextArea.java (rev 0) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/StandaloneTextArea.java 2008-09-11 21:45:52 UTC (rev 13643) @@ -0,0 +1,583 @@ +/* + * StandaloneTextArea.java - A TextArea that can be embedded in applications + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 1999, 2005 Slava Pestov + * Portions copyright (C) 2000 Ollie Rutherfurd + * Portions copyright (C) 2006 Matthieu Casanova + * Portions copyright (C) 2008 Dakshinamurthy Karra + * + * 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 org.gjt.sp.jedit.textarea; + +//{{{ Imports +import java.awt.Color; +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.MouseEvent; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +import javax.swing.AbstractAction; +import javax.swing.JFrame; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; +import javax.swing.WindowConstants; + +import org.gjt.sp.jedit.IPropertyManager; +import org.gjt.sp.jedit.JEditBeanShellAction; +import org.gjt.sp.jedit.Mode; +import org.gjt.sp.jedit.buffer.DefaultFoldHandlerProvider; +import org.gjt.sp.jedit.buffer.DummyFoldHandler; +import org.gjt.sp.jedit.buffer.ExplicitFoldHandler; +import org.gjt.sp.jedit.buffer.FoldHandler; +import org.gjt.sp.jedit.buffer.IndentFoldHandler; +import org.gjt.sp.jedit.buffer.JEditBuffer; +import org.gjt.sp.jedit.buffer.KillRing; +import org.gjt.sp.jedit.syntax.ModeProvider; +import org.gjt.sp.jedit.syntax.ParserRuleSet; +import org.gjt.sp.jedit.syntax.SyntaxStyle; +import org.gjt.sp.jedit.syntax.TokenMarker; +import org.gjt.sp.util.IOUtilities; +import org.gjt.sp.util.Log; +import org.gjt.sp.util.SyntaxUtilities; + +//}}} + +/** + * jEdit's standalone text component.<p> + * + * Use this class to embed a jEdit text area into other applications. + * + * Example: + * <code> + * class MyTextArea extends StandaloneTextArea + * { + * static final Properties props = new Properties(); + * static IPropertyManager propertyManager; + * + * static + * { + * props = new Properties(); + * load(props); + * propertyManager = new IPropertyManager() { + * public String getProperty() { + * return props.getProperty(); + * } + * } + * } + * + * public MyTextArea() + * { + * super(propertyManager); + * } + * } + * </code> + * + * See jedit.props for properties that can be set. + * + * @author Slava Pestov + * @author John Gellene (API documentation) + * @version $Id: JEditTextArea.java 7148 2006-09-29 23:09:06 +0200 (ven., 29 sept. 2006) kpouer $ + */ +public class StandaloneTextArea extends TextArea +{ + + //{{{ Instance variables + private IPropertyManager propertyManager; + //}}} + + //{{{ StandaloneTextArea constructor + /** + * Creates a new StandaloneTextArea. A reference to the propertyManager is saved and used to read the properties + * when {@link StandaloneTextArea#propertiesChanged()} is called. + * + * @param propertyManager the property manager that contains both shortcut bindings and UI information + */ + public StandaloneTextArea(IPropertyManager propertyManager) + { + super(propertyManager, null); + this.propertyManager = propertyManager; + + initInputHandler(); + + setMouseHandler(new TextAreaMouseHandler(this)); + // todo : make TextareaTransferHandler standalone +// textArea.setTransferHandler(new TextAreaTransferHandler()); + + StandaloneActionSet actionSet = new StandaloneActionSet(propertyManager, this); + + addActionSet(actionSet); + actionSet.load(); + actionSet.initKeyBindings(); + + //{{{ init Style property manager + if (SyntaxUtilities.propertyManager == null) + { + SyntaxUtilities.propertyManager = propertyManager; + } + //}}} + + initTextArea(); + + DefaultFoldHandlerProvider foldHandlerProvider = new DefaultFoldHandlerProvider(); + + FoldHandler.foldHandlerProvider = foldHandlerProvider; + foldHandlerProvider.addFoldHandler(new ExplicitFoldHandler()); + foldHandlerProvider.addFoldHandler(new IndentFoldHandler()); + foldHandlerProvider.addFoldHandler(new DummyFoldHandler()); + JEditBuffer buffer = new JEditBuffer(); + TokenMarker tokenMarker = new TokenMarker(); + tokenMarker.addRuleSet(new ParserRuleSet("text","MAIN")); + buffer.setTokenMarker(tokenMarker); + setBuffer(buffer); + String property = propertyManager.getProperty("buffer.undoCount"); + int undoCount = 100; + if (property != null) + try { + undoCount = Integer.parseInt(property); + } catch (NumberFormatException e) { + } + this.buffer.setUndoLimit(undoCount); + Mode mode = new Mode("text"); + mode.setTokenMarker(tokenMarker); + ModeProvider.instance.addMode(mode); + KillRing.setInstance(new KillRing()); + KillRing.getInstance().propertiesChanged(100); + + } //}}} + + //{{{ initTextArea() method + /** + * Initializes the text area by re-reading the properties from the property manager passed to the + * constructor. + */ + private void initTextArea() + { + initPainter(); + initGutter(); + + setCaretBlinkEnabled(getBooleanProperty( + "view.caretBlink")); + + setElectricScroll(getIntegerProperty( + "view.electricBorders",0)); + + if (this.buffer == null) + return ; + + String property = propertyManager.getProperty("buffer.undoCount"); + int undoCount = 100; + if (property != null) + try { + undoCount = Integer.parseInt(property); + } catch (NumberFormatException e) { + } + this.buffer.setUndoLimit(undoCount); + } //}}} + + //{{{ initGutter() method + private void initGutter() + { + Gutter gutter = getGutter(); + gutter.setExpanded(getBooleanProperty( + "view.gutter.lineNumbers")); + int interval = getIntegerProperty( + "view.gutter.highlightInterval",5); + gutter.setHighlightInterval(interval); + gutter.setCurrentLineHighlightEnabled(getBooleanProperty( + "view.gutter.highlightCurrentLine")); + gutter.setStructureHighlightEnabled(getBooleanProperty( + "view.gutter.structureHighlight")); + gutter.setStructureHighlightColor( + getColorProperty("view.gutter.structureHighlightColor")); + gutter.setBackground( + getColorProperty("view.gutter.bgColor")); + gutter.setForeground( + getColorProperty("view.gutter.fgColor")); + gutter.setHighlightedForeground( + getColorProperty("view.gutter.highlightColor")); + gutter.setFoldColor( + getColorProperty("view.gutter.foldColor")); + gutter.setCurrentLineForeground( + getColorProperty("view.gutter.currentLineColor")); + String alignment = getProperty( + "view.gutter.numberAlignment"); + if ("right".equals(alignment)) + { + gutter.setLineNumberAlignment(Gutter.RIGHT); + } + else if ("center".equals(alignment)) + { + gutter.setLineNumberAlignment(Gutter.CENTER); + } + else // left == default case + { + gutter.setLineNumberAlignment(Gutter.LEFT); + } + + gutter.setFont(getFontProperty("view.gutter.font")); + + int width = getIntegerProperty( + "view.gutter.borderWidth",3); + gutter.setBorder(width, + getColorProperty("view.gutter.focusBorderColor"), + getColorProperty("view.gutter.noFocusBorderColor"), + painter.getBackground()); + } //}}} + + //{{{ initPainter() method + /** + * Init the painter of this textarea. + * + */ + private void initPainter() + { + TextAreaPainter painter = getPainter(); + painter.setBlockCaretEnabled(false); + + painter.setFont(getFontProperty("view.font")); + painter.setStructureHighlightEnabled(getBooleanProperty( + "view.structureHighlight")); + painter.setStructureHighlightColor( + getColorProperty("view.structureHighlightColor")); + painter.setEOLMarkersPainted(getBooleanProperty( + "view.eolMarkers")); + painter.setEOLMarkerColor( + getColorProperty("view.eolMarkerColor")); + painter.setWrapGuidePainted(getBooleanProperty( + "view.wrapGuide")); + painter.setWrapGuideColor( + getColorProperty("view.wrapGuideColor")); + painter.setCaretColor( + getColorProperty("view.caretColor")); + painter.setSelectionColor( + getColorProperty("view.selectionColor")); + painter.setMultipleSelectionColor( + getColorProperty("view.multipleSelectionColor")); + painter.setBackground( + getColorProperty("view.bgColor")); + painter.setForeground( + getColorProperty("view.fgColor")); + painter.setBlockCaretEnabled(getBooleanProperty( + "view.blockCaret")); + painter.setThickCaretEnabled(getBooleanProperty( + "view.thickCaret")); + painter.setLineHighlightEnabled(getBooleanProperty( + "view.lineHighlight")); + painter.setLineHighlightColor( + getColorProperty("view.lineHighlightColor")); + painter.setAntiAlias(new AntiAlias(getProperty("view.antiAlias"))); + painter.setFractionalFontMetricsEnabled(getBooleanProperty( + "view.fracFontMetrics")); + + String defaultFont = getProperty("view.font"); + int defaultFontSize = getIntegerProperty("view.fontsize",12); + painter.setStyles(SyntaxUtilities.loadStyles(defaultFont,defaultFontSize)); + + SyntaxStyle[] foldLineStyle = new SyntaxStyle[4]; + for(int i = 0; i <= 3; i++) + { + foldLineStyle[i] = SyntaxUtilities.parseStyle( + getProperty("view.style.foldLine." + i), + defaultFont,defaultFontSize,true); + } + painter.setFoldLineStyle(foldLineStyle); + } //}}} + + //{{{ + // The following methods are copied from jEdit.java and refer to the propertyManager passed + // to the constructor. + //}}} + + //{{{ getProperty() method + public String getProperty(String name) + { + return propertyManager.getProperty(name); + } //}}} + + //{{{ getBooleanProperty() method + /** + * Returns the value of a boolean property. + * @param name The property + */ + private boolean getBooleanProperty(String name) + { + return getBooleanProperty(name,false); + } //}}} + + //{{{ getBooleanProperty() method + /** + * Returns the value of a boolean property. + * @param name The property + * @param def The default value + */ + private boolean getBooleanProperty(String name, boolean def) + { + String value = getProperty(name); + if(value == null) + return def; + else if(value.equals("true") || value.equals("yes") + || value.equals("on")) + return true; + else if(value.equals("false") || value.equals("no") + || value.equals("off")) + return false; + else + return def; + } //}}} + + //{{{ getIntegerProperty() method + /** + * Returns the value of an integer property. + * @param name The property + */ + private int getIntegerProperty(String name) + { + return getIntegerProperty(name,0); + } //}}} + + //{{{ getIntegerProperty() method + /** + * Returns the value of an integer property. + * @param name The property + * @param def The default value + * @since jEdit 4.0pre1 + */ + private int getIntegerProperty(String name, int def) + { + String value = getProperty(name); + if(value == null) + return def; + else + { + try + { + return Integer.parseInt(value.trim()); + } + catch(NumberFormatException nf) + { + return def; + } + } + } //}}} + + + //{{{ getFontProperty() method + /** + * Returns the value of a font property. The family is stored + * in the <code><i>name</i></code> property, the font size is stored + * in the <code><i>name</i>size</code> property, and the font style is + * stored in <code><i>name</i>style</code>. For example, if + * <code><i>name</i></code> is <code>view.gutter.font</code>, the + * properties will be named <code>view.gutter.font</code>, + * <code>view.gutter.fontsize</code>, and + * <code>view.gutter.fontstyle</code>. + * + * @param name The property + * @since jEdit 4.0pre1 + */ + private Font getFontProperty(String name) + { + return getFontProperty(name,null); + } //}}} + + /** + * Returns the value of a font property. The family is stored + * in the <code><i>name</i></code> property, the font size is stored + * in the <code><i>name</i>size</code> property, and the font style is + * stored in <code><i>name</i>style</code>. For example, if + * <code><i>name</i></code> is <code>view.gutter.font</code>, the + * properties will be named <code>view.gutter.font</code>, + * <code>view.gutter.fontsize</code>, and + * <code>view.gutter.fontstyle</code>. + * + * @param name The property + * @param def The default value + * @since jEdit 4.0pre1 + */ + private Font getFontProperty(String name, Font def) + { + String family = getProperty(name); + String sizeString = getProperty(name + "size"); + String styleString = getProperty(name + "style"); + + if(family == null || sizeString == null || styleString == null) + return def; + else + { + int size, style; + + try + { + size = Integer.parseInt(sizeString); + } + catch(NumberFormatException nf) + { + return def; + } + + try + { + style = Integer.parseInt(styleString); + } + catch(NumberFormatException nf) + { + return def; + } + + return new Font(family,style,size); + } + } //}}} + + //{{{ getColorProperty() method + /** + * Returns the value of a color property. + * @param name The property name + * @since jEdit 4.0pre1 + */ + private Color getColorProperty(String name) + { + return getColorProperty(name,Color.black); + } //}}} + + //{{{ getColorProperty() method + /** + * Returns the value of a color property. + * @param name The property name + * @param def The default value + * @since jEdit 4.0pre1 + */ + private Color getColorProperty(String name, Color def) + { + String value = getProperty(name); + if(value == null) + return def; + else + return SyntaxUtilities.parseColor(value, def); + } //}}} + + + //{{{ propertiesChanged() method + /** + * Reinitializes the textarea by reading the properties from the property manager + */ + @Override + public void propertiesChanged() + { + initTextArea(); + super.propertiesChanged(); + } //}}} + + //{{{ createPopupMenu() method + /** + * Creates the popup menu. + * @since 4.3pre15 + */ + public void createPopupMenu(MouseEvent evt) + { + popup = new JPopupMenu(); + addMenuItem("undo", "Undo"); + addMenuItem("redo", "Redo"); + popup.addSeparator(); + addMenuItem("cut", "Cut"); + addMenuItem("copy", "Copy"); + addMenuItem("paste", "Paste"); + } //}}} + + //{{{ addMenuItem() method + /** + * Adds a menu item from the action context to the popup menu and returns the item. + * @return the menu item added + */ + public JMenuItem addMenuItem(String action, String label) + { + final JEditBeanShellAction shellAction = getActionContext().getAction(action); + if (shellAction == null) + return null ; + JMenuItem item = new JMenuItem(); + item.setAction(new AbstractAction(label) + { + public void actionPerformed(ActionEvent e) + { + shellAction.invoke(StandaloneTextArea.this); + } + }); + popup.add(item); + return item; + } //}}} + + //{{{ createTextArea() method + /** + * Create a standalone TextArea. + * If you want to use it in jEdit, please use {@link org.gjt.sp.jedit.jEdit#createTextArea()} + * + * @return a textarea + * @since 4.3pre13 + */ + public static StandaloneTextArea createTextArea() + { + final Properties props = new Properties(); + props.putAll(loadProperties("/org/gjt/sp/jedit/jedit_keys.props")); + props.putAll(loadProperties("/org/gjt/sp/jedit/jedit.props")); + StandaloneTextArea textArea = new StandaloneTextArea(new IPropertyManager() + { + public String getProperty(String name) + { + return props.getProperty(name); + } + }); + textArea.getBuffer().setProperty("folding", "explicit"); + return textArea; + } // }}} + + //{{{ loadProperties() method + private static Properties loadProperties(String fileName) + { + Properties props = new Properties(); + InputStream in = TextArea.class.getResourceAsStream(fileName); + try + { + props.load(in); + } + catch (IOException e) + { + Log.log(Log.ERROR, TextArea.class, e); + } + finally + { + IOUtilities.closeQuietly(in); + } + return props; + } //}}} + + //{{{ main() method + public static void main(String[] args) + { + JFrame frame = new JFrame(); + TextArea text = createTextArea(); + Mode mode = new Mode("xml"); + mode.setProperty("file","modes/xml.xml"); + ModeProvider.instance.addMode(mode); + text.getBuffer().setMode(mode); + frame.getContentPane().add(text); + frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + frame.pack(); + frame.setVisible(true); + } //}}} +} Modified: jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java 2008-09-11 19:01:29 UTC (rev 13642) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java 2008-09-11 21:45:52 UTC (rev 13643) @@ -24,23 +24,17 @@ package org.gjt.sp.jedit.textarea; //{{{ Imports -import java.io.IOException; import java.util.EventObject; -import org.gjt.sp.jedit.Debug; -import org.gjt.sp.jedit.Mode; -import org.gjt.sp.jedit.TextUtilities; -import org.gjt.sp.jedit.buffer.*; + import org.gjt.sp.jedit.input.AbstractInputHandler; import org.gjt.sp.jedit.input.DefaultInputHandlerProvider; import org.gjt.sp.jedit.input.InputHandlerProvider; import org.gjt.sp.jedit.input.TextAreaInputHandler; import org.gjt.sp.jedit.syntax.Chunk; -import org.gjt.sp.jedit.syntax.TokenMarker; -import org.gjt.sp.jedit.syntax.ParserRuleSet; -import org.gjt.sp.jedit.syntax.ModeProvider; +import org.gjt.sp.jedit.*; +import org.gjt.sp.jedit.buffer.JEditBuffer; import org.gjt.sp.util.Log; import org.gjt.sp.util.StandardUtilities; -import org.gjt.sp.util.SyntaxUtilities; import javax.swing.*; import javax.swing.event.CaretEvent; @@ -52,17 +46,9 @@ import java.awt.*; import java.awt.event.*; import java.awt.im.InputMethodRequests; -import java.io.InputStream; import java.util.Iterator; import java.util.LinkedList; -import java.util.Properties; import java.util.TooManyListenersException; - -import org.gjt.sp.jedit.IPropertyManager; -import org.gjt.sp.jedit.JEditActionContext; -import org.gjt.sp.jedit.JEditActionSet; -import org.gjt.sp.jedit.JEditBeanShellAction; -import org.gjt.sp.util.IOUtilities; //}}} /** @@ -77,189 +63,15 @@ * @author John Gellene (API documentation) * @version $Id: JEditTextArea.java 7148 2006-09-29 23:09:06 +0200 (ven., 29 sept. 2006) kpouer $ */ -public class TextArea extends JComponent +public abstract class TextArea extends JComponent { //{{{ TextArea constructor /** - * Instantiate a TextArea. - * @param propertyManager the property manager that contains informations like shortcut bindings - * @param insideJEdit must be set to true if the textarea is embedded in jEdit - */ - public TextArea(IPropertyManager propertyManager, boolean insideJEdit) - { - this(propertyManager, null); - actionContext = new JEditActionContext<JEditBeanShellAction, JEditActionSet<JEditBeanShellAction>>() - { - @Override - public void invokeAction(EventObject evt, JEditBeanShellAction action) - { - action.invoke(TextArea.this); - } - }; - - setMouseHandler(new TextAreaMouseHandler(this)); - TextAreaInputHandler inputHandler = new TextAreaInputHandler(this) - { - @Override - protected JEditBeanShellAction getAction(String action) - { - return actionContext.getAction(action); - } - }; - - inputHandlerProvider = new DefaultInputHandlerProvider(inputHandler); - if (insideJEdit) - { - return; - } - - - //{{{ init Style property manager - if (SyntaxUtilities.propertyManager == null) - { - final Properties props = new Properties(); - InputStream in = TextArea.class.getResourceAsStream("/org/gjt/sp/jedit/jedit.props"); - try - { - props.load(in); - } - catch (IOException e) - { - Log.log(Log.ERROR, TextArea.class, e); - } - finally - { - IOUtilities.closeQuietly(in); - } - SyntaxUtilities.propertyManager = new IPropertyManager() - { - public String getProperty(String name) - { - return props.getProperty(name); - } - }; - } - //}}} - - String defaultFont = SyntaxUtilities.propertyManager.getProperty("view.font"); - int defaultFontSize; - try - { - defaultFontSize = Integer.parseInt(SyntaxUtilities.propertyManager.getProperty("view.fontsize")); - } - catch (NumberFormatException e) - { - defaultFontSize = 12; - } - - /*Font font1 = new Font("Monospaced", Font.PLAIN, 12); - painter.setFont(font1); - SyntaxStyle[] styles = new SyntaxStyle[1]; - styles[0] = new SyntaxStyle(Color.black, Color.white, font1);*/ - //painter.setStyles(styles); - - - painter.setBlockCaretEnabled(false); - - String name = SyntaxUtilities.propertyManager.getProperty("view.font"); - String family = SyntaxUtilities.propertyManager.getProperty(name); - String sizeString = SyntaxUtilities.propertyManager.getProperty(name + "size"); - String styleString = SyntaxUtilities.propertyManager.getProperty(name + "style"); - - //{{{ get font, copy of jEdit.getFontPropert() - Font font; - if(family == null || sizeString == null || styleString == null) - font = new Font("Monospaced", Font.PLAIN, 12); - else - { - int size, style; - - try - { - size = Integer.parseInt(sizeString); - } - catch(NumberFormatException nf) - { - size = 12; - } - - try - { - style = Integer.parseInt(styleString); - } - catch(NumberFormatException nf) - { - style = Font.PLAIN; - } - font = new Font(family,style,size); - - } //}}} - - - painter.setFont(font); - - - painter.setStructureHighlightEnabled(true); - painter.setStructureHighlightColor(Color.black); - painter.setEOLMarkersPainted(false); - painter.setEOLMarkerColor(new Color(255,102,51)); - painter.setWrapGuidePainted(true); - painter.setWrapGuideColor(new Color(125,125,255)); - painter.setCaretColor(Color.red); - painter.setSelectionColor(new Color(204,204,255)); - painter.setMultipleSelectionColor(new Color(204,255,204)); - painter.setBackground(Color.white); - painter.setForeground(Color.black); - painter.setBlockCaretEnabled(false); - painter.setLineHighlightEnabled(true); - painter.setLineHighlightColor(new Color(255,204,255)); - painter.setAntiAlias(new AntiAlias(0)); - painter.setFractionalFontMetricsEnabled(false); - - painter.setStyles(SyntaxUtilities.loadStyles(defaultFont,defaultFontSize)); - - gutter.setExpanded(false); - gutter.setHighlightInterval(5); - gutter.setCurrentLineHighlightEnabled(true); - gutter.setStructureHighlightEnabled(true); - gutter.setStructureHighlightColor(new Color(102,102,153)); - gutter.setBackground(new Color(219,219,219)); - gutter.setForeground(Color.black); - gutter.setHighlightedForeground(new Color(153,0,102)); - gutter.setFoldColor(new Color(131,131,131)); - gutter.setCurrentLineForeground(new Color(255,0,51)); - gutter.setLineNumberAlignment(Gutter.RIGHT); - gutter.setFont(new Font("Monospaced", Font.PLAIN, 10)); - gutter.setBorder(3, new Color(153,0,153), Color.white, painter.getBackground()); - - setCaretBlinkEnabled(true); - setElectricScroll(3); - - DefaultFoldHandlerProvider foldHandlerProvider = new DefaultFoldHandlerProvider(); - - FoldHandler.foldHandlerProvider = foldHandlerProvider; - foldHandlerProvider.addFoldHandler(new ExplicitFoldHandler()); - foldHandlerProvider.addFoldHandler(new IndentFoldHandler()); - foldHandlerProvider.addFoldHandler(new DummyFoldHandler()); - JEditBuffer buffer = new JEditBuffer(); - TokenMarker tokenMarker = new TokenMarker(); - tokenMarker.addRuleSet(new ParserRuleSet("text","MAIN")); - buffer.setTokenMarker(tokenMarker); - setBuffer(buffer); - Mode mode = new Mode("text"); - mode.setTokenMarker(tokenMarker); - ModeProvider.instance.addMode(mode); - KillRing.setInstance(new KillRing()); - KillRing.getInstance().propertiesChanged(100); - } //}}} - - //{{{ TextArea constructor - /** * Creates a new JEditTextArea. * @param propertyManager the property manager that contains informations like shortcut bindings * @param inputHandlerProvider the inputHandlerProvider */ - public TextArea(IPropertyManager propertyManager, InputHandlerProvider inputHandlerProvider) + protected TextArea(IPropertyManager propertyManager, InputHandlerProvider inputHandlerProvider) { this.inputHandlerProvider = inputHandlerProvider; enableEvents(AWTEvent.FOCUS_EVENT_MASK | AWTEvent.KEY_EVENT_MASK); @@ -326,8 +138,42 @@ // (eg, from the recent file list) focusedComponent = this; + popupEnabled = true; } //}}} + //{{{ initInputHandler() method + /** + * Creates an actionContext and initializes the input handler for this textarea. Called when creating + * a standalone textarea from within jEdit. See {@link jEdit#createTextArea()} + */ + public void initInputHandler() + { + actionContext = new JEditActionContext<JEditBeanShellAction, JEditActionSet<JEditBeanShellAction>>() + { + @Override + public void invokeAction(EventObject evt, JEditBeanShellAction action) + { + action.invoke(TextArea.this); + } + }; + + setMouseHandler(new TextAreaMouseHandler(this)); + inputHandlerProvider = new DefaultInputHandlerProvider(new TextAreaInputHandler(this) + { + @Override + protected JEditBeanShellAction getAction(String action) + { + return actionContext.getAction(action); + } + }); + } //}}} + + //{{{ getActionContext() method + public JEditActionContext<JEditBeanShellAction,JEditActionSet<JEditBeanShellAction>> getActionContext() + { + return actionContext; + } //}}} + //{{{ setMouseHandler() method public void setMouseHandler(MouseInputAdapter mouseInputAdapter) { @@ -4340,7 +4186,7 @@ for(int i = 0; i < selection.length; i++) { Selection s = selection[i]; - setSelectedText(s,TextUtilities.tabsToSpaces( + setSelectedText(s, TextUtilities.tabsToSpaces( getSelectedText(s),buffer.getTabSize())); } } @@ -5125,6 +4971,9 @@ //}}} //{{{ Instance variables + protected JPopupMenu popup; + + private boolean popupEnabled; protected Cursor hiddenCursor; private final Gutter gutter; @@ -5134,8 +4983,8 @@ private final MutableCaretEvent caretEvent; private boolean caretBlinks; - private InputHandlerProvider inputHandlerProvider; - + protected InputHandlerProvider inputHandlerProvider; + private InputMethodSupport inputMethodSupport; /** The last visible physical line index. */ @@ -6013,6 +5862,192 @@ } //}}} //}}} + //{{{ isRightClickPopupEnabled() method + /** + * Returns if the right click popup menu is enabled. The Gestures + * plugin uses this API. + * @since jEdit 4.2pre13 + */ + public boolean isRightClickPopupEnabled() + { + return popupEnabled; + } //}}} + + //{{{ setRightClickPopupEnabled() method + /** + * Sets if the right click popup menu is enabled. The Gestures + * plugin uses this API. + * @since jEdit 4.2pre13 + */ + public void setRightClickPopupEnabled(boolean popupEnabled) + { + this.popupEnabled = popupEnabled; + } //}}} + + //{{{ getRightClickPopup() method + /** + * Returns the right click popup menu. + */ + public final JPopupMenu getRightClickPopup() + { + return popup; + } //}}} + + //{{{ setRightClickPopup() method + /** + * Sets the right click popup menu. + * @param popup The popup + */ + public final void setRightClickPopup(JPopupMenu popup) + { + this.popup = popup; + } //}}} + + //{{{ handlePopupTrigger() method + /** + * Do the same thing as right-clicking on the text area. The Gestures + * plugin uses this API. + * @since jEdit 4.2pre13 + */ + public void handlePopupTrigger(MouseEvent evt) + { + // Rebuild popup menu every time the menu is requested. + createPopupMenu(evt); + + int x = evt.getX(); + int y = evt.getY(); + + int dragStart = xyToOffset(x,y, + !(painter.isBlockCaretEnabled() + || isOverwriteEnabled())); + + if(getSelectionCount() == 0 || multi) + moveCaretPosition(dragStart,false); + showPopupMenu(popup,this,x,y,false); + } //}}} + + //{{{ createPopupMenu() method + /** + * Creates the popup menu. + * @since 4.3pre15 + */ + public void createPopupMenu(MouseEvent evt) + { + popup = new JPopupMenu(); + } //}}} + + //{{{ showPopupMenu() method + /** + * Shows the popup menu below the current caret position. + * @since 4.3pre10 + */ + public void showPopupMenu() + { + if (!popup.isVisible() && hasFocus()) + { + Point caretPos = offsetToXY(getCaretPosition()); + if (caretPos != null) { + // Open the context menu below the caret + int charHeight = getPainter().getFontMetrics().getHeight(); + showPopupMenu(popup, + painter,caretPos.x,caretPos.y + charHeight,true); + } + } + } //}}} + + //{{{ showPopupMenu() method - copied from GUIUtilities + /** + * Shows the specified popup menu, ensuring it is displayed within + * the bounds of the screen. + * @param popup The popup menu + * @param comp The component to show it for + * @param x The x co-ordinate + * @param y The y co-ordinate + * @param point If true, then the popup originates from a single point; + * otherwise it will originate from the component itself. This affects + * positioning in the case where the popup does not fit onscreen. + * + * @since jEdit 4.1pre1 + */ + private void showPopupMenu(JPopupMenu popup, Component comp, + int x, int y, boolean point) + { + int offsetX = 0; + int offsetY = 0; + + int extraOffset = (point ? 1 : 0); + + Component win = comp; + while(!(win instanceof Window || win == null)) + { + offsetX += win.getX(); + offsetY += win.getY(); + win = win.getParent(); + } + + if(win != null) + { + Dimension size = popup.getPreferredSize(); + + Rectangle screenSize = new Rectangle(); + + GraphicsEnvironment ge = GraphicsEnvironment + .getLocalGraphicsEnvironment(); + + GraphicsDevice[] devices = ge.getScreenDevices(); + + for (int j = 0; j < devices.length; j++) + { + GraphicsDevice device = devices[j]; + + GraphicsConfiguration[] gc = + device.getConfigurations(); + + for (int i=0; i < gc.length; i++) + { + screenSize = + screenSize.union( + gc[i].getBounds()); + } + } + + if(x + offsetX + size.width + win.getX() > screenSize.width + && x + offsetX + win.getX() >= size.width) + { + //System.err.println("x overflow"); + if(point) + x -= (size.width + extraOffset); + else + x = (win.getWidth() - size.width - offsetX + extraOffset); + } + else + { + x += extraOffset; + } + + //System.err.println("y=" + y + ",offsetY=" + offsetY + // + ",size.height=" + size.height + // + ",win.height=" + win.getHeight()); + if(y + offsetY + size.height + win.getY() > screenSize.height + && y + offsetY + win.getY() >= size.height) + { + if(point) + y = (win.getHeight() - size.height - offsetY + extraOffset); + else + y = -size.height - 1; + } + else + { + y += extraOffset; + } + + popup.show(comp,x,y); + } + else + popup.show(comp,x + extraOffset,y + extraOffset); + + } //}}} + //{{{ Inner classes //{{{ CaretBlinker class @@ -6159,12 +6194,12 @@ * The actionSet for standalone textArea. * @author Matthieu Casanova */ - private static class StandaloneActionSet extends JEditActionSet<JEditBeanShellAction> + protected static class StandaloneActionSet extends JEditActionSet<JEditBeanShellAction> { private final IPropertyManager iPropertyManager; private final TextArea textArea; - private StandaloneActionSet(IPropertyManager iPropertyManager, TextArea textArea) + StandaloneActionSet(IPropertyManager iPropertyManager, TextArea textArea) { super(null, TextArea.class.getResource("textarea.actions.xml")); this.iPropertyManager = iPropertyManager; @@ -6219,91 +6254,4 @@ structureTimer.setInitialDelay(100); structureTimer.setRepeats(false); } //}}} - - //{{{ _createTextArea() method - /** - * Create a standalone textArea. - * @param insidejEdit true if we are in jEdit, false otherwise - * @param iPropertyManager the property manager that will provide properties - * @return the new textarea - */ - public static TextArea _createTextArea(boolean insidejEdit, final IPropertyManager iPropertyManager) - { - final TextArea textArea = new TextArea(iPropertyManager, insidejEdit); - textArea.setMouseHandler(new TextAreaMouseHandler(textArea)); - // todo : make TextareaTransferHandler standalone -// textArea.setTransferHandler(new TextAreaTransferHandler()); - - StandaloneActionSet actionSet = new StandaloneActionSet(iPropertyManager, textArea); - - textArea.addActionSet(actionSet); - actionSet.load(); - actionSet.initKeyBindings(); - return textArea; - } //}}} - - //{{{ createTextArea() method - /** - * Create a standalone TextArea. - * If you want to use it in jEdit, please use {@link org.gjt.sp.jedit.jEdit#createTextArea()} - * - * @param iPropertyManager the properties where key bindings are stored - * @return a textarea - * @since 4.3pre13 - */ - public static TextArea createTextArea(IPropertyManager iPropertyManager) - { - TextArea textArea = _createTextArea(false, iPropertyManager); - return textArea; - } // }}} - - //{{{ createTextArea() method - /** - * Create a standalone TextArea. - * If you want to use it in jEdit, please use {@link org.gjt.sp.jedit.jEdit#createTextArea()} - * - * @return a textarea - * @since 4.3pre13 - */ - public static TextArea createTextArea() - { - final Properties props = new Properties(); - InputStream in = TextArea.class.getResourceAsStream("/org/gjt/sp/jedit/jedit_keys.props"); - try - { - props.load(in); - } - catch (IOException e) - { - Log.log(Log.ERROR, TextArea.class, e); - } - finally - { - IOUtilities.closeQuietly(in); - } - TextArea textArea = _createTextArea(false, new IPropertyManager() - { - public String getProperty(String name) - { - return props.getProperty(name); - } - }); - textArea.getBuffer().setProperty("folding", "explicit"); - return textArea; - } // }}} - - //{{{ main() method - public static void main(String[] args) - { - JFrame frame = new JFrame(); - TextArea text = createTextArea(); - Mode mode = new Mode("xml"); - mode.setProperty("file","modes/xml.xml"); - ModeProvider.instance.addMode(mode); - text.getBuffer().setMode(mode); - frame.getContentPane().add(text); - frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); - frame.pack(); - frame.setVisible(true); - } //}}} } Modified: jEdit/trunk/org/gjt/sp/jedit/textarea/TextAreaMouseHandler.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/TextAreaMouseHandler.java 2008-09-11 19:01:29 UTC (rev 13642) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/TextAreaMouseHandler.java 2008-09-11 21:45:52 UTC (rev 13643) @@ -79,6 +79,11 @@ dragStartOffset = dragStart - textArea.getLineStartOffset( dragStartLine); + if(isPopupTrigger(evt) && textArea.isRightClickPopupEnabled()) + { + textArea.handlePopupTrigger(evt); + return; + } dragged = false; Modified: jEdit/trunk/org/gjt/sp/jedit/textarea/TextAreaPainter.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/TextAreaPainter.java 2008-09-11 19:01:29 UTC (rev 13642) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/TextAreaPainter.java 2008-09-11 21:45:52 UTC (rev 13643) @@ -686,7 +686,7 @@ if(textArea.getBuffer() != null && !textArea.getBuffer().isLoading()) textArea.recalculateLastPhysicalLine(); - textArea.propertiesChanged(); + //textArea.propertiesChanged(); } //}}} //{{{ getStringWidth() method Modified: jEdit/trunk/org/gjt/sp/jedit/textarea/textarea.actions.xml =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/textarea.actions.xml 2008-09-11 19:01:29 UTC (rev 13642) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/textarea.actions.xml 2008-09-11 21:45:52 UTC (rev 13643) @@ -164,12 +164,6 @@ </CODE> </ACTIO... [truncated message content] |
From: <kp...@us...> - 2008-09-11 22:08:00
|
Revision: 13644 http://jedit.svn.sourceforge.net/jedit/?rev=13644&view=rev Author: kpouer Date: 2008-09-11 22:07:58 +0000 (Thu, 11 Sep 2008) Log Message: ----------- When a bufferSet is sorted, dragging a buffer in BufferTabs plugin was not possible (#2100690) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/bufferset/BufferSet.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-09-11 21:45:52 UTC (rev 13643) +++ jEdit/trunk/doc/CHANGES.txt 2008-09-11 22:07:58 UTC (rev 13644) @@ -2,9 +2,9 @@ {{{ Version 4.3pre16 -Thanks to Bj\xF6rn "Vampire" Kautler, Kazutoshi Satoda, Matthieu Casanova, -Alan Ezust, Shlomy Reinstein, Greg Merrill, Kevin Hunter, and Eric Berry for -contributing to this release. +Thanks to Bj\xF6rn "Vampire" Kautler, Kazutoshi Satoda, Dakshinamurthy Karra, +Matthieu Casanova, Alan Ezust, Shlomy Reinstein, Greg Merrill, Kevin Hunter, and +Eric Berry for contributing to this release. {{{ Bug Fixes @@ -30,6 +30,9 @@ - The action on new bufferSet creation was not stored correctly in properties causing sometimes NPE (Matthieu Casanova) + +- When a bufferSet is sorted, dragging a buffer in BufferTabs plugin was not + possible (#2100690) (Matthieu Casanova) }}} {{{ Miscellaneous @@ -83,6 +86,10 @@ - A new service, DockableWindowManagerProvider, makes it possible for plugins to offer alternate docking managers. (Shlomy Reinstein) +- Embedded textarea refactoring for better usability. + Now a software that wants to use the jEdit's textarea must instantiate the + class StandaloneTextArea, and for use in a jEdit's plugin + JEditEmbeddedTextArea (patch #2096752) (Dakshinamurthy Karra) }}} }}} Modified: jEdit/trunk/org/gjt/sp/jedit/bufferset/BufferSet.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/bufferset/BufferSet.java 2008-09-11 21:45:52 UTC (rev 13643) +++ jEdit/trunk/org/gjt/sp/jedit/bufferset/BufferSet.java 2008-09-11 22:07:58 UTC (rev 13644) @@ -97,10 +97,10 @@ } } + if (sorter != null && buffers.contains(buffer)) + sorter = null; if (sorter != null) { - if (buffers.contains(buffer)) - return; buffers.add(buffer); Collections.sort(buffers, sorter); position = buffers.indexOf(buffer); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2008-09-11 22:25:31
|
Revision: 13645 http://jedit.svn.sourceforge.net/jedit/?rev=13645&view=rev Author: kpouer Date: 2008-09-11 22:25:28 +0000 (Thu, 11 Sep 2008) Log Message: ----------- applied patch 2011419 Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/modes/catalog Added Paths: ----------- jEdit/trunk/modes/cmake.xml Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-09-11 22:07:58 UTC (rev 13644) +++ jEdit/trunk/doc/CHANGES.txt 2008-09-11 22:25:28 UTC (rev 13645) @@ -3,8 +3,8 @@ {{{ Version 4.3pre16 Thanks to Bj\xF6rn "Vampire" Kautler, Kazutoshi Satoda, Dakshinamurthy Karra, -Matthieu Casanova, Alan Ezust, Shlomy Reinstein, Greg Merrill, Kevin Hunter, and -Eric Berry for contributing to this release. +Matthieu Casanova, Alan Ezust, Bernhard Walle, Shlomy Reinstein, Greg Merrill, +Kevin Hunter, and Eric Berry for contributing to this release. {{{ Bug Fixes @@ -91,6 +91,9 @@ class StandaloneTextArea, and for use in a jEdit's plugin JEditEmbeddedTextArea (patch #2096752) (Dakshinamurthy Karra) }}} +{{{ Editing +- New cmake mode (patch #2011419) (Bernhard Walle) +}}} }}} Modified: jEdit/trunk/modes/catalog =================================================================== --- jEdit/trunk/modes/catalog 2008-09-11 22:07:58 UTC (rev 13644) +++ jEdit/trunk/modes/catalog 2008-09-11 22:25:28 UTC (rev 13645) @@ -86,6 +86,9 @@ <MODE NAME="clips" FILE="clips.xml" FILE_NAME_GLOB="*.clp" /> +<MODE NAME="cmake" FILE="cmake.xml" + FILE_NAME_GLOB="CMakeLists.txt"/> + <MODE NAME="cobol" FILE="cobol.xml" FILE_NAME_GLOB="*.cbl" /> Added: jEdit/trunk/modes/cmake.xml =================================================================== --- jEdit/trunk/modes/cmake.xml (rev 0) +++ jEdit/trunk/modes/cmake.xml 2008-09-11 22:25:28 UTC (rev 13645) @@ -0,0 +1,186 @@ +<?xml version="1.0"?> +<!DOCTYPE MODE SYSTEM "xmode.dtd"> +<!-- +jEdit Syntax Mode for cmake +Last change: 2008-07-05 +Author: Bernhard Walle <ber...@gm...> + +<MODE NAME="cmake" FILE="cmake.xml" FILE_NAME_GLOB="CMakeLists.txt"/> + +see http://jedit.org/users-guide/installing-modes.html +--> +<MODE> + <PROPS> + <PROPERTY NAME="lineCommenti" VALUE="#"/> + + <PROPERTY NAME="indentSize" VALUE="4"/> + <PROPERTY NAME="firstlineGlob" VALUE=""/> + <PROPERTY NAME="wrap" VALUE="none"/> + <PROPERTY NAME="noTabs" VALUE="false"/> + <PROPERTY NAME="tabSize" VALUE="8"/> + <PROPERTY NAME="maxLineLen" VALUE="0"/> + <PROPERTY NAME="noWordSep" VALUE="_"/> + <PROPERTY NAME="folding" VALUE="none"/> + <PROPERTY NAME="filenameGlob" VALUE="CMakeLists.txt"/> + <PROPERTY NAME="customSettings" VALUE="true"/> + <PROPERTY NAME="deepIndent" VALUE="false"/> + <PROPERTY NAME="collapseFolds" VALUE="1000"/> + </PROPS> + <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE"> + + <!-- Comments --> + <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN> + + <!-- variables --> + <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE"> + <BEGIN>${</BEGIN> + <END>}</END> + </SPAN> + <MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING> + + <!-- string literals --> + <SPAN TYPE="LITERAL1" DELEGATE="LITERAL"> + <BEGIN>"</BEGIN> + <END>"</END> + </SPAN> + + <!-- Function calls --> + <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS> + <SEQ TYPE="OPERATOR">)</SEQ> + + <KEYWORDS> + <!-- operators --> + <OPERATOR>AND</OPERATOR> + <OPERATOR>BOOL</OPERATOR> + <OPERATOR>CACHE</OPERATOR> + <OPERATOR>COMMAND</OPERATOR> + <OPERATOR>DEFINED</OPERATOR> + <OPERATOR>DOC</OPERATOR> + <OPERATOR>EQUAL</OPERATOR> + <OPERATOR>EXISTS</OPERATOR> + <OPERATOR>FALSE</OPERATOR> + <OPERATOR>GREATER</OPERATOR> + <OPERATOR>INTERNAL</OPERATOR> + <OPERATOR>LESS</OPERATOR> + <OPERATOR>MATCHES</OPERATOR> + <OPERATOR>NAME</OPERATOR> + <OPERATOR>NAMES</OPERATOR> + <OPERATOR>NAME_WE</OPERATOR> + <OPERATOR>NOT</OPERATOR> + <OPERATOR>OFF</OPERATOR> + <OPERATOR>ON</OPERATOR> + <OPERATOR>OR</OPERATOR> + <OPERATOR>PATH</OPERATOR> + <OPERATOR>PATHS</OPERATOR> + <OPERATOR>PROGRAM</OPERATOR> + <OPERATOR>STREQUAL</OPERATOR> + <OPERATOR>STRGREATER</OPERATOR> + <OPERATOR>STRING</OPERATOR> + <OPERATOR>STRLESS</OPERATOR> + <OPERATOR>TRUE</OPERATOR> + + <!-- conditionals --> + <KEYWORD4>FOREACH</KEYWORD4> + <KEYWORD4>ELSE</KEYWORD4> + <KEYWORD4>IF</KEYWORD4> + <KEYWORD4>MACRO</KEYWORD4> + <KEYWORD4>ENDIF</KEYWORD4> + <KEYWORD4>ENDWHILE</KEYWORD4> + <KEYWORD4>ENDFOREACH</KEYWORD4> + <KEYWORD4>ENDMACRO</KEYWORD4> + <KEYWORD4>WHILE</KEYWORD4> + + <!-- default function names --> + <KEYWORD2>ADD_CUSTOM_COMMAND</KEYWORD2> + <KEYWORD2>ADD_CUSTOM_TARGET</KEYWORD2> + <KEYWORD2>ADD_DEFINITIONS</KEYWORD2> + <KEYWORD2>ADD_DEPENDENCIES</KEYWORD2> + <KEYWORD2>ADD_EXECUTABLE</KEYWORD2> + <KEYWORD2>ADD_LIBRARY</KEYWORD2> + <KEYWORD2>ADD_SUBDIRECTORY</KEYWORD2> + <KEYWORD2>ADD_TEST</KEYWORD2> + <KEYWORD2>AUX_SOURCE_DIRECTORY</KEYWORD2> + <KEYWORD2>BUILD_COMMAND</KEYWORD2> + <KEYWORD2>BUILD_NAME</KEYWORD2> + <KEYWORD2>CMAKE_MINIMUM_REQUIRED</KEYWORD2> + <KEYWORD2>CONFIGURE_FILE</KEYWORD2> + <KEYWORD2>CREATE_TEST_SOURCELIST</KEYWORD2> + <KEYWORD2>ENABLE_LANGUAGE</KEYWORD2> + <KEYWORD2>ENABLE_TESTING</KEYWORD2> + <KEYWORD2>EXEC_PROGRAM</KEYWORD2> + <KEYWORD2>EXECUTE_PROCESS</KEYWORD2> + <KEYWORD2>EXPORT_LIBRARY_DEPENDENCIES</KEYWORD2> + <KEYWORD2>FILE</KEYWORD2> + <KEYWORD2>FIND_FILE</KEYWORD2> + <KEYWORD2>FIND_LIBRARY</KEYWORD2> + <KEYWORD2>FIND_PACKAGE</KEYWORD2> + <KEYWORD2>FIND_PATH</KEYWORD2> + <KEYWORD2>FIND_PROGRAM</KEYWORD2> + <KEYWORD2>FLTK_WRAP_UI</KEYWORD2> + <KEYWORD2>GET_CMAKE_PROPERTY</KEYWORD2> + <KEYWORD2>GET_DIRECTORY_PROPERTY</KEYWORD2> + <KEYWORD2>GET_FILENAME_COMPONENT</KEYWORD2> + <KEYWORD2>GET_SOURCE_FILE_PROPERTY</KEYWORD2> + <KEYWORD2>GET_TARGET_PROPERTY</KEYWORD2> + <KEYWORD2>GET_TEST_PROPERTY</KEYWORD2> + <KEYWORD2>INCLUDE</KEYWORD2> + <KEYWORD2>INCLUDE_DIRECTORIES</KEYWORD2> + <KEYWORD2>INCLUDE_EXTERNAL_MSPROJECT</KEYWORD2> + <KEYWORD2>INCLUDE_REGULAR_EXPRESSION</KEYWORD2> + <KEYWORD2>INSTALL</KEYWORD2> + <KEYWORD2>INSTALL_FILES</KEYWORD2> + <KEYWORD2>INSTALL_PROGRAMS</KEYWORD2> + <KEYWORD2>INSTALL_TARGETS</KEYWORD2> + <KEYWORD2>LINK_DIRECTORIES</KEYWORD2> + <KEYWORD2>LINK_LIBRARIES</KEYWORD2> + <KEYWORD2>LIST</KEYWORD2> + <KEYWORD2>LOAD_CACHE</KEYWORD2> + <KEYWORD2>LOAD_COMMAND</KEYWORD2> + <KEYWORD2>MAKE_DIRECTORY</KEYWORD2> + <KEYWORD2>MARK_AS_ADVANCED</KEYWORD2> + <KEYWORD2>MATH</KEYWORD2> + <KEYWORD2>MESSAGE</KEYWORD2> + <KEYWORD2>OPTION</KEYWORD2> + <KEYWORD2>OUTPUT_REQUIRED_FILES</KEYWORD2> + <KEYWORD2>PROJECT</KEYWORD2> + <KEYWORD2>QT_WRAP_CPP</KEYWORD2> + <KEYWORD2>QT_WRAP_UI</KEYWORD2> + <KEYWORD2>REMOVE</KEYWORD2> + <KEYWORD2>REMOVE_DEFINITIONS</KEYWORD2> + <KEYWORD2>SEPARATE_ARGUMENTS</KEYWORD2> + <KEYWORD2>SET</KEYWORD2> + <KEYWORD2>SET_DIRECTORY_PROPERTIES</KEYWORD2> + <KEYWORD2>SET_SOURCE_FILES_PROPERTIES</KEYWORD2> + <KEYWORD2>SET_TARGET_PROPERTIES</KEYWORD2> + <KEYWORD2>SET_TESTS_PROPERTIES</KEYWORD2> + <KEYWORD2>SITE_NAME</KEYWORD2> + <KEYWORD2>SOURCE_GROUP</KEYWORD2> + <KEYWORD2>STRING</KEYWORD2> + <KEYWORD2>SUBDIR_DEPENDS</KEYWORD2> + <KEYWORD2>SUBDIRS</KEYWORD2> + <KEYWORD2>TARGET_LINK_LIBRARIES</KEYWORD2> + <KEYWORD2>TRY_COMPILE</KEYWORD2> + <KEYWORD2>TRY_RUN</KEYWORD2> + <KEYWORD2>USE_MANGLED_MESA</KEYWORD2> + <KEYWORD2>UTILITY_SOURCE</KEYWORD2> + <KEYWORD2>VARIABLE_REQUIRES</KEYWORD2> + <KEYWORD2>VTK_MAKE_INSTANTIATOR</KEYWORD2> + <KEYWORD2>VTK_WRAP_JAVA</KEYWORD2> + <KEYWORD2>VTK_WRAP_PYTHON</KEYWORD2> + <KEYWORD2>VTK_WRAP_TCL</KEYWORD2> + <KEYWORD2>WRITE_FILE</KEYWORD2> + </KEYWORDS> + + </RULES> + <RULES SET="LITERAL" DEFAULT="LITERAL1" ESCAPE="\"> + <!-- Variables --> + <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE"> + <BEGIN>${</BEGIN> + <END>}</END> + </SPAN> + <MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING> + </RULES> + +</MODE> + + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2008-09-12 01:05:00
|
Revision: 13648 http://jedit.svn.sourceforge.net/jedit/?rev=13648&view=rev Author: ezust Date: 2008-09-12 01:04:57 +0000 (Fri, 12 Sep 2008) Log Message: ----------- [ 1854542 ] VFS Browser should show previous path when pressing escape Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/Buffer.java jEdit/trunk/org/gjt/sp/jedit/browser/VFSBrowser.java jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-09-12 00:39:59 UTC (rev 13647) +++ jEdit/trunk/doc/CHANGES.txt 2008-09-12 01:04:57 UTC (rev 13648) @@ -4,10 +4,11 @@ Thanks to Bj\xF6rn "Vampire" Kautler, Kazutoshi Satoda, Dakshinamurthy Karra, Matthieu Casanova, Alan Ezust, Bernhard Walle, Shlomy Reinstein, Greg Merrill, -Kevin Hunter, and Eric Berry for contributing to this release. +Jeff Robertson, Kevin Hunter, and Eric Berry for contributing to this release. {{{ Bug Fixes + - Closed buffers were often kept in memory. (Kazutoshi Satoda) - Error "Invalid screen line count" was shown when scrolling in a @@ -33,6 +34,11 @@ - When a bufferSet is sorted, dragging a buffer in BufferTabs plugin was not possible (#2100690) (Matthieu Casanova) + +- # 1519924 - Pressing escape in Path: field gets rid of dock window. + (#1854542 - Jeff Robertson - jefftbob) + + }}} {{{ Miscellaneous @@ -93,6 +99,9 @@ }}} {{{ Editing - New cmake mode (patch #2011419) (Bernhard Walle) + +- More patterns for shellscript filenames (# 2056778 - Kevin Hunter (hunteke)) + }}} }}} Modified: jEdit/trunk/org/gjt/sp/jedit/Buffer.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/Buffer.java 2008-09-12 00:39:59 UTC (rev 13647) +++ jEdit/trunk/org/gjt/sp/jedit/Buffer.java 2008-09-12 01:04:57 UTC (rev 13648) @@ -852,13 +852,13 @@ public void setDirty(boolean d) { boolean old_d = isDirty(); + if (isNewFile() && jEdit.getBooleanProperty("suppressNotSavedConfirmUntitled")) + d = false; if (d && getLength() == initialLength) { if (isNewFile()) d = false; else if (jEdit.getBooleanProperty("useMD5forDirtyCalculation")) d = !Arrays.equals(calculateHash(), md5hash); } - if (isNewFile() && jEdit.getBooleanProperty("suppressNotSavedConfirmUntitled")) - d = false; super.setDirty(d); boolean editable = isEditable(); Modified: jEdit/trunk/org/gjt/sp/jedit/browser/VFSBrowser.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/browser/VFSBrowser.java 2008-09-12 00:39:59 UTC (rev 13647) +++ jEdit/trunk/org/gjt/sp/jedit/browser/VFSBrowser.java 2008-09-12 01:04:57 UTC (rev 13648) @@ -213,6 +213,16 @@ pathField.setInstantPopups(true); pathField.setEnterAddsToHistory(false); pathField.setSelectAllOnFocus(true); + + if (mode == BROWSER) { + pathField.addKeyListener(new KeyAdapter() { + public void keyReleased(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { + pathField.setText(VFSBrowser.this.path); + } + } + }); + } // because its preferred size can be quite wide, we // don't want it to make the browser way too big, Modified: jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2008-09-12 00:39:59 UTC (rev 13647) +++ jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2008-09-12 01:04:57 UTC (rev 13648) @@ -1942,10 +1942,9 @@ options.save-back.twoStageSave=Two-stage save (safer but resets file owner on Unix) options.save-back.confirmSaveAll="Save All Buffers" asks for confirmation options.save-back.autosaveUntitled=Autosave untitled buffers -options.save-back.suppressNotSavedConfirmUntitled=Don't show "file not saved" dialog when closing Untitled buffers -options.save-back.useMD5forDirtyCalculation=Don't show "file not saved" if buffer is the same as original -options.save-back.useMD5forDirtyCalculation.tooltip=Use MD5 hash to calculate if changed buffers are really the same as they were at loading time. - +options.save-back.suppressNotSavedConfirmUntitled=Never mark Untitled buffers dirty. +options.save-back.useMD5forDirtyCalculation=Buffers not dirty if contents are unchanged. +options.save-back.useMD5forDirtyCalculation.tooltip=Compare with length and MD5 hash of buffer at load time, to decide if an edited buffer is still dirty. #}}} #{{{ Shortcuts pane This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2008-09-12 01:24:49
|
Revision: 13649 http://jedit.svn.sourceforge.net/jedit/?rev=13649&view=rev Author: ezust Date: 2008-09-12 01:24:48 +0000 (Fri, 12 Sep 2008) Log Message: ----------- Angle brackets are now matched also in findMatchingBracket. Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/TextUtilities.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-09-12 01:04:57 UTC (rev 13648) +++ jEdit/trunk/doc/CHANGES.txt 2008-09-12 01:24:48 UTC (rev 13649) @@ -76,6 +76,9 @@ - python: finds "coding[=:]\s*(ENCODING)" (Kazutoshi Satoda) +- Angle Brackets are now also matched from find matching bracket. + (encorejane - # 1849215) + }}} {{{ Docker Plugin features merged into jEdit Core - New actions: View - Docking - Load|Save docking layout (of current mode) Modified: jEdit/trunk/org/gjt/sp/jedit/TextUtilities.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/TextUtilities.java 2008-09-12 01:04:57 UTC (rev 13648) +++ jEdit/trunk/org/gjt/sp/jedit/TextUtilities.java 2008-09-12 01:24:48 UTC (rev 13649) @@ -91,6 +91,8 @@ case ']': if (direction != null) direction[0] = false; return '['; case '{': if (direction != null) direction[0] = true; return '}'; case '}': if (direction != null) direction[0] = false; return '{'; + case '<': if (direction != null) direction[0] = true; return '>'; + case '>': if (direction != null) direction[0] = false; return '<'; default: return '\0'; } } //}}} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |