From: <bma...@us...> - 2008-10-31 15:21:39
|
Revision: 4138 http://fudaa.svn.sourceforge.net/fudaa/?rev=4138&view=rev Author: bmarchan Date: 2008-10-31 15:21:28 +0000 (Fri, 31 Oct 2008) Log Message: ----------- Undo/redo ?\195?\169tendu pour gestion d'un nom de commande. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuCommonImplementation.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommand.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommandComposite.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommandManager.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/undo/FudaaUndoCmdMngListener.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuActionModifier.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluNamedCommand.java Property Changed: ---------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuCommonImplementation.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommand.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommandComposite.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommandManager.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/undo/FudaaUndoCmdMngListener.java Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuActionModifier.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuActionModifier.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuActionModifier.java 2008-10-31 15:21:28 UTC (rev 4138) @@ -0,0 +1,208 @@ +package com.memoire.bu; + +import java.awt.Component; + +import javax.swing.AbstractButton; +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; +import javax.swing.JRadioButtonMenuItem; +import javax.swing.JToolBar; +import javax.swing.MenuElement; + +/** + * An utility class to modify controls by their command name. + * The command name is a string defined for each control + * using setActionCommand(). + * + * @author bmarchan + * @version $Id$ + */ +public class BuActionModifier{ + +//-------------------------------------------------------------------------- +// setTooltipForAction : Permet de d\xE9finir un tooltip sur les +// menus, ou sur les boutons. +//-------------------------------------------------------------------------- + + public static void setTooltipForAction + (JMenuBar _bar, String _action, String _tp) + { + if(_bar==null) return; + + MenuElement[] c=_bar.getSubElements(); + for(int i=0; i<c.length; i++) + if(c[i] instanceof JMenu) + setTooltipForAction((JMenu)c[i],_action,_tp); + } + + public static void setTooltipForAction + (JMenu _menu, String _action, String _tp) + { + if(_menu==null) return; + + MenuElement[] c=_menu.getSubElements(); + for(int i=0; i<c.length; i++) + { + if(c[i] instanceof JMenu) + setTooltipForAction((JMenu)c[i],_action,_tp); + else + if(c[i] instanceof JPopupMenu) + setTooltipForAction((JPopupMenu)c[i],_action,_tp); + else + if(c[i] instanceof JMenuItem) + setTooltipForAction((JMenuItem)c[i],_action,_tp); + // else System.err.println("??? "+c[i]); + } + } + + public static void setTooltipForAction + (JPopupMenu _menu, String _action, String _tp) + { + if(_menu==null) return; + + MenuElement[] c=_menu.getSubElements(); + for(int i=0; i<c.length; i++) + { + if(c[i] instanceof JMenu) + setTooltipForAction((JMenu)c[i],_action,_tp); + else + if(c[i] instanceof JPopupMenu) + setTooltipForAction((JPopupMenu)c[i],_action,_tp); + else + if(c[i] instanceof JMenuItem) + setTooltipForAction((JMenuItem)c[i],_action,_tp); + } + } + + public static void setTooltipForAction + (JCheckBoxMenuItem _item, String _action, String _tp) + { + if(_item==null) return; + + if(_item.getActionCommand().equals(_action)) + _item.setToolTipText(_tp); + } + + public static void setTooltipForAction + (JRadioButtonMenuItem _item, String _action, String _tp) + { + if(_item==null) return; + + if(_item.getActionCommand().equals(_action)) + _item.setToolTipText(_tp); + } + + // Tool + + public static void setTooltipForAction + (JToolBar _bar, String _action, String _tp) + { + if(_bar==null) return; + + Component[] c=_bar.getComponents(); + for(int i=0; i<c.length; i++) + if(c[i] instanceof AbstractButton) + setTooltipForAction((AbstractButton)c[i],_action,_tp); + } + + public static void setTooltipForAction + (AbstractButton _item, String _action, String _tp) + { + if(_item==null) return; + + if(_item.getActionCommand().equals(_action)) + _item.setToolTipText(_tp); + } + +//-------------------------------------------------------------------------- +// setDynamicTextForAction : Permet de d\xE9finir un texte dynamique sur les +// menus, un tooltip dynamique pour les boutons. Exemple : undo/redo. +//-------------------------------------------------------------------------- + + public static void setDynamicTextForAction + (JMenuBar _bar, String _action, String _tp) + { + if(_bar==null) return; + + MenuElement[] c=_bar.getSubElements(); + for(int i=0; i<c.length; i++) + if(c[i] instanceof JMenu) + setDynamicTextForAction((JMenu)c[i],_action,_tp); + } + + public static void setDynamicTextForAction + (JMenu _menu, String _action, String _tp) + { + if(_menu==null) return; + + MenuElement[] c=_menu.getSubElements(); + for(int i=0; i<c.length; i++) + { + if(c[i] instanceof JMenu) + setDynamicTextForAction((JMenu)c[i],_action,_tp); + else + if(c[i] instanceof JPopupMenu) + setDynamicTextForAction((JPopupMenu)c[i],_action,_tp); + else + if(c[i] instanceof JMenuItem) + setDynamicTextForAction((JMenuItem)c[i],_action,_tp); + // else System.err.println("??? "+c[i]); + } + } + + public static void setDynamicTextForAction + (JPopupMenu _menu, String _action, String _tp) + { + if(_menu==null) return; + + MenuElement[] c=_menu.getSubElements(); + for(int i=0; i<c.length; i++) + { + if(c[i] instanceof JMenu) + setDynamicTextForAction((JMenu)c[i],_action,_tp); + else + if(c[i] instanceof JPopupMenu) + setDynamicTextForAction((JPopupMenu)c[i],_action,_tp); + else + if(c[i] instanceof JMenuItem) + setDynamicTextForAction((JMenuItem)c[i],_action,_tp); + else + if(c[i] instanceof AbstractButton) + setDynamicTextForAction((AbstractButton)c[i],_action,_tp); + } + } + + public static void setDynamicTextForAction + (JMenuItem _item, String _action, String _tp) + { + if(_item==null) return; + + if(_item.getActionCommand().equals(_action)) + _item.setText(_tp); + } + + // Tool + + public static void setDynamicTextForAction + (JToolBar _bar, String _action, String _tp) + { + if(_bar==null) return; + + Component[] c=_bar.getComponents(); + for(int i=0; i<c.length; i++) + if(c[i] instanceof AbstractButton) + setDynamicTextForAction((AbstractButton)c[i],_action,_tp); + } + + public static void setDynamicTextForAction + (AbstractButton _item, String _action, String _tp) + { + if(_item==null) return; + + if(_item.getActionCommand().equals(_action)) + _item.setToolTipText(_tp); + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuActionModifier.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Added: svn:eol-style + native Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuCommonImplementation.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuCommonImplementation.java 2008-10-31 12:33:37 UTC (rev 4137) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuCommonImplementation.java 2008-10-31 15:21:28 UTC (rev 4138) @@ -1,5 +1,5 @@ /** - * @modification $Date: 2007-06-11 13:01:23 $ + * @modification $Date$ * @statut unstable * @file BuCommonImplementation.java * @version 0.43 @@ -511,6 +511,11 @@ // BuActionChecker.setCheckedForAction(getSpecificBar(),_cmd,_checked); } + public void setDynamicTextForAction(String _cmd, String _tp) { + BuActionModifier.setDynamicTextForAction(getMainMenuBar(), _cmd, _tp); + BuActionModifier.setDynamicTextForAction(getMainToolBar(), _cmd, _tp); + } + public void removeDummySeparators() { BuMenuBar mb = getMainMenuBar(); BuToolBar mt = getMainToolBar(); Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuCommonImplementation.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommand.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommand.java 2008-10-31 12:33:37 UTC (rev 4137) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommand.java 2008-10-31 15:21:28 UTC (rev 4138) @@ -1,14 +1,18 @@ /** * @creation 20 oct. 2003 - * @modification $Date: 2004-08-10 18:20:10 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail fud...@li... */ package org.fudaa.ctulu; /** + * Une interface d\xE9finissant une commande utilisateur qui peut \xEAtre defaite ou refaite. + * Une commande peut contenir une ou plusieurs op\xE9rations \xE9l\xE9mentaires, chacune d'elles stock\xE9e + * sous forme de commande (voir {@link CtuluCommandComposite}) + * * @author deniger - * @version $Id: CtuluCommand.java,v 1.1 2004-08-10 18:20:10 deniger Exp $ + * @version $Id$ */ public interface CtuluCommand { /** Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommand.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommandComposite.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommandComposite.java 2008-10-31 12:33:37 UTC (rev 4137) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommandComposite.java 2008-10-31 15:21:28 UTC (rev 4138) @@ -1,6 +1,6 @@ /** * @creation 21 oct. 2003 - * @modification $Date: 2007-01-17 10:45:24 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail fud...@li... @@ -14,14 +14,20 @@ * L'action undo se fait dans l'ordre derniere commande -> premiere commande * * @author deniger - * @version $Id: CtuluCommandComposite.java,v 1.8 2007-01-17 10:45:24 deniger Exp $ + * @version $Id$ */ -public class CtuluCommandComposite implements CtuluCommand,CtuluCommandContainer { +public class CtuluCommandComposite implements CtuluNamedCommand,CtuluCommandContainer { List command_; + final String name_; public CtuluCommandComposite() { + this(null); + } + + public CtuluCommandComposite(String _name) { super(); + name_=_name; } /** @@ -56,8 +62,9 @@ final int n = getNbCmd(); if (n == 0) { return null; - } else if (n == 1) { - return (CtuluCommand) command_.get(0); +// B.M. 31/12/2008 - Suppression de de cette simplification, sinon perte du nom de commande. +// } else if (n == 1) { +// return (CtuluCommand) command_.get(0); } else { return this; } @@ -119,4 +126,11 @@ } actionToDoAfterUndoOrRedo(); } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.CtuluNamedCommand#getName() + */ + public String getName() { + return name_; + } } \ No newline at end of file Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommandComposite.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommandManager.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommandManager.java 2008-10-31 12:33:37 UTC (rev 4137) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommandManager.java 2008-10-31 15:21:28 UTC (rev 4138) @@ -1,6 +1,6 @@ /* * @creation 21 oct. 2003 - * @modification $Date: 2007-01-17 10:45:25 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail fud...@li... @@ -20,7 +20,7 @@ * Des qu'une action est ajout\xE9e ou une action redo/undo est effectu\xE9e, un evenement est envoy\xE9 au CtuluCmdMngListener. * * @author Fred Deniger - * @version $Id: CtuluCommandManager.java,v 1.9 2007-01-17 10:45:25 deniger Exp $ + * @version $Id$ */ public class CtuluCommandManager implements CtuluCommandContainer { @@ -45,18 +45,19 @@ } private void update() { - boolean change = false; +// boolean change = false; boolean newValue = (cmdPersistant_ != null) || (((cmd_ != null) && (cmd_.size() > 0) && (indexLastUndoCmd_ > 0))); if (newValue != canUndo_) { canUndo_ = newValue; - change = true; +// change = true; } newValue = cmdPersistant_ == null && ((cmd_ != null) && (cmd_.size() > 0) && (indexLastUndoCmd_ != cmd_.size())); if (newValue != canRedo_) { canRedo_ = newValue; - change = true; +// change = true; } - if (change && (listener_ != null)) { + // B.M. : Appel\xE9 a chaque mise a jour de commande, car la commande poss\xE8de un nom qui doit \xEAtre visualis\xE9 dans l'ihm. + if (/*change && */(listener_ != null)) { listener_.undoredoStateChange(this); } } @@ -190,6 +191,35 @@ update(); } } + + /** + * Retourne le nom de la commande a d\xE9faire. Affich\xE9 dans le texte de la commande "undo". + * @return Le nom de la commande. Null si pas de nom. + */ + public String getUndoName() { + if (!canUndo()) return null; + int ind=indexLastUndoCmd_-1; + if (ind<0) return null; + CtuluCommand cmd=(CtuluCommand)cmd_.get(ind); + if (cmd instanceof CtuluNamedCommand) + return ((CtuluNamedCommand)cmd).getName(); + else + return null; + } + + /** + * Retourne le nom de la commande a refaire. Affich\xE9 dans le texte de la commande "redo". + * @return Le nom de la commande. Null si pas de nom. + */ + public String getRedoName() { + if (!canRedo()) return null; + int ind=indexLastUndoCmd_; + CtuluCommand cmd=(CtuluCommand)cmd_.get(ind); + if (cmd instanceof CtuluNamedCommand) + return ((CtuluNamedCommand)cmd).getName(); + else + return null; + } /** * Enleve le listener. Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluCommandManager.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluNamedCommand.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluNamedCommand.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluNamedCommand.java 2008-10-31 15:21:28 UTC (rev 4138) @@ -0,0 +1,22 @@ +/** + * @creation 20 oct. 2003 + * @modification $Date$ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.ctulu; +/** + * Une interface d\xE9finissant une commande utilisateur nomm\xE9e qui peut \xEAtre defaite ou refaite. + * C'est une extension destin\xE9e a supplanter \xE0 terme {@link CtuluCommand} + * + * @author Bertrand Marchand + * @version $Id$ + */ +public interface CtuluNamedCommand extends CtuluCommand { + + /** + * Retourne Le nom de la commande, affichable dans la liste des undo/redo. + */ + String getName(); +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluNamedCommand.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Added: svn:eol-style + native Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/undo/FudaaUndoCmdMngListener.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/undo/FudaaUndoCmdMngListener.java 2008-10-31 12:33:37 UTC (rev 4137) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/undo/FudaaUndoCmdMngListener.java 2008-10-31 15:21:28 UTC (rev 4138) @@ -1,7 +1,7 @@ /* * @file FDicoCmdMngListener.java * @creation 22 oct. 2003 - * @modification $Date: 2008-01-24 10:19:14 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... @@ -16,13 +16,15 @@ import org.fudaa.ctulu.CtuluCmdMngListener; import org.fudaa.ctulu.CtuluCommandManager; import org.fudaa.ctulu.CtuluUndoRedoInterface; +import org.fudaa.fudaa.commun.impl.Fudaa; +import org.fudaa.fudaa.ressource.FudaaResource; /** * Class for undoredo manager with concurrent access. Each internal frame implementing {@link CtuluUndoRedoInterface} * has its own manager, independant from the others. * * @author deniger - * @version $Id: FudaaUndoCmdMngListener.java,v 1.15.8.1 2008-01-24 10:19:14 bmarchan Exp $ + * @version $Id$ */ public class FudaaUndoCmdMngListener implements CtuluCmdMngListener { @@ -94,7 +96,16 @@ * @param _b le nouvel etat */ public void setActive(final CtuluUndoRedoInterface _m,final boolean _b){ + String lbUndo=FudaaResource.FUDAA.getString("D\xE9faire"); + String lbRedo=FudaaResource.FUDAA.getString("Refaire"); + if (_b && (_m != null) && (_m.getCmdMng() != null)) { + String name; + name=_m.getCmdMng().getUndoName(); + lbUndo+=(name==null ? "":" \""+name+"\""); + name=_m.getCmdMng().getRedoName(); + lbRedo+=(name==null ? "":" \""+name+"\""); + impl_.setEnabledForAction("DEFAIRE", _m.getCmdMng().canUndo()); impl_.setEnabledForAction("REFAIRE", _m.getCmdMng().canRedo()); } @@ -102,6 +113,9 @@ impl_.setEnabledForAction("DEFAIRE", false); impl_.setEnabledForAction("REFAIRE", false); } + impl_.setDynamicTextForAction("DEFAIRE", lbUndo); + impl_.setDynamicTextForAction("REFAIRE", lbRedo); + if (_m != null) { _m.setActive(_b); } @@ -116,8 +130,18 @@ if (_source != cmdActif_) { return; } + String lbUndo=FudaaResource.FUDAA.getString("D\xE9faire"); + String lbRedo=FudaaResource.FUDAA.getString("Refaire"); + String name; + name=_source.getUndoName(); + lbUndo+=(name==null ? "":" \""+name+"\""); + name=_source.getRedoName(); + lbRedo+=(name==null ? "":" \""+name+"\""); + impl_.setEnabledForAction("DEFAIRE", _source.canUndo()); impl_.setEnabledForAction("REFAIRE", _source.canRedo()); + impl_.setDynamicTextForAction("DEFAIRE", lbUndo); + impl_.setDynamicTextForAction("REFAIRE", lbRedo); final JInternalFrame[] fs = impl_.getAllInternalFrames(); if (fs != null) { for (int i = fs.length - 1; i >= 0; i--) { Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/undo/FudaaUndoCmdMngListener.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |