X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiErrorList.cpp;h=900fe86018bdedff8355b2ea049f0084cce50525;hb=ee7dd4a11ea21851e7e32164c66b37d3bc8ac31d;hp=54eb83ebc6b0cb413f8a13426cbb674eb0a23caa;hpb=29f052bc3d67a937f8575ac84f0b4c505cadd7af;p=lyx.git diff --git a/src/frontends/qt4/GuiErrorList.cpp b/src/frontends/qt4/GuiErrorList.cpp index 54eb83ebc6..900fe86018 100644 --- a/src/frontends/qt4/GuiErrorList.cpp +++ b/src/frontends/qt4/GuiErrorList.cpp @@ -12,10 +12,13 @@ #include "GuiErrorList.h" +#include "GuiView.h" #include "qt_helpers.h" #include "Buffer.h" #include "BufferView.h" +#include "FuncRequest.h" +#include "BufferList.h" #include "ParIterator.h" #include "Text.h" @@ -31,6 +34,23 @@ using namespace std; using namespace lyx::support; +namespace { + +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") + return N_("LaTeX"); + return s; +} + +} // namespace anon + namespace lyx { namespace frontend { @@ -41,6 +61,8 @@ GuiErrorList::GuiErrorList(GuiView & lv) connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose())); + connect(viewLogPB, SIGNAL(clicked()), + this, SLOT(viewLog())); connect(errorsLW, SIGNAL(currentRowChanged(int)), this, SLOT(select())); @@ -52,6 +74,7 @@ GuiErrorList::GuiErrorList(GuiView & lv) void GuiErrorList::showEvent(QShowEvent * e) { select(); + paramsToDialog(); e->accept(); } @@ -67,15 +90,28 @@ void GuiErrorList::select() } -void GuiErrorList::updateContents() +void GuiErrorList::viewLog() +{ + if (&buffer() != buf_) { + if (!theBufferList().isLoaded(buf_)) + return; + FuncRequest fr(LFUN_BUFFER_SWITCH, buf_->absFileName()); + dispatch(fr); + } + dispatch(FuncRequest(LFUN_DIALOG_SHOW, "latexlog")); +} + + +void GuiErrorList::paramsToDialog() { setTitle(toqstr(name_)); errorsLW->clear(); descriptionTB->setPlainText(QString()); - ErrorList::const_iterator it = errorList().begin(); - ErrorList::const_iterator end = errorList().end(); - for (; it != end; ++it) + ErrorList const & el = errorList(); + ErrorList::const_iterator it = el.begin(); + ErrorList::const_iterator const en = el.end(); + for (; it != en; ++it) errorsLW->addItem(toqstr(it->error)); errorsLW->setCurrentRow(0); } @@ -83,33 +119,55 @@ void GuiErrorList::updateContents() ErrorList const & GuiErrorList::errorList() const { - return bufferview()->buffer().errorList(error_type_); + if (&bufferview()->buffer() == buf_) { + error_list_ = from_master_ ? + bufferview()->buffer().masterBuffer()->errorList(error_type_) + : bufferview()->buffer().errorList(error_type_); + } + return error_list_; } -bool GuiErrorList::initialiseParams(string const & error_type) +bool GuiErrorList::initialiseParams(string const & data) { + from_master_ = prefixIs(data, "from_master|"); + string error_type = data; + if (from_master_) + error_type = split(data, '|'); error_type_ = error_type; - Buffer const & buf = bufferview()->buffer(); - name_ = bformat(_("%1$s Errors (%2$s)"), _(error_type), - from_utf8(buf.absFileName())); + buf_ = from_master_ ? + bufferview()->buffer().masterBuffer() + : &bufferview()->buffer(); + name_ = bformat(_("%1$s Errors (%2$s)"), + _(guiErrorType(error_type)), + from_utf8(buf_->absFileName())); + paramsToDialog(); return true; } 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; - Buffer const & buf = buffer(); - DocIterator dit = buf.getParFromID(err.par_id); + if (from_master_) + // FIXME: implement + return false; + + DocIterator dit = buf_->getParFromID(err.par_id); - if (dit == doc_iterator_end(buf.inset())) { - // FIXME: Happens when loading a read-only doc with - // unknown layout. Should this be the case? + 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; } @@ -122,7 +180,8 @@ bool GuiErrorList::goTo(int item) 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: + // FIXME LFUN + // If we used an LFUN, we would not need these lines: bv->putSelectionAt(dit, range, false); bv->processUpdateFlags(Update::Force | Update::FitCursor); return true; @@ -135,4 +194,4 @@ Dialog * createGuiErrorList(GuiView & lv) { return new GuiErrorList(lv); } } // namespace lyx -#include "GuiErrorList_moc.cpp" +#include "moc_GuiErrorList.cpp"