1 // Copyright (c) Warwick Allison, 1999.
2 // Qt4 conversion copyright (c) Ray Chason, 2012-2014.
3 // NetHack may be freely redistributed. See license for details.
5 // qt4icon.cpp -- a labelled icon
18 #include <QtGui/QtGui>
19 #if QT_VERSION >= 0x050000
20 #include <QtWidgets/QtWidgets>
24 namespace nethack_qt4 {
26 NetHackQtLabelledIcon::NetHackQtLabelledIcon(QWidget* parent, const char* l) :
31 label(new QLabel(l,this)),
37 NetHackQtLabelledIcon::NetHackQtLabelledIcon(QWidget* parent, const char* l, const QPixmap& i) :
42 label(new QLabel(l,this)),
43 icon(new QLabel(this))
49 void NetHackQtLabelledIcon::initHighlight()
51 hl_good = "QLabel { background-color : green; color : white }";
52 hl_bad = "QLabel { background-color : red ; color : white }";
55 void NetHackQtLabelledIcon::setLabel(const QString& t, bool lower)
58 label=new QLabel(this);
59 label->setFont(font());
62 if (label->text() != t) {
64 highlight(lower==low_is_good ? hl_good : hl_bad);
68 void NetHackQtLabelledIcon::setLabel(const QString& t, long v, long cv, const QString& tail)
74 buf.sprintf("%ld", v);
76 setLabel(t + buf + tail, cv < prev_value);
80 void NetHackQtLabelledIcon::setLabel(const QString& t, long v, const QString& tail)
85 void NetHackQtLabelledIcon::setIcon(const QPixmap& i)
87 if (icon) icon->setPixmap(i);
88 else { icon=new QLabel(this); icon->setPixmap(i); resizeEvent(0); }
89 icon->resize(i.width(),i.height());
92 void NetHackQtLabelledIcon::setFont(const QFont& f)
95 if (label) label->setFont(f);
98 void NetHackQtLabelledIcon::show()
100 #if QT_VERSION >= 300
109 QSize NetHackQtLabelledIcon::sizeHint() const
111 QSize iconsize, textsize;
113 if (label && !icon) return label->sizeHint();
114 if (icon && !label) return icon->sizeHint();
115 if (!label && !icon) return QWidget::sizeHint();
117 iconsize = icon->sizeHint();
118 textsize = label->sizeHint();
120 std::max(iconsize.width(), textsize.width()),
121 iconsize.height() + textsize.height());
124 QSize NetHackQtLabelledIcon::minimumSizeHint() const
126 QSize iconsize, textsize;
128 if (label && !icon) return label->minimumSizeHint();
129 if (icon && !label) return icon->minimumSizeHint();
130 if (!label && !icon) return QWidget::minimumSizeHint();
132 iconsize = icon->minimumSizeHint();
133 textsize = label->minimumSizeHint();
135 std::max(iconsize.width(), textsize.width()),
136 iconsize.height() + textsize.height());
139 void NetHackQtLabelledIcon::highlightWhenChanging()
144 void NetHackQtLabelledIcon::lowIsGood()
149 void NetHackQtLabelledIcon::dissipateHighlight()
158 void NetHackQtLabelledIcon::highlight(const QString& hl)
160 if (label) { // Surely it is?!
162 label->setStyleSheet(hl);
164 // `4' includes this turn, so dissipates after
165 // 3 more keypresses.
167 label->setStyleSheet("");
172 void NetHackQtLabelledIcon::unhighlight()
174 if (label) { // Surely it is?!
175 label->setStyleSheet("");
179 void NetHackQtLabelledIcon::resizeEvent(QResizeEvent*)
183 //int labw=label ? label->fontMetrics().width(label->text()) : 0;
184 int labh=label ? label->fontMetrics().height() : 0;
185 int icoh=icon ? icon->height() : 0;
187 int icoy=(h>height() ? height()-labh-icoh : height()/2-h/2);
190 icon->setGeometry(0,icoy,width(),icoh);
193 label->setGeometry(0,laby,width(),labh);
197 void NetHackQtLabelledIcon::setAlignments()
199 if (label) label->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
200 if (icon) icon->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
203 } // namespace nethack_qt4