From: Pasi Kallinen Date: Tue, 10 Oct 2017 21:32:39 +0000 (+0300) Subject: Qt4: Handle saving/loading message history X-Git-Tag: NetHack-3.6.1_RC01~281 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c6f0058e3d74c24639114217174adf87824fcbbe;p=nethack Qt4: Handle saving/loading message history --- diff --git a/win/Qt4/qt4bind.cpp b/win/Qt4/qt4bind.cpp index 75c5f821b..0adc02346 100644 --- a/win/Qt4/qt4bind.cpp +++ b/win/Qt4/qt4bind.cpp @@ -18,6 +18,7 @@ extern "C" { #undef max #include +#include #if QT_VERSION >= 0x050000 #include #include @@ -119,6 +120,9 @@ NetHackQtBind::NetHackQtBind(int& argc, char** argv) : main = new NetHackQtMainWindow(keybuffer); connect(qApp, SIGNAL(lastWindowClosed()), qApp, SLOT(quit())); qt_settings=new NetHackQtSettings(main->width(),main->height()); + msgs_strings = new QStringList(); + msgs_initd = false; + msgs_saved = false; } void NetHackQtBind::qt_init_nhwindows(int* argc, char** argv) @@ -616,19 +620,37 @@ char * NetHackQtBind::qt_getmsghistory(BOOLEAN_P init) void NetHackQtBind::qt_putmsghistory(const char *msg, BOOLEAN_P is_restoring) { NetHackQtMessageWindow* window = main->GetMessageWindow(); - //raw_printf("msg='%s'", msg); - if (window && msg) - window->PutStr(ATR_NONE, QString::fromLatin1(msg)); -} + if (!window) + return; + + if (is_restoring && !msgs_initd) { + /* we're restoring history from the previous session, but new + messages have already been issued this session */ + int i = 0; + const char *str; + + while ((str = window->GetStr((i == 0)))) { + msgs_strings->append(str); + i++; + } + msgs_initd = true; + msgs_saved = (i > 0); + window->ClearMessages(); + } -void NetHackQtBind::qt_putmsghistory(const std::string& msg, BOOLEAN_P is_restoring) -{ - NetHackQtMessageWindow* window = main->GetMessageWindow(); - if (window) - window->PutStr(ATR_NONE, QString::fromLatin1(msg.c_str(), msg.size())); + if (msg) { + //raw_printf("msg='%s'", msg); + window->PutStr(ATR_NONE, QString::fromLatin1(msg)); + } else if (msgs_saved) { + /* restore strings */ + int i; + for (i = 0; i < msgs_strings->size(); i++) + window->PutStr(ATR_NONE, msgs_strings->at((i))); + delete msgs_strings; + msgs_initd = false; + } } - bool NetHackQtBind::notify(QObject *receiver, QEvent *event) { // Ignore Alt-key navigation to menubar, it's annoying when you @@ -682,6 +704,9 @@ NetHackQtKeyBuffer NetHackQtBind::keybuffer; NetHackQtClickBuffer NetHackQtBind::clickbuffer; NetHackQtMainWindow* NetHackQtBind::main=0; QFrame* NetHackQtBind::splash=0; +QStringList *NetHackQtBind::msgs_strings; +boolean NetHackQtBind::msgs_saved = false; +boolean NetHackQtBind::msgs_initd = false; static void Qt_positionbar(char *) {} diff --git a/win/Qt4/qt4bind.h b/win/Qt4/qt4bind.h index ad396b78c..820341cae 100644 --- a/win/Qt4/qt4bind.h +++ b/win/Qt4/qt4bind.h @@ -80,7 +80,6 @@ public: static char *qt_getmsghistory(BOOLEAN_P init); static void qt_putmsghistory(const char *msg, BOOLEAN_P is_restoring); - static void qt_putmsghistory(const std::string& msg, BOOLEAN_P is_restoring); static void qt_outrip(winid wid, int how, time_t when); static int qt_kbhit(); @@ -89,6 +88,10 @@ public: private: virtual bool notify(QObject *receiver, QEvent *event); + + static QStringList *msgs_strings; + static boolean msgs_saved; + static boolean msgs_initd; }; } // namespace nethack_qt4 diff --git a/win/Qt4/qt4msg.cpp b/win/Qt4/qt4msg.cpp index 7c3ccd1df..d82e102fe 100644 --- a/win/Qt4/qt4msg.cpp +++ b/win/Qt4/qt4msg.cpp @@ -73,6 +73,12 @@ void NetHackQtMessageWindow::Clear() map->clearMessages(); } +void NetHackQtMessageWindow::ClearMessages() +{ + if (list) + list->clear(); +} + void NetHackQtMessageWindow::Display(bool block) { if (changed) { @@ -86,7 +92,7 @@ const char * NetHackQtMessageWindow::GetStr(bool init) if (init) currgetmsg = 0; - QListWidgetItem *item = list->item(++currgetmsg); + QListWidgetItem *item = list->item(currgetmsg++); if (item) { QString str = item->text(); //raw_printf("getstr[%i]='%s'", currgetmsg, str.toLatin1().constData()); diff --git a/win/Qt4/qt4msg.h b/win/Qt4/qt4msg.h index 238ace478..f4091ad18 100644 --- a/win/Qt4/qt4msg.h +++ b/win/Qt4/qt4msg.h @@ -26,6 +26,7 @@ public: virtual void PutStr(int attr, const QString& text); void Scroll(int dx, int dy); + void ClearMessages(); void setMap(NetHackQtMapWindow2*);