X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiErrorList.cpp;h=0b625ccd519bf5ad2a73fca67919a165d0973b5e;hb=b6eacd8d4f86734e8abef3335b190ce12a6a11b5;hp=993ef5cebcc86c31a40c3766bc1647f9fe1444f0;hpb=94e61a3bc9c136554afd8f23fd4d49c2f4e394ba;p=lyx.git diff --git a/src/frontends/qt4/GuiErrorList.cpp b/src/frontends/qt4/GuiErrorList.cpp index 993ef5cebc..0b625ccd51 100644 --- a/src/frontends/qt4/GuiErrorList.cpp +++ b/src/frontends/qt4/GuiErrorList.cpp @@ -11,87 +11,178 @@ #include #include "GuiErrorList.h" -#include "ControlErrorList.h" +#include "GuiView.h" #include "qt_helpers.h" +#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" +#include "support/lstrings.h" + #include -#include #include -#include +#include +#include +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 == "latex") + // This covers all LaTeX variants + // (LaTeX, PDFLaTeX, XeTeX, LuaTeX, pLaTeX) + return N_("LaTeX"); + return s; +} + +} // namespace namespace lyx { namespace frontend { - -GuiErrorListDialog::GuiErrorListDialog(LyXView & lv) - : GuiDialog(lv, "errorlist") +GuiErrorList::GuiErrorList(GuiView & lv) + : GuiDialog(lv, "errorlist", qt_("Error List")), buf_(0), from_master_(false) { setupUi(this); - setController(new ControlErrorList(*this)); - connect(closePB, SIGNAL(clicked()), - this, SLOT(slotClose())); - connect(errorsLW, SIGNAL(itemActivated(QListWidgetItem *)), - this, SLOT(slotClose())); - connect( errorsLW, SIGNAL(itemClicked(QListWidgetItem *)), - this, SLOT(select_adaptor(QListWidgetItem *))); + connect(buttonBox, SIGNAL(clicked(QAbstractButton *)), + this, SLOT(slotButtonBox(QAbstractButton *))); + 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); + bc().setCancel(buttonBox->button(QDialogButtonBox::Cancel)); } -ControlErrorList & GuiErrorListDialog::controller() const +void GuiErrorList::showEvent(QShowEvent * e) { - return static_cast(GuiDialog::controller()); + select(); + paramsToDialog(); + e->accept(); } -void GuiErrorListDialog::select_adaptor(QListWidgetItem * item) +void GuiErrorList::select() { - select(item); + int const item = errorsLW->row(errorsLW->currentItem()); + if (item == -1) + return; + goTo(item); + descriptionTB->setPlainText( + toqstr(errorList()[item].description)); } -void GuiErrorListDialog::closeEvent(QCloseEvent * e) +void GuiErrorList::viewLog() { - slotWMHide(); - e->accept(); + 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::showAnyway() +{ + dispatch(FuncRequest(LFUN_BUFFER_VIEW_CACHE)); } -void GuiErrorListDialog::showEvent(QShowEvent *e) +void GuiErrorList::paramsToDialog() { + setTitle(toqstr(name_)); + errorsLW->clear(); + descriptionTB->setPlainText(QString()); + + 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); - select(errorsLW->item(0)); - e->accept(); + showAnywayPB->setEnabled( + lyx::getStatus(FuncRequest(LFUN_BUFFER_VIEW_CACHE)).enabled()); } -void GuiErrorListDialog::select(QListWidgetItem * wi) +ErrorList const & GuiErrorList::errorList() const { - int const item = errorsLW->row(wi); - controller().goTo(item); - descriptionTB->setPlainText(toqstr(controller().errorList()[item].description)); + Buffer const * buffer = from_master_ + ? bufferview()->buffer().masterBuffer() + : &bufferview()->buffer(); + if (buffer == buf_) + error_list_ = buffer->errorList(error_type_); + + return error_list_; } -void GuiErrorListDialog::update_contents() +bool GuiErrorList::initialiseParams(string const & sdata) { - setViewTitle(from_utf8(controller().name())); - errorsLW->clear(); - descriptionTB->setPlainText(QString()); + from_master_ = prefixIs(sdata, "from_master|"); + string error_type = sdata; + if (from_master_) + error_type = split(sdata, '|'); + error_type_ = error_type; + 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; +} - ErrorList::const_iterator it = controller().errorList().begin(); - ErrorList::const_iterator end = controller().errorList().end(); - for (; it != end; ++it) - errorsLW->addItem(toqstr(it->error)); + +bool GuiErrorList::goTo(int item) +{ + ErrorItem const & err = errorList()[item]; + if (TexRow::isNone(err.start)) + return false; + + Buffer const * errbuf = err.buffer ? err.buffer : buf_; + + if (&buffer() != errbuf) { + if (!theBufferList().isLoaded(errbuf)) + return false; + FuncRequest fr(LFUN_BUFFER_SWITCH, errbuf->absFileName()); + dispatch(fr); + } + dispatch(TexRow::goToFunc(err.start, err.end)); + return true; } + +Dialog * createGuiErrorList(GuiView & lv) { return new GuiErrorList(lv); } + } // namespace frontend } // namespace lyx -#include "GuiErrorList_moc.cpp" +#include "moc_GuiErrorList.cpp"