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