summaryrefslogtreecommitdiffstats
path: root/qnetchess/src/mainwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qnetchess/src/mainwindow.cpp')
-rw-r--r--qnetchess/src/mainwindow.cpp294
1 files changed, 294 insertions, 0 deletions
diff --git a/qnetchess/src/mainwindow.cpp b/qnetchess/src/mainwindow.cpp
new file mode 100644
index 00000000..d490f85d
--- /dev/null
+++ b/qnetchess/src/mainwindow.cpp
@@ -0,0 +1,294 @@
+/*
+ * $Id: mainwindow.cpp,v 0.1 2005/01/08 12:20:13 denis Exp $
+ *
+ * Author: Denis Kozadaev (denis@tambov.ru)
+ * Description:
+ *
+ * See also: style(9)
+ *
+ * Hacked by:
+ */
+
+#include <ntqapplication.h>
+#include <ntqmenubar.h>
+#include <ntqstatusbar.h>
+#include <ntqpixmap.h>
+#include <ntqvalidator.h>
+#include <ntqmessagebox.h>
+
+#include "mainwindow.h"
+#include "gameboard.h"
+
+#include "xpm/chess.xpm"
+#include "xpm/quit.xpm"
+#include "xpm/new_game.xpm"
+
+extern TQColor cw, cb;
+
+MainWindow::MainWindow(TQWidget *parent, const char *name)
+ :TQMainWindow(parent, name)
+{
+ TQPixmap xpm(chess_xpm);
+
+ cw = TQColor(0x8F, 0xDF, 0xF0);
+ cb = TQColor(0x70, 0x9F, 0xDF);
+ setIcon(xpm);
+ wrk = new TQWorkspace(this);
+ sock = new GameSocket(this);
+ game = new TQPopupMenu(this);
+ game->insertItem(TQPixmap((const char **)new_game), tr("New"),
+ this, SLOT(newGame()), CTRL + Key_N);
+ id = game->insertItem(xpm, tr("Save image"), this,
+ SLOT(saveImage()), CTRL + Key_S);
+ game->setItemEnabled(id, FALSE);
+ game->insertSeparator();
+ game->insertItem(TQPixmap((const char **)quit_xpm), tr("Quit"), tqApp,
+ SLOT(quit()), CTRL + Key_Q);
+ help = new TQPopupMenu(this);
+ help->insertItem(xpm, tr("About the game"), this, SLOT(about()));
+
+ menuBar()->insertItem(tr("Game"), game);
+ menuBar()->insertSeparator();
+ menuBar()->insertItem(tr("Help"), help);
+
+ setCentralWidget(wrk);
+ ready_txt = tr("Ready");
+ showStatus(ready_txt);
+
+ TQObject::connect(sock, SIGNAL(acceptConnection(int)),
+ this, SLOT(newGame(int)));
+ TQObject::connect(wrk, SIGNAL(windowActivated(TQWidget *)),
+ this, SLOT(activated(TQWidget *)));
+}
+
+MainWindow::~MainWindow()
+{
+
+ delete help;
+ delete game;
+ delete sock;
+ delete wrk;
+}
+
+
+void
+MainWindow::showStatus(const TQString &txt)
+{
+
+ statusBar()->message(txt);
+}
+
+
+void
+MainWindow::newGame()
+{
+ SelectGame *dlg;
+ GameBoard *brd;
+ TQString hst;
+
+ dlg = new SelectGame(this);
+ dlg->setHosts(hosts);
+ if (dlg->exec()) {
+ hosts = dlg->hosts();
+ hst = dlg->host();
+ brd = new GameBoard(dlg->gameType(), hst, wrk);
+ showStatus(brd->status());
+ TQObject::connect(brd, SIGNAL(showStatus(const TQString&)),
+ this, SLOT(showStatus(const TQString&)));
+ brd->show();
+ }
+ delete dlg;
+}
+
+
+void
+MainWindow::newGame(int sock)
+{
+ GameBoard *brd;
+
+ brd = new GameBoard(sock, wrk);
+ showStatus(brd->status());
+ TQObject::connect(brd, SIGNAL(showStatus(const TQString&)),
+ this, SLOT(showStatus(const TQString&)));
+ brd->show();
+ game->setItemEnabled(id, TRUE);
+}
+
+
+void
+MainWindow::about()
+{
+
+ TQMessageBox::about(this, tr("About") + " QNetChess", "QNetChess " + tr(
+ "is a network game chess for two players.\n"
+ "It has a client and a server in the same program.\n"
+ "You can modify and redistribute the source code\n"
+ "because it is under GPL.\n\n"
+ "Russia, Tambov, 2005, 2020 (denis@tambov.ru)"
+ ));
+}
+
+
+void
+MainWindow::activated(TQWidget *w)
+{
+ GameBoard *brd = (GameBoard *)w;
+
+ game->setItemEnabled(id, brd != NULL);
+ if (brd != NULL)
+ showStatus(brd->status());
+ else
+ showStatus(ready_txt);
+}
+
+
+void
+MainWindow::saveImage()
+{
+ GameBoard *brd = (GameBoard *)wrk->activeWindow();
+
+ if (brd != NULL)
+ brd->saveImage();
+}
+
+//-----------------------------------------------------------------------------
+
+SelectGame::SelectGame(TQWidget *parent, const char *name)
+ :TQDialog(parent, name)
+{
+
+ setCaption(tr("New game with..."));
+ l1 = new TQLabel(tr("To play with "), this);
+ hst = new TQComboBox(TRUE, this);
+ hst->setValidator(new TQRegExpValidator(
+ TQRegExp("([a-zA-Z0-9]*\\.)*[a-zA-Z]"), hst));
+ btn = new TQButtonGroup(tr("Choose your game"), this);
+ wg = new TQRadioButton(tr("White game"), btn);
+ bg = new TQRadioButton(tr("Black game"), btn);
+ box = new TQGroupBox(this);
+ Ok = new TQPushButton(tr("Play!"), box);
+ Cancel = new TQPushButton(tr("Cancel"), box);
+
+ resize(400, TQFontMetrics(font()).lineSpacing() * 7);
+ setMinimumSize(size());
+ setMaximumSize(size());
+
+ TQObject::connect(Ok, SIGNAL(clicked()), this, SLOT(accept()));
+ TQObject::connect(Cancel, SIGNAL(clicked()), this, SLOT(reject()));
+ TQObject::connect(wg, SIGNAL(clicked()), this, SLOT(checkParams()));
+ TQObject::connect(bg, SIGNAL(clicked()), this, SLOT(checkParams()));
+ TQObject::connect(hst, SIGNAL(textChanged(const TQString&)),
+ this, SLOT(checkParams(const TQString&)));
+
+ checkParams();
+}
+
+SelectGame::~SelectGame()
+{
+
+ delete Cancel;
+ delete Ok;
+ delete box;
+ delete bg;
+ delete wg;
+ delete btn;
+ delete hst;
+ delete l1;
+}
+
+
+void
+SelectGame::resizeEvent(TQResizeEvent *e)
+{
+ TQFontMetrics fm(font());
+ int w = e->size().width(),
+ h = e->size().height(),
+ fh = fm.lineSpacing() + 2,
+ bl;
+
+ TQDialog::resizeEvent(e);
+ l1->setGeometry(0, 0, fm.width(l1->text()) + 20, fh);
+ hst->move(l1->x() + l1->width(), l1->y());
+ hst->resize(w - hst->x(), l1->height());
+ btn->move(l1->x(), l1->y() + l1->height());
+ btn->resize(w, l1->height() * 3 + 2);
+ wg->setGeometry(2, fh, btn->width() - 4, fh);
+ bg->setGeometry(wg->x(), wg->y() + wg->height(),
+ wg->width(), wg->height());
+ box->move(btn->x(), btn->y() + btn->height());
+ box->resize(w, h - box->y());
+ bl = box->width() / 5;
+ Ok->move(bl, 4);
+ Ok->resize(bl, box->height() - Ok->y() * 2);
+ Cancel->setGeometry(Ok->x() + Ok->width() + bl, Ok->y(),
+ Ok->width(), Ok->height());
+}
+
+
+void
+SelectGame::checkParams()
+{
+ bool res;
+
+ res = !hst->currentText().isEmpty() &&
+ (bg->isChecked() || wg->isChecked());
+ Ok->setEnabled(res);
+}
+
+
+void
+SelectGame::checkParams(const TQString&)
+{
+
+ checkParams();
+}
+
+
+TQString
+SelectGame::host()
+{
+ TQString h(hst->currentText());
+
+ return h.left(h.findRev(':'));
+}
+
+
+TQStringList
+SelectGame::hosts()
+{
+ TQStringList lst;
+ int i, cnt;
+
+ cnt = hst->count();
+ lst += host();
+ for (i = 0; i < cnt; i++)
+ lst += hst->text(i);
+
+ return (lst);
+}
+
+
+void
+SelectGame::setHosts(const TQStringList &h)
+{
+
+ hst->insertStringList(h);
+}
+
+
+GameBoard::GameType
+SelectGame::gameType()
+{
+ GameBoard::GameType gt;
+
+ if (wg->isChecked())
+ gt = GameBoard::WHITE;
+ else if (bg->isChecked())
+ gt = GameBoard::BLACK;
+ else
+ gt = GameBoard::NOGAME;
+
+ return (gt);
+}
+
+#include "mainwindow.moc"