/* * jEdit - Programmer's Text Editor * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * * Copyright (C) 2010 jEdit contributors * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.gjt.sp.jedit.gui; import org.gjt.sp.jedit.Registers; import org.gjt.sp.jedit.View; import org.gjt.sp.jedit.datatransfer.JEditDataFlavor; import org.gjt.sp.jedit.jEdit; import org.gjt.sp.jedit.textarea.TextArea; import org.gjt.sp.util.GenericGUIUtilities; import javax.swing.*; import javax.swing.border.EmptyBorder; import java.awt.*; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.*; import java.util.List; /** "Paste Special" dialog. * @author Matthieu Casanova */ public class PasteSpecialDialog extends EnhancedDialog { private static final DataFlavor[] flavors = {DataFlavor.stringFlavor, JEditDataFlavor.jEditRichTextDataFlavor, JEditDataFlavor.html}; private final TextArea textArea; private JList<DataFlavor> flavorList; public PasteSpecialDialog(View view, TextArea textArea) { super(view, jEdit.getProperty("paste-special.title"), true); this.textArea = textArea; JPanel content = new JPanel(new BorderLayout()); content.setBorder(new EmptyBorder(12,12,12,12)); setContentPane(content); Registers.Register register = Registers.getRegister('$'); Transferable transferable = register.getTransferable(); DataFlavor[] flavors = transferable.getTransferDataFlavors(); List<DataFlavor> flavorList = Arrays.asList(flavors); List<DataFlavor> supportedFlavors = new ArrayList<DataFlavor>(this.flavors.length); for (DataFlavor flavor : this.flavors) { if (flavorList.contains(flavor)) { supportedFlavors.add(flavor); } } this.flavorList = new JList<DataFlavor>(supportedFlavors.toArray(new DataFlavor[supportedFlavors.size()])); this.flavorList.setCellRenderer(new DefaultListCellRenderer() { @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); if (value.equals(DataFlavor.stringFlavor)) { setText("Plain text"); } else if (value.equals(JEditDataFlavor.jEditRichTextDataFlavor)) { setText("jEdit rich text"); } else if (value.equals(JEditDataFlavor.html)) { setText("html"); } return this; } }); getContentPane().add(new JScrollPane(this.flavorList)); //{{{ Buttons JPanel buttons = new JPanel(); buttons.setLayout(new BoxLayout(buttons,BoxLayout.X_AXIS)); buttons.setBorder(new EmptyBorder(17, 0, 0, 0)); buttons.add(Box.createGlue()); JButton ok = new JButton(jEdit.getProperty("common.ok")); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ok(); } }); getRootPane().setDefaultButton(ok); buttons.add(ok); buttons.add(Box.createHorizontalStrut(6)); JButton cancel = new JButton(jEdit.getProperty("common.cancel")); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cancel(); } }); buttons.add(cancel); GenericGUIUtilities.makeSameSize(ok, cancel); content.add(BorderLayout.SOUTH, buttons); //}}} pack(); setLocationRelativeTo(view); setVisible(true); } @Override public void ok() { DataFlavor flavor = (DataFlavor) flavorList.getSelectedValue(); if (flavor == null) { flavor = DataFlavor.stringFlavor; } Registers.paste(textArea, '$', flavor); dispose(); } @Override public void cancel() { dispose(); } }