]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiProgress.cpp
Use the command-alternatives sequence as defined in menus.bind
[lyx.git] / src / frontends / qt4 / GuiProgress.cpp
index 4fa8a134909a80fd80089788f7aa13d54b2ada3d..466d20668fbbd39ee91d2e561a95ee3d1038aec7 100644 (file)
@@ -17,6 +17,8 @@
 
 #include "qt_helpers.h"
 
+#include "frontends/alert.h"
+
 #include "support/debug.h"
 #include "support/Systemcall.h"
 
@@ -30,6 +32,9 @@ namespace lyx {
 namespace frontend {
 
 
+// FIXME: This dialog has issues with line breaking and size, in particular with
+// html. But it could easily be reimplemented as a QMessageBox using
+// QMessageBox::setCheckBox() available starting from Qt 5.2
 class GuiToggleWarningDialog : public QDialog, public Ui::ToggleWarningUi
 {
 public:
@@ -48,30 +53,48 @@ GuiProgress::GuiProgress()
        connect(this, SIGNAL(appendMessage(QString const &)), SLOT(doAppendMessage(QString const &)));
        connect(this, SIGNAL(appendError(QString const &)), SLOT(doAppendError(QString const &)));
        connect(this, SIGNAL(clearMessages()), SLOT(doClearMessages()));
-       
+
        // Alert interface
        connect(this, SIGNAL(warning(QString const &, QString const &)),
                SLOT(doWarning(QString const &, QString const &)));
        connect(this, SIGNAL(toggleWarning(QString const &, QString const &, QString const &)),
                SLOT(doToggleWarning(QString const &, QString const &, QString const &)));
-       connect(this, SIGNAL(error(QString const &, QString const &)),
-               SLOT(doError(QString const &, QString const &)));
+       connect(this, SIGNAL(error(QString const &, QString const &, QString const &)),
+               SLOT(doError(QString const &, QString const &, QString const &)));
        connect(this, SIGNAL(information(QString const &, QString const &)),
                SLOT(doInformation(QString const &, QString const &)));
+       connect(this, SIGNAL(triggerFlush()),
+               SLOT(startFlushing()));
+
+       flushDelay_.setInterval(200);
+       flushDelay_.setSingleShot(true);
+       connect(&flushDelay_, SIGNAL(timeout()), this, SLOT(updateWithLyXErr()));
+}
+
+
+int GuiProgress::prompt(docstring const & title, docstring const & question,
+                       int default_button, int cancel_button,
+                       docstring const & b1, docstring const & b2)
+{
+       return Alert::prompt(title, question, default_button, cancel_button, b1, b2);
+}
+
+
+QString GuiProgress::currentTime()
+{
+       return QTime::currentTime().toString("hh:mm:ss.zzz");
 }
 
 
 void GuiProgress::doProcessStarted(QString const & cmd)
 {
-       QString time = QTime::currentTime().toString();
-       appendText(time + ": <" + cmd + "> started");
+       appendText(currentTime() + ": <" + cmd + "> started");
 }
 
 
 void GuiProgress::doProcessFinished(QString const & cmd)
 {
-       QString time = QTime::currentTime().toString();
-       appendText(time + ": <" + cmd + "> done");
+       appendText(currentTime() + ": <" + cmd + "> done");
 }
 
 
@@ -89,11 +112,23 @@ void GuiProgress::doAppendError(QString const & msg)
 
 void GuiProgress::doClearMessages()
 {
-       Q_EMIT clearMessageText();
+       clearMessageText();
+}
+
+
+void GuiProgress::startFlushing()
+{
+       flushDelay_.start();
 }
 
 
 void GuiProgress::lyxerrFlush()
+{
+       triggerFlush();
+}
+
+
+void GuiProgress::updateWithLyXErr()
 {
        appendLyXErrMessage(toqstr(lyxerr_stream_.str()));
        lyxerr_stream_.str("");
@@ -102,13 +137,13 @@ void GuiProgress::lyxerrFlush()
 
 void GuiProgress::lyxerrConnect()
 {
-       lyxerr.setSecond(&lyxerr_stream_);
+       lyxerr.setSecondStream(&lyxerr_stream_);
 }
 
 
 void GuiProgress::lyxerrDisconnect()
 {
-       lyxerr.setSecond(0);
+       lyxerr.setSecondStream(0);
 }
 
 
@@ -121,7 +156,7 @@ GuiProgress::~GuiProgress()
 void GuiProgress::appendText(QString const & text)
 {
        if (!text.isEmpty())
-               Q_EMIT updateStatusBarMessage(text);
+               updateStatusBarMessage(text);
 }
 
 
@@ -151,9 +186,13 @@ void GuiProgress::doToggleWarning(QString const & title, QString const & msg, QS
 }
 
 
-void GuiProgress::doError(QString const & title, QString const & message)
+void GuiProgress::doError(QString const & title, QString const & message, QString const & details)
 {
-       QMessageBox::critical(qApp->focusWidget(), title, message);
+       QMessageBox box(QMessageBox::Critical, title, message, QMessageBox::Ok, qApp->focusWidget());
+       if (!details.isEmpty()) {
+               box.setDetailedText(details);
+       }
+       box.exec();
 }