1 #include "dlg_load_deck_from_clipboard.h"
2
3 #include "deck_loader.h"
4 #include "settingscache.h"
5
6 #include <QApplication>
7 #include <QClipboard>
8 #include <QDialogButtonBox>
9 #include <QMessageBox>
10 #include <QPlainTextEdit>
11 #include <QPushButton>
12 #include <QTextStream>
13 #include <QVBoxLayout>
14
DlgLoadDeckFromClipboard(QWidget * parent)15 DlgLoadDeckFromClipboard::DlgLoadDeckFromClipboard(QWidget *parent) : QDialog(parent), deckList(nullptr)
16 {
17 contentsEdit = new QPlainTextEdit;
18
19 refreshButton = new QPushButton(tr("&Refresh"));
20 connect(refreshButton, SIGNAL(clicked()), this, SLOT(actRefresh()));
21
22 QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
23 buttonBox->addButton(refreshButton, QDialogButtonBox::ActionRole);
24 connect(buttonBox, SIGNAL(accepted()), this, SLOT(actOK()));
25 connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
26
27 auto *mainLayout = new QVBoxLayout;
28 mainLayout->addWidget(contentsEdit);
29 mainLayout->addWidget(buttonBox);
30
31 setLayout(mainLayout);
32
33 setWindowTitle(tr("Load deck from clipboard"));
34 resize(500, 500);
35
36 actRefresh();
37 connect(&SettingsCache::instance().shortcuts(), SIGNAL(shortCutChanged()), this, SLOT(refreshShortcuts()));
38 refreshShortcuts();
39 }
40
actRefresh()41 void DlgLoadDeckFromClipboard::actRefresh()
42 {
43 contentsEdit->setPlainText(QApplication::clipboard()->text());
44 }
45
refreshShortcuts()46 void DlgLoadDeckFromClipboard::refreshShortcuts()
47 {
48 refreshButton->setShortcut(
49 SettingsCache::instance().shortcuts().getSingleShortcut("DlgLoadDeckFromClipboard/refreshButton"));
50 }
51
actOK()52 void DlgLoadDeckFromClipboard::actOK()
53 {
54 QString buffer = contentsEdit->toPlainText();
55 QTextStream stream(&buffer);
56
57 auto *deckLoader = new DeckLoader;
58 if (buffer.contains("<cockatrice_deck version=\"1\">")) {
59 if (deckLoader->loadFromString_Native(buffer)) {
60 deckList = deckLoader;
61 accept();
62 } else {
63 QMessageBox::critical(this, tr("Error"), tr("Invalid deck list."));
64 delete deckLoader;
65 }
66 } else if (deckLoader->loadFromStream_Plain(stream)) {
67 deckList = deckLoader;
68 accept();
69 } else {
70 QMessageBox::critical(this, tr("Error"), tr("Invalid deck list."));
71 delete deckLoader;
72 }
73 }
74