Initial work for view source improvements.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@40073 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Richard Heck 2011-10-29 21:00:23 +00:00
parent f25e7c340b
commit 9eaa64b2cb
5 changed files with 157 additions and 121 deletions

View File

@ -1639,6 +1639,7 @@ void Buffer::writeDocBookSource(odocstream & os, string const & fname,
os << ">\n\n";
}
if (output_body) {
string top = top_element;
top += " lang=\"";
if (runparams.flavor == OutputParams::XML)
@ -1663,6 +1664,7 @@ void Buffer::writeDocBookSource(odocstream & os, string const & fname,
docbookParagraphs(text(), *this, os, runparams);
sgml::closeTag(os, top_element);
}
}
void Buffer::makeLyXHTMLFile(FileName const & fname,
@ -1742,14 +1744,19 @@ void Buffer::writeLyXHTMLSource(odocstream & os,
<< ";\n";
os << "}\n</style>\n";
}
os << "</head>\n<body>\n";
os << "</head>\n";
}
if (output_body) {
os << "<body>\n";
XHTMLStream xs(os);
params().documentClass().counters().reset();
xhtmlParagraphs(text(), *this, xs, runparams);
os << "</body>\n";
}
if (output_preamble)
os << "</body>\n</html>\n";
os << "</html>\n";
}
@ -3179,7 +3186,7 @@ void Buffer::changeRefsIfUnique(docstring const & from, docstring const & to,
void Buffer::getSourceCode(odocstream & os, string const format,
pit_type par_begin, pit_type par_end,
bool full_source) const
OutputWhat output) const
{
OutputParams runparams(&params().encoding());
runparams.nice = true;
@ -3188,21 +3195,7 @@ void Buffer::getSourceCode(odocstream & os, string const format,
// No side effect of file copying and image conversion
runparams.dryrun = true;
if (full_source) {
os << "% " << _("Preview source code") << "\n\n";
d->texrow.reset();
d->texrow.newline();
d->texrow.newline();
if (params().isDocBook())
writeDocBookSource(os, absFileName(), runparams, FullSource);
else if (runparams.flavor == OutputParams::HTML)
writeLyXHTMLSource(os, runparams, FullSource);
else {
// latex or literate
otexstream ots(os, d->texrow);
writeLaTeXSource(ots, string(), runparams, FullSource);
}
} else {
if (output == CurrentParagraph) {
runparams.par_begin = par_begin;
runparams.par_end = par_end;
if (par_begin + 1 == par_end) {
@ -3231,6 +3224,27 @@ void Buffer::getSourceCode(odocstream & os, string const format,
otexstream ots(os, texrow);
latexParagraphs(*this, text(), ots, runparams);
}
} else {
os << "% ";
if (output == FullSource)
os << _("Preview source code");
else if (output == OnlyPreamble)
os << _("Preview preamble");
else if (output == OnlyBody)
os << _("Preview body");
os << "\n\n";
d->texrow.reset();
d->texrow.newline();
d->texrow.newline();
if (params().isDocBook())
writeDocBookSource(os, absFileName(), runparams, output);
else if (runparams.flavor == OutputParams::HTML)
writeLyXHTMLSource(os, runparams, output);
else {
// latex or literate
otexstream ots(os, d->texrow);
writeLaTeXSource(ots, string(), runparams, output);
}
}
}

View File

@ -288,7 +288,8 @@ public:
enum OutputWhat {
FullSource,
OnlyBody,
OnlyPreamble
OnlyPreamble,
CurrentParagraph
};
/// Just a wrapper for writeLaTeXSource, first creating the ofstream.
@ -575,7 +576,7 @@ public:
/// get source code (latex/docbook) for some paragraphs, or all paragraphs
/// including preamble
void getSourceCode(odocstream & os, std::string const format,
pit_type par_begin, pit_type par_end, bool full_source) const;
pit_type par_begin, pit_type par_end, OutputWhat output) const;
/// Access to error list.
/// This method is used only for GUI visualisation of Buffer related

View File

@ -49,8 +49,8 @@ ViewSourceWidget::ViewSourceWidget()
{
setupUi(this);
connect(viewFullSourceCB, SIGNAL(clicked()),
this, SLOT(fullSourceChanged()));
connect(contentsCO, SIGNAL(activated(int)),
this, SLOT(contentsChanged()));
connect(autoUpdateCB, SIGNAL(toggled(bool)),
updatePB, SLOT(setDisabled(bool)));
connect(autoUpdateCB, SIGNAL(toggled(bool)),
@ -90,7 +90,7 @@ static size_t crcCheck(docstring const & s)
\param fullSource get full source code
\return true if the content has changed since last call.
*/
static bool getContent(BufferView const * view, bool fullSource,
static bool getContent(BufferView const * view, Buffer::OutputWhat output,
QString & qstr, string const format, bool force_getcontent)
{
// get the *top* level paragraphs that contain the cursor,
@ -108,7 +108,7 @@ static bool getContent(BufferView const * view, bool fullSource,
if (par_begin > par_end)
swap(par_begin, par_end);
odocstringstream ostr;
view->buffer().getSourceCode(ostr, format, par_begin, par_end + 1, fullSource);
view->buffer().getSourceCode(ostr, format, par_begin, par_end + 1, output);
docstring s = ostr.str();
static size_t crc = 0;
size_t newcrc = crcCheck(s);
@ -129,7 +129,7 @@ void ViewSourceWidget::setBufferView(BufferView const * bv)
}
void ViewSourceWidget::fullSourceChanged()
void ViewSourceWidget::contentsChanged()
{
if (autoUpdateCB->isChecked())
updateView();
@ -150,8 +150,15 @@ void ViewSourceWidget::updateView()
outputFormatCO->currentIndex()).toString());
QString content;
if (getContent(bv_, viewFullSourceCB->isChecked(), content,
format, force_getcontent_))
Buffer::OutputWhat output = Buffer::CurrentParagraph;
if (contentsCO->currentIndex() == 1)
output = Buffer::FullSource;
else if (contentsCO->currentIndex() == 2)
output = Buffer::OnlyPreamble;
else if (contentsCO->currentIndex() == 3)
output = Buffer::OnlyBody;
if (getContent(bv_, output, content, format, force_getcontent_))
document_->setPlainText(content);
CursorSlice beg = bv_->cursor().selectionBegin().bottom();
@ -254,8 +261,9 @@ void GuiViewSource::saveSession() const
{
Dialog::saveSession();
QSettings settings;
settings.setValue(
sessionKey() + "/fullsource", widget_->viewFullSourceCB->isChecked());
// see below
// settings.setValue(
// sessionKey() + "/output", widget_->contentsCO->currentIndex());
settings.setValue(
sessionKey() + "/autoupdate", widget_->autoUpdateCB->isChecked());
}
@ -265,9 +273,9 @@ void GuiViewSource::restoreSession()
{
DockView::restoreSession();
// FIXME: Full source updating is too slow to be done at startup.
//widget_->viewFullSourceCB->setChecked(
// settings.value(sessionKey() + "/fullsource", false).toBool());
widget_->viewFullSourceCB->setChecked(false);
//widget_->outputCO-setCurrentIndex(
// settings.value(sessionKey() + "/output", false).toInt());
widget_->contentsCO->setCurrentIndex(0);
QSettings settings;
widget_->autoUpdateCB->setChecked(
settings.value(sessionKey() + "/autoupdate", true).toBool());

View File

@ -47,7 +47,7 @@ public Q_SLOTS:
///
void updateDefaultFormat();
///
void fullSourceChanged();
void contentsChanged();
private:
///

View File

@ -1,3 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ViewSourceUi</class>
<widget class="QWidget" name="ViewSourceUi">
@ -5,15 +6,15 @@
<rect>
<x>0</x>
<y>0</y>
<width>452</width>
<height>120</height>
<width>528</width>
<height>205</height>
</rect>
</property>
<property name="windowTitle">
<string/>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" rowspan="5">
<widget class="QTextEdit" name="viewSourceTV">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Ignored">
@ -27,35 +28,50 @@
</widget>
</item>
<item row="0" column="1">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="outputFormatLA">
<property name="text">
<string>&amp;Output Format:</string>
<string>F&amp;ormat:</string>
</property>
<property name="buddy">
<cstring>outputFormatCO</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<item row="0" column="2">
<widget class="QComboBox" name="outputFormatCO">
<property name="enabled">
<bool>true</bool>
</property>
<property name="toolTip">
<string>Select the output format</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QCheckBox" name="viewFullSourceCB">
<property name="cursor">
<cursorShape>ArrowCursor</cursorShape>
</property>
<item row="1" column="1" colspan="2">
<widget class="QComboBox" name="contentsCO">
<item>
<property name="text">
<string>Complete source</string>
<string>Current Paragraph</string>
</property>
</item>
<item>
<property name="text">
<string>Complete Source</string>
</property>
</item>
<item>
<property name="text">
<string>Preamble Only</string>
</property>
</item>
<item>
<property name="text">
<string>Body Only</string>
</property>
</item>
</widget>
</item>
<item row="2" column="0" colspan="2">
<item row="2" column="1" colspan="2">
<widget class="QCheckBox" name="autoUpdateCB">
<property name="text">
<string>Automatic update</string>
@ -65,7 +81,7 @@
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<item row="3" column="1" colspan="2">
<widget class="QPushButton" name="updatePB">
<property name="enabled">
<bool>false</bool>
@ -75,7 +91,7 @@
</property>
</widget>
</item>
<item row="4" column="0">
<item row="4" column="1" colspan="2">
<spacer>
<property name="orientation">
<enum>Qt::Vertical</enum>
@ -83,18 +99,15 @@
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>17</height>
<height>85</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<tabstops>
<tabstop>viewSourceTV</tabstop>
<tabstop>viewFullSourceCB</tabstop>
<tabstop>autoUpdateCB</tabstop>
<tabstop>updatePB</tabstop>
</tabstops>