mirror of
https://github.com/correl/mage.git
synced 2025-01-12 19:25:44 +00:00
UI: improved import from clipboard dialog and fixed compatibility with NetBeans;
This commit is contained in:
parent
263c9acfcc
commit
e471fc9888
5 changed files with 353 additions and 283 deletions
|
@ -30,7 +30,9 @@ import javax.swing.*;
|
||||||
import javax.swing.filechooser.FileFilter;
|
import javax.swing.filechooser.FileFilter;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.dnd.DropTarget;
|
import java.awt.dnd.DropTarget;
|
||||||
import java.awt.event.*;
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.event.HierarchyEvent;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -680,26 +682,19 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void importFromClipboard(ActionEvent evt) {
|
private void importFromClipboard(ActionEvent evt) {
|
||||||
final DeckImportFromClipboardDialog dialog = new DeckImportFromClipboardDialog();
|
final DeckImportClipboardDialog dialog = new DeckImportClipboardDialog();
|
||||||
dialog.pack();
|
dialog.showDialog();
|
||||||
dialog.setVisible(true);
|
|
||||||
|
|
||||||
dialog.addWindowListener(new WindowAdapter() {
|
if (!dialog.getTmpPath().isEmpty()) {
|
||||||
@Override
|
|
||||||
public void windowClosed(WindowEvent e) {
|
|
||||||
loadDeck(dialog.getTmpPath());
|
loadDeck(dialog.getTmpPath());
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void importFromClipboardWithAppend(ActionEvent evt) {
|
private void importFromClipboardWithAppend(ActionEvent evt) {
|
||||||
final DeckImportFromClipboardDialog dialog = new DeckImportFromClipboardDialog();
|
final DeckImportClipboardDialog dialog = new DeckImportClipboardDialog();
|
||||||
dialog.pack();
|
dialog.showDialog();
|
||||||
dialog.setVisible(true);
|
|
||||||
|
|
||||||
dialog.addWindowListener(new WindowAdapter() {
|
if (!dialog.getTmpPath().isEmpty()) {
|
||||||
@Override
|
|
||||||
public void windowClosed(WindowEvent e) {
|
|
||||||
Deck deckToAppend = null;
|
Deck deckToAppend = null;
|
||||||
StringBuilder errorMessages = new StringBuilder();
|
StringBuilder errorMessages = new StringBuilder();
|
||||||
|
|
||||||
|
@ -718,7 +713,6 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
||||||
MageFrame.getDesktop().setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
|
MageFrame.getDesktop().setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void exportChoose(java.awt.event.ActionEvent evt) {
|
private void exportChoose(java.awt.event.ActionEvent evt) {
|
||||||
|
|
|
@ -0,0 +1,127 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JDialogFormInfo">
|
||||||
|
<Properties>
|
||||||
|
<Property name="defaultCloseOperation" type="int" value="2"/>
|
||||||
|
<Property name="title" type="java.lang.String" value="Import from clipboard"/>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[400, 400]"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<SyntheticProperties>
|
||||||
|
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
||||||
|
<SyntheticProperty name="generateCenter" type="boolean" value="false"/>
|
||||||
|
</SyntheticProperties>
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
|
||||||
|
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||||
|
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||||
|
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="1" attributes="0">
|
||||||
|
<Component id="panelCommands" max="32767" attributes="0"/>
|
||||||
|
<Component id="panelData" alignment="0" pref="0" max="32767" attributes="0"/>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="labelData" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="labelData" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="panelData" pref="448" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="panelCommands" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Container class="javax.swing.JScrollPane" name="panelData">
|
||||||
|
<Properties>
|
||||||
|
<Property name="horizontalScrollBarPolicy" type="int" value="32"/>
|
||||||
|
<Property name="verticalScrollBarPolicy" type="int" value="22"/>
|
||||||
|
</Properties>
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JEditorPane" name="editData">
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
<Component class="javax.swing.JLabel" name="labelData">
|
||||||
|
<Properties>
|
||||||
|
<Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
|
||||||
|
<ComponentRef name="editData"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="text" type="java.lang.String" value="Paste deck in text format to import:"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Container class="javax.swing.JPanel" name="panelCommands">
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<EmptySpace min="0" pref="146" max="32767" attributes="0"/>
|
||||||
|
<Component id="buttonOK" min="-2" pref="100" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="buttonCancel" min="-2" pref="100" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="buttonCancel" alignment="3" min="-2" pref="30" max="-2" attributes="0"/>
|
||||||
|
<Component id="buttonOK" alignment="3" min="-2" pref="30" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JButton" name="buttonOK">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Import"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="buttonOKActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="buttonCancel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Close"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="buttonCancelActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
</SubComponents>
|
||||||
|
</Form>
|
|
@ -0,0 +1,201 @@
|
||||||
|
package mage.client.deckeditor;
|
||||||
|
|
||||||
|
import mage.client.MageFrame;
|
||||||
|
import mage.client.dialog.MageDialog;
|
||||||
|
import mage.util.DeckUtil;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.datatransfer.DataFlavor;
|
||||||
|
import java.awt.datatransfer.UnsupportedFlavorException;
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author JayDi85
|
||||||
|
*/
|
||||||
|
public class DeckImportClipboardDialog extends MageDialog {
|
||||||
|
|
||||||
|
private static final String FORMAT_TEXT =
|
||||||
|
"// Example:\n" +
|
||||||
|
"//1 Library of Congress\n" +
|
||||||
|
"//1 Cryptic Gateway\n" +
|
||||||
|
"//1 Azami, Lady of Scrolls\n" +
|
||||||
|
"// NB: This is slow as, and will lock your screen :)\n" +
|
||||||
|
"\n" +
|
||||||
|
"// Your current clipboard:\n" +
|
||||||
|
"\n";
|
||||||
|
|
||||||
|
private String tmpPath;
|
||||||
|
|
||||||
|
public DeckImportClipboardDialog() {
|
||||||
|
initComponents();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void showDialog() {
|
||||||
|
this.tmpPath = "";
|
||||||
|
onRefreshClipboard();
|
||||||
|
|
||||||
|
this.setModal(true);
|
||||||
|
this.setResizable(true);
|
||||||
|
getRootPane().setDefaultButton(buttonOK);
|
||||||
|
|
||||||
|
/*
|
||||||
|
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
|
||||||
|
addWindowListener(new WindowAdapter() {
|
||||||
|
@Override
|
||||||
|
public void windowClosing(WindowEvent e) {
|
||||||
|
onCancel();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
|
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 Optional<String> getClipboardStringData() {
|
||||||
|
try {
|
||||||
|
return Optional.of((String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor));
|
||||||
|
} catch (HeadlessException | UnsupportedFlavorException | IOException e) {
|
||||||
|
//e.printStackTrace();
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onOK() {
|
||||||
|
tmpPath = DeckUtil.writeTextToTempFile(editData.getText());
|
||||||
|
this.removeDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onCancel() {
|
||||||
|
this.removeDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onRefreshClipboard() {
|
||||||
|
editData.setText(FORMAT_TEXT + getClipboardStringData().orElse(""));
|
||||||
|
editData.setCaretPosition(FORMAT_TEXT.length());
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTmpPath() {
|
||||||
|
return tmpPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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")
|
||||||
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//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();
|
||||||
|
|
||||||
|
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
|
||||||
|
setTitle("Import from 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.setLabelFor(editData);
|
||||||
|
labelData.setText("Paste deck in text format to import:");
|
||||||
|
|
||||||
|
buttonOK.setText("Import");
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
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()
|
||||||
|
.addGap(0, 146, 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(javax.swing.GroupLayout.Alignment.TRAILING, panelCommandsLayout.createSequentialGroup()
|
||||||
|
.addGap(0, 0, Short.MAX_VALUE)
|
||||||
|
.addGroup(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)))
|
||||||
|
);
|
||||||
|
|
||||||
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
|
||||||
|
getContentPane().setLayout(layout);
|
||||||
|
layout.setHorizontalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
|
.addComponent(panelCommands, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
.addComponent(panelData, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
|
||||||
|
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
|
||||||
|
.addComponent(labelData)
|
||||||
|
.addGap(0, 0, Short.MAX_VALUE)))
|
||||||
|
.addContainerGap())
|
||||||
|
);
|
||||||
|
layout.setVerticalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addComponent(labelData)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(panelData, javax.swing.GroupLayout.DEFAULT_SIZE, 448, 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();
|
||||||
|
}// </editor-fold>//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
|
||||||
|
|
||||||
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
private javax.swing.JButton buttonCancel;
|
||||||
|
private javax.swing.JButton buttonOK;
|
||||||
|
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
|
||||||
|
}
|
|
@ -1,79 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="mage.client.deckeditor.DeckImportFromClipboardDialog">
|
|
||||||
<grid id="cbd77" binding="contentPane" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
|
||||||
<margin top="10" left="10" bottom="10" right="10"/>
|
|
||||||
<constraints>
|
|
||||||
<xy x="48" y="54" width="540" height="500"/>
|
|
||||||
</constraints>
|
|
||||||
<properties>
|
|
||||||
<minimumSize width="540" height="450"/>
|
|
||||||
</properties>
|
|
||||||
<border type="none"/>
|
|
||||||
<children>
|
|
||||||
<grid id="94766" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
|
||||||
<margin top="0" left="0" bottom="0" right="0"/>
|
|
||||||
<constraints>
|
|
||||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="1" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
|
||||||
</constraints>
|
|
||||||
<properties/>
|
|
||||||
<border type="none"/>
|
|
||||||
<children>
|
|
||||||
<hspacer id="98af6">
|
|
||||||
<constraints>
|
|
||||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
|
||||||
</constraints>
|
|
||||||
</hspacer>
|
|
||||||
<grid id="9538f" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="true" same-size-vertically="false" hgap="-1" vgap="-1">
|
|
||||||
<margin top="0" left="0" bottom="0" right="0"/>
|
|
||||||
<constraints>
|
|
||||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
|
||||||
</constraints>
|
|
||||||
<properties/>
|
|
||||||
<border type="none"/>
|
|
||||||
<children>
|
|
||||||
<component id="e7465" class="javax.swing.JButton" binding="buttonOK">
|
|
||||||
<constraints>
|
|
||||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
|
||||||
</constraints>
|
|
||||||
<properties>
|
|
||||||
<text value="Import"/>
|
|
||||||
</properties>
|
|
||||||
</component>
|
|
||||||
<component id="5723f" class="javax.swing.JButton" binding="buttonCancel">
|
|
||||||
<constraints>
|
|
||||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
|
||||||
</constraints>
|
|
||||||
<properties>
|
|
||||||
<text value="Cancel"/>
|
|
||||||
</properties>
|
|
||||||
</component>
|
|
||||||
</children>
|
|
||||||
</grid>
|
|
||||||
</children>
|
|
||||||
</grid>
|
|
||||||
<grid id="e3588" layout-manager="FormLayout">
|
|
||||||
<rowspec value="center:d:grow"/>
|
|
||||||
<colspec value="fill:d:noGrow"/>
|
|
||||||
<constraints>
|
|
||||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
|
||||||
</constraints>
|
|
||||||
<properties/>
|
|
||||||
<border type="none"/>
|
|
||||||
<children>
|
|
||||||
<component id="f8bac" class="javax.swing.JEditorPane" binding="txtDeckList">
|
|
||||||
<constraints>
|
|
||||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="6" anchor="0" fill="3" indent="0" use-parent-layout="false">
|
|
||||||
<preferred-size width="150" height="50"/>
|
|
||||||
</grid>
|
|
||||||
<forms defaultalign-horz="false" defaultalign-vert="false"/>
|
|
||||||
</constraints>
|
|
||||||
<properties>
|
|
||||||
<minimumSize width="250" height="400"/>
|
|
||||||
<preferredSize width="550" height="400"/>
|
|
||||||
</properties>
|
|
||||||
</component>
|
|
||||||
</children>
|
|
||||||
</grid>
|
|
||||||
</children>
|
|
||||||
</grid>
|
|
||||||
</form>
|
|
|
@ -1,173 +0,0 @@
|
||||||
package mage.client.deckeditor;
|
|
||||||
|
|
||||||
import mage.util.DeckUtil;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.datatransfer.DataFlavor;
|
|
||||||
import java.awt.datatransfer.UnsupportedFlavorException;
|
|
||||||
import java.awt.event.KeyEvent;
|
|
||||||
import java.awt.event.WindowAdapter;
|
|
||||||
import java.awt.event.WindowEvent;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public class DeckImportFromClipboardDialog extends JDialog {
|
|
||||||
|
|
||||||
private static final String FORMAT_TEXT =
|
|
||||||
"// Example:\n" +
|
|
||||||
"//1 Library of Congress\n" +
|
|
||||||
"//1 Cryptic Gateway\n" +
|
|
||||||
"//1 Azami, Lady of Scrolls\n" +
|
|
||||||
"// NB: This is slow as, and will lock your screen :)\n" +
|
|
||||||
"\n" +
|
|
||||||
"// Your current clipboard:\n";
|
|
||||||
|
|
||||||
private JPanel contentPane;
|
|
||||||
private JButton buttonOK;
|
|
||||||
private JButton buttonCancel;
|
|
||||||
private JEditorPane txtDeckList;
|
|
||||||
|
|
||||||
private String tmpPath;
|
|
||||||
|
|
||||||
public DeckImportFromClipboardDialog() {
|
|
||||||
initComponents();
|
|
||||||
|
|
||||||
onRefreshClipboard();
|
|
||||||
|
|
||||||
setContentPane(contentPane);
|
|
||||||
setModal(true);
|
|
||||||
getRootPane().setDefaultButton(buttonOK);
|
|
||||||
|
|
||||||
buttonOK.addActionListener(e -> onOK());
|
|
||||||
buttonCancel.addActionListener(e -> onCancel());
|
|
||||||
|
|
||||||
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
|
|
||||||
addWindowListener(new WindowAdapter() {
|
|
||||||
@Override
|
|
||||||
public void windowClosing(WindowEvent e) {
|
|
||||||
onCancel();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Close on "ESC"
|
|
||||||
contentPane.registerKeyboardAction(e -> onCancel(), KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<String> getClipboardStringData() {
|
|
||||||
try {
|
|
||||||
return Optional.of((String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor));
|
|
||||||
} catch (HeadlessException | UnsupportedFlavorException | IOException e) {
|
|
||||||
//e.printStackTrace();
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onOK() {
|
|
||||||
tmpPath = DeckUtil.writeTextToTempFile(txtDeckList.getText());
|
|
||||||
dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onCancel() {
|
|
||||||
dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onRefreshClipboard() {
|
|
||||||
txtDeckList.setText(FORMAT_TEXT + getClipboardStringData().orElse(""));
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getTmpPath() {
|
|
||||||
return tmpPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initComponents() {
|
|
||||||
contentPane = new JPanel();
|
|
||||||
JPanel panel1 = new JPanel();
|
|
||||||
JPanel panel2 = new JPanel();
|
|
||||||
buttonOK = new JButton();
|
|
||||||
buttonCancel = new JButton();
|
|
||||||
JPanel panel3 = new JPanel();
|
|
||||||
txtDeckList = new JEditorPane();
|
|
||||||
|
|
||||||
{
|
|
||||||
contentPane.setMinimumSize(new Dimension(540, 450));
|
|
||||||
|
|
||||||
contentPane.setBorder(new javax.swing.border.CompoundBorder(
|
|
||||||
new javax.swing.border.TitledBorder(new javax.swing.border.EmptyBorder(0, 0, 0, 0),
|
|
||||||
"Import from Clipboard", javax.swing.border.TitledBorder.CENTER,
|
|
||||||
javax.swing.border.TitledBorder.TOP, new java.awt.Font("Dialog", java.awt.Font.PLAIN, 12),
|
|
||||||
java.awt.Color.BLACK), contentPane.getBorder()));
|
|
||||||
|
|
||||||
contentPane.addPropertyChangeListener(e -> {
|
|
||||||
if ("border".equals(e.getPropertyName())) {
|
|
||||||
throw new RuntimeException();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
contentPane.addPropertyChangeListener(e -> {
|
|
||||||
if ("border".equals(e.getPropertyName())) {
|
|
||||||
throw new RuntimeException();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
contentPane.setLayout(new GridBagLayout());
|
|
||||||
((GridBagLayout) contentPane.getLayout()).columnWidths = new int[]{0, 0};
|
|
||||||
((GridBagLayout) contentPane.getLayout()).rowHeights = new int[]{0, 0, 0};
|
|
||||||
((GridBagLayout) contentPane.getLayout()).columnWeights = new double[]{0.01, 1.0E-4};
|
|
||||||
((GridBagLayout) contentPane.getLayout()).rowWeights = new double[]{0.01, 0.0, 1.0E-4};
|
|
||||||
|
|
||||||
{
|
|
||||||
panel1.setLayout(new GridBagLayout());
|
|
||||||
((GridBagLayout) panel1.getLayout()).columnWidths = new int[]{0, 0, 0};
|
|
||||||
((GridBagLayout) panel1.getLayout()).rowHeights = new int[]{0, 0};
|
|
||||||
((GridBagLayout) panel1.getLayout()).columnWeights = new double[]{0.0, 0.01, 1.0E-4};
|
|
||||||
((GridBagLayout) panel1.getLayout()).rowWeights = new double[]{0.01, 1.0E-4};
|
|
||||||
|
|
||||||
{
|
|
||||||
panel2.setLayout(new GridBagLayout());
|
|
||||||
((GridBagLayout) panel2.getLayout()).columnWidths = new int[]{0, 4, 0, 0};
|
|
||||||
((GridBagLayout) panel2.getLayout()).rowHeights = new int[]{0, 0};
|
|
||||||
((GridBagLayout) panel2.getLayout()).columnWeights = new double[]{0.01, 0.0, 0.01, 1.0E-4};
|
|
||||||
((GridBagLayout) panel2.getLayout()).rowWeights = new double[]{0.0, 1.0E-4};
|
|
||||||
|
|
||||||
//---- buttonOK ----
|
|
||||||
buttonOK.setText("Import");
|
|
||||||
panel2.add(buttonOK, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
|
|
||||||
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
|
|
||||||
new Insets(0, 0, 0, 0), 0, 0));
|
|
||||||
|
|
||||||
//---- buttonCancel ----
|
|
||||||
buttonCancel.setText("Cancel");
|
|
||||||
panel2.add(buttonCancel, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0,
|
|
||||||
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
|
|
||||||
new Insets(0, 0, 0, 0), 0, 0));
|
|
||||||
}
|
|
||||||
panel1.add(panel2, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0,
|
|
||||||
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
|
|
||||||
new Insets(0, 0, 0, 0), 0, 0));
|
|
||||||
}
|
|
||||||
contentPane.add(panel1, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0,
|
|
||||||
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
|
|
||||||
new Insets(0, 0, 0, 0), 0, 0));
|
|
||||||
|
|
||||||
{
|
|
||||||
panel3.setLayout(new GridBagLayout());
|
|
||||||
((GridBagLayout) panel3.getLayout()).columnWidths = new int[]{0, 0};
|
|
||||||
((GridBagLayout) panel3.getLayout()).rowHeights = new int[]{0, 0};
|
|
||||||
((GridBagLayout) panel3.getLayout()).columnWeights = new double[]{0.0, 1.0E-4};
|
|
||||||
((GridBagLayout) panel3.getLayout()).rowWeights = new double[]{1.0, 1.0E-4};
|
|
||||||
|
|
||||||
txtDeckList.setMinimumSize(new Dimension(250, 400));
|
|
||||||
txtDeckList.setPreferredSize(new Dimension(550, 400));
|
|
||||||
txtDeckList.setText(FORMAT_TEXT);
|
|
||||||
JScrollPane txtScrollableDeckList = new JScrollPane(txtDeckList);
|
|
||||||
panel3.add(txtScrollableDeckList, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0,
|
|
||||||
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
|
|
||||||
new Insets(0, 0, 0, 0), 0, 0));
|
|
||||||
}
|
|
||||||
contentPane.add(panel3, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
|
|
||||||
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
|
|
||||||
new Insets(0, 0, 5, 0), 0, 0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue