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"