903cd23f23bdec64828dc26fb32cc0f621fbd43d
[jalview.git] / src / jalview / gui / CutAndPasteHtmlTransfer.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
3  * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, 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.datamodel.*;
31 import jalview.io.*;
32 import jalview.jbgui.*;
33
34 /**
35  * Cut'n'paste files into the desktop
36  * 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("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    * Set contents of HTML Display pane
125    * 
126    * @param text 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" : "text/html");
166     textarea.setText(txt);
167   }
168   /**
169    * DOCUMENT ME!
170    * 
171    * @param e
172    *          DOCUMENT ME!
173    */
174   public void copyItem_actionPerformed(ActionEvent e)
175   {
176     Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
177     StringWriter sw = new StringWriter();
178     try {
179       textarea.getEditorKit().write(sw, textarea.getDocument(), textarea.getSelectionStart(), textarea.getSelectionEnd()-textarea.getSelectionStart());
180     } catch (Exception x){};
181     StringSelection ssel=new StringSelection(sw.getBuffer().toString());
182     c.setContents(ssel,ssel);
183   }
184
185
186   /**
187    * DOCUMENT ME!
188    * 
189    * @param e
190    *          DOCUMENT ME!
191    */
192   public void cancel_actionPerformed(ActionEvent e)
193   {
194     try
195     {
196       this.setClosed(true);
197     } catch (Exception ex)
198     {
199     }
200   }
201
202   public void textarea_mousePressed(MouseEvent e)
203   {
204     if (SwingUtilities.isRightMouseButton(e))
205     {
206       JPopupMenu popup = new JPopupMenu("Edit");
207       JMenuItem item = new JMenuItem("Copy");
208       item.addActionListener(new ActionListener()
209       {
210         public void actionPerformed(ActionEvent e)
211         {
212           copyItem_actionPerformed(e);
213         }
214       });
215       popup.add(item);
216       popup.show(this, e.getX() + 10, e.getY() + textarea.getY() + 40);
217
218     }
219   }
220
221 }