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,29 +1639,31 @@ void Buffer::writeDocBookSource(odocstream & os, string const & fname,
os << ">\n\n"; os << ">\n\n";
} }
string top = top_element; if (output_body) {
top += " lang=\""; string top = top_element;
if (runparams.flavor == OutputParams::XML) top += " lang=\"";
top += params().language->code(); if (runparams.flavor == OutputParams::XML)
else top += params().language->code();
top += params().language->code().substr(0, 2); else
top += '"'; top += params().language->code().substr(0, 2);
top += '"';
if (!params().options.empty()) {
top += ' '; if (!params().options.empty()) {
top += params().options; top += ' ';
top += params().options;
}
os << "<!-- " << ((runparams.flavor == OutputParams::XML)? "XML" : "SGML")
<< " file was created by LyX " << lyx_version
<< "\n See http://www.lyx.org/ for more information -->\n";
params().documentClass().counters().reset();
sgml::openTag(os, top);
os << '\n';
docbookParagraphs(text(), *this, os, runparams);
sgml::closeTag(os, top_element);
} }
os << "<!-- " << ((runparams.flavor == OutputParams::XML)? "XML" : "SGML")
<< " file was created by LyX " << lyx_version
<< "\n See http://www.lyx.org/ for more information -->\n";
params().documentClass().counters().reset();
sgml::openTag(os, top);
os << '\n';
docbookParagraphs(text(), *this, os, runparams);
sgml::closeTag(os, top_element);
} }
@ -1742,14 +1744,19 @@ void Buffer::writeLyXHTMLSource(odocstream & os,
<< ";\n"; << ";\n";
os << "}\n</style>\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";
} }
XHTMLStream xs(os);
params().documentClass().counters().reset();
xhtmlParagraphs(text(), *this, xs, runparams);
if (output_preamble) 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, void Buffer::getSourceCode(odocstream & os, string const format,
pit_type par_begin, pit_type par_end, pit_type par_begin, pit_type par_end,
bool full_source) const OutputWhat output) const
{ {
OutputParams runparams(&params().encoding()); OutputParams runparams(&params().encoding());
runparams.nice = true; runparams.nice = true;
@ -3188,21 +3195,7 @@ void Buffer::getSourceCode(odocstream & os, string const format,
// No side effect of file copying and image conversion // No side effect of file copying and image conversion
runparams.dryrun = true; runparams.dryrun = true;
if (full_source) { if (output == CurrentParagraph) {
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 {
runparams.par_begin = par_begin; runparams.par_begin = par_begin;
runparams.par_end = par_end; runparams.par_end = par_end;
if (par_begin + 1 == par_end) { if (par_begin + 1 == par_end) {
@ -3231,6 +3224,27 @@ void Buffer::getSourceCode(odocstream & os, string const format,
otexstream ots(os, texrow); otexstream ots(os, texrow);
latexParagraphs(*this, text(), ots, runparams); 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 { enum OutputWhat {
FullSource, FullSource,
OnlyBody, OnlyBody,
OnlyPreamble OnlyPreamble,
CurrentParagraph
}; };
/// Just a wrapper for writeLaTeXSource, first creating the ofstream. /// 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 /// get source code (latex/docbook) for some paragraphs, or all paragraphs
/// including preamble /// including preamble
void getSourceCode(odocstream & os, std::string const format, 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. /// Access to error list.
/// This method is used only for GUI visualisation of Buffer related /// This method is used only for GUI visualisation of Buffer related

View File

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

View File

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

View File

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