X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiLog.cpp;h=2ddadc9226af3b684354f14dc0578ebfe8d489c5;hb=e029b216b7e56ce3a41ef0b853045c37c7d155d8;hp=274ad265fe8a903390e0606ed1f4ca291b75eb89;hpb=212386be8a1573fb52b5da718961835816a3c8e2;p=lyx.git diff --git a/src/frontends/qt4/GuiLog.cpp b/src/frontends/qt4/GuiLog.cpp index 274ad265fe..2ddadc9226 100644 --- a/src/frontends/qt4/GuiLog.cpp +++ b/src/frontends/qt4/GuiLog.cpp @@ -4,64 +4,57 @@ * Licence details can be found in the file COPYING. * * \author John Levon + * \author Angus Leeming * * Full author contact details are available in file CREDITS. */ #include -#include - #include "GuiLog.h" + +#include "GuiApplication.h" #include "qt_helpers.h" +#include "Lexer.h" -#include "frontends/Application.h" +#include "support/docstring.h" +#include "support/gettext.h" -#include -#include #include +#include +#include + +#include +#include + +using namespace std; +using namespace lyx::support; namespace lyx { namespace frontend { ///////////////////////////////////////////////////////////////////// // -// GuiLogDialog +// LogHighlighter // -///////////////////////////////////////////////////////////////////// - +//////////////////////////////////////////////////////////////////// -GuiLogDialog::GuiLogDialog(GuiLog * form) - : form_(form) +class LogHighlighter : public QSyntaxHighlighter { - setupUi(this); +public: + LogHighlighter(QTextDocument * parent); - connect(closePB, SIGNAL(clicked()), - form, SLOT(slotClose())); - connect( updatePB, SIGNAL( clicked() ), - this, SLOT( updateClicked() ) ); -} +private: + void highlightBlock(QString const & text); +private: + QTextCharFormat infoFormat; + QTextCharFormat warningFormat; + QTextCharFormat errorFormat; +}; -void GuiLogDialog::closeEvent(QCloseEvent * e) -{ - form_->slotWMHide(); - e->accept(); -} -void GuiLogDialog::updateClicked() -{ - form_->update_contents(); -} - - -///////////////////////////////////////////////////////////////////// -// -// LogHighlighter -// -///////////////////////////////////////////////////////////////////// - LogHighlighter::LogHighlighter(QTextDocument * parent) : QSyntaxHighlighter(parent) { @@ -106,38 +99,141 @@ void LogHighlighter::highlightBlock(QString const & text) // ///////////////////////////////////////////////////////////////////// +GuiLog::GuiLog(GuiView & lv) + : GuiDialog(lv, "log", qt_("LaTeX Log")), type_(LatexLog) +{ + setupUi(this); -GuiLog::GuiLog(GuiDialog & parent) - : GuiView(parent, docstring()) -{} + connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose())); + connect(updatePB, SIGNAL(clicked()), this, SLOT(updateContents())); + bc().setPolicy(ButtonPolicy::OkCancelPolicy); -void GuiLog::build_dialog() -{ - dialog_.reset(new GuiLogDialog(this)); // set syntax highlighting - highlighter = new LogHighlighter(dialog_->logTB->document()); - // - dialog_->logTB->setReadOnly(true); - QFont font(toqstr(theApp()->typewriterFontName())); + highlighter = new LogHighlighter(logTB->document()); + + logTB->setReadOnly(true); + QFont font(guiApp->typewriterFontName()); font.setKerning(false); font.setFixedPitch(true); font.setStyleHint(QFont::TypeWriter); - dialog_->logTB->setFont(font); + logTB->setFont(font); +} + + +void GuiLog::updateContents() +{ + setTitle(toqstr(title())); + + ostringstream ss; + getContents(ss); + + logTB->setPlainText(toqstr(ss.str())); } -void GuiLog::update_contents() +bool GuiLog::initialiseParams(string const & data) { - setTitle(controller().title()); + istringstream is(data); + Lexer lex; + lex.setStream(is); + + string logtype, logfile; + lex >> logtype; + if (lex) { + lex.next(true); + logfile = lex.getString(); + } + if (!lex) + // Parsing of the data failed. + return false; + + if (logtype == "latex") + type_ = LatexLog; + else if (logtype == "literate") + type_ = LiterateLog; + else if (logtype == "lyx2lyx") + type_ = Lyx2lyxLog; + else if (logtype == "vc") + type_ = VCLog; + else + return false; + + logfile_ = FileName(logfile); + + updateContents(); + + return true; +} - std::ostringstream ss; - controller().getContents(ss); - dialog_->logTB->setPlainText(toqstr(ss.str())); +void GuiLog::clearParams() +{ + logfile_.erase(); } + +docstring GuiLog::title() const +{ + switch (type_) { + case LatexLog: + return _("LaTeX Log"); + case LiterateLog: + return _("Literate Programming Build Log"); + case Lyx2lyxLog: + return _("lyx2lyx Error Log"); + case VCLog: + return _("Version Control Log"); + default: + return docstring(); + } +} + + +void GuiLog::getContents(ostream & ss) const +{ + ifstream in(logfile_.toFilesystemEncoding().c_str()); + + bool success = false; + + // FIXME UNICODE + // Our caller interprets the file contents as UTF8, but is that + // correct? + if (in) { + ss << in.rdbuf(); + success = ss.good(); + } + + if (success) + return; + + switch (type_) { + case LatexLog: + ss << to_utf8(_("No LaTeX log file found.")); + break; + case LiterateLog: + ss << to_utf8(_("No literate programming build log file found.")); + break; + case Lyx2lyxLog: + ss << to_utf8(_("No lyx2lyx error log file found.")); + break; + case VCLog: + ss << to_utf8(_("No version control log file found.")); + break; + } +} + + +void GuiLog::on_copyPB_clicked() +{ + qApp->clipboard()->setText(logTB->toPlainText()); +} + + +Dialog * createGuiLog(GuiView & lv) { return new GuiLog(lv); } + + } // namespace frontend } // namespace lyx -#include "GuiLog_moc.cpp" +#include "moc_GuiLog.cpp"