From b57a33333b0a28a39608d47b01e3f8d82876657d Mon Sep 17 00:00:00 2001 From: Paolo Capriotti Date: Sun, 4 Nov 2007 00:48:11 +0100 Subject: [PATCH] Rough PGN save support. --- src/mainwindow.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++---------- src/mainwindow.h | 7 +++++-- src/ui.cpp | 6 +++++- src/ui.h | 1 + tests/.gitignore | 1 + 5 files changed, 55 insertions(+), 13 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 176658a..627e0a1 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -10,16 +10,7 @@ #include "mainwindow.h" #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include + #include #include #include @@ -27,6 +18,17 @@ #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include "actioncollection.h" #include "chesstable.h" #include "console.h" @@ -164,6 +166,7 @@ void MainWindow::setupActions() { KStandardAction::openNew(this, SLOT(newGame()), actionCollection()); KStandardAction::open(this, SLOT(loadGame()), actionCollection()); + KStandardAction::save(this, SLOT(saveGame()), actionCollection()); KStandardAction::quit(this, SLOT(quit()), actionCollection()); KStandardAction::preferences(this, SLOT(preferences()), actionCollection()); @@ -460,6 +463,36 @@ void MainWindow::loadGame() { KMessageBox::error(this, KIO::NetAccess::lastErrorString()); } +void MainWindow::saveGame() { + if (m_url.isEmpty()) + m_url = KFileDialog::getOpenUrl(KUrl(), "*.pgn", this, i18n("Save PGN file")); + + if (m_url.isEmpty()) + return; + + if (!m_url.isLocalFile()) { + // save in a temporary file + KTemporaryFile tmp_file; + tmp_file.open(); + saveFile(tmp_file); + if (!KIO::NetAccess::upload(tmp_file.fileName(), m_url, this)) + m_url = KUrl(); + } + else { + QFile file(m_url.path()); + file.open(QIODevice::WriteOnly); + saveFile(file); + } +} + +void MainWindow::saveFile(QFile& file) { + QTextStream stream(&file); + QTextCodec *codec; + codec = QTextCodec::codecForLocale(); + stream.setCodec(codec); + stream << ui().currentPGN() << "\n"; +} + void MainWindow::createConnection(const QString& username, const QString& password, const QString& host, quint16 port, const QString& timeseal, const QString& timeseal_cmd) { diff --git a/src/mainwindow.h b/src/mainwindow.h index 7b957fb..ff160fb 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -13,8 +13,8 @@ #include #include -#include -#include +#include +#include #include #include @@ -54,6 +54,7 @@ Q_OBJECT QMenu* m_engine_menu; ChessTable* table(); + KUrl m_url; UI m_ui; UI& ui() { return m_ui; } void createTab(ChessTable*, const boost::shared_ptr&, @@ -75,6 +76,7 @@ Q_OBJECT void updateVariantActions(); bool openFile(const QString&); + void saveFile(QFile&); void readSettings(); void writeSettings(); @@ -117,6 +119,7 @@ public Q_SLOTS: void newGame(); bool newGame(const QString& var, AbstractPosition::Ptr, bool); void loadGame(); + void saveGame(); void quit(); void flipView(); void toggleConsole(); diff --git a/src/ui.cpp b/src/ui.cpp index 37e2285..d5bfaa7 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -125,7 +125,11 @@ void UI::gotoLast() { void UI::pgnCopy() { QClipboard* cb = QApplication::clipboard(); - cb->setText(controller()->save()); + cb->setText(currentPGN()); +} + +QString UI::currentPGN() { + return controller()->save(); } void UI::pgnPaste() { diff --git a/src/ui.h b/src/ui.h index ce6a575..725a704 100644 --- a/src/ui.h +++ b/src/ui.h @@ -107,6 +107,7 @@ public Q_SLOTS: void pgnCopy(); void pgnPaste(); void pgnPaste(const QString&); + QString currentPGN(); // editing void clearBoard(); diff --git a/tests/.gitignore b/tests/.gitignore index f449cc7..062cbbe 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -4,3 +4,4 @@ Makefile Makefile cmake_install.cmake cmake_install.cmake +*.pgn -- 2.11.4.GIT