Merge develop to Release_2_8_3_Branch
[jalview.git] / src / jalview / gui / CutAndPasteHtmlTransfer.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.gui;
22
23 import java.awt.*;
24 import java.awt.datatransfer.*;
25 import java.awt.event.*;
26 import java.io.StringWriter;
27
28 import javax.swing.*;
29 import javax.swing.event.HyperlinkEvent;
30 import javax.swing.event.HyperlinkListener;
31 import javax.swing.event.HyperlinkEvent.EventType;
32
33 import jalview.io.*;
34 import jalview.jbgui.*;
35 import jalview.util.MessageManager;
36 import jalview.viewmodel.AlignmentViewport;
37
38 /**
39  * Cut'n'paste files into the desktop See JAL-1105
40  * 
41  * @author $author$
42  * @version $Revision$
43  */
44 public class CutAndPasteHtmlTransfer extends GCutAndPasteHtmlTransfer
45 {
46
47   AlignmentViewport viewport;
48
49   public CutAndPasteHtmlTransfer()
50   {
51     super();
52     displaySource.setSelected(false);
53     textarea.addKeyListener(new KeyListener()
54     {
55
56       @Override
57       public void keyTyped(KeyEvent arg0)
58       {
59         // if (arg0.isControlDown() && arg0.getKeyCode()==KeyEvent.VK_C)
60         // {
61         // copyItem_actionPerformed(null);
62         // }
63         arg0.consume();
64       }
65
66       @Override
67       public void keyReleased(KeyEvent arg0)
68       {
69         // TODO Auto-generated method stub
70
71       }
72
73       @Override
74       public void keyPressed(KeyEvent arg0)
75       {
76         // TODO Auto-generated method stub
77
78       }
79     });
80     textarea.setEditable(false);
81     textarea.addHyperlinkListener(new HyperlinkListener()
82     {
83
84       @Override
85       public void hyperlinkUpdate(HyperlinkEvent e)
86       {
87         if (e.getEventType().equals(EventType.ACTIVATED))
88         {
89           Desktop.showUrl(e.getURL().toExternalForm());
90         }
91       }
92     });
93     SwingUtilities.invokeLater(new Runnable()
94     {
95       public void run()
96       {
97         textarea.requestFocus();
98       }
99     });
100
101   }
102
103   /**
104    * DOCUMENT ME!
105    */
106   public void setForInput(AlignmentViewport viewport)
107   {
108     this.viewport = viewport;
109     if (viewport != null)
110     {
111       ok.setText(MessageManager.getString("action.add"));
112     }
113
114     getContentPane().add(inputButtonPanel, java.awt.BorderLayout.SOUTH);
115   }
116
117   /**
118    * DOCUMENT ME!
119    * 
120    * @return DOCUMENT ME!
121    */
122   public String getText()
123   {
124     return textarea.getText();
125   }
126
127   /**
128    * Set contents of HTML Display pane
129    * 
130    * @param text
131    *          HTML text
132    */
133   public void setText(String text)
134   {
135     textarea.setText(text);
136   }
137
138   public void save_actionPerformed(ActionEvent e)
139   {
140     JalviewFileChooser chooser = new JalviewFileChooser(
141             jalview.bin.Cache.getProperty("LAST_DIRECTORY"));
142
143     chooser.setAcceptAllFileFilterUsed(false);
144     chooser.setFileView(new JalviewFileView());
145     chooser.setDialogTitle(MessageManager.getString("label.save_text_to_file"));
146     chooser.setToolTipText(MessageManager.getString("action.save"));
147
148     int value = chooser.showSaveDialog(this);
149
150     if (value == JalviewFileChooser.APPROVE_OPTION)
151     {
152       try
153       {
154         java.io.PrintWriter out = new java.io.PrintWriter(
155                 new java.io.FileWriter(chooser.getSelectedFile()));
156
157         out.print(getText());
158         out.close();
159       } catch (Exception ex)
160       {
161         ex.printStackTrace();
162       }
163
164     }
165   }
166
167   public void toggleHtml_actionPerformed(ActionEvent e)
168   {
169     String txt = textarea.getText();
170     textarea.setContentType(displaySource.isSelected() ? "text/text"
171             : "text/html");
172     textarea.setText(txt);
173   }
174
175   /**
176    * DOCUMENT ME!
177    * 
178    * @param e
179    *          DOCUMENT ME!
180    */
181   public void copyItem_actionPerformed(ActionEvent e)
182   {
183     Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
184     StringWriter sw = new StringWriter();
185     try
186     {
187       textarea.getEditorKit().write(sw, textarea.getDocument(),
188               textarea.getSelectionStart(),
189               textarea.getSelectionEnd() - textarea.getSelectionStart());
190     } catch (Exception x)
191     {
192     }
193     ;
194     StringSelection ssel = new StringSelection(sw.getBuffer().toString());
195     c.setContents(ssel, ssel);
196   }
197
198   /**
199    * DOCUMENT ME!
200    * 
201    * @param e
202    *          DOCUMENT ME!
203    */
204   public void cancel_actionPerformed(ActionEvent e)
205   {
206     try
207     {
208       this.setClosed(true);
209     } catch (Exception ex)
210     {
211     }
212   }
213
214   public void textarea_mousePressed(MouseEvent e)
215   {
216     if (SwingUtilities.isRightMouseButton(e))
217     {
218       JPopupMenu popup = new JPopupMenu(
219               MessageManager.getString("action.edit"));
220       JMenuItem item = new JMenuItem(
221               MessageManager.getString("action.copy"));
222       item.addActionListener(new ActionListener()
223       {
224         public void actionPerformed(ActionEvent e)
225         {
226           copyItem_actionPerformed(e);
227         }
228       });
229       popup.add(item);
230       popup.show(this, e.getX() + 10, e.getY() + textarea.getY() + 40);
231
232     }
233   }
234
235 }