/* * Class: CTex_UndoManager * * Author: Dimi, Sven, Lars, Stefan * * Funktion: ueberfacht die Text Felder fuer Datenbank und setzt * deren Inhalt zuruehck. * */ package gui; import java.awt.Event; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.KeyStroke; import javax.swing.undo.CompoundEdit; import javax.swing.undo.UndoManager; import ctex.Main; public class Undomanager { private static final long serialVersionUID = 1L; // Botton u. Item fuer Undo und Redo ShortcutM undoItem = new ShortcutM(Main.myLang.getString("menu.edit.undo")); ShortcutM redoItem = new ShortcutM(Main.myLang.getString("menu.edit.redo")); JButton undoButton = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/arrow_undo.png"))); JButton redoButton = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/arrow_redo.png"))); // Undo Manager fuer "Requeds Field" u. "Optional Fields" private UndoManager myReqField = new UndoManager(); private UndoManager myOptField = new UndoManager(); private UndoManager myEditor = new UndoManager(); /* // dummy Compounds fuer zwischenspeichern der Inhalt // "Requeds Field" u. "Optional Fields" */ private CompoundEdit myReqCompound = new CompoundEdit(); private CompoundEdit myOptCompound = new CompoundEdit(); private CompoundEdit myEditorCompound = new CompoundEdit(); // boolean Fleck fuer den aktuellen Undo Manager boolean ReqOROpt = true; // Requiedfild = true; boolean EditorORTab = true; /** * Construktor: * Initialisiert CTex_UndoManager * * @return gui.CTex_UndoManager */ Undomanager(){ undoItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, Event.CTRL_MASK)); undoItem.setEnabled(false); undoItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { undoTextfield(); } }); redoItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y, Event.CTRL_MASK)); redoItem.setEnabled(false); redoItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { redoTextfield(); } }); undoButton.setToolTipText(Main.myLang.getString("menu.edit.undo") + " [" + undoItem.getAccelerator().toString().replaceAll("pressed", "+") + "]"); undoButton.setEnabled(false); undoButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { undoTextfield(); } }); redoButton.setToolTipText(Main.myLang.getString("menu.edit.redo") + " [" + redoItem.getAccelerator().toString().replaceAll("pressed", "+") + "]"); redoButton.setEnabled(false); redoButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { redoTextfield(); } }); } /** * Procedure: Setzt Undo Manaer auf enstprechende TextFelder * */ public void setActivManager(UndoManager Req, UndoManager Opt, UndoManager myEdit, CompoundEdit ReqCom, CompoundEdit OptCom, CompoundEdit EditCom, boolean RorO, boolean Editor){ myReqField = Req; myOptField = Opt; myReqCompound = ReqCom; myOptCompound = OptCom; ReqOROpt = RorO; // Requiedfild = true; myEditor = myEdit; myEditorCompound = EditCom; EditorORTab = Editor; updateButtons(); } /* make undo from Undo Manager into the Text Field */ public void undoTextfield(){ if (EditorORTab){ if (myEditor.canUndo()){ closeCompoundEdit(); myEditor.undo(); } } else { if (ReqOROpt) { if (myReqField.canUndo()){ closeCompoundEdit(); myReqField.undo(); } } else { if (myOptField.canUndo()){ closeCompoundEdit(); myOptField.undo(); } } } updateButtons(); } /* set Button and Item Enabel auf false */ public void resetButton(){ undoItem.setEnabled(false); redoItem.setEnabled(false); undoButton.setEnabled(false); redoButton.setEnabled(false); } /* make redo from Redo Manager into the Text Field */ public void redoTextfield(){ if (EditorORTab){ if (myEditor.canRedo()){ closeCompoundEdit(); myEditor.redo(); } } else { if (ReqOROpt) { if (myReqField.canRedo()){ closeCompoundEdit(); myReqField.redo(); } } else { if (myOptField.canRedo()){ closeCompoundEdit(); myOptField.redo(); } } } updateButtons(); } /** * Methode: gibt den undo Item zurueck * * @return gui.CTex_ShortcutM */ public ShortcutM getUndoItem(){ return undoItem; } /** * Methode: gibt den redo Item zurueck * * @return gui.CTex_ShortcutM */ public ShortcutM getRedoItem(){ return redoItem; } /** * Methode: gibt den undo Button zurueck * * @return java.awt.JButton */ public JButton getUndoButton(){ return undoButton; } /** * Methode: gibt den redo Button zurueck * * @return java.awt.JButton */ public JButton getRedoButton(){ return redoButton; } /** * Procedure: macht die Buttons an oder aus * falls es geht * */ public void updateButtons() { if (EditorORTab){ undoButton.setEnabled(myEditor.canUndo()); redoButton.setEnabled(myEditor.canRedo()); undoItem.setEnabled(myEditor.canUndo()); redoItem.setEnabled(myEditor.canRedo()); } else { if(ReqOROpt){ undoButton.setEnabled(myReqField.canUndo()); redoButton.setEnabled(myReqField.canRedo()); undoItem.setEnabled(myReqField.canUndo()); redoItem.setEnabled(myReqField.canRedo()); } else { undoButton.setEnabled(myOptField.canUndo()); redoButton.setEnabled(myOptField.canRedo()); undoItem.setEnabled(myOptField.canUndo()); redoItem.setEnabled(myOptField.canRedo()); } } } /** * Die Methode schliest den dummy Compound * und ubergibt die Inhalt an Undo Manager */ public void closeCompoundEdit() { if (EditorORTab){ if (myEditorCompound.isInProgress()) { myEditorCompound.end(); myEditor.addEdit(myEditorCompound); } } else { if (ReqOROpt) { if (myReqCompound.isInProgress()) { myReqCompound.end(); myReqField.addEdit(myReqCompound); } } else { if (myOptCompound.isInProgress()) { myOptCompound.end(); myOptField.addEdit(myOptCompound); } } } } }