JAL-1432 updated copyright notices
[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
34 /**
35  * Cut'n'paste files into the desktop See JAL-1105
36  * 
37  * @author $author$
38  * @version $Revision$
39  */
40 public class CutAndPasteHtmlTransfer extends GCutAndPasteHtmlTransfer
41 {
42
43   AlignViewport viewport;
44
45   public CutAndPasteHtmlTransfer()
46   {
47     super();
48     displaySource.setSelected(false);
49     textarea.addKeyListener(new KeyListener()
50     {
51
52       @Override
53       public void keyTyped(KeyEvent arg0)
54       {
55         // if (arg0.isControlDown() && arg0.getKeyCode()==KeyEvent.VK_C)
56         // {
57         // copyItem_actionPerformed(null);
58         // }
59         arg0.consume();
60       }
61
62       @Override
63       public void keyReleased(KeyEvent arg0)
64       {
65         // TODO Auto-generated method stub
66
67       }
68
69       @Override
70       public void keyPressed(KeyEvent arg0)
71       {
72         // TODO Auto-generated method stub
73
74       }
75     });
76     textarea.setEditable(false);
77     textarea.addHyperlinkListener(new HyperlinkListener()
78     {
79
80       @Override
81       public void hyperlinkUpdate(HyperlinkEvent e)
82       {
83         if (e.getEventType().equals(EventType.ACTIVATED))
84         {
85           Desktop.showUrl(e.getURL().toExternalForm());
86         }
87       }
88     });
89     SwingUtilities.invokeLater(new Runnable()
90     {
91       public void run()
92       {
93         textarea.requestFocus();
94       }
95     });
96
97   }
98
99   /**
100    * DOCUMENT ME!
101    */
102   public void setForInput(AlignViewport viewport)
103   {
104     this.viewport = viewport;
105     if (viewport != null)
106     {
107       ok.setText("Add");
108     }
109
110     getContentPane().add(inputButtonPanel, java.awt.BorderLayout.SOUTH);
111   }
112
113   /**
114    * DOCUMENT ME!
115    * 
116    * @return DOCUMENT ME!
117    */
118   public String getText()
119   {
120     return textarea.getText();
121   }
122
123   /**
124    * Set contents of HTML Display pane
125    * 
126    * @param text
127    *          HTML text
128    */
129   public void setText(String text)
130   {
131     textarea.setText(text);
132   }
133
134   public void save_actionPerformed(ActionEvent e)
135   {
136     JalviewFileChooser chooser = new JalviewFileChooser(
137             jalview.bin.Cache.getProperty("LAST_DIRECTORY"));
138
139     chooser.setAcceptAllFileFilterUsed(false);
140     chooser.setFileView(new JalviewFileView());
141     chooser.setDialogTitle("Save Text to File");
142     chooser.setToolTipText("Save");
143
144     int value = chooser.showSaveDialog(this);
145
146     if (value == JalviewFileChooser.APPROVE_OPTION)
147     {
148       try
149       {
150         java.io.PrintWriter out = new java.io.PrintWriter(
151                 new java.io.FileWriter(chooser.getSelectedFile()));
152
153         out.print(getText());
154         out.close();
155       } catch (Exception ex)
156       {
157         ex.printStackTrace();
158       }
159
160     }
161   }
162
163   public void toggleHtml_actionPerformed(ActionEvent e)
164   {
165     String txt = textarea.getText();
166     textarea.setContentType(displaySource.isSelected() ? "text/text"
167             : "text/html");
168     textarea.setText(txt);
169   }
170
171   /**
172    * DOCUMENT ME!
173    * 
174    * @param e
175    *          DOCUMENT ME!
176    */
177   public void copyItem_actionPerformed(ActionEvent e)
178   {
179     Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
180     StringWriter sw = new StringWriter();
181     try
182     {
183       textarea.getEditorKit().write(sw, textarea.getDocument(),
184               textarea.getSelectionStart(),
185               textarea.getSelectionEnd() - textarea.getSelectionStart());
186     } catch (Exception x)
187     {
188     }
189     ;
190     StringSelection ssel = new StringSelection(sw.getBuffer().toString());
191     c.setContents(ssel, ssel);
192   }
193
194   /**
195    * DOCUMENT ME!
196    * 
197    * @param e
198    *          DOCUMENT ME!
199    */
200   public void cancel_actionPerformed(ActionEvent e)
201   {
202     try
203     {
204       this.setClosed(true);
205     } catch (Exception ex)
206     {
207     }
208   }
209
210   public void textarea_mousePressed(MouseEvent e)
211   {
212     if (SwingUtilities.isRightMouseButton(e))
213     {
214       JPopupMenu popup = new JPopupMenu("Edit");
215       JMenuItem item = new JMenuItem("Copy");
216       item.addActionListener(new ActionListener()
217       {
218         public void actionPerformed(ActionEvent e)
219         {
220           copyItem_actionPerformed(e);
221         }
222       });
223       popup.add(item);
224       popup.show(this, e.getX() + 10, e.getY() + textarea.getY() + 40);
225
226     }
227   }
228
229 }