From 09700d5b717baec2c34a9451ca13b09a1d47e330 Mon Sep 17 00:00:00 2001 From: Scott Kostyshak Date: Tue, 31 Mar 2015 18:54:49 -0400 Subject: [PATCH] Button for showing PDF if compilation error Building on cd8be655, we still allow viewing a produced PDF even if there were compilation errors. However, now the user must click the "Show Output Anyway" button in the LaTeX Errors dialog. The reason is that before, there was a chance that the user would not realize there was an error (because the PDF would be shown over the error dialog). The approach in this commit makes it more clear that there is an error. A new LFUN is introduced, LFUN_BUFFER_VIEW_CACHE. It is useful not just for the implementation of the "Show Output Anyway" button, but also to show the last compiled version of a document, which can save time if a document takes a long time to compile (e.g. heavy use of knitr). --- src/Buffer.cpp | 27 ++++++++++++++++++++++++--- src/FuncCode.h | 1 + src/LyXAction.cpp | 11 +++++++++++ src/frontends/qt4/GuiErrorList.cpp | 11 +++++++++++ src/frontends/qt4/GuiErrorList.h | 2 ++ src/frontends/qt4/ui/ErrorListUi.ui | 19 +++++++++++++++---- 6 files changed, 64 insertions(+), 7 deletions(-) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 10e67273a3..7022139daf 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -285,6 +285,10 @@ public: /// we ran updateBuffer(), i.e., whether citation labels may need /// to be updated. mutable bool cite_labels_valid_; + /// these hold the file name and format, written to by Buffer::preview + /// and read from by LFUN_BUFFER_VIEW_CACHE. + FileName preview_file_; + string preview_format_; mutable RefCache ref_cache_; @@ -420,6 +424,8 @@ Buffer::Impl::Impl(Buffer * owner, FileName const & file, bool readonly_, cite_labels_valid_ = cloned_buffer_->d->cite_labels_valid_; unnamed = cloned_buffer_->d->unnamed; internal_buffer = cloned_buffer_->d->internal_buffer; + preview_file_ = cloned_buffer_->d->preview_file_; + preview_format_ = cloned_buffer_->d->preview_format_; } @@ -2420,6 +2426,10 @@ bool Buffer::getStatus(FuncRequest const & cmd, FuncStatus & flag) enable = !isReadonly(); break; + case LFUN_BUFFER_VIEW_CACHE: + enable = (d->preview_file_).exists(); + break; + default: return false; } @@ -2759,6 +2769,12 @@ void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr) break; } + case LFUN_BUFFER_VIEW_CACHE: + if (!formats.view(*this, d->preview_file_, + d->preview_format_)) + dr.setMessage(_("Error viewing the output file.")); + break; + default: dispatched = false; break; @@ -4212,13 +4228,18 @@ Buffer::ExportStatus Buffer::preview(string const & format, bool includeall) con // (2) export with included children only ExportStatus const status = doExport(format, true, false, result_file); FileName const previewFile(result_file); + + LATTEST (isClone()); + d->cloned_buffer_->d->preview_file_ = previewFile; + d->cloned_buffer_->d->preview_format_ = format; + + if (status != ExportSuccess) + return status; if (previewFile.exists()) { if (!formats.view(*this, previewFile, format)) return PreviewError; - else if (status == ExportSuccess) - return PreviewSuccess; else - return status; + return PreviewSuccess; } else { // Successful export but no output file? diff --git a/src/FuncCode.h b/src/FuncCode.h index 3bd0cd0eef..b590b38eaa 100644 --- a/src/FuncCode.h +++ b/src/FuncCode.h @@ -459,6 +459,7 @@ enum FuncCode LFUN_SPELLING_CONTINUOUSLY, // vfr, 20130324 LFUN_SEPARATOR_INSERT, // ef 20140502 LFUN_SERVER_GET_STATISTICS, // brokenclock 20141010 + LFUN_BUFFER_VIEW_CACHE, // skostysh 20150401 LFUN_LASTACTION // end of the table }; diff --git a/src/LyXAction.cpp b/src/LyXAction.cpp index 4ac1a0e95b..1ba2ef81cf 100644 --- a/src/LyXAction.cpp +++ b/src/LyXAction.cpp @@ -1577,6 +1577,17 @@ void LyXAction::init() * \endvar */ { LFUN_LAYOUT_RELOAD, "layout-reload", NoInternal, Layout }, +/*! + * \var lyx::FuncCode lyx::LFUN_BUFFER_VIEW_CACHE + * \li Action: Opens the file that was created from last preview of this buffer. + * \li Notion: This LFUN is called by the "Show Output Anyway" button in the LaTeX + * Errors dialog. It can also be called by the user, which is useful + * if the document takes a long time to compile, and you just + * want to see the last previewed version. + * \li Syntax: buffer-view-cache + * \endvar + */ + { LFUN_BUFFER_VIEW_CACHE, "buffer-view-cache", ReadOnly, Buffer }, /*! * \var lyx::FuncCode lyx::LFUN_TEXTCLASS_APPLY * \li Action: Sets the text class for the current buffer. diff --git a/src/frontends/qt4/GuiErrorList.cpp b/src/frontends/qt4/GuiErrorList.cpp index af83be6678..75ffaf5ff4 100644 --- a/src/frontends/qt4/GuiErrorList.cpp +++ b/src/frontends/qt4/GuiErrorList.cpp @@ -18,7 +18,9 @@ #include "Buffer.h" #include "BufferView.h" #include "FuncRequest.h" +#include "FuncStatus.h" #include "BufferList.h" +#include "LyX.h" #include "ParIterator.h" #include "Text.h" @@ -63,11 +65,14 @@ GuiErrorList::GuiErrorList(GuiView & lv) this, SLOT(slotClose())); connect(viewLogPB, SIGNAL(clicked()), this, SLOT(viewLog())); + connect(showAnywayPB, SIGNAL(clicked()), + this, SLOT(showAnyway())); connect(errorsLW, SIGNAL(currentRowChanged(int)), this, SLOT(select())); bc().setPolicy(ButtonPolicy::OkCancelPolicy); bc().setCancel(closePB); + showAnywayPB->setEnabled(lyx::getStatus(FuncRequest(LFUN_BUFFER_VIEW_CACHE)).enabled()); } @@ -102,6 +107,12 @@ void GuiErrorList::viewLog() } +void GuiErrorList::showAnyway() +{ + dispatch(FuncRequest(LFUN_BUFFER_VIEW_CACHE)); +} + + void GuiErrorList::paramsToDialog() { setTitle(toqstr(name_)); diff --git a/src/frontends/qt4/GuiErrorList.h b/src/frontends/qt4/GuiErrorList.h index 5ceb9f0181..fe4393d581 100644 --- a/src/frontends/qt4/GuiErrorList.h +++ b/src/frontends/qt4/GuiErrorList.h @@ -33,6 +33,8 @@ public Q_SLOTS: void select(); /// open the LaTeX log void viewLog(); + /// show the output file despite compilation errors + void showAnyway(); private: /// diff --git a/src/frontends/qt4/ui/ErrorListUi.ui b/src/frontends/qt4/ui/ErrorListUi.ui index 9c51af7697..9775a9f9b5 100644 --- a/src/frontends/qt4/ui/ErrorListUi.ui +++ b/src/frontends/qt4/ui/ErrorListUi.ui @@ -22,7 +22,7 @@ 6 - + @@ -54,14 +54,14 @@ - + &Close - + Qt::Horizontal @@ -87,7 +87,18 @@ - + + + + Attempt to show the output even if there were +compilation errors + + + Show Output &Anyway + + + + Selecting an error will show the error message in the panel below,