// Copyright (c) Warwick Allison, 1999. // Qt4 conversion copyright (c) Ray Chason, 2012-2014. // NetHack may be freely redistributed. See license for details. // qt_svsel.cpp -- saved game selector // // Popup's layout: //---- // NetHack 3.7.x (literal text w/ dynamic version number) // /----------------------\ (text to prevent multi-line comment warning) // | | // | | // | splash image | nhsplash.xpm (red dragon w/ rider) // | | // | | // \----------------------/ // by the NetHack DevTeam (literal text) // [ Quit ] [New-Game] side-by-side buttons // Saved characters (literal text in small font) // [ character one ] button with character name // [ character two ] button with another character name // [ character three ] button with yet another character name // ... as many buttons as needed //---- // // TODO? // Character names are sorted alphabetically. It would be useful to // be able to sort by role or by game start date or by save date. // The core fetches character names from inside the files; it could // obtain the information needed for alternate sorting. Simpler // enchancement: instead of just showing the character name, show // "name-role-race-gender-alignment". // // Note: // The code in this file is not used if the program is built without // having SELECTSAVED defined or if the run-time option 'selectsaved' // is False. SELECTSAVED used to be forced for Qt but isn't any more. // Howver, we include this code unconditionally. // extern "C" { #include "hack.h" } #include "qt_pre.h" #include #if QT_VERSION >= 0x050000 #include #endif #include "qt_post.h" #include "qt_svsel.h" #include "qt_bind.h" #include "qt_str.h" namespace nethack_qt_ { // // popup dialog at start of game to choose between a new game or which save // file to load if user has at least one saved game and either hasn't supplied // any character name or has supplied one which doesn't have a save file // NetHackQtSavedGameSelector::NetHackQtSavedGameSelector(const char** saved) : QDialog(NetHackQtBind::mainWidget()) { QVBoxLayout *vbl = new QVBoxLayout(this); QHBoxLayout* hb; char cvers[BUFSZ]; QString qvers = QString("NetHack ") + QString(version_string(cvers, sizeof cvers)); QLabel *vers = new QLabel(qvers, this); vers->setAlignment(Qt::AlignCenter); vbl->addWidget(vers); QLabel *logo = new QLabel(this); logo->setAlignment(Qt::AlignCenter); logo->setPixmap(QPixmap("nhsplash.xpm")); vbl->addWidget(logo); QLabel *attr = new QLabel("by the NetHack DevTeam", this); attr->setAlignment(Qt::AlignCenter); vbl->addWidget(attr); vbl->addStretch(2); /* With Qt5, this next line triggers a complaint to stderr: QLayout: Attempting to add QLayout "" to QDialog "", which already has a layout hb = new QHBoxLayout(this); */ hb = new QHBoxLayout((QWidget *) NULL); vbl->addLayout(hb, Qt::AlignCenter); QPushButton *q = new QPushButton("Quit", this); hb->addWidget(q); connect(q, SIGNAL(clicked()), this, SLOT(reject())); QPushButton *c = new QPushButton("New Game", this); hb->addWidget(c); connect(c, SIGNAL(clicked()), this, SLOT(accept())); c->setDefault(true); QGroupBox *box = new QGroupBox("Saved Characters", this); QVBoxLayout *bgl = new QVBoxLayout(); QButtonGroup *bg = new QButtonGroup(); #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) connect(bg, SIGNAL(idPressed(int)), this, SLOT(done(int))); #else connect(bg, SIGNAL(buttonPressed(int)), this, SLOT(done(int))); #endif for (int i = 0; saved[i]; ++i) { QPushButton *b = new QPushButton(saved[i]); bgl->addWidget(b); bg->addButton(b, i + 2); } box->setLayout(bgl); vbl->addWidget(box); } int NetHackQtSavedGameSelector::choose() { #if defined(QWS) // probably safe with Qt 3, too (where show!=exec in QDialog). if ( qt_compact_mode ) showMaximized(); #endif return exec() - 2; } } // namespace nethack_qt_