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