Qt "Paper Doll" inventory

Enhance the "Qt Settings" dialog box to provide control over the
paper doll subset of inventory displayed between the message and
status windows (above the map).  A ton of flailing about for a
fairly small but useful change in functionality.

Old dialog (no title):
| [ ] Zoomed            -- check box
| "Width:"  [      ]    -- number entry spinner
| "Height:" [      ]    -- ditto
| "Font:"   [      ]    -- Huge:18pt, Large:14, Medium:12, Small:10, Tiny:8
| [      Dismiss      ] -- button

New dialog:
|     "Qt NetHack Settings"
|
| "Map:"    [ ] "Zoomed"        -- check box
|           "Tile Width"   [  ] -- number entry spinner
|           "Tile Height"  [  ] -- ditto
| "Invent:" [ ] "Shown"         -- check box
|           "Doll Width"   [  ] -- number entry spinner
|           "Doll Height"  [  ] -- ditto
| "Font:"   [      ]    -- Huge:18pt, Large:14, Medium:12, Small:10, Tiny:8
| [          Dismiss          ] -- button

The inventory subset can now be suppressed.  When shown (the default),
its size can be set independently of the map tiles' size.  I've set
the default to be 32x32 tiles instead of 16x16 used for the map.

The settings are saved and restored automatically by Qt, and persist
not just across save/restore cycles but into new games.  (That's not
a change, just a reminder.)
This commit is contained in:
PatR
2020-08-15 19:48:33 -07:00
parent 89fbe2162e
commit 9a866d3601
8 changed files with 299 additions and 57 deletions
+3 -1
View File
@@ -1,4 +1,4 @@
NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.284 $ $NHDT-Date: 1597357458 2020/08/13 22:24:18 $ NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.285 $ $NHDT-Date: 1597546107 2020/08/16 02:48:27 $
General Fixes and Modified Features General Fixes and Modified Features
----------------------------------- -----------------------------------
@@ -507,6 +507,8 @@ user_sounds: provide an experimental mechanism for terminal-side sounds similar
requires compile-time definition of TTY_SOUND_ESCCODES (also requires requires compile-time definition of TTY_SOUND_ESCCODES (also requires
terminal-side code external to NetHack to recognize the sequence and terminal-side code external to NetHack to recognize the sequence and
act on it) act on it)
Qt: the "paper doll" inventory subset can be controlled via the "Qt Settings"
dialog box ("Preferences..." on OSX)
NetHack Community Patches (or Variation) Included NetHack Community Patches (or Variation) Included
+19 -1
View File
@@ -110,9 +110,27 @@ NetHackQtBind::NetHackQtBind(int& argc, char** argv) :
} else { } else {
splash = 0; splash = 0;
} }
// these used to be in MainWindow but we want them before QtSettings
// which we want before MainWindow...
QCoreApplication::setOrganizationName("The NetHack DevTeam");
QCoreApplication::setOrganizationDomain("nethack.org");
QCoreApplication::setApplicationName("NetHack-Qt"); // Qt NetHack
{
char cvers[BUFSZ];
QString qvers = version_string(cvers);
QCoreApplication::setApplicationVersion(qvers);
}
#ifdef MACOSX
/* without this, neither control+x nor option+x do anything;
with it, control+x is ^X and option+x still does nothing */
QCoreApplication::setAttribute(Qt::AA_MacDontSwapCtrlAndMeta);
#endif
qt_settings = new NetHackQtSettings(); /*(main->width(),main->height());*/
main = new NetHackQtMainWindow(keybuffer); main = new NetHackQtMainWindow(keybuffer);
connect(qApp, SIGNAL(lastWindowClosed()), qApp, SLOT(quit())); connect(qApp, SIGNAL(lastWindowClosed()), qApp, SLOT(quit()));
qt_settings=new NetHackQtSettings(main->width(),main->height());
msgs_strings = new QStringList(); msgs_strings = new QStringList();
msgs_initd = false; msgs_initd = false;
msgs_saved = false; msgs_saved = false;
+4 -2
View File
@@ -63,14 +63,16 @@ public:
static void qt_cliparound(int x, int y); static void qt_cliparound(int x, int y);
static void qt_cliparound_window(winid wid, int x, int y); static void qt_cliparound_window(winid wid, int x, int y);
static void qt_print_glyph(winid wid,XCHAR_P x,XCHAR_P y,int glyph,int bkglyph); static void qt_print_glyph(winid wid, XCHAR_P x, XCHAR_P y,
int glyph, int bkglyph);
static void qt_raw_print(const char *str); static void qt_raw_print(const char *str);
static void qt_raw_print_bold(const char *str); static void qt_raw_print_bold(const char *str);
static int qt_nhgetch(); static int qt_nhgetch();
static int qt_nh_poskey(int *x, int *y, int *mod); static int qt_nh_poskey(int *x, int *y, int *mod);
static void qt_nhbell(); static void qt_nhbell();
static int qt_doprev_message(); static int qt_doprev_message();
static char qt_yn_function(const char *question, const char *choices, CHAR_P def); static char qt_yn_function(const char *question,
const char *choices, CHAR_P def);
static void qt_getlin(const char *prompt, char *line); static void qt_getlin(const char *prompt, char *line);
static int qt_get_ext_cmd(); static int qt_get_ext_cmd();
static void qt_number_pad(int); static void qt_number_pad(int);
+27 -6
View File
@@ -49,13 +49,13 @@ void NetHackQtInvUsageWindow::drawWorn(QPainter& painter, obj* nhobj,
{ {
short int glyph; short int glyph;
if (nhobj) if (nhobj)
glyph=obj_to_glyph(nhobj, rn2_on_display_rng); glyph = obj_to_glyph(nhobj, rn2_on_display_rng);
else if (canbe) else if (canbe)
glyph=cmap_to_glyph(S_room); glyph = cmap_to_glyph(S_room);
else else
glyph=cmap_to_glyph(S_stone); glyph = GLYPH_UNEXPLORED; // was cmap_to_glyph(S_stone)
qt_settings->glyphs().drawCell(painter,glyph,x,y); qt_settings->glyphs().drawCell(painter, glyph, x, y);
} }
void NetHackQtInvUsageWindow::paintEvent(QPaintEvent*) void NetHackQtInvUsageWindow::paintEvent(QPaintEvent*)
@@ -76,6 +76,13 @@ void NetHackQtInvUsageWindow::paintEvent(QPaintEvent*)
// show lit lamp/lantern/candle/candelabrum on lower right side; // show lit lamp/lantern/candle/candelabrum on lower right side;
// show leash-in-use on lower left side // show leash-in-use on lower left side
#ifdef ENHANCED_PAPERDOLL
if (!qt_settings->doll_is_shown)
return;
qt_settings->glyphs().setSize(qt_settings->dollWidth,
qt_settings->dollHeight);
#endif
QPainter painter; QPainter painter;
painter.begin(this); painter.begin(this);
@@ -115,13 +122,27 @@ void NetHackQtInvUsageWindow::paintEvent(QPaintEvent*)
drawWorn(painter, find_tool(OIL_LAMP), 2, 4); drawWorn(painter, find_tool(OIL_LAMP), 2, 4);
painter.end(); painter.end();
#ifdef ENHANCED_PAPERDOLL
qt_settings->glyphs().setSize(qt_settings->tileWidth,
qt_settings->tileHeight);
#endif
} }
QSize NetHackQtInvUsageWindow::sizeHint(void) const QSize NetHackQtInvUsageWindow::sizeHint(void) const
{ {
if (qt_settings) { if (qt_settings) {
return QSize(qt_settings->glyphs().width()*3, int w = 0, h = 0;
qt_settings->glyphs().height()*6); #ifdef ENHANCED_PAPERDOLL
if (qt_settings->doll_is_shown) {
w = qt_settings->dollWidth * 3;
h = qt_settings->dollHeight * 6;
}
#else
w = qt_settings->glyphs().width() * 3;
h = qt_settings->glyphs().height() * 6;
#endif
return QSize(w, h);
} else { } else {
return QWidget::sizeHint(); return QWidget::sizeHint();
} }
+72 -15
View File
@@ -508,20 +508,6 @@ NetHackQtMainWindow::NetHackQtMainWindow(NetHackQtKeyBuffer& ks) :
addToolBar(toolbar); addToolBar(toolbar);
menubar = menuBar(); menubar = menuBar();
QCoreApplication::setOrganizationName("The NetHack DevTeam");
QCoreApplication::setOrganizationDomain("nethack.org");
QCoreApplication::setApplicationName("NetHack");
{
char cvers[BUFSZ];
QString qvers = version_string(cvers);
QCoreApplication::setApplicationVersion(qvers);
}
#ifdef MACOSX
/* without this, neither control+x nor option+x do anything;
with it, control+x is ^X and option+x still does nothing */
QCoreApplication::setAttribute(Qt::AA_MacDontSwapCtrlAndMeta);
#endif
setWindowTitle("Qt NetHack"); setWindowTitle("Qt NetHack");
setWindowIcon(QIcon(QPixmap(qt_compact_mode ? nh_icon_small : nh_icon))); setWindowIcon(QIcon(QPixmap(qt_compact_mode ? nh_icon_small : nh_icon)));
@@ -1051,8 +1037,9 @@ void NetHackQtMainWindow::RemoveWindow(NetHackQtWindow* window)
void NetHackQtMainWindow::updateInventory() void NetHackQtMainWindow::updateInventory()
{ {
if ( invusage ) if (invusage) {
invusage->repaint(); invusage->repaint();
}
} }
void NetHackQtMainWindow::fadeHighlighting() void NetHackQtMainWindow::fadeHighlighting()
@@ -1084,6 +1071,76 @@ void NetHackQtMainWindow::layout()
toph,c->width(),maph); toph,c->width(),maph);
} }
#endif #endif
if (qt_settings && !qt_compact_mode
&& map && message && status && invusage) {
// For the initial PaperDoll sizing, message window
// and/or status window might still be empty;
// widen them before changing PaperDoll to use saved settings.
QList<int> splittersizes = hsplitter->sizes();
#define MIN_WIN_WIDTH 400
if (splittersizes[0] < MIN_WIN_WIDTH
|| splittersizes[2] < MIN_WIN_WIDTH) {
if (splittersizes[0] < MIN_WIN_WIDTH)
splittersizes[0] = MIN_WIN_WIDTH;
#ifndef ENHANCED_PAPERDOLL
if (splittersizes[1] < 6) // TILEWMIN
splittersizes[1] = 16; // 16x16
#endif
if (splittersizes[2] < MIN_WIN_WIDTH)
splittersizes[2] = MIN_WIN_WIDTH;
hsplitter->setSizes(splittersizes);
}
#ifdef ENHANCED_PAPERDOLL
// call resizePaperDoll() indirectly...
qt_settings->resizeDoll();
#endif
}
}
void NetHackQtMainWindow::resizePaperDoll(bool showdoll)
{
#ifdef ENHANCED_PAPERDOLL
// this is absurd...
NetHackQtInvUsageWindow *w = static_cast <NetHackQtMainWindow *>
(NetHackQtBind::mainWidget())->invusage;
QList<int> hsplittersizes = hsplitter->sizes(),
vsplittersizes = vsplitter->sizes();
w->resize(w->sizeHint());
int oldwidth = hsplittersizes[1],
newwidth = w->width();
if (newwidth != oldwidth) {
if (oldwidth > newwidth)
hsplittersizes[0] += (oldwidth - newwidth);
else
hsplittersizes[2] += (newwidth - oldwidth);
hsplittersizes[1] = newwidth;
hsplitter->setSizes(hsplittersizes);
}
// Height limit is 48 pixels per doll cell;
// values greater than 44 need taller window which pushes the map down.
// FIXME: this doesn't shrink the window back if size is reduced from 45+
int oldheight = vsplittersizes[0],
newheight = w->height();
if (newheight > oldheight && oldheight > 0 && vsplittersizes[1] > 0) {
vsplittersizes[0] = newheight;
vsplitter->setSizes(vsplittersizes);
}
if (showdoll) {
if (w->isHidden())
w->show();
else
w->repaint();
} else {
if (w->isVisible())
w->hide();
}
#else
nhUse(showdoll);
#endif /* ENHANCED_PAPERDOLL */
} }
void NetHackQtMainWindow::resizeEvent(QResizeEvent*) void NetHackQtMainWindow::resizeEvent(QResizeEvent*)
+3
View File
@@ -49,6 +49,9 @@ public:
void fadeHighlighting(); void fadeHighlighting();
// this is unconditional in case qt_main.h comes before qt_set.h
void resizePaperDoll(bool); // ENHANCED_PAPERDOLL
public slots: public slots:
void doMenuItem(QAction *); void doMenuItem(QAction *);
void doQtSettings(bool); void doQtSettings(bool);
+138 -29
View File
@@ -2,7 +2,8 @@
// Qt4 conversion copyright (c) Ray Chason, 2012-2014. // Qt4 conversion copyright (c) Ray Chason, 2012-2014.
// NetHack may be freely redistributed. See license for details. // NetHack may be freely redistributed. See license for details.
// qt_set.cpp -- the Qt settings // qt_set.cpp -- Qt-specific settings, saved and restored by Qt so
// persist not just across save/restore but into new games.
extern "C" { extern "C" {
#include "hack.h" #include "hack.h"
@@ -17,8 +18,36 @@ extern "C" {
#include "qt_set.h" #include "qt_set.h"
#include "qt_set.moc" #include "qt_set.moc"
#include "qt_glyph.h" #include "qt_glyph.h"
#include "qt_main.h"
#include "qt_bind.h"
#include "qt_str.h" #include "qt_str.h"
// Dialog box accessed via "Qt Settings..." in the games menu (non-OSX)
// or via "Preferences..." in the application menu (OSX):
//--
// "Qt NetHack Settings"
// "Map:" [ ] Zoomed -- check box
// tilewidth -- number entry spinner
// tileheight -- ditto
// "Invent:" [ ] Shown -- check box
// dollwidth -- number entry spinner
// dollheight -- ditto
// "Font:" fontsize -- Huge:18pt, Large:14, Medium:12, Small:10, Tiny:8
// [dismiss] -- button
//--
// Map remembers 2 size pairs, one for Zoomed unchecked, another for checked.
// (Player controls whether the box is checked, using the dialog to manually
// switch back and forth if desired; nothing forces the Zoomed setting to
// specify larger tile size than not-Zoomed.)
// Paper doll inventory subset is shown or suppressed depending on check box.
// (It only remembers one tile size pair and that only matters when shown.
// The size could be different from both map settings but it is highly
// recommended that it match one of those unless Zoomed is never toggled.)
// Font size is used for message window and for text in the status window.
// (TODO: support separate font sizes for the two windows.)
// There's no way to undo or avoid saving any changes which player makes but
// all of the fields can be manually reversed.
/* Used by tile/font-size patch below and in ../../src/files.c */ /* Used by tile/font-size patch below and in ../../src/files.c */
char *qt_tilewidth=NULL; char *qt_tilewidth=NULL;
char *qt_tileheight=NULL; char *qt_tileheight=NULL;
@@ -34,13 +63,20 @@ namespace nethack_qt_ {
#define TILEWMIN 6 #define TILEWMIN 6
#define TILEHMIN 6 #define TILEHMIN 6
NetHackQtSettings::NetHackQtSettings(int w UNUSED, int h UNUSED) : NetHackQtSettings::NetHackQtSettings() :
settings(), settings(),
whichsize("&Zoomed", this),
tilewidth(this), tilewidth(this),
tileheight(this), tileheight(this),
widthlbl("&Width:",this), widthlbl("Tile &width:", this),
heightlbl("&Height:",this), heightlbl("Tile &height:", this),
whichsize("&Zoomed",this), #ifdef ENHANCED_PAPERDOLL
dollshown("&Shown", this),
dollwidth(this),
dollheight(this),
dollwidthlbl("&Doll width:", this), // should "Doll tile width"...
dollheightlbl("Doll height:", this), // ...but that's too verbose
#endif
fontsize(this), fontsize(this),
normal("times"), normal("times"),
#ifdef WS_WIN #ifdef WS_WIN
@@ -50,7 +86,6 @@ NetHackQtSettings::NetHackQtSettings(int w UNUSED, int h UNUSED) :
#endif #endif
large("times"), large("times"),
theglyphs(0) theglyphs(0)
{ {
int default_fontsize; int default_fontsize;
@@ -58,9 +93,19 @@ NetHackQtSettings::NetHackQtSettings(int w UNUSED, int h UNUSED) :
tilewidth.setRange(TILEWMIN, 128); tilewidth.setRange(TILEWMIN, 128);
heightlbl.setBuddy(&tileheight); heightlbl.setBuddy(&tileheight);
tileheight.setRange(TILEHMIN, 128); tileheight.setRange(TILEHMIN, 128);
tilewidth.setValue(settings.value("tilewidth", 16).toInt()); tilewidth.setValue(settings.value("tilewidth", 16).toInt());
tileheight.setValue(settings.value("tileheight", 16).toInt()); tileheight.setValue(settings.value("tileheight", 16).toInt());
#ifdef ENHANCED_PAPERDOLL
dollwidthlbl.setBuddy(&dollwidth);
dollwidth.setRange(TILEWMIN, 48);
dollheightlbl.setBuddy(&dollheight);
dollheight.setRange(TILEHMIN, 48);
dollwidth.setValue(settings.value("dollwidth", 32).toInt());
dollheight.setValue(settings.value("dollheight", 32).toInt());
doll_is_shown = settings.value("dollShown", true).toBool();
// needed the very first time
settings.setValue("dollShown", QVariant(doll_is_shown));
#endif
default_fontsize = settings.value("fontsize", 2).toInt(); default_fontsize = settings.value("fontsize", 2).toInt();
// Tile/font sizes read from .nethackrc // Tile/font sizes read from .nethackrc
@@ -86,9 +131,15 @@ NetHackQtSettings::NetHackQtSettings(int w UNUSED, int h UNUSED) :
theglyphs=new NetHackQtGlyphs(); theglyphs=new NetHackQtGlyphs();
resizeTiles(); resizeTiles();
connect(&tilewidth,SIGNAL(valueChanged(int)),this,SLOT(resizeTiles())); connect(&whichsize, SIGNAL(toggled(bool)), this, SLOT(setGlyphSize(bool)));
connect(&tileheight,SIGNAL(valueChanged(int)),this,SLOT(resizeTiles())); connect(&tilewidth, SIGNAL(valueChanged(int)), this, SLOT(resizeTiles()));
connect(&whichsize,SIGNAL(toggled(bool)),this,SLOT(setGlyphSize(bool))); connect(&tileheight, SIGNAL(valueChanged(int)), this, SLOT(resizeTiles()));
#ifdef ENHANCED_PAPERDOLL
connect(&dollshown, SIGNAL(toggled(bool)), this, SLOT(setDollShown(bool)));
connect(&dollwidth, SIGNAL(valueChanged(int)), this, SLOT(resizeDoll()));
connect(&dollheight, SIGNAL(valueChanged(int)), this, SLOT(resizeDoll()));
#endif
fontsize.addItem("Huge"); fontsize.addItem("Huge");
fontsize.addItem("Large"); fontsize.addItem("Large");
@@ -96,25 +147,51 @@ NetHackQtSettings::NetHackQtSettings(int w UNUSED, int h UNUSED) :
fontsize.addItem("Small"); fontsize.addItem("Small");
fontsize.addItem("Tiny"); fontsize.addItem("Tiny");
fontsize.setCurrentIndex(default_fontsize); fontsize.setCurrentIndex(default_fontsize);
connect(&fontsize,SIGNAL(activated(int)),this,SLOT(changedFont())); connect(&fontsize, SIGNAL(activated(int)), this, SLOT(changedFont()));
QGridLayout* grid = new QGridLayout(this); int row = 0; // used like X11-style XtSetArg(), ++argc
grid->addWidget(&whichsize, 0, 0, 1, 2); QGridLayout *grid = new QGridLayout(this);
grid->addWidget(&tilewidth, 1, 1); grid->addWidget(&widthlbl, 1, 0); // dialog box label, spans first two rows and all three columns
grid->addWidget(&tileheight, 2, 1); grid->addWidget(&heightlbl, 2, 0); QLabel *settings_label = new QLabel("Qt NetHack Settings\n", this);
QLabel* flabel=new QLabel("&Font:",this); grid->addWidget(settings_label, row, 0, 2, 3), row += 2; // uses extra row
settings_label->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
QLabel *map_label = new QLabel("&Map:", this);
map_label->setBuddy(&whichsize);
grid->addWidget(map_label, row, 0), // "Map: [ ]Zoomed"
grid->addWidget(&whichsize, row, 1), ++row;
grid->addWidget(&widthlbl, row, 1),
grid->addWidget(&tilewidth, row, 2), ++row;
grid->addWidget(&heightlbl, row, 1),
grid->addWidget(&tileheight, row, 2), ++row;
#ifdef ENHANCED_PAPERDOLL
dollshown.QAbstractButton::setChecked(doll_is_shown);
QLabel *doll_label = new QLabel("&Invent:", this);
doll_label->setBuddy(&dollshown);
grid->addWidget(doll_label, row, 0), // "Invent: [ ]Shown"
grid->addWidget(&dollshown, row, 1), ++row;
grid->addWidget(&dollwidthlbl, row, 1),
grid->addWidget(&dollwidth, row, 2), ++row;
grid->addWidget(&dollheightlbl, row, 1),
grid->addWidget(&dollheight, row, 2), ++row;
#endif
QLabel *flabel = new QLabel("&Font:", this);
flabel->setBuddy(&fontsize); flabel->setBuddy(&fontsize);
grid->addWidget(flabel, 3, 0); grid->addWidget(&fontsize, 3, 1); grid->addWidget(flabel, row, 0),
QPushButton* dismiss=new QPushButton("Dismiss",this); grid->addWidget(&fontsize, row, 1), ++row;
QPushButton *dismiss = new QPushButton("Dismiss", this);
dismiss->setDefault(true); dismiss->setDefault(true);
grid->addWidget(dismiss, 4, 0, 1, 2); grid->addWidget(dismiss, row, 0, 1, 3), ++row;
grid->setRowStretch(4,0); grid->setRowStretch(row - 1, 0);
grid->setColumnStretch(1,1); grid->setColumnStretch(1, 1);
grid->setColumnStretch(2,2); grid->setColumnStretch(2, 2);
grid->activate(); grid->activate();
connect(dismiss,SIGNAL(clicked()),this,SLOT(accept())); connect(dismiss, SIGNAL(clicked()), this, SLOT(accept()));
resize(150,140); resize(150, 140);
} }
NetHackQtGlyphs& NetHackQtSettings::glyphs() NetHackQtGlyphs& NetHackQtSettings::glyphs()
@@ -130,12 +207,13 @@ void NetHackQtSettings::changedFont()
void NetHackQtSettings::resizeTiles() void NetHackQtSettings::resizeTiles()
{ {
int w = tilewidth.value(); tileWidth = tilewidth.value();
int h = tileheight.value(); tileHeight = tileheight.value();
settings.setValue("tilewidth", tilewidth.value()); settings.setValue("tilewidth", tileWidth);
settings.setValue("tileheight", tileheight.value()); settings.setValue("tileheight", tileHeight);
theglyphs->setSize(w,h);
theglyphs->setSize(tileWidth, tileHeight);
emit tilesChanged(); emit tilesChanged();
} }
@@ -159,6 +237,37 @@ void NetHackQtSettings::setGlyphSize(bool which UNUSED)
othersize = n; othersize = n;
} }
#ifdef ENHANCED_PAPERDOLL
void NetHackQtSettings::resizeDoll()
{
dollWidth = dollwidth.value();
dollHeight = dollheight.value();
settings.setValue("dollwidth", dollWidth);
settings.setValue("dollheight", dollHeight);
settings.setValue("dollShown", doll_is_shown);
//NetHackQtMainWindow::resizePaperDoll(doll_is_shown);
NetHackQtMainWindow *w = static_cast <NetHackQtMainWindow *>
(NetHackQtBind::mainWidget());
w->resizePaperDoll(doll_is_shown);
}
void NetHackQtSettings::toggleDollShown()
{
dollshown.toggle();
}
void NetHackQtSettings::setDollShown(bool on_off)
{
if (on_off != doll_is_shown) {
dollshown.QAbstractButton::setChecked(on_off);
doll_is_shown = on_off;
resizeDoll();
}
}
#endif
const QFont& NetHackQtSettings::normalFont() const QFont& NetHackQtSettings::normalFont()
{ {
static int size[]={ 18, 14, 12, 10, 8 }; static int size[]={ 18, 14, 12, 10, 8 };
+33 -3
View File
@@ -7,15 +7,25 @@
#ifndef QT4SET_H #ifndef QT4SET_H
#define QT4SET_H #define QT4SET_H
#define ENHANCED_PAPERDOLL /* separate size from map tiles, can be hidden */
#include "qt_bind.h" // needed for mainWidget() for updateInventory()
namespace nethack_qt_ { namespace nethack_qt_ {
class NetHackQtGlyphs; class NetHackQtGlyphs;
class NetHackQtMainWindow;
class NetHackQtSettings : public QDialog { class NetHackQtSettings : public QDialog {
Q_OBJECT Q_OBJECT
public: public:
// Size of window - used to decide default sizes int tileWidth = 16, tileHeight = 16;
NetHackQtSettings(int width, int height); #ifdef ENHANCED_PAPERDOLL
int dollWidth = 32, dollHeight = 32;
bool doll_is_shown = true;
#endif
// dialog box for Qt-specific settings
NetHackQtSettings();
NetHackQtGlyphs& glyphs(); NetHackQtGlyphs& glyphs();
const QFont& normalFont(); const QFont& normalFont();
@@ -31,21 +41,41 @@ signals:
public slots: public slots:
void toggleGlyphSize(); void toggleGlyphSize();
void setGlyphSize(bool); void setGlyphSize(bool);
#ifdef ENHANCED_PAPERDOLL
void toggleDollShown();
void setDollShown(bool);
void resizeDoll();
#endif
private: private:
QSettings settings; QSettings settings;
QCheckBox whichsize;
QSpinBox tilewidth; QSpinBox tilewidth;
QSpinBox tileheight; QSpinBox tileheight;
QLabel widthlbl; QLabel widthlbl;
QLabel heightlbl; QLabel heightlbl;
QCheckBox whichsize;
QSize othersize; QSize othersize;
#ifdef ENHANCED_PAPERDOLL
QCheckBox dollshown;
QSpinBox dollwidth;
QSpinBox dollheight;
QLabel dollwidthlbl;
QLabel dollheightlbl;
#endif
QComboBox fontsize; QComboBox fontsize;
QFont normal, normalfixed, large; QFont normal, normalfixed, large;
NetHackQtGlyphs* theglyphs; NetHackQtGlyphs* theglyphs;
#if 0
void updateInventory()
{
static_cast <NetHackQtMainWindow *> (NetHackQtBind::mainWidget())
->updateInventory();
}
#endif
private slots: private slots:
void resizeTiles(); void resizeTiles();