]> granicus.if.org Git - nethack/commitdiff
Qt4: Handle saving/loading message history
authorPasi Kallinen <paxed@alt.org>
Tue, 10 Oct 2017 21:32:39 +0000 (00:32 +0300)
committerPasi Kallinen <paxed@alt.org>
Tue, 10 Oct 2017 21:32:39 +0000 (00:32 +0300)
win/Qt4/qt4bind.cpp
win/Qt4/qt4bind.h
win/Qt4/qt4msg.cpp
win/Qt4/qt4msg.h

index 75c5f821b84f0d7fae082f9149f1c4ff343f04f6..0adc0234644ae56d968b2d02ae23978bcbe510a8 100644 (file)
@@ -18,6 +18,7 @@ extern "C" {
 #undef max
 
 #include <QtGui/QtGui>
+#include <QStringList>
 #if QT_VERSION >= 0x050000
 #include <QtWidgets/QtWidgets>
 #include <QtMultimedia/QSound>
@@ -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 *) {}
 
index ad396b78cf8a0d20cefcb333eb36c269cf548519..820341cae6a3560d3f7f8785d65e0f1d63a5fa95 100644 (file)
@@ -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
index 7c3ccd1dfd96002faed5e3f4e9371fe12a58b0da..d82e102feff282de2bd382fe1ff1001076e8f928 100644 (file)
@@ -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());
index 238ace4780f455a55e262a76e949ee3132563b62..f4091ad186d7abcdfcb1f08aeff733d4b7b6e2b1 100644 (file)
@@ -26,6 +26,7 @@ public:
        virtual void PutStr(int attr, const QString& text);
 
        void Scroll(int dx, int dy);
+        void ClearMessages();
 
        void setMap(NetHackQtMapWindow2*);