From e02df14faa6494793a3cdde0745d98169f4cc928 Mon Sep 17 00:00:00 2001 From: Vincent van Ravesteijn Date: Thu, 27 Oct 2011 20:00:11 +0000 Subject: [PATCH 1/1] Return ExportStatus from Buffer to GuiView Now GuiView composes the message string. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@40045 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/Buffer.cpp | 10 ++-- src/Buffer.h | 4 +- src/frontends/qt4/GuiView.cpp | 92 ++++++++++++++++++++--------------- 3 files changed, 61 insertions(+), 45 deletions(-) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 53fa935451..6e6fe18463 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -3483,14 +3483,15 @@ bool Buffer::isExporting() const } -bool Buffer::doExport(string const & target, bool put_in_tempdir) const +Buffer::ExportStatus Buffer::doExport(string const & target, bool put_in_tempdir) const { bool const update_unincluded = params().maintain_unincluded_children && !params().getIncludedChildren().empty(); - return (doExport(target, put_in_tempdir, update_unincluded) == ExportSuccess); + return doExport(target, put_in_tempdir, update_unincluded); } + Buffer::ExportStatus Buffer::doExport(string const & target, bool put_in_tempdir, bool includeall, string & result_file) const { @@ -3739,13 +3740,12 @@ Buffer::ExportStatus Buffer::doExport(string const & target, bool put_in_tempdir } -bool Buffer::preview(string const & format) const +Buffer::ExportStatus Buffer::preview(string const & format) const { bool const update_unincluded = params().maintain_unincluded_children && !params().getIncludedChildren().empty(); - ExportStatus const status = preview(format, update_unincluded); - return (status == PreviewSuccess); + return preview(format, update_unincluded); } Buffer::ExportStatus Buffer::preview(string const & format, bool includeall) const diff --git a/src/Buffer.h b/src/Buffer.h index 589c4500e4..f7cc714c6d 100644 --- a/src/Buffer.h +++ b/src/Buffer.h @@ -614,9 +614,9 @@ public: bool hasGuiDelegate() const; /// - bool doExport(std::string const & target, bool put_in_tempdir) const; + ExportStatus doExport(std::string const & target, bool put_in_tempdir) const; /// - bool preview(std::string const & format) const; + ExportStatus preview(std::string const & format) const; private: /// target is a format name optionally followed by a space diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index a75b1ae2c6..54cb368f88 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -331,7 +331,7 @@ struct GuiView::GuiViewPrivate } #if (QT_VERSION >= 0x040400) - void setPreviewFuture(QFuture const & f) + void setPreviewFuture(QFuture const & f) { if (processing_thread_watcher_.isRunning()) { // we prefer to cancel this preview in order to keep a snappy @@ -382,30 +382,31 @@ public: #if (QT_VERSION >= 0x040400) /// QFutureWatcher autosave_watcher_; - QFutureWatcher processing_thread_watcher_; + QFutureWatcher processing_thread_watcher_; /// string last_export_format; + string processing_format; #else struct DummyWatcher { bool isRunning(){return false;} }; DummyWatcher processing_thread_watcher_; #endif static QSet busyBuffers; - static docstring previewAndDestroy(Buffer const * orig, Buffer * buffer, string const & format); - static docstring exportAndDestroy(Buffer const * orig, Buffer * buffer, string const & format); - static docstring compileAndDestroy(Buffer const * orig, Buffer * buffer, string const & format); + static Buffer::ExportStatus previewAndDestroy(Buffer const * orig, Buffer * buffer, string const & format); + static Buffer::ExportStatus exportAndDestroy(Buffer const * orig, Buffer * buffer, string const & format); + static Buffer::ExportStatus compileAndDestroy(Buffer const * orig, Buffer * buffer, string const & format); static docstring autosaveAndDestroy(Buffer const * orig, Buffer * buffer); template - static docstring runAndDestroy(const T& func, Buffer const * orig, Buffer * buffer, string const & format, string const & msg); + static Buffer::ExportStatus runAndDestroy(const T& func, Buffer const * orig, Buffer * buffer, string const & format, string const & msg); // TODO syncFunc/previewFunc: use bind bool asyncBufferProcessing(string const & argument, Buffer const * used_buffer, docstring const & msg, - docstring (*asyncFunc)(Buffer const *, Buffer *, string const &), - bool (Buffer::*syncFunc)(string const &, bool) const, - bool (Buffer::*previewFunc)(string const &) const); + Buffer::ExportStatus (*asyncFunc)(Buffer const *, Buffer *, string const &), + Buffer::ExportStatus (Buffer::*syncFunc)(string const &, bool) const, + Buffer::ExportStatus (Buffer::*previewFunc)(string const &) const); QVector guiWorkAreas(); }; @@ -537,9 +538,30 @@ void GuiView::processingThreadStarted() void GuiView::processingThreadFinished(bool show_errors) { - QFutureWatcher const * watcher = - static_cast const *>(sender()); - message(watcher->result()); + QFutureWatcher const * watcher = + static_cast const *>(sender()); + + Buffer::ExportStatus const status = watcher->result(); + docstring msg; + switch (status) { + case Buffer::ExportSuccess: + msg = _("Successful export to format: %1$s"); + break; + case Buffer::ExportError: + case Buffer::ExportNoPathToFormat: + case Buffer::ExportTexPathHasSpaces: + case Buffer::ExportConverterError: + msg = _("Error while exporting format: %1$s"); + break; + case Buffer::PreviewSuccess: + msg = _("Successful preview of format: %1$s"); + break; + case Buffer::PreviewError: + msg = _("Error while previewing format: %1$s"); + break; + } + message(bformat(msg, from_utf8(d.processing_format))); + updateToolbars(); if (show_errors) { BufferView const * const bv = currentBufferView(); @@ -3017,43 +3039,36 @@ bool GuiView::goToFileRow(string const & argument) #if (QT_VERSION >= 0x040400) template -docstring GuiView::GuiViewPrivate::runAndDestroy(const T& func, Buffer const * orig, Buffer * buffer, string const & format, string const & msg) +Buffer::ExportStatus GuiView::GuiViewPrivate::runAndDestroy(const T& func, Buffer const * orig, Buffer * buffer, string const & format, string const & msg) { - bool const success = func(format); + Buffer::ExportStatus const status = func(format); // the cloning operation will have produced a clone of the entire set of // documents, starting from the master. so we must delete those. Buffer * mbuf = const_cast(buffer->masterBuffer()); delete mbuf; busyBuffers.remove(orig); - if (msg == "preview") { - return success - ? bformat(_("Successful preview of format: %1$s"), from_utf8(format)) - : bformat(_("Error while previewing format: %1$s"), from_utf8(format)); - } - return success - ? bformat(_("Successful export to format: %1$s"), from_utf8(format)) - : bformat(_("Error while exporting format: %1$s"), from_utf8(format)); + return status; } -docstring GuiView::GuiViewPrivate::compileAndDestroy(Buffer const * orig, Buffer * buffer, string const & format) +Buffer::ExportStatus GuiView::GuiViewPrivate::compileAndDestroy(Buffer const * orig, Buffer * buffer, string const & format) { - bool (Buffer::* mem_func)(std::string const &, bool) const = &Buffer::doExport; + Buffer::ExportStatus (Buffer::* mem_func)(std::string const &, bool) const = &Buffer::doExport; return runAndDestroy(bind(mem_func, buffer, _1, true), orig, buffer, format, "export"); } -docstring GuiView::GuiViewPrivate::exportAndDestroy(Buffer const * orig, Buffer * buffer, string const & format) +Buffer::ExportStatus GuiView::GuiViewPrivate::exportAndDestroy(Buffer const * orig, Buffer * buffer, string const & format) { - bool (Buffer::* mem_func)(std::string const &, bool) const = &Buffer::doExport; + Buffer::ExportStatus (Buffer::* mem_func)(std::string const &, bool) const = &Buffer::doExport; return runAndDestroy(bind(mem_func, buffer, _1, false), orig, buffer, format, "export"); } -docstring GuiView::GuiViewPrivate::previewAndDestroy(Buffer const * orig, Buffer * buffer, string const & format) +Buffer::ExportStatus GuiView::GuiViewPrivate::previewAndDestroy(Buffer const * orig, Buffer * buffer, string const & format) { - bool(Buffer::* mem_func)(std::string const &) const = &Buffer::preview; + Buffer::ExportStatus (Buffer::* mem_func)(std::string const &) const = &Buffer::preview; return runAndDestroy(bind(mem_func, buffer, _1), orig, buffer, format, "preview"); } @@ -3061,24 +3076,24 @@ docstring GuiView::GuiViewPrivate::previewAndDestroy(Buffer const * orig, Buffer // not used, but the linker needs them -docstring GuiView::GuiViewPrivate::compileAndDestroy( +Buffer::ExportStatus GuiView::GuiViewPrivate::compileAndDestroy( Buffer const *, Buffer *, string const &) { - return docstring(); + return Buffer::ExportSuccess; } -docstring GuiView::GuiViewPrivate::exportAndDestroy( +Buffer::ExportStatus GuiView::GuiViewPrivate::exportAndDestroy( Buffer const *, Buffer *, string const &) { - return docstring(); + return Buffer::ExportSuccess; } -docstring GuiView::GuiViewPrivate::previewAndDestroy( +Buffer::ExportStatus GuiView::GuiViewPrivate::previewAndDestroy( Buffer const *, Buffer *, string const &) { - return docstring(); + return Buffer::ExportSuccess; } #endif @@ -3088,9 +3103,9 @@ bool GuiView::GuiViewPrivate::asyncBufferProcessing( string const & argument, Buffer const * used_buffer, docstring const & msg, - docstring (*asyncFunc)(Buffer const *, Buffer *, string const &), - bool (Buffer::*syncFunc)(string const &, bool) const, - bool (Buffer::*previewFunc)(string const &) const) + Buffer::ExportStatus (*asyncFunc)(Buffer const *, Buffer *, string const &), + Buffer::ExportStatus (Buffer::*syncFunc)(string const &, bool) const, + Buffer::ExportStatus (Buffer::*previewFunc)(string const &) const) { if (!used_buffer) return false; @@ -3105,12 +3120,13 @@ bool GuiView::GuiViewPrivate::asyncBufferProcessing( gv_->message(msg); } GuiViewPrivate::busyBuffers.insert(used_buffer); - QFuture f = QtConcurrent::run( + QFuture f = QtConcurrent::run( asyncFunc, used_buffer, used_buffer->clone(), format); setPreviewFuture(f); + processing_format = format; last_export_format = used_buffer->params().bufferFormat(); (void) syncFunc; (void) previewFunc; -- 2.39.2