f5009597f8b8f82a00e3ad550d40de1fbe6bc75d
[debian/jabref.git] / src / main / java / net / sf / jabref / FieldTextMenu.java
1 /*
2  Copyright (C) 2004 R. Nagel
3
4  All programs in this directory and
5  subdirectories are published under the GNU General Public License as
6  described below.
7
8  This program is free software; you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation; either version 2 of the License, or (at
11  your option) any later version.
12
13  This program is distributed in the hope that it will be useful, but
14  WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  General Public License for more details.
17
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21  USA
22
23  Further information about the GNU GPL is available at:
24  http://www.gnu.org/copyleft/gpl.ja.html
25
26  */
27
28 // created by : r.nagel 19.10.2004
29 //
30 // function : a popupmenu for bibtex fieldtext editors
31 //
32 //
33 // modified :
34
35
36 package net.sf.jabref ;
37
38 import java.awt.event.ActionEvent;
39 import java.awt.event.MouseEvent;
40 import java.awt.event.MouseListener;
41 import java.net.URL;
42
43 import javax.swing.AbstractAction;
44 import javax.swing.ImageIcon;
45 import javax.swing.JPopupMenu;
46 import javax.swing.KeyStroke;
47 import javax.swing.text.JTextComponent;
48
49 import net.sf.jabref.util.CaseChangeMenu;
50 import net.sf.jabref.util.NameListNormalizer;
51
52 public class FieldTextMenu implements MouseListener
53 {
54   private FieldEditor myFieldName ;
55   private JPopupMenu inputMenu = new JPopupMenu() ;
56   private CopyAction copyAct = new CopyAction() ;
57
58     public FieldTextMenu(FieldEditor fieldComponent)
59   {
60     myFieldName = fieldComponent ;
61
62     // copy/paste Menu
63       PasteAction pasteAct = new PasteAction();
64       inputMenu.add(pasteAct) ;
65     inputMenu.add( copyAct ) ;
66     inputMenu.addSeparator();
67     inputMenu.add(new ReplaceAction());
68     if (myFieldName.getTextComponent() instanceof JTextComponent)
69         inputMenu.add(new CaseChangeMenu((JTextComponent) myFieldName.getTextComponent()));
70   }
71
72   public void mouseClicked(MouseEvent e)
73   {
74   }
75
76   public void mouseEntered(MouseEvent e)
77   {
78   }
79
80   public void mouseExited(MouseEvent e)
81   {
82   }
83
84   public void mousePressed(MouseEvent e)
85   {
86     maybeShowPopup( e ) ;
87   }
88
89   public void mouseReleased(MouseEvent e)
90   {
91     maybeShowPopup( e ) ;
92   }
93
94   private void maybeShowPopup( MouseEvent e )
95   {
96     if ( e.isPopupTrigger() )
97     {
98       if (myFieldName != null)
99       {
100           myFieldName.requestFocus();
101
102         // enable/disable copy to clipboard if selected text available
103         String txt = myFieldName.getSelectedText() ;
104         boolean cStat = false ;
105         if (txt != null)
106           if (txt.length() > 0)
107             cStat = true ;
108
109         copyAct.setEnabled(cStat);
110         inputMenu.show( e.getComponent(), e.getX(), e.getY() ) ;
111       }
112     }
113   }
114
115
116 // ---------------------------------------------------------------------------
117   abstract class BasicAction extends AbstractAction
118   {
119     public BasicAction(String text, String description, URL icon)
120     {
121       super(Globals.lang(text), new ImageIcon(icon));
122       putValue(SHORT_DESCRIPTION, Globals.lang(description));
123     }
124
125     public BasicAction(String text, String description, URL icon, KeyStroke key)
126     {
127       super(Globals.lang(text), new ImageIcon(icon));
128       putValue(ACCELERATOR_KEY, key);
129       putValue(SHORT_DESCRIPTION, Globals.lang(description));
130     }
131
132     public BasicAction(String text)
133     {
134       super(Globals.lang(text));
135     }
136
137     public BasicAction(String text, KeyStroke key)
138     {
139       super(Globals.lang(text));
140       putValue(ACCELERATOR_KEY, key);
141     }
142
143     public abstract void actionPerformed(ActionEvent e) ;
144   }
145 //---------------------------------------------------------------
146   /*class MenuHeaderAction extends BasicAction
147   {
148     public MenuHeaderAction(String comment)
149     {
150       super("Edit -" +comment);
151       this.setEnabled(false);
152     }
153
154     public void actionPerformed(ActionEvent e) { }
155   }
156     */
157
158 // ---------------------------------------------------------------------------
159   class PasteAction extends BasicAction
160   {
161     public PasteAction()
162     {
163       super("Paste from clipboard", "Paste from clipboard",
164               GUIGlobals.getIconUrl("paste"));
165     }
166
167     public void actionPerformed(ActionEvent e)
168     {
169       try
170       {
171         String data = ClipBoardManager.clipBoard.getClipboardContents() ;
172         if (data != null)
173           if (data.length() > 0)
174             if (myFieldName != null)
175               myFieldName.paste(data);
176       }
177       catch (Exception ignored) {}
178     }
179   }
180 // ---------------------------------------------------------------------------
181   class CopyAction extends BasicAction
182   {
183     public CopyAction()
184     {
185       super("Copy to clipboard", "Copy to clipboard", GUIGlobals.getIconUrl("copy"));
186     }
187
188     public void actionPerformed(ActionEvent e)
189     {
190       try
191       {
192 //        String data = ( String ) systemClip.getContents( null ).getTransferData(
193 //            DataFlavor.stringFlavor ) ;
194         if (myFieldName != null)
195         {
196           String data = myFieldName.getSelectedText() ;
197           if (data != null)
198             if (data.length() > 0)
199               ClipBoardManager.clipBoard.setClipboardContents(data);
200         }
201       }
202       catch (Exception ignored) {}
203     }
204   }
205
206   class ReplaceAction extends BasicAction{
207     public ReplaceAction(){
208         super("Normalize to BibTeX name format");
209         putValue(SHORT_DESCRIPTION, Globals.lang("If possible, normalize this list of names to conform to standard BibTeX name formatting"));
210     }
211     public void actionPerformed(ActionEvent evt){
212         if (myFieldName.getText().equals("")){
213             return;
214         }
215         //myFieldName.selectAll();
216         String input = myFieldName.getText();
217         //myFieldName.setText(input.replaceAll(","," and"));
218         myFieldName.setText(NameListNormalizer.normalizeAuthorList(input));
219     }
220   }
221
222
223 }