From: Alan E. <ez...@us...> - 2005-12-21 19:12:00
|
Update of /cvsroot/jedit/plugins/Navigator/src/ise/plugin/nav In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10317/src/ise/plugin/nav Modified Files: Navigator.java NavigatorPlugin.java OptionPanel.java Added Files: NavToolBar.java Removed Files: Nav.java Navable.java Log Message: Version 1.0.6 Made the plugin activate automatically at load time, without the need for a visible toolbar. Index: NavigatorPlugin.java =================================================================== RCS file: /cvsroot/jedit/plugins/Navigator/src/ise/plugin/nav/NavigatorPlugin.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- NavigatorPlugin.java 18 Nov 2005 19:47:40 -0000 1.5 +++ NavigatorPlugin.java 21 Dec 2005 19:11:51 -0000 1.6 @@ -4,15 +4,13 @@ import java.util.HashMap; import java.util.Vector; import java.util.Iterator; + +import javax.swing.JComponent; + import org.gjt.sp.jedit.jEdit; import org.gjt.sp.jedit.EBPlugin; -import org.gjt.sp.jedit.EBMessage; import org.gjt.sp.jedit.GUIUtilities; import org.gjt.sp.jedit.View; -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.jedit.msg.ViewUpdate; /** * NavigatorPlugin, mostly static methods, allows one Navigator per View. @@ -29,115 +27,29 @@ /** View/Navigator map */ private final static HashMap map = new HashMap(); - private static boolean _showOnToolbar = false; - private static boolean _viewShowingToolbar = false; - public void start() { - _showOnToolbar = jEdit.getBooleanProperty( "navigator.showOnToolbar", false ); - _viewShowingToolbar = jEdit.getBooleanProperty( "view.showToolbar" ); - if ( _showOnToolbar ) { - addToAllToolbars(); - } + View[] views = jEdit.getViews(); + for (int i=0; i<views.length; ++i) { + createNavigator(views[i]); + } } + public static void setToolBars() { + View[] views = jEdit.getViews(); + for (int i=0; i<views.length; ++i) { + Navigator nv = (Navigator) map.get(views[i]); + nv.setToolBar(); + } + } + + public void stop() { for ( Iterator it = map.keySet().iterator(); it.hasNext(); ) { View view = ( View ) it.next(); if (view.isClosed()) continue; Navigator navigator = ( Navigator ) map.get( view ); - Nav nav = navigator.getNav(); - view.getDockableWindowManager().hideDockableWindow( "Navigator" ); - view.getDockableWindowManager().removeDockableWindow( "Navigator" ); - view.removeToolBar( nav ); - } - } - - public void handleMessage( EBMessage msg ) { - if ( msg instanceof ViewUpdate ) { - ViewUpdate vu = ( ViewUpdate ) msg; - if ( vu.getWhat().equals( ViewUpdate.CREATED ) ) { - if ( _showOnToolbar ) { - View view = vu.getView(); - Navigator navigator = createNavigator( view ); - addToToolbar( view, navigator ); - } - } - else if ( vu.getWhat().equals( ViewUpdate.CLOSED ) ) { - View view = vu.getView(); - Navigator navigator = getNavigator( view ); - if ( navigator != null ) - removeFromToolbar( view, navigator ); - removeNavigator( view ); - } - } - else if ( msg instanceof PropertiesChanged ) { - boolean viewShowingToolbar = jEdit.getBooleanProperty( "view.showToolbar" ); - boolean showOnToolbar = jEdit.getBooleanProperty( "navigator.showOnToolbar", false ); - boolean vst_changed = viewShowingToolbar != _viewShowingToolbar; - boolean nst_changed = showOnToolbar != _showOnToolbar; - if (vst_changed) - _viewShowingToolbar = viewShowingToolbar; - if (nst_changed) - _showOnToolbar = showOnToolbar; - - if ( vst_changed || nst_changed) { - if ( _viewShowingToolbar && _showOnToolbar) { - addToAllToolbars(); - } - else { - // jEdit tool bar has been removed from all views, so make sure - // Navigator is removed from the toolbars also - removeFromAllToolbars(); - } - } - else { - // no change - return; - } - } - } - - private static void addToToolbar( View view, Navigator navigator ) { - boolean jEditToolbarShowing = jEdit.getBooleanProperty( "view.showToolbar" ); - if ( jEditToolbarShowing ) { - Nav nav = navigator.getNav(); - navigator.remove( nav ); - view.getDockableWindowManager().hideDockableWindow( "Navigator" ); - view.getDockableWindowManager().removeDockableWindow( "Navigator" ); - view.removeToolBar( nav ); // just in case - view.addToolBar( View.TOP_GROUP, View.TOP_LAYER, nav ); - } - } - - private static void removeFromToolbar( View view, Navigator navigator ) { - Nav nav = navigator.getNav(); - view.removeToolBar( nav ); - navigator.remove( nav ); // just in case - navigator.add( nav ); - } - - /** - * Adds a Navigator to the toolbars for all Views, but only if the 'Show tool bar' - * checkbox is checked for the jEdit Global Options/Tool Bar settings. - */ - private static void addToAllToolbars() { - boolean jEditToolbarShowing = jEdit.getBooleanProperty( "view.showToolbar" ); - if ( jEditToolbarShowing ) { - View[] views = jEdit.getViews(); - for ( int i = 0; i < views.length; i++ ) { - View view = views[ i ]; - Navigator navigator = createNavigator( view ); - addToToolbar( view, navigator ); - } - } - } - - private static void removeFromAllToolbars() { - for ( Iterator it = map.keySet().iterator(); it.hasNext(); ) { - View view = ( View ) it.next(); - Navigator navigator = ( Navigator ) map.get( view ); - removeFromToolbar( view, navigator ); + navigator.stop(); } } @@ -165,6 +77,13 @@ map.put( view, navigator ); } + public static JComponent getToolBar(View view) { + Navigator nav = getNavigator(view); + NavToolBar toolBar = new NavToolBar(nav); + return toolBar; + } + + public static void removeNavigator( View view ) { if ( view == null ) { return ; Index: OptionPanel.java =================================================================== RCS file: /cvsroot/jedit/plugins/Navigator/src/ise/plugin/nav/OptionPanel.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- OptionPanel.java 28 Apr 2005 05:47:18 -0000 1.1 +++ OptionPanel.java 21 Dec 2005 19:11:51 -0000 1.2 @@ -30,7 +30,9 @@ } public void _save() { - jEdit.setBooleanProperty( getName() + ".showOnToolbar", showOnToolbar.isSelected() ); + boolean useToolBars = showOnToolbar.isSelected(); + jEdit.setBooleanProperty( getName() + ".showOnToolbar", useToolBars ); + NavigatorPlugin.setToolBars(); } public String getName() { --- Nav.java DELETED --- --- Navable.java DELETED --- --- NEW FILE: NavToolBar.java --- package ise.plugin.nav; import java.awt.*; import javax.swing.*; import org.gjt.sp.jedit.GUIUtilities; /** * Provides navigation ability for a client object, has a "back" and "forward" * button to move through a list of objects. * * $Id: NavToolBar.java,v 1.1 2005/12/21 19:11:51 ezust Exp $ * @author Dale Anson, da...@ge..., August 2002 */ public class NavToolBar extends JToolBar { private JButton back, forward; private Navigator client; /** * @param client the client object to provide navigation for */ public NavToolBar( Navigator client ) { if ( client == null ) { throw new IllegalArgumentException( "client cannot be null" ); } this.client = client; setFloatable( true ); //putClientProperty( "JToolBar.isRollover", Boolean.TRUE ); // set up the buttons back = new JButton( GUIUtilities.loadIcon( "ArrowL.png" ) ); back.setModel(client.getBackModel()); forward = new JButton( GUIUtilities.loadIcon( "ArrowR.png" ) ); forward.setModel(client.getForwardModel()); back.setMargin( new Insets( 0, 0, 0, 0 ) ); forward.setMargin( new Insets( 0, 0, 0, 0 ) ); add( back ); add( forward ); } } Index: Navigator.java =================================================================== RCS file: /cvsroot/jedit/plugins/Navigator/src/ise/plugin/nav/Navigator.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- Navigator.java 18 Nov 2005 19:47:40 -0000 1.8 +++ Navigator.java 21 Dec 2005 19:11:51 -0000 1.9 @@ -1,134 +1,322 @@ package ise.plugin.nav; import java.awt.event.*; +import java.util.Stack; + import javax.swing.*; + import org.gjt.sp.jedit.Buffer; import org.gjt.sp.jedit.View; import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.buffer.JEditBuffer; + //import org.gjt.sp.jedit.buffer.JEditBuffer; /** - * @version $Revision$ + * + * This is the model for the Navigator Plugin. It also creates a ToolBar if + * necessary. + * + * @ Originally by Dale Anson + * @ refactored to use model-view classes by Alan Ezust + * + * @version $Revision$ */ -public class Navigator extends JPanel implements Navable { - /** Description of the Field */ - private Nav nav = null; +public class Navigator implements ActionListener +{ - /** Description of the Field */ - private boolean on_toolbar = false; + /** Action command to go to the previous item. */ + public final static String BACK = "back"; + /** Action command to go to the next item. */ + public final static String FORWARD = "forward"; + /** Action command to indicate that it is okay to go back. */ + public final static String CAN_GO_BACK = "canGoBack"; + /** Action command to indicate that it is not okay to go back. */ + public final static String CANNOT_GO_BACK = "cannotGoBack"; + /** Action command to indicate that it is okay to go forward. */ + public final static String CAN_GO_FORWARD = "canGoForward"; + /** Action command to indicate that it is not okay to go forward. */ + public final static String CANNOT_GO_FORWARD = "cannotGoForward"; - /** Description of the Field */ - private View view; + + private Stack backStack; - /** Description of the Field */ - private Box toolbar; + private Stack forwardStack; - public Navigator( View view ) { - this( view, "" ); - } + private DefaultButtonModel backButtonModel; + + private DefaultButtonModel forwardButtonModel; - /** - * Constructor for Navigator - * - * @param vw - * @param position - */ - public Navigator( View vw, String position ) { - this.view = vw; + private Object currentNode = null; - // create a Nav and make sure the plugin knows about it - nav = new Nav( this ); - NavigatorPlugin.addNavigator( view, this ); - add( nav ); + private int maxStackSize = 512; - // add a mouse listener to the view. Each mouse click on a text area in - // the view is stored for the Nav. - view.getTextArea().getPainter().addMouseListener( - new MouseAdapter() { - public void mouseClicked( MouseEvent ce ) { - Buffer b = view.getTextArea().getBuffer(); - //JEditBuffer b = view.getBuffer(); // for jEdit 4.3 - int cp = view.getTextArea().getCaretPosition(); - nav.update( new NavPosition( b, cp ) ); - } - } - ); - nav.update( new NavPosition( view.getTextArea().getBuffer(), view.getTextArea().getCaretPosition() ) ); + private View view; - } + private NavToolBar toolBar; - /** - * Sets the position of the cursor to the given NavPosition. - * - * @param o The new NavPosition value - */ - public void setPosition( Object o ) { - NavPosition np = ( NavPosition ) o; - Buffer buffer = np.buffer; - //JEditBuffer buffer = np.buffer; // for jEdit 4.3 - int caret = np.caret; - - if (buffer.equals(view.getBuffer())) { - // nav in current buffer, just set cursor position - view.getTextArea().setCaretPosition(caret, true); - return; - } - - // check if buffer is open - Buffer[] buffers = jEdit.getBuffers(); - for (int i = 0; i < buffers.length; i++) { - if (buffers[i].equals(buffer)) { - // found it - view.goToBuffer(buffer); - view.getTextArea().setCaretPosition(caret, true); - return; - } - } - - // buffer isn't open - String path = buffer.getPath(); - buffer = jEdit.openFile(view, path); - - if ( buffer == null ) { - nav.remove(np); - return ; // nowhere to go, maybe the file got deleted? - } + public Navigator(View view) + { + this(view, ""); + } + + /** + * Constructor for Navigator + * + * @param vw + * @param position + */ + public Navigator(View vw, String position) + { + this.view = vw; - if ( caret >= buffer.getLength() ) { - caret = buffer.getLength() - 1; - } - if ( caret < 0 ) { - caret = 0; - } - try { - view.getTextArea().setCaretPosition( caret, true ); - } - catch ( NullPointerException npe ) { - // sometimes Buffer.markTokens throws a NPE here, catch it - // and silently ignore it. - } - view.getTextArea().requestFocus(); - } + backButtonModel = new DefaultButtonModel(); + forwardButtonModel = new DefaultButtonModel(); + + backButtonModel.setActionCommand( Navigator.BACK ); + forwardButtonModel.setActionCommand( Navigator.FORWARD ); + backButtonModel.addActionListener( this ); + forwardButtonModel.addActionListener( this ); + // set up the history stacks + backStack = new Stack(); + forwardStack = new Stack(); + clearStacks(); + // create a Nav and make sure the plugin knows about it + // NavigatorPlugin.addNavigator( view, this ); - /** - * Gets the Nav attribute of the Navigator object - * - * @return The Nav value - */ - public Nav getNav() { - return nav; - } + // add a mouse listener to the view. Each mouse click on a text + // area in + // the view is stored + view.getTextArea().getPainter().addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent ce) + { + // Buffer b = view.getTextArea().getBuffer(); // + // for jEdit 4.2 + Buffer b = view.getBuffer(); // for jEdit 4.3 + int cp = view.getTextArea().getCaretPosition(); + update(new NavPosition(b, cp)); + // setPosition(new NavPosition(b, cp)); + } + }); + setToolBar(); + } - /** go back one in the history list */ - public void goBack() { - nav.goBack(); - } + public void setToolBar() { + if ( jEdit.getBooleanProperty("navigator.showOnToolbar") ) { + if (toolBar == null) { + toolBar = new NavToolBar(this); + view.addToolBar(toolBar); + } + else { + toolBar.setVisible(true); + } + } + else { + if (toolBar != null) { + view.removeToolBar(toolBar); + toolBar = null; + } + } + } + + + public ButtonModel getBackModel() { + return backButtonModel; + } + + public ButtonModel getForwardModel() { + return forwardButtonModel; + } + + public void stop() { + if (toolBar != null) { + view.removeToolBar(toolBar); + toolBar = null; + } + + } + /** + * Updates the stacks and button state based on the given node. Pushes + * the node on to the "back" history, clears the "forward" history. + * + * @param node + * an object + */ + public void update(Object node) + { + if (node != currentNode) + { + if (currentNode != null) + { + backStack.push(currentNode); + if (backStack.size() > maxStackSize) + backStack.removeElementAt(0); + } + currentNode = node; + forwardStack.clear(); + } + setButtonState(); + } - /** go forward one in the history list */ - public void goForward() { - nav.goForward(); - } + /** + * The action handler for this class. Actions can be invoked by calling this + * method and passing an ActionEvent with one of the action commands defined + * in this class (BACK, FORWARD, etc). + * + * @param ae the action event to kick a response. + */ + public void actionPerformed( ActionEvent ae ) { + if ( ae.getActionCommand().equals( BACK ) ) { + goBack(); + } + else if ( ae.getActionCommand().equals( FORWARD ) ) { + goForward(); + } + else if ( ae.getActionCommand().equals( CAN_GO_BACK ) ) { + backButtonModel.setEnabled( true ); + } + else if ( ae.getActionCommand().equals( CANNOT_GO_BACK ) ) { + backButtonModel.setEnabled( false ); + } + else if ( ae.getActionCommand().equals( CAN_GO_FORWARD ) ) { + forwardButtonModel.setEnabled( true ); + } + else if ( ae.getActionCommand().equals( CANNOT_GO_FORWARD ) ) { + forwardButtonModel.setEnabled( false ); + } + } -} + + /** + * Removes an invalid node from the navigation history. + * + * @param node + * an invalid node + */ + public void remove(Object node) + { + backStack.remove(node); + forwardStack.remove(node); + } + public void setMaxHistorySize(int size) + { + maxStackSize = size; + } + + public int getMaxHistorySize() + { + return maxStackSize; + } + + public void clearStacks() + { + backStack.clear(); + forwardStack.clear(); + setButtonState(); + } + + /** Sets the state of the navigation buttons. */ + private void setButtonState() + { + backButtonModel.setEnabled(!backStack.empty()); + forwardButtonModel.setEnabled(!forwardStack.empty()); + } + + /** + * Sets the position of the cursor to the given NavPosition. + * + * @param o + * The new NavPosition value + */ + public void setPosition(Object o) + { + NavPosition np = (NavPosition) o; + Buffer buffer = np.buffer; + // JEditBuffer buffer = np.buffer; // for jEdit 4.3 + int caret = np.caret; + + if (buffer.equals(view.getBuffer())) + { + // nav in current buffer, just set cursor position + view.getTextArea().setCaretPosition(caret, true); + return; + } + + // check if buffer is open + Buffer[] buffers = jEdit.getBuffers(); + for (int i = 0; i < buffers.length; i++) + { + if (buffers[i].equals(buffer)) + { + // found it + view.goToBuffer(buffer); + view.getTextArea().setCaretPosition(caret, true); + return; + } + } + + // buffer isn't open + String path = buffer.getPath(); + buffer = jEdit.openFile(view, path); + + if (buffer == null) + { + remove(np); + return; // nowhere to go, maybe the file got deleted? + } + + if (caret >= buffer.getLength()) + { + caret = buffer.getLength() - 1; + } + if (caret < 0) + { + caret = 0; + } + try + { + view.getTextArea().setCaretPosition(caret, true); + } + catch (NullPointerException npe) + { + // sometimes Buffer.markTokens throws a NPE here, catch + // it + // and silently ignore it. + } + view.getTextArea().requestFocus(); + } + + + /** Moves to the previous item in the "back" history. */ + public void goBack() { + if ( !backStack.empty() ) { + if ( currentNode != null ) { + forwardStack.push( currentNode ); + if (forwardStack.size() > maxStackSize) + forwardStack.removeElementAt(0); + } + currentNode = backStack.pop(); + setPosition( currentNode ); + } + setButtonState(); + } + + + /** Moves to the next item in the "forward" history. */ + public void goForward() { + if ( !forwardStack.empty() ) { + if ( currentNode != null ) { + backStack.push( currentNode ); + if (backStack.size() > maxStackSize) + backStack.removeElementAt(0); + } + currentNode = forwardStack.pop(); + setPosition ( currentNode ); + } + setButtonState(); + } + +} |