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