Index: trunk/playground/games/kboard/src/mainwindow.cpp
===================================================================
--- trunk/playground/games/kboard/src/mainwindow.cpp (revision 588089)
+++ trunk/playground/games/kboard/src/mainwindow.cpp (revision 588090)
@@ -1,823 +1,823 @@
/*
Copyright (c) 2006 Paolo Capriotti
(c) 2006 Maurizio Monge
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
*/
#include "mainwindow.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
#include "tabbar.h"
#include "histlineedit.h"
#include "chesstable.h"
#include "console.h"
#include "icsconnection.h"
#include "algebraicnotation.h"
#include "player.h"
#include "pgnparser.h"
#include "gameinfo.h"
#include "qconnect.h"
#include "newgame.h"
#include "pref_highlight.h"
#include "pref_clock.h"
#include "pref_preferences.h"
#include "about.h"
#include "controllers/editgame.h"
#include "controllers/editposition.h"
#include "flash.h"
#include "settings.h"
#include "variants/chess.h"
#include "variants/crazyhouse.h"
#include "variants/variants.h"
#include "movelist_table.h"
#include "clock.h"
#include "engineinfo.h"
#include "infodisplay.h"
using namespace boost;
MainWindow::MainWindow()
#ifdef HAVE_KDE
: KMainWindow(0)
#else
: QMainWindow(0)
#endif
{
setObjectName("mainWindow");
m_main = new TabWidget(this);
setCentralWidget(m_main);
m_movelist_stack = new QStackedWidget;
connect(m_main, SIGNAL(currentChanged(int)),
this, SLOT(changeTab(int)));
connect(m_main, SIGNAL(closeTab()),
this, SLOT(closeTab()));
movelist_dock = new QDockWidget(this);
movelist_dock->setWidget(m_movelist_stack);
movelist_dock->setWindowTitle(tr("Move list"));
addDockWidget(Qt::LeftDockWidgetArea, movelist_dock, Qt::Vertical);
movelist_dock->show();
ChessTable* board = new ChessTable;
board->setFocus();
console_dock = new QDockWidget(this);
console = new Console(0, tr("FICS Connection"));
console->setHighlighter();
console_dock->setWidget(console);
console_dock->setFocusProxy(console);
console_dock->setWindowTitle(tr("Console"));
addDockWidget(Qt::BottomDockWidgetArea, console_dock);
//splitDockWidget(movelist_dock, console_dock, Qt::Horizontal);
console_dock->setWindowFlags(console_dock->windowFlags() & ~Qt::WindowStaysOnTopHint);
console_dock->show();
connect(board, SIGNAL(error(ErrorCode)), this, SLOT(displayErrorMessage(ErrorCode)));
connect(board->clock(), SIGNAL(labelClicked(int)), &ui(), SLOT(setTurn(int)));
// start in edit game mode
newGame("chess", AbstractPosition::Ptr());
readSettings();
setupActions();
}
ChessTable* MainWindow::table() {
return qobject_cast(m_main->currentWidget());
}
void MainWindow::changeTab(int index) {
std::cout << "changin tab " << index << std::endl;
m_ui.setCurrentTab(m_main->currentWidget());
m_movelist_stack->setCurrentIndex(index);
updatePromotionType();
}
void MainWindow::updatePromotionType() {
int ptype = m_ui.promotionType();
if (ptype == 0)
m_promote_group->setEnabled(false);
else {
m_promote_group->setEnabled(true);
switch(ptype) {
case QUEEN:
m_promote_queen->setChecked(true);
break;
case ROOK:
m_promote_rook->setChecked(true);
break;
case BISHOP:
m_promote_bishop->setChecked(true);
break;
case KNIGHT:
m_promote_knight->setChecked(true);
break;
default:
m_promote_group->setEnabled(false);
}
}
}
void MainWindow::closeTab() {
if (m_main->count() > 1) {
ChessTable* old_board = table();
m_ui.removeController(old_board);
m_movelist_stack->removeWidget(
m_movelist_stack->widget(m_main->currentIndex()));
m_main->removeTab(m_main->currentIndex());
delete old_board;
if (m_main->count() <= 1) {
m_main->hideTabBar();
}
// update ui controller (just in case...)
m_ui.setCurrentTab(m_main->currentWidget());
}
}
void MainWindow::createTab(ChessTable* board, const shared_ptr& controller,
const QString& caption, int index) {
if (index == -1)
index = m_main->addTab(board, caption);
else
m_main->insertTab(index, board, caption);
m_main->setCurrentIndex(index);
m_ui.addController(board, controller);
m_ui.setCurrentTab(board);
m_movelist_stack->addWidget(board->moveListTable());
m_movelist_stack->setCurrentIndex(index);
if (m_main->count() > 1) m_main->showTabBar();
}
void MainWindow::readSettings() {
settings.qSettings()->beginGroup("MainWindow");
QSize size;
(settings["size"] | QSize(861, 627)) >> size;
std::cout << "size = " << size.width() << ", " << size.height() << std::endl;
resize(size);
QString iconDir; (settings["iconDir"] | "../icons/" ) >> iconDir;
m_iconDir = QDir(iconDir);
settings.qSettings()->endGroup();
}
void MainWindow::writeSettings() {
settings.qSettings()->beginGroup("MainWindow");
settings["size"] = size();
settings.qSettings()->endGroup();
}
QAction *MainWindow::mkAction(const QString& txt, QKeySequence shk, QObject *o,
const char *sl, QString name, QObject *par)
{
QAction *a;
QString icon = m_iconDir.filePath(name+".png");
if(!par)
par = this;
if(QFile::exists(icon))
a = new QAction(QIcon(icon),txt, par);
else
a = new QAction(txt, par);
a->setShortcut(shk);
connect(a, SIGNAL(triggered()), o, sl);
return a;
}
// QMenu& operator<<(QMenu& m, QAction* a)
// {
// m.addAction(a);
// return m;
// }
using namespace Qt;
void MainWindow::setupActions() {
QMenu* f = menuBar()->addMenu(tr("&File"));
QMenu* e = menuBar()->addMenu(tr("&Edit"));
QMenu* t = menuBar()->addMenu(tr("&Settings"));
QMenu* h = menuBar()->addMenu(tr("&Help"));
/*QMenu* e = menuBar()->addMenu(tr("&Edit"));
menuBar()->addSeparator();
QMenu* h = menuBar()->addMenu(tr("&Help"));*/
QToolBar* at = addToolBar(tr("Actions"));
QToolBar* st = addToolBar(tr("Settings"));
QAction *a;
a = mkAction(tr("&New game..."), CTRL+Key_N, this, SLOT(newGame()), "new");
f->addAction(a);
a = mkAction(tr("&Load game..."), CTRL+Key_O, this, SLOT(loadGame()), "load");
f->addAction(a);
a = mkAction(tr("&Quit"), CTRL+Key_Q, this, SLOT(quit()), "quit");
f->addAction(a);
a = mkAction(tr("&Back"), CTRL+Key_Left, &ui(), SLOT(back()), "back");
at->addAction(a);
a = mkAction(tr("&Forward"), CTRL+Key_Right, &ui(), SLOT(forward()), "forward");
at->addAction(a);
a = mkAction(tr("Be&gin"), CTRL+SHIFT+Key_Left, &ui(), SLOT(gotoFirst()), "begin");
at->addAction(a);
a = mkAction(tr("&End"), CTRL+SHIFT+Key_Right, &ui(), SLOT(gotoLast()), "end");
at->addAction(a);
at->addSeparator();
a = mkAction(tr("&Connect"), 0, this, SLOT(icsConnect()), "connect");
at->addAction(a);
a = mkAction(tr("Test connect"), Key_F3, this, SLOT(testConnect()), "testConnect");
at->addAction(a);
a = mkAction(tr("&Disconnect"), 0, this, SLOT(icsDisconnect()), "disconnect");
at->addAction(a);
a = mkAction(tr("C&opy game"), 0, &ui(), SLOT(pgnCopy()), "pgnCopy");
at->addAction(a);
a = mkAction(tr("P&aste game"), 0, &ui(), SLOT(pgnPaste()), "pgnPaste");
at->addAction(a);
// at->addSeparator();
a = mkAction(tr("&Undo"), CTRL+Key_Z, &ui(), SLOT(undo()), "undo");
e->addAction(a);
a = mkAction(tr("&Redo"), CTRL+SHIFT+Key_Z, &ui(), SLOT(redo()), "redo");
e->addAction(a);
a = mkAction(tr("&Truncate"), 0, &ui(), SLOT(truncate()), "truncate");
e->addAction(a);
a = mkAction(tr("&Promote Variation"), 0, &ui(), SLOT(promoteVariation()), "promoteVariation");
e->addAction(a);
e->addSeparator();
a = mkAction(tr("&Edit position"), 0, this, SLOT(editPosition()), "editPosition");
e->addAction(a);
a = mkAction(tr("&Clear board"), 0, &ui(), SLOT(clearBoard()), "clearBoard");
e->addAction(a);
a = mkAction(tr("&Set starting position"), 0,
&ui(), SLOT(setStartingPosition()), "setStartingPosition");
e->addAction(a);
a = mkAction(tr("&Paste position"), 0, &ui(), SLOT(pastePosition()), "pastePosition");
e->addAction(a);
a = mkAction(tr("&Copy position"), 0, &ui(), SLOT(copyPosition()), "copyPosition");
e->addAction(a);
m_promote_group = new QActionGroup(this);
m_promote_queen = mkAction(tr("Promote to &queen"), 0,
&ui(), SLOT(promoteToQueen()), "promoteQueen", m_promote_group);
m_promote_queen->setCheckable(true);
m_promote_queen->setChecked(true);
st->addAction(m_promote_queen);
m_promote_rook = mkAction(tr("Promote to &rook"),
0, &ui(), SLOT(promoteToRook()), "promoteRook", m_promote_group);
m_promote_rook->setCheckable(true);
st->addAction(m_promote_rook);
m_promote_bishop = mkAction(tr("Promote to &bishop"), 0,
&ui(), SLOT(promoteToBishop()), "promoteBishop", m_promote_group);
m_promote_bishop->setCheckable(true);
st->addAction(m_promote_bishop);
m_promote_knight = mkAction(tr("Promote to k&night"), 0,
&ui(), SLOT(promoteToKnight()), "promoteKnight", m_promote_group);
m_promote_knight->setCheckable(true);
st->addAction(m_promote_knight);
st->addSeparator();
a = mkAction(tr("&Flip view"), CTRL+Key_F, this, SLOT(flipView()), "flip");
st->addAction(a);
// mkAction(tr("&Toggle command line focus"), Key_F2, this, SLOT(toggleCmdLineFocus()), "toggleCmdLineFocus");
a = mkAction(tr("Toggle &console"), Key_F12, this, SLOT(toggleConsole()), "toggleConsole");
st->addAction(a);
a = mkAction(tr("Toggle &move list"), Key_F11, this, SLOT(toggleMoveList()), "toggleMoveList");
st->addAction(a);
a = mkAction(tr("Highlight preferences..."), 0, this, SLOT(prefHighlight()), "prefHighlight");
t->addAction(a);
a = mkAction(tr("Clock preferences..."), 0, this, SLOT(prefClock()), "prefClock");
t->addAction(a);
a = mkAction(tr("&Configure KBoard..."), 0, this, SLOT(preferences()), "preferences");
t->addAction(a);
a = mkAction(tr("&About KBoard"), 0, this, SLOT(about()), "about");
h->addAction(a);
#if 0
// engine menu
{
QMenu* engines = menuBar()->addMenu(tr("E&ngines"));
QSettings* qs = settings.qSettings();
qs->beginGroup("Engines");
int size = qs->beginReadArray("engines");
for (int i = 0; i < size; i++) {
qs->setArrayIndex(i);
QString name, path, type, workPath;
settings["name"] >> name;
settings["path"] >> path;
settings["type"] >> type;
EngineInfo* engine = new EngineInfo(name, path, type, ui());
if (settings["workPath"])
settings["workPath"] >> engine->m_workPath;
m_engines.push_back(engine);
QMenu* engine_menu = engines->addMenu(name);
engine_menu->addAction(mkAction(tr("Play as &white"), 0, engine, SLOT(playAsWhite()), "playAsWhite"));
engine_menu->addAction(mkAction(tr("Play as &black"), 0, engine, SLOT(playAsBlack()), "playAsBlack"));
QAction* a = mkAction(tr("&Analyze"), 0, engine, SLOT(analyze()), "analyze");
a->setCheckable(true);
engine_menu->addAction(a);
}
qs->endArray();
qs->endGroup();
}
#endif
#ifdef HAVE_KDE
(void) new KAction(i18n("&New game..."), CTRL+Key_N, this, SLOT(newGame()), actionCollection(), "new");
(void) new KAction(i18n("&Load game..."), CTRL+Key_O, this, SLOT(loadGame()), actionCollection(), "load");
(void) new KAction(i18n("&Quit"), CTRL+Key_Q, this, SLOT(quit()), actionCollection(), "quit");
(void) new KAction(i18n("Promote to &queen"), 0, &ui(), SLOT(promoteToQueen()), actionCollection(), "promoteQueen");
(void) new KAction(i18n("Promote to &rook"), 0, &ui(), SLOT(promoteToRook()), actionCollection(), "promoteRook");
(void) new KAction(i18n("Promote to &bishop"), 0, &ui(), SLOT(promoteToBishop()), actionCollection(), "promoteBishop");
(void) new KAction(i18n("Promote to k&night"), 0, &ui(), SLOT(promoteToKnight()), actionCollection(), "promoteKnight");
(void) new KAction(i18n("&Back"), CTRL+Key_Left, &ui(), SLOT(back()),
actionCollection(), "back");
(void) new KAction(i18n("&Forward"), CTRL+Key_Right, &ui(), SLOT(forward()),
actionCollection(), "forward");
(void) new KAction(i18n("Be&gin"), CTRL+SHIFT+Key_Left, &ui(), SLOT(gotoFirst()),
actionCollection(), "begin");
(void) new KAction(i18n("&End"), CTRL+SHIFT+Key_Right, &ui(), SLOT(gotoLast()),
actionCollection(), "end");
(void) new KAction(i18n("&Connect"), 0, this, SLOT(icsConnect()), actionCollection(), "connect");
(void) new KAction(i18n("&Disconnect"), 0, this, SLOT(icsDisconnect()), actionCollection(), "disconnect");
(void) new KAction(i18n("C&opy game"), 0, &ui(), SLOT(pgnCopy()), actionCollection(), "pgnCopy");
(void) new KAction(i18n("P&aste game"), 0, &ui(), SLOT(pgnPaste()), actionCollection(), "pgnPaste");
(void) new KAction(i18n("&Clear board"), 0, this, SIGNAL(clearBoard()), actionCollection(), "clearBoard");
(void) new KAction(i18n("&Flip view"), CTRL+Key_F, this, SLOT(flipView()), actionCollection(), "flip");
// (void) new KAction(i18n("&Toggle command line focus"), Key_F2, this, SLOT(toggleCmdLineFocus()), actionCollection(), "toggleCmdLineFocus");
(void) new KAction(i18n("Toggle &console"), Key_F12, this,
SLOT(toggleConsole()), actionCollection(), "toggleConsole");
(void) new KAction(i18n("Toggle &move list"), Key_F11, this,
SLOT(toggleMoveList()), actionCollection(), "toggleMoveList");
#endif
}
MainWindow::~MainWindow() {
std::cout << "deleting main window" << std::endl;
delete console;
qApp->quit();
}
void MainWindow::testConnect() {
if (settings["username"]) {
QString username = settings["username"].value();
QString password = settings["password"].value();
QString host = (settings["icsHost"] | "freechess.org").value();
quint16 port = (settings["icsPort"] | 5000).value();
std::cout << "username: " << username << std::endl
<< "host : " << host << std::endl
<< "port : " << port << std::endl;
createConnection(username, password, host, port, QString(), QString() );
}
else icsConnect();
}
void MainWindow::closeEvent(QCloseEvent* e) {
e->accept();
writeSettings();
delete this;
}
void MainWindow::icsConnect() {
quickConnectDialog = shared_ptr(new QConnect(this));
connect(quickConnectDialog.get(),
SIGNAL(acceptConnection(const QString&,
const QString&,
const QString&,
quint16,
const QString&,
const QString&)),
this,
SLOT(createConnection(const QString&,
const QString&,
const QString&,
quint16,
const QString&,
const QString&)));
quickConnectDialog->show();
}
void MainWindow::destroyConnection() {
m_connection.reset();
}
void MainWindow::icsDisconnect() {
destroyConnection();
console->hide();
console->clear();
}
void MainWindow::createConnection(const QString& username, const QString& password,
const QString& host, quint16 port,
const QString& timeseal, const QString& timeseal_cmd) {
m_connection = shared_ptr(new ICSConnection);
// connect(commandLine, SIGNAL(receivedInput(const QString&)), this, SLOT(receivedCommand(const QString&)));
connect(m_connection.get(), SIGNAL(established()), this, SLOT(onEstablishConnection()));
connect(m_connection.get(), SIGNAL(error(int)), this, SLOT(onConnectionError(int)));
connect(m_connection.get(), SIGNAL(hostLookup()), this, SLOT(onHostLookup()));
connect(m_connection.get(), SIGNAL(hostFound()), this, SLOT(onHostFound()));
connect(m_connection.get(), SIGNAL(receivedLine(QString, int)), console, SLOT(displayText(QString, int)));
connect(m_connection.get(), SIGNAL(receivedText(QString, int)), console, SLOT(displayText(QString, int)));
connect(console, SIGNAL(receivedInput(const QString&)), m_connection.get(), SLOT(sendText(const QString&)));
connect(console, SIGNAL(notify()), this, SLOT(flash()));
connect(m_connection.get(), SIGNAL(loginPrompt()), this, SLOT(sendLogin()));
connect(m_connection.get(), SIGNAL(loginPrompt()), m_connection.get(), SLOT(setLogin()));
connect(m_connection.get(), SIGNAL(passwordPrompt()), console, SLOT(setTransientPasswordMode()));
connect(m_connection.get(), SIGNAL(registeredNickname()), this, SLOT(sendBlankPassword()));
connect(m_connection.get(), SIGNAL(prompt()), this, SLOT(prompt()));
connect(m_connection.get(), SIGNAL(creatingExaminedGame(const GameInfo*, const PositionInfo&)),
this, SLOT(setupExaminedGame(const GameInfo*, const PositionInfo&)));
connect(m_connection.get(), SIGNAL(endingExaminedGame(int)), this, SLOT(cleanupGame()));
connect(m_connection.get(), SIGNAL(creatingObservedGame(const GameInfo*, const PositionInfo&)),
this, SLOT(setupObservedGame(const GameInfo*, const PositionInfo&)));
connect(m_connection.get(), SIGNAL(endingObservedGame(int)), this, SLOT(cleanupGame()));
connect(m_connection.get(), SIGNAL(creatingGame(const GameInfo*, const PositionInfo&)),
this, SLOT(setupGame(const GameInfo*, const PositionInfo&)));
connect(m_connection.get(), SIGNAL(endingGame(const QString&, const QString&)),
this, SLOT(cleanupGame(const QString&, const QString&)));
connect(m_connection.get(), SIGNAL(notification()), this, SLOT(flash()));
m_connection->establish(host.toAscii().constData(), port, timeseal, timeseal_cmd);
console->show();
// send username / password combination
m_connection->sendText(username);
m_connection->sendText(password);
quickConnectDialog.reset();
}
void MainWindow::editPosition() {
shared_ptr controller(new EditPositionController(table(), ChessVariant::info()));
m_main->setTabText(m_main->currentIndex(), "Editing chess position");
ui().setController(controller);
}
void MainWindow::setupGame(const GameInfo* gameInfo, const PositionInfo& style12) {
QString variantCode = gameInfo->variant();
VariantInfo* variant = Variant::variant(variantCode);
shared_ptr controller(new EditGameController(
table(), variant));
Q_ASSERT(style12.relation == PositionInfo::NotMyMove ||
style12.relation == PositionInfo::MyMove);
// set opponent side
int side = (style12.relation == PositionInfo::MyMove ^ style12.turn == 0) ? 0 : 1;
if (controller->addICSPlayer(side, style12.gameNumber, m_connection)) {
ui().setController(controller);
table()->setPlayers(gameInfo->white(), gameInfo->black());
m_main->setTabText(m_main->currentIndex(),
QString("FICS Game - %1 vs %2").arg(style12.whitePlayer)
.arg(style12.blackPlayer));
}
}
void MainWindow::setupExaminedGame(const GameInfo* /*gameInfo*/, const PositionInfo& style12) {
shared_ptr controller(new EditGameController(
table(), ChessVariant::info()));
if (controller->setExaminationMode(style12.gameNumber, m_connection)) {
table()->setPlayers(Player(style12.whitePlayer, -1),
Player(style12.blackPlayer, -1));
ui().setController(controller);
m_main->setTabText(m_main->currentIndex(),
QString("Examining - %1 vs %2").arg(style12.whitePlayer)
.arg(style12.blackPlayer));
}
}
void MainWindow::setupObservedGame(const GameInfo*, const PositionInfo& style12) {
std::auto_ptr board(new ChessTable);
shared_ptr controller(new EditGameController(
board.get(), ChessVariant::info()));
if (controller->setObserveMode(style12.gameNumber, m_connection)) {
board->setPlayers(Player(style12.whitePlayer, -1),
Player(style12.blackPlayer, -1));
// ui().setController(controller);
std::cout << "adding tab" << std::endl;
createTab(board.get(), controller,
QString("Observing - %1 vs %2").arg(style12.whitePlayer)
.arg(style12.blackPlayer));
board.release();
}
}
void MainWindow::receivedCommand(const QString& text) {
// internal command
if (text[0] == ':') {
int firstSpace = text.indexOf(' ');
QString cmd = text.mid(1, firstSpace != -1 ? firstSpace + 1 : text.length());
std::cout << "processing command " << cmd << std::endl;
}
// ics command
else {
if (!console->isVisible())
console->show();
m_connection->sendText(text);
}
}
#ifdef HAVE_KDE
void MainWindow::readProperties(KConfig* config) {
Q_UNUSED(config);
std::cout << "reading properties" << std::endl;
}
void MainWindow::saveProperties(KConfig* config) {
Q_UNUSED(config);
std::cout << "saving properties" << std::endl;
}
#endif
void MainWindow::onEstablishConnection() {
std::cout << "connection established" << std::endl;
}
void MainWindow::onConnectionError(int code) {
std::cout << "connection error (" << code << ")" << std::endl;
}
void MainWindow::onHostLookup() {
std::cout << "hostLookup..." << std::flush;
}
void MainWindow::onHostFound() {
std::cout << "found" << std::endl;
}
void MainWindow::sendLogin() {
std::cout << "sending username" << std::endl;
// connection->sendText(connection->username());
}
void MainWindow::sendBlankPassword() {
std::cout << "sending blank password" << std::endl;
m_connection->sendText("");
}
void MainWindow::prompt() {
if (!m_connection->initialized()) {
m_connection->startup();
m_connection->setInitialized();
}
}
void MainWindow::newGame() {
AbstractPosition::Ptr pos = ui().position();
scoped_ptr dialog(new NewGame(this, pos));
if (dialog->exec() == QDialog::Accepted) {
if (!dialog->playFromCurrent())
pos = AbstractPosition::Ptr();
if (!newGame(dialog->variant(), pos))
QMessageBox::information(this, tr("Error"), tr("Variant not implemented, yet"));
}
}
bool MainWindow::newGame(const QString& variantName, AbstractPosition::Ptr startingPos) {
VariantInfo* variant = Variant::variant(variantName);
if (variant) {
ChessTable* board = new ChessTable;
shared_ptr controller(new EditGameController(
board, variant, startingPos));
createTab(board, controller,
QString("Editing %1 game").arg(variantName.toLower()));
return true;
}
else return false;
}
void MainWindow::cleanupGame(const QString& what, const QString& result) {
Q_UNUSED(what);
Q_UNUSED(result);
cleanupGame();
}
void MainWindow::cleanupGame() {
std::cout << "cleaning up game" << std::endl;
ui().detach();
ui().end();
}
bool MainWindow::openFile(const QString& filename)
{
QFileInfo info(filename);
if(info.isDir()) {
//KMessageBox::sorry
QMessageBox::information(this, tr("Error"), tr("You have specified a folder"));
return false;
}
if(!info.exists() || !info.isFile()) {
//KMessageBox::sorry
QMessageBox::information(this, tr("Error"), tr("The specified file does not exist"));
return false;
}
QFile file(filename);
if(!file.open(QIODevice::ReadOnly)) {
//KMessageBox::sorry
QMessageBox::information(this, tr("Error"), tr("You do not have read permission to this file."));
return false;
}
QTextStream stream(&file);
QTextCodec *codec;
codec = QTextCodec::codecForLocale();
stream.setCodec(codec);
ui().pgnPaste(stream.readAll());
return true;
}
// code copied from kedit
void MainWindow::loadGame() {
#ifdef HAVE_KDE
// KURL url = KTextFileDialog::getOpenURLwithEncoding(
// QString::null, QString::null, this,
// i18n("Open File"));
KURL url = KFileDialog::getOpenURL(QString::null, QString::null, this, i18n("Open PGN file"));
if(url.isEmpty())
return;
// KIO::UDSEntry entry;
// KIO::NetAccess::stat(url, entry, this);
// KFileItem fileInfo(entry, url);
// if (fileInfo.size() > 2097152 && // 2MB large/small enough?
// KMessageBox::warningContinueCancel(this,
// i18n("The file you have requested is larger than KEdit is designed for. "
// "Please ensure you have enough system resources available to safely load this file, "
// "or consider using a program that is designed to handle large files such as KWrite."),
// i18n("Attempting to Open Large File"),
// KStdGuiItem::cont(), "attemptingToOpenLargeFile") == KMessageBox::Cancel)
// {
// return;
// }
QString tmpfile;
KIO::NetAccess::download(url, tmpfile, this);
openFile(tmpfile);
KIO::NetAccess::removeTempFile(tmpfile);
#else
QString f = QFileDialog::getOpenFileName(this, "?", tr("Open PGN file") );
openFile(f);
#endif
}
void MainWindow::quit() {
delete this;
}
void MainWindow::flipView() {
table()->flip();
}
/*
void MainWindow::toggleCmdLineFocus() {
if (commandLine->hasFocus())
board->setFocus();
else
commandLine->setFocus();
}*/
void MainWindow::toggleConsole() {
if (console_dock->isVisible())
console_dock->hide();
else {
console_dock->show();
console_dock->setFocus(Qt::MouseFocusReason
/*Qt::ActiveWindowFocusReason*/ /*Qt::OtherFocusReason*/);
}
}
void MainWindow::toggleMoveList() {
if (movelist_dock->isVisible())
movelist_dock->hide();
else {
movelist_dock->show();
movelist_dock->setFocus(Qt::OtherFocusReason);
}
}
void MainWindow::displayMessage(const QString& msg) {
Q_UNUSED(msg); // TODO
// statusBar()->message(msg, 2000);
}
void MainWindow::displayErrorMessage(ErrorCode code) {
switch(code) {
case InvalidMove:
displayMessage(tr("Illegal move"));
break;
}
}
void MainWindow::flash() {
if( !isAncestorOf(QApplication::focusWidget()) )
Flash::flash(this);
}
void MainWindow::keyPressEvent(QKeyEvent* event) {
- if (event->key() == Qt::Key_Shift) {
+ if (event->key() == Qt::Key_F5) {
ui().createCtrlAction();
}
}
void MainWindow::keyReleaseEvent(QKeyEvent* event) {
- if (event->key() == Qt::Key_Shift) {
+ if (event->key() == Qt::Key_F5) {
ui().destroyCtrlAction();
}
}
void MainWindow::prefHighlight() {
PrefHighlight dialog;
int result = dialog.exec();
if (result == QDialog::Accepted) {
dialog.apply();
console->setHighlighter();
}
}
void MainWindow::prefClock() {
PrefClock dialog;
int result = dialog.exec();
if (result == QDialog::Accepted) {
dialog.apply();
table()->clock()->reload();
}
}
void MainWindow::preferences() {
Preferences dialog;
int result = dialog.exec();
if (result == QDialog::Accepted)
dialog.apply();
}
void MainWindow::about() {
About dialog;
dialog.exec();
}
#include "mainwindow.moc"