* GuiLog.{cpp,h}:

* LogUi.ui:
	- add some basic navigation facilities.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_6_X@30426 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jürgen Spitzmüller 2009-07-09 15:54:13 +00:00
parent cfeab7476f
commit 28988d22bc
4 changed files with 137 additions and 26 deletions

View File

@ -5,6 +5,7 @@
* *
* \author John Levon * \author John Levon
* \author Angus Leeming * \author Angus Leeming
* \author Jürgen Spitzmüller
* *
* Full author contact details are available in file CREDITS. * Full author contact details are available in file CREDITS.
*/ */
@ -33,6 +34,16 @@ using namespace lyx::support;
namespace lyx { namespace lyx {
namespace frontend { namespace frontend {
// Regular expressions needed at several places
// Information
QRegExp exprInfo("^(Document Class:|LaTeX Font Info:|File:|Package:|Language:|Underfull|Overfull|\\(|\\\\).*$");
// Warnings
QRegExp exprWarning("^LaTeX Warning.*$");
// Errors
QRegExp exprError("^!.*$");
///////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////
// //
// LogHighlighter // LogHighlighter
@ -67,7 +78,6 @@ LogHighlighter::LogHighlighter(QTextDocument * parent)
void LogHighlighter::highlightBlock(QString const & text) void LogHighlighter::highlightBlock(QString const & text)
{ {
// Info // Info
QRegExp exprInfo("^(Document Class:|LaTeX Font Info:|File:|Package:|Language:|Underfull|Overfull|\\(|\\\\).*$");
int index = exprInfo.indexIn(text); int index = exprInfo.indexIn(text);
while (index >= 0) { while (index >= 0) {
int length = exprInfo.matchedLength(); int length = exprInfo.matchedLength();
@ -75,7 +85,6 @@ void LogHighlighter::highlightBlock(QString const & text)
index = exprInfo.indexIn(text, index + length); index = exprInfo.indexIn(text, index + length);
} }
// LaTeX Warning: // LaTeX Warning:
QRegExp exprWarning("^LaTeX Warning.*$");
index = exprWarning.indexIn(text); index = exprWarning.indexIn(text);
while (index >= 0) { while (index >= 0) {
int length = exprWarning.matchedLength(); int length = exprWarning.matchedLength();
@ -83,7 +92,6 @@ void LogHighlighter::highlightBlock(QString const & text)
index = exprWarning.indexIn(text, index + length); index = exprWarning.indexIn(text, index + length);
} }
// ! error // ! error
QRegExp exprError("^!.*$");
index = exprError.indexIn(text); index = exprError.indexIn(text);
while (index >= 0) { while (index >= 0) {
int length = exprError.matchedLength(); int length = exprError.matchedLength();
@ -106,6 +114,9 @@ GuiLog::GuiLog(GuiView & lv)
connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose())); connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose()));
connect(updatePB, SIGNAL(clicked()), this, SLOT(updateContents())); connect(updatePB, SIGNAL(clicked()), this, SLOT(updateContents()));
connect(findPB, SIGNAL(clicked()), this, SLOT(find()));
// FIXME: find via returnPressed() does not work!
connect(findLE, SIGNAL(returnPressed()), this, SLOT(find()));
bc().setPolicy(ButtonPolicy::OkCancelPolicy); bc().setPolicy(ButtonPolicy::OkCancelPolicy);
@ -129,6 +140,41 @@ void GuiLog::updateContents()
getContents(ss); getContents(ss);
logTB->setPlainText(toqstr(ss.str())); logTB->setPlainText(toqstr(ss.str()));
nextErrorPB->setEnabled(contains(exprError));
nextWarningPB->setEnabled(contains(exprWarning));
}
void GuiLog::find()
{
logTB->find(findLE->text());
}
void GuiLog::on_nextErrorPB_clicked()
{
goTo(exprError);
}
void GuiLog::on_nextWarningPB_clicked()
{
goTo(exprWarning);
}
void GuiLog::goTo(QRegExp const & exp) const
{
QTextCursor const newc =
logTB->document()->find(exp, logTB->textCursor());
logTB->setTextCursor(newc);
}
bool GuiLog::contains(QRegExp const & exp) const
{
return !logTB->document()->find(exp, logTB->textCursor()).isNull();
} }

View File

@ -33,8 +33,14 @@ public:
private Q_SLOTS: private Q_SLOTS:
void updateContents(); void updateContents();
// copy log to clipboard /// copy log to clipboard
void on_copyPB_clicked(); void on_copyPB_clicked();
/// find content
void find();
/// jump to next error message
void on_nextErrorPB_clicked();
/// jump to next warning
void on_nextWarningPB_clicked();
private: private:
/// Apply changes /// Apply changes
@ -58,6 +64,10 @@ private:
docstring title() const; docstring title() const;
/// put the log file into the ostream /// put the log file into the ostream
void getContents(std::ostream & ss) const; void getContents(std::ostream & ss) const;
/// go to the next occurence of the RegExp
void goTo(QRegExp const & exp) const;
/// does the document after cursor position contain the RegExp?
bool contains(QRegExp const & exp) const;
private: private:
/// Recognized log file-types /// Recognized log file-types

View File

@ -1,7 +1,4 @@
<ui version="4.0" > <ui version="4.0" >
<author></author>
<comment></comment>
<exportmacro></exportmacro>
<class>LogUi</class> <class>LogUi</class>
<widget class="QDialog" name="LogUi" > <widget class="QDialog" name="LogUi" >
<property name="geometry" > <property name="geometry" >
@ -9,7 +6,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>421</width> <width>421</width>
<height>359</height> <height>441</height>
</rect> </rect>
</property> </property>
<property name="windowTitle" > <property name="windowTitle" >
@ -25,14 +22,27 @@
<property name="spacing" > <property name="spacing" >
<number>6</number> <number>6</number>
</property> </property>
<item row="1" column="0" > <item row="3" column="3" colspan="2" >
<widget class="QPushButton" name="copyPB" > <widget class="QPushButton" name="updatePB" >
<property name="toolTip" >
<string>Update the display</string>
</property>
<property name="text" > <property name="text" >
<string>Copy to Clip&amp;board</string> <string>&amp;Update</string>
</property>
<property name="default" >
<bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1" > <item row="3" column="5" >
<widget class="QPushButton" name="closePB" >
<property name="text" >
<string>&amp;Close</string>
</property>
</widget>
</item>
<item row="3" column="1" colspan="2" >
<spacer> <spacer>
<property name="orientation" > <property name="orientation" >
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -48,32 +58,75 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="1" column="3" > <item row="3" column="0" >
<widget class="QPushButton" name="closePB" > <widget class="QPushButton" name="copyPB" >
<property name="text" > <property name="text" >
<string>&amp;Close</string> <string>Copy to Clip&amp;board</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="2" > <item row="1" column="0" colspan="2" >
<widget class="QPushButton" name="updatePB" > <spacer>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" >
<size>
<width>201</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="5" >
<widget class="QPushButton" name="findPB" >
<property name="text" >
<string>&amp;Go!</string>
</property>
</widget>
</item>
<item row="2" column="1" colspan="4" >
<widget class="QLineEdit" name="findLE" >
<property name="toolTip" > <property name="toolTip" >
<string>Update the display</string> <string>Enter search string, hit return or thr "Go!" button.</string>
</property>
<property name="text" >
<string>&amp;Update</string>
</property>
<property name="default" >
<bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0" colspan="4" > <item row="2" column="0" >
<widget class="QLabel" name="findLA" >
<property name="text" >
<string>&amp;Find:</string>
</property>
<property name="buddy" >
<cstring>findLE</cstring>
</property>
</widget>
</item>
<item row="1" column="4" colspan="2" >
<widget class="QPushButton" name="nextWarningPB" >
<property name="toolTip" >
<string>Jump to the next warning message.</string>
</property>
<property name="text" >
<string>Next &amp;Warning</string>
</property>
</widget>
</item>
<item row="1" column="2" colspan="2" >
<widget class="QPushButton" name="nextErrorPB" >
<property name="toolTip" >
<string>Jump to the next error message.</string>
</property>
<property name="text" >
<string>Next &amp;Error</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="6" >
<widget class="QTextBrowser" name="logTB" /> <widget class="QTextBrowser" name="logTB" />
</item> </item>
</layout> </layout>
</widget> </widget>
<pixmapfunction></pixmapfunction>
<tabstops> <tabstops>
<tabstop>logTB</tabstop> <tabstop>logTB</tabstop>
<tabstop>copyPB</tabstop> <tabstop>copyPB</tabstop>

View File

@ -52,6 +52,8 @@ What's new
to begin/end of insets (and outside of the inset if the cursor is already to begin/end of insets (and outside of the inset if the cursor is already
in place). There are also versions that select text. in place). There are also versions that select text.
- The LaTeX Log File dialog has a search facility.
- Notes context menu has a new item for toggling all notes. - Notes context menu has a new item for toggling all notes.
- Math context menu has a new item for numbering a single line in a formula. - Math context menu has a new item for numbering a single line in a formula.