X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiErrorList.cpp;h=f104cd2ffba1461ff9213a1ff6d639fe4b6aafc4;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=e3912f5bfbe763789c01495bcdbfdd4f5ffec3d8;hpb=7934e9c224b5033e972afc1cda3943f2e66cc1fc;p=lyx.git diff --git a/src/frontends/qt4/GuiErrorList.cpp b/src/frontends/qt4/GuiErrorList.cpp index e3912f5bfb..f104cd2ffb 100644 --- a/src/frontends/qt4/GuiErrorList.cpp +++ b/src/frontends/qt4/GuiErrorList.cpp @@ -16,6 +16,7 @@ #include "Buffer.h" #include "BufferView.h" +#include "FuncRequest.h" #include "ParIterator.h" #include "Text.h" @@ -41,7 +42,9 @@ GuiErrorList::GuiErrorList(GuiView & lv) connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose())); - connect(errorsLW, SIGNAL(itemSelectionChanged()), + connect(viewLogPB, SIGNAL(clicked()), + this, SLOT(viewLog())); + connect(errorsLW, SIGNAL(currentRowChanged(int)), this, SLOT(select())); bc().setPolicy(ButtonPolicy::OkCancelPolicy); @@ -51,8 +54,8 @@ GuiErrorList::GuiErrorList(GuiView & lv) void GuiErrorList::showEvent(QShowEvent * e) { - errorsLW->setCurrentRow(0); select(); + paramsToDialog(); e->accept(); } @@ -60,12 +63,21 @@ void GuiErrorList::showEvent(QShowEvent * e) void GuiErrorList::select() { int const item = errorsLW->row(errorsLW->currentItem()); - if (goTo(item)) - descriptionTB->setPlainText(toqstr(errorList()[item].description)); + if (item == -1) + return; + goTo(item); + descriptionTB->setPlainText( + toqstr(errorList()[item].description)); +} + + +void GuiErrorList::viewLog() +{ + dispatch(FuncRequest(LFUN_DIALOG_SHOW, "latexlog")); } -void GuiErrorList::updateContents() +void GuiErrorList::paramsToDialog() { setTitle(toqstr(name_)); errorsLW->clear(); @@ -75,21 +87,31 @@ void GuiErrorList::updateContents() ErrorList::const_iterator end = errorList().end(); for (; it != end; ++it) errorsLW->addItem(toqstr(it->error)); + errorsLW->setCurrentRow(0); } ErrorList const & GuiErrorList::errorList() const { - return bufferview()->buffer().errorList(error_type_); + return from_master_ ? + bufferview()->buffer().masterBuffer()->errorList(error_type_) + : bufferview()->buffer().errorList(error_type_); } -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(); + Buffer const * buf = from_master_ ? + bufferview()->buffer().masterBuffer() + : &bufferview()->buffer(); name_ = bformat(_("%1$s Errors (%2$s)"), _(error_type), - from_utf8(buf.absFileName())); + from_utf8(buf->absFileName())); + paramsToDialog(); return true; } @@ -101,10 +123,14 @@ bool GuiErrorList::goTo(int item) if (err.par_id == -1) return false; - Buffer & buf = buffer(); + if (from_master_) + // FIXME: implement + return false; + + Buffer const & buf = buffer(); DocIterator dit = buf.getParFromID(err.par_id); - if (dit == doc_iterator_end(buf.inset())) { + 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"); @@ -118,9 +144,10 @@ bool GuiErrorList::goTo(int item) pos_type const start = min(err.pos_start, end); pos_type const range = end - start; dit.pos() = start; - bufferview()->putSelectionAt(dit, range, false); + BufferView * bv = const_cast(bufferview()); // FIXME: If we used an LFUN, we would not need this line: - bufferview()->processUpdateFlags(Update::Force | Update::FitCursor); + bv->putSelectionAt(dit, range, false); + bv->processUpdateFlags(Update::Force | Update::FitCursor); return true; } @@ -131,4 +158,4 @@ Dialog * createGuiErrorList(GuiView & lv) { return new GuiErrorList(lv); } } // namespace lyx -#include "GuiErrorList_moc.cpp" +#include "moc_GuiErrorList.cpp"