X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiErrorList.cpp;h=4f97d27b102ba6c4a19a81f179799fe48f327c3e;hb=c203a842fce88f7313ceb6da99f6a4a10f50f365;hp=9d1cd938f2b034c11527b316e0792f7fee396d60;hpb=5e0de68db5753c993cd9cead958e7066ebfbe5dc;p=lyx.git diff --git a/src/frontends/qt4/GuiErrorList.cpp b/src/frontends/qt4/GuiErrorList.cpp index 9d1cd938f2..4f97d27b10 100644 --- a/src/frontends/qt4/GuiErrorList.cpp +++ b/src/frontends/qt4/GuiErrorList.cpp @@ -18,9 +18,12 @@ #include "Buffer.h" #include "BufferView.h" #include "FuncRequest.h" +#include "FuncStatus.h" #include "BufferList.h" +#include "LyX.h" #include "ParIterator.h" #include "Text.h" +#include "TexRow.h" #include "support/debug.h" #include "support/gettext.h" @@ -36,26 +39,26 @@ using namespace lyx::support; namespace { -string const guiErrorType(string const s) +string const guiErrorType(string const & s) { if (s == "docbook") return N_("DocBook"); else if (s == "literate") return N_("Literate"); - else if (s == "platex") - return N_("pLaTeX"); else if (s == "latex") + // This covers all LaTeX variants + // (LaTeX, PDFLaTeX, XeTeX, LuaTeX, pLaTeX) return N_("LaTeX"); return s; } -} // namespace anon +} // namespace namespace lyx { namespace frontend { GuiErrorList::GuiErrorList(GuiView & lv) - : GuiDialog(lv, "errorlist", qt_("Error List")) + : GuiDialog(lv, "errorlist", qt_("Error List")), buf_(0), from_master_(false) { setupUi(this); @@ -63,6 +66,8 @@ 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())); @@ -102,6 +107,12 @@ void GuiErrorList::viewLog() } +void GuiErrorList::showAnyway() +{ + dispatch(FuncRequest(LFUN_BUFFER_VIEW_CACHE)); +} + + void GuiErrorList::paramsToDialog() { setTitle(toqstr(name_)); @@ -114,16 +125,19 @@ void GuiErrorList::paramsToDialog() for (; it != en; ++it) errorsLW->addItem(toqstr(it->error)); errorsLW->setCurrentRow(0); + showAnywayPB->setEnabled( + lyx::getStatus(FuncRequest(LFUN_BUFFER_VIEW_CACHE)).enabled()); } ErrorList const & GuiErrorList::errorList() const { - if (&bufferview()->buffer() == buf_) { - error_list_ = from_master_ ? - bufferview()->buffer().masterBuffer()->errorList(error_type_) - : bufferview()->buffer().errorList(error_type_); - } + Buffer const * buffer = from_master_ + ? bufferview()->buffer().masterBuffer() + : &bufferview()->buffer(); + if (buffer == buf_) + error_list_ = buffer->errorList(error_type_); + return error_list_; } @@ -138,7 +152,7 @@ bool GuiErrorList::initialiseParams(string const & data) buf_ = from_master_ ? bufferview()->buffer().masterBuffer() : &bufferview()->buffer(); - name_ = bformat(_("%1$s Errors (%2$s)"), + name_ = bformat(_("%1$s Errors (%2$s)"), _(guiErrorType(error_type)), from_utf8(buf_->absFileName())); paramsToDialog(); @@ -148,41 +162,19 @@ bool GuiErrorList::initialiseParams(string const & data) bool GuiErrorList::goTo(int item) { - if (&buffer() != buf_) { - if (!theBufferList().isLoaded(buf_)) - return false; - FuncRequest fr(LFUN_BUFFER_SWITCH, buf_->absFileName()); - dispatch(fr); - } ErrorItem const & err = errorList()[item]; - - if (err.par_id == -1) - return false; - - if (from_master_) - // FIXME: implement + if (TexRow::isNone(err.start)) return false; - DocIterator dit = buf_->getParFromID(err.par_id); + Buffer const * errbuf = err.buffer ? err.buffer : buf_; - if (dit == doc_iterator_end(buf_)) { - // FIXME: Happens when loading a read-only doc with - // unknown layout. Should this be the case? - LYXERR0("par id " << err.par_id << " not found"); - return false; + if (&buffer() != errbuf) { + if (!theBufferList().isLoaded(errbuf)) + return false; + FuncRequest fr(LFUN_BUFFER_SWITCH, errbuf->absFileName()); + dispatch(fr); } - - // Now make the selection. - // if pos_end is 0, this means it is end-of-paragraph - pos_type const s = dit.paragraph().size(); - pos_type const end = err.pos_end ? min(err.pos_end, s) : s; - pos_type const start = min(err.pos_start, end); - pos_type const range = end - start; - dit.pos() = start; - BufferView * bv = const_cast(bufferview()); - // FIXME: If we used an LFUN, we would not need this line: - bv->putSelectionAt(dit, range, false); - bv->processUpdateFlags(Update::Force | Update::FitCursor); + dispatch(TexRow::goToFunc(err.start, err.end)); return true; }