X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiErrorList.cpp;h=730860231745c8ca764b3aa0cbbc80109687631a;hb=161f7b7f62cb33dab681add6c5b5b68a887e2ea1;hp=1ab919880f5e4d386b1654214a4cde5340cff7ad;hpb=a70571258d1253e5576b94fdc21209a54041626e;p=lyx.git diff --git a/src/frontends/qt4/GuiErrorList.cpp b/src/frontends/qt4/GuiErrorList.cpp index 1ab919880f..7308602317 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,15 +39,15 @@ 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; } @@ -55,7 +58,7 @@ 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,6 +125,8 @@ 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()); } @@ -150,8 +163,7 @@ bool GuiErrorList::initialiseParams(string const & data) bool GuiErrorList::goTo(int item) { ErrorItem const & err = errorList()[item]; - - if (err.par_id == -1) + if (TexRow::isNone(err.start)) return false; Buffer const * errbuf = err.buffer ? err.buffer : buf_; @@ -162,42 +174,7 @@ bool GuiErrorList::goTo(int item) FuncRequest fr(LFUN_BUFFER_SWITCH, errbuf->absFileName()); dispatch(fr); } - - DocIterator dit = errbuf->getParFromID(err.par_id); - - if (dit == doc_iterator_end(errbuf)) { - // 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; - } - - // Don't try to highlight the content of non-editable insets - while (!dit.inset().editable()) - dit.backwardPos(); - - // Now make the selection. - BufferView * bv = const_cast(bufferview()); - if (bv->selectIfEmpty(dit)) { - // The paragraph is empty but can be selected - bv->processUpdateFlags(Update::Force | Update::FitCursor); - return true; - } - if (dit.empty()) { - // The paragraph is empty and cannot be selected - return false; - } - // if pos_end is 0, this means it is end-of-paragraph - pos_type const s = dit.lastpos(); - 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 ? s - start : end - start; - // end-of-paragraph cannot be highlighted, so highlight the last thing - dit.pos() = range ? start : end - 1; - // FIXME LFUN - // If we used an LFUN, we would not need these lines: - bv->putSelectionAt(dit, max(range, pos_type(1)), false); - bv->processUpdateFlags(Update::Force | Update::FitCursor); + dispatch(TexRow::goToFunc(err.start, err.end)); return true; }