Add Qt4 windowport
Originally by Ray Chason for 3.4.3, based on the Qt windowport by Warwick Allison. The look and feel is mostly the same. Some improvements over the Qt 3 interface are: * Panes are resizable * Full support for IBMgraphics, and walls and corridors are drawn with graphical primitives for a continuous appearance no matter what the font says * Lots of irritating glitches fixed * Menus support proportional fonts correctly Adding this because the old Qt windowport cannot be compiled on Qt4, even with Qt3 compatibility stuff. TODO: - background map glyphs - status hilites - menucolors
This commit is contained in:
134
win/Qt4/qt4xcmd.cpp
Normal file
134
win/Qt4/qt4xcmd.cpp
Normal file
@@ -0,0 +1,134 @@
|
||||
// Copyright (c) Warwick Allison, 1999.
|
||||
// Qt4 conversion copyright (c) Ray Chason, 2012-2014.
|
||||
// NetHack may be freely redistributed. See license for details.
|
||||
|
||||
// qt4xcmd.cpp -- extended command widget
|
||||
|
||||
#include "hack.h"
|
||||
#include "func_tab.h"
|
||||
#undef Invisible
|
||||
#undef Warning
|
||||
#undef index
|
||||
#undef msleep
|
||||
#undef rindex
|
||||
#undef wizard
|
||||
#undef yn
|
||||
#undef min
|
||||
#undef max
|
||||
|
||||
#include <QtGui/QtGui>
|
||||
#if QT_VERSION >= 0x050000
|
||||
#include <QtWidgets/QtWidgets>
|
||||
#endif
|
||||
#include "qt4xcmd.h"
|
||||
#include "qt4xcmd.moc"
|
||||
#include "qt4bind.h"
|
||||
#include "qt4set.h"
|
||||
#include "qt4str.h"
|
||||
|
||||
namespace nethack_qt4 {
|
||||
|
||||
// temporary
|
||||
void centerOnMain(QWidget *);
|
||||
// end temporary
|
||||
|
||||
NetHackQtExtCmdRequestor::NetHackQtExtCmdRequestor(QWidget *parent) :
|
||||
QDialog(parent)
|
||||
{
|
||||
QVBoxLayout *l = new QVBoxLayout(this);
|
||||
|
||||
QPushButton* can = new QPushButton("Cancel", this);
|
||||
can->setDefault(true);
|
||||
can->setMinimumSize(can->sizeHint());
|
||||
l->addWidget(can);
|
||||
|
||||
prompt = new QLabel("#", this);
|
||||
l->addWidget(prompt);
|
||||
|
||||
QButtonGroup *group=new QButtonGroup(this);
|
||||
QGroupBox *grid=new QGroupBox("Extended commands",this);
|
||||
l->addWidget(grid);
|
||||
|
||||
int i;
|
||||
int butw=50;
|
||||
QFontMetrics fm = fontMetrics();
|
||||
for (i=0; extcmdlist[i].ef_txt; i++) {
|
||||
butw = std::max(butw,30+fm.width(extcmdlist[i].ef_txt));
|
||||
}
|
||||
int ncols=4;
|
||||
|
||||
QVBoxLayout* bl = new QVBoxLayout(grid);
|
||||
bl->addSpacing(fm.height());
|
||||
QGridLayout* gl = new QGridLayout();
|
||||
bl->addLayout(gl);
|
||||
for (i=0; extcmdlist[i].ef_txt; i++) {
|
||||
QPushButton* pb=new QPushButton(extcmdlist[i].ef_txt, grid);
|
||||
pb->setMinimumSize(butw,pb->sizeHint().height());
|
||||
group->addButton(pb, i+1);
|
||||
gl->addWidget(pb,i/ncols,i%ncols);
|
||||
}
|
||||
group->addButton(can, 0);
|
||||
connect(group,SIGNAL(buttonPressed(int)),this,SLOT(done(int)));
|
||||
|
||||
bl->activate();
|
||||
l->activate();
|
||||
resize(1,1);
|
||||
}
|
||||
|
||||
void NetHackQtExtCmdRequestor::cancel()
|
||||
{
|
||||
reject();
|
||||
}
|
||||
|
||||
void NetHackQtExtCmdRequestor::keyPressEvent(QKeyEvent *event)
|
||||
{
|
||||
QString text = event->text();
|
||||
if (text == "\r" || text == "\n" || text == " " || text == "\033")
|
||||
{
|
||||
reject();
|
||||
}
|
||||
else if (text == "\b")
|
||||
{
|
||||
QString promptstr = prompt->text();
|
||||
if (promptstr != "#")
|
||||
prompt->setText(promptstr.left(promptstr.size()-1));
|
||||
}
|
||||
else
|
||||
{
|
||||
QString promptstr = prompt->text() + text;
|
||||
QString typedstr = promptstr.mid(1); // skip the '#'
|
||||
unsigned matches = 0;
|
||||
unsigned match = 0;
|
||||
for (unsigned i=0; extcmdlist[i].ef_txt; i++) {
|
||||
if (QString(extcmdlist[i].ef_txt).startsWith(typedstr)) {
|
||||
++matches;
|
||||
if (matches >= 2)
|
||||
break;
|
||||
match = i;
|
||||
}
|
||||
}
|
||||
if (matches == 1)
|
||||
done(match+1);
|
||||
else if (matches >= 2)
|
||||
prompt->setText(promptstr);
|
||||
}
|
||||
}
|
||||
|
||||
int NetHackQtExtCmdRequestor::get()
|
||||
{
|
||||
const int none = -10;
|
||||
resize(1,1); // pack
|
||||
centerOnMain(this);
|
||||
// Add any keys presently buffered to the prompt
|
||||
setResult(none);
|
||||
while (NetHackQtBind::qt_kbhit() && result() == none) {
|
||||
int ch = NetHackQtBind::qt_nhgetch();
|
||||
QKeyEvent event(QEvent::KeyPress, 0, Qt::NoModifier, QChar(ch));
|
||||
keyPressEvent(&event);
|
||||
}
|
||||
if (result() == none)
|
||||
exec();
|
||||
return result()-1;
|
||||
}
|
||||
|
||||
} // namespace nethack_qt4
|
||||
Reference in New Issue
Block a user