]> git.mxchange.org Git - flightgear.git/commitdiff
{fatal,modal}MessageBox: Use Qt on Linux when available
authorRebecca N. Palmer <rebecca_palmer@zoho.com>
Tue, 24 Nov 2015 07:24:32 +0000 (07:24 +0000)
committerRebecca N. Palmer <rebecca_palmer@zoho.com>
Tue, 24 Nov 2015 07:24:32 +0000 (07:24 +0000)
(console error messages are invisible when started from an icon)

src/GUI/CMakeLists.txt
src/GUI/MessageBox.cxx
src/GUI/QtMessageBox.cxx [new file with mode: 0644]
src/GUI/QtMessageBox.hxx [new file with mode: 0644]

index bdff1cce58f05bc53d5de03c9274c5cd620001b5..26516756a1870da6eb302d084a8880b376e87398 100644 (file)
@@ -105,6 +105,8 @@ if (HAVE_QT)
                             PathsDialog.hxx
                             LocationWidget.cxx
                             LocationWidget.hxx
+                            QtMessageBox.cxx
+                            QtMessageBox.hxx
                             ${uic_sources}
                             ${qrc_sources})
 
index fed1eeffe0bd58aab0516be87db729cb9408bea1..ca2e890ab3ffab13b2e05674ebc9fcbe0adc9660 100644 (file)
@@ -31,6 +31,10 @@ cocoaMessageBox(const std::string& msg, const std::string& text);
 
 #endif
 
+#ifdef HAVE_QT
+    #include "QtMessageBox.hxx"
+#endif
+
 using namespace simgear::strutils;
 
 namespace {
@@ -122,6 +126,8 @@ MessageBoxResult modalMessageBox(const std::string& caption,
     return win32MessageBox(caption, msg, moreText);
 #elif defined(SG_MAC)
     return cocoaMessageBox(msg, moreText);
+#elif defined(HAVE_QT)
+    return QtMessageBox(caption, msg, moreText, false);
 #else
     SG_LOG(SG_GENERAL, SG_ALERT, caption << ":" << msg);
     if (!moreText.empty()) {
@@ -139,6 +145,8 @@ MessageBoxResult fatalMessageBox(const std::string& caption,
     return win32MessageBox(caption, msg, moreText);
 #elif defined(SG_MAC)
     return cocoaFatalMessage(msg, moreText);
+#elif defined(HAVE_QT)
+    return QtMessageBox(caption, msg, moreText, true);
 #else
     std::cerr << "FATAL:" << msg << "\n";
     if (!moreText.empty()) {
diff --git a/src/GUI/QtMessageBox.cxx b/src/GUI/QtMessageBox.cxx
new file mode 100644 (file)
index 0000000..430bc34
--- /dev/null
@@ -0,0 +1,51 @@
+// QtMessageBox.cxx - Qt5 implementation of MessageBox
+//
+// Written by Rebecca Palmer, started November 2015.
+//
+// Copyright (C) 2015 Rebecca Palmer <rebecca_palmer@zoho.com>
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+#include "MessageBox.hxx"
+#include "QtLauncher.hxx"
+
+// Qt
+#include <QMessageBox>
+#include <QString>
+
+flightgear::MessageBoxResult
+QtMessageBox(const std::string& caption,
+                    const std::string& msg,
+                    const std::string& moreText,
+                    bool fatal)
+{
+    int fakeargc = 1;
+    static char fakeargv0[] = "fgfs";
+    static char * fakeargv[2] = {fakeargv0, 0};
+    // This does nothing if it has already been run, so the fake argc/argv
+    // are only used if an error box is triggered in early startup
+    flightgear::initApp(fakeargc, fakeargv);
+    QMessageBox msgBox;
+    msgBox.setWindowTitle(QString::fromStdString(caption));
+    msgBox.setText(QString::fromStdString(msg));
+    msgBox.setInformativeText(QString::fromStdString(moreText));
+    if (fatal) {
+        msgBox.setIcon(QMessageBox::Critical);
+    } else {
+        msgBox.setIcon(QMessageBox::Warning);
+    }
+    msgBox.exec();
+    return flightgear::MSG_BOX_OK;
+}
diff --git a/src/GUI/QtMessageBox.hxx b/src/GUI/QtMessageBox.hxx
new file mode 100644 (file)
index 0000000..e394a72
--- /dev/null
@@ -0,0 +1,5 @@
+flightgear::MessageBoxResult
+QtMessageBox(const std::string& caption,
+                    const std::string& msg,
+                    const std::string& moreText,
+                    bool fatal);