diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java
index 118ebee9864..357ecda0c6b 100644
--- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java
+++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java
@@ -782,7 +782,8 @@ public class DeckEditorPanel extends javax.swing.JPanel {
}
private void exportToClipboard(java.awt.event.ActionEvent evt) {
- // TODO
+ final DeckExportClipboardDialog dialog = new DeckExportClipboardDialog();
+ dialog.showDialog(deck);
}
private void processAndShowImportErrors(StringBuilder errorMessages) {
diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckExportClipboardDialog.form b/Mage.Client/src/main/java/mage/client/deckeditor/DeckExportClipboardDialog.form
new file mode 100644
index 00000000000..08b2a175b5b
--- /dev/null
+++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckExportClipboardDialog.form
@@ -0,0 +1,160 @@
+
+
+
diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckExportClipboardDialog.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckExportClipboardDialog.java
new file mode 100644
index 00000000000..3374395ce2c
--- /dev/null
+++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckExportClipboardDialog.java
@@ -0,0 +1,236 @@
+package mage.client.deckeditor;
+
+import mage.cards.decks.Deck;
+import mage.cards.decks.DeckFormats;
+import mage.cards.decks.exporter.DeckExporter;
+import mage.client.MageFrame;
+import mage.client.dialog.MageDialog;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.datatransfer.StringSelection;
+import java.awt.event.KeyEvent;
+import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
+
+/**
+ * @author JayDi85
+ */
+public class DeckExportClipboardDialog extends MageDialog {
+
+ private Deck deck;
+ private ArrayList formats = new ArrayList<>();
+
+ public DeckExportClipboardDialog() {
+ initComponents();
+ }
+
+ public void showDialog(Deck deck) {
+ this.deck = deck;
+
+ // formats combobox
+ formats.clear();
+ comboFormats.removeAllItems();
+ for (DeckFormats df : DeckFormats.values()) {
+ formats.add(df);
+ comboFormats.addItem(df.getExporter().getDescription());
+ }
+ if (comboFormats.getItemCount() > 0) {
+ comboFormats.setSelectedIndex(0);
+ }
+
+ onRefreshData();
+
+ this.setModal(true);
+ this.setResizable(true);
+ getRootPane().setDefaultButton(buttonOK);
+
+ this.makeWindowCentered();
+
+ // windows settings
+ if (this.isModal()) {
+ MageFrame.getDesktop().add(this, JLayeredPane.MODAL_LAYER);
+ } else {
+ MageFrame.getDesktop().add(this, JLayeredPane.PALETTE_LAYER);
+ }
+
+ // Close on "ESC"
+ registerKeyboardAction(e -> onCancel(), KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
+
+ this.setVisible(true);
+ }
+
+ private void setClipboardStringData(String text) {
+ try {
+ StringSelection data = new StringSelection(text);
+ Toolkit.getDefaultToolkit().getSystemClipboard().setContents(data, data);
+ } catch (HeadlessException e) {
+ //e.printStackTrace();
+ }
+ }
+
+ private void onOK() {
+ onCopyToClipboard();
+ this.removeDialog();
+ }
+
+ private void onCancel() {
+ this.removeDialog();
+ }
+
+ private void onRefreshData() {
+ int formatIndex = comboFormats.getSelectedIndex();
+ if (formatIndex < 0 || formatIndex >= formats.size()) {
+ return;
+ }
+
+ DeckExporter exporter = formats.get(formatIndex).getExporter();
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ exporter.writeDeck(baos, deck.getDeckCardLists());
+ editData.setText(baos.toString());
+ editData.setCaretPosition(0);
+ }
+
+ private void onCopyToClipboard() {
+ setClipboardStringData(editData.getText());
+ }
+
+ /**
+ * This method is called from within the constructor to initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is always
+ * regenerated by the Form Editor.
+ */
+ @SuppressWarnings("unchecked")
+ // //GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ panelData = new javax.swing.JScrollPane();
+ editData = new javax.swing.JEditorPane();
+ labelData = new javax.swing.JLabel();
+ panelCommands = new javax.swing.JPanel();
+ buttonOK = new javax.swing.JButton();
+ buttonCancel = new javax.swing.JButton();
+ buttonCopy = new javax.swing.JButton();
+ comboFormats = new javax.swing.JComboBox<>();
+
+ setTitle("Export to clipboard");
+ setMinimumSize(new java.awt.Dimension(400, 400));
+
+ panelData.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
+ panelData.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
+ panelData.setViewportView(editData);
+
+ labelData.setText("Choose deck format:");
+
+ buttonOK.setText("Copy");
+ buttonOK.setToolTipText("Import deck from current text");
+ buttonOK.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ buttonOKActionPerformed(evt);
+ }
+ });
+
+ buttonCancel.setText("Close");
+ buttonCancel.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ buttonCancelActionPerformed(evt);
+ }
+ });
+
+ buttonCopy.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/copy_24.png"))); // NOI18N
+ buttonCopy.setToolTipText("Copy current text to clipboard");
+ buttonCopy.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ buttonCopyActionPerformed(evt);
+ }
+ });
+
+ javax.swing.GroupLayout panelCommandsLayout = new javax.swing.GroupLayout(panelCommands);
+ panelCommands.setLayout(panelCommandsLayout);
+ panelCommandsLayout.setHorizontalGroup(
+ panelCommandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelCommandsLayout.createSequentialGroup()
+ .addComponent(buttonCopy, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(buttonOK, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(buttonCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
+ );
+ panelCommandsLayout.setVerticalGroup(
+ panelCommandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(panelCommandsLayout.createSequentialGroup()
+ .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addGroup(panelCommandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelCommandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(buttonCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(buttonOK, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addComponent(buttonCopy, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)))
+ );
+
+ comboFormats.setModel(new javax.swing.DefaultComboBoxModel<>(new String[]{"Item 1", "Item 2", "Item 3", "Item 4"}));
+ comboFormats.addItemListener(new java.awt.event.ItemListener() {
+ public void itemStateChanged(java.awt.event.ItemEvent evt) {
+ comboFormatsItemStateChanged(evt);
+ }
+ });
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+ getContentPane().setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(panelCommands, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(panelData, javax.swing.GroupLayout.DEFAULT_SIZE, 364, Short.MAX_VALUE)
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(labelData)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(comboFormats, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
+ .addContainerGap())
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addGap(8, 8, 8)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(labelData)
+ .addComponent(comboFormats, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addGap(10, 10, 10)
+ .addComponent(panelData, javax.swing.GroupLayout.DEFAULT_SIZE, 520, Short.MAX_VALUE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(panelCommands, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap())
+ );
+
+ pack();
+ }// //GEN-END:initComponents
+
+ private void buttonCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonCancelActionPerformed
+ onCancel();
+ }//GEN-LAST:event_buttonCancelActionPerformed
+
+ private void buttonOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonOKActionPerformed
+ onOK();
+ }//GEN-LAST:event_buttonOKActionPerformed
+
+ private void buttonCopyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonCopyActionPerformed
+ onCopyToClipboard();
+ }//GEN-LAST:event_buttonCopyActionPerformed
+
+ private void comboFormatsItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_comboFormatsItemStateChanged
+ onRefreshData();
+ }//GEN-LAST:event_comboFormatsItemStateChanged
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JButton buttonCancel;
+ private javax.swing.JButton buttonCopy;
+ private javax.swing.JButton buttonOK;
+ private javax.swing.JComboBox comboFormats;
+ private javax.swing.JEditorPane editData;
+ private javax.swing.JLabel labelData;
+ private javax.swing.JPanel panelCommands;
+ private javax.swing.JScrollPane panelData;
+ // End of variables declaration//GEN-END:variables
+}
diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckImportClipboardDialog.form b/Mage.Client/src/main/java/mage/client/deckeditor/DeckImportClipboardDialog.form
index f86a4e1b6bd..bb988c16943 100644
--- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckImportClipboardDialog.form
+++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckImportClipboardDialog.form
@@ -28,10 +28,7 @@
-
-
-
-
+