]> git.lyx.org Git - features.git/commitdiff
Initial work for view source improvements.
authorRichard Heck <rgheck@comcast.net>
Sat, 29 Oct 2011 21:00:23 +0000 (21:00 +0000)
committerRichard Heck <rgheck@comcast.net>
Sat, 29 Oct 2011 21:00:23 +0000 (21:00 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@40073 a592a061-630c-0410-9148-cb99ea01b6c8

src/Buffer.cpp
src/Buffer.h
src/frontends/qt4/GuiViewSource.cpp
src/frontends/qt4/GuiViewSource.h
src/frontends/qt4/ui/ViewSourceUi.ui

index 0ffac77a6d0bf512a2133cb0ae4e8859ee112dc1..237a7924a1bf94b4d133f87aa724283fcac71a09 100644 (file)
@@ -1639,29 +1639,31 @@ void Buffer::writeDocBookSource(odocstream & os, string const & fname,
                os << ">\n\n";
        }
 
-       string top = top_element;
-       top += " lang=\"";
-       if (runparams.flavor == OutputParams::XML)
-               top += params().language->code();
-       else
-               top += params().language->code().substr(0, 2);
-       top += '"';
-
-       if (!params().options.empty()) {
-               top += ' ';
-               top += params().options;
+       if (output_body) {
+               string top = top_element;
+               top += " lang=\"";
+               if (runparams.flavor == OutputParams::XML)
+                       top += params().language->code();
+               else
+                       top += params().language->code().substr(0, 2);
+               top += '"';
+       
+               if (!params().options.empty()) {
+                       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";
                                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)
-               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);
+               }
        }
 }
 
index 3a042989cb09dc9a59651f448c6d9f79127c76c1..fe39b4653f33bbb0390498a1be5edf2100c9f222 100644 (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
index 345bfedd44968b3644fa46b477b8304d49db6cc5..289a54a5a26e2c2ee4dc6a1c87dc01a61e3c5109 100644 (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());
index e3c7a814e5b142eb021bb1ba72f6489e9d070bea..697198301bcef9f7a1d227f09c11150eea123f77 100644 (file)
@@ -47,7 +47,7 @@ public Q_SLOTS:
        ///
        void updateDefaultFormat();
        ///
-       void fullSourceChanged();
+       void contentsChanged();
 
 private:
        ///
index 72e67364933a77d2cdade40b7255d964a9011d7f..b9708e60f9860aee0341c01a1c041603d7608063 100644 (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">
     </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>
-       </property>
-       <property name="buddy">
-        <cstring>outputFormatCO</cstring>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="1">
-      <widget class="QComboBox" name="outputFormatCO">
-       <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>
-       <property name="text">
-        <string>Complete source</string>
-       </property>
-      </widget>
+    <widget class="QLabel" name="outputFormatLA">
+     <property name="text">
+      <string>F&amp;ormat:</string>
+     </property>
+     <property name="buddy">
+      <cstring>outputFormatCO</cstring>
+     </property>
+    </widget>
+   </item>
+   <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 row="2" column="0" colspan="2">
-      <widget class="QCheckBox" name="autoUpdateCB">
-       <property name="text">
-        <string>Automatic update</string>
-       </property>
-       <property name="checked">
-        <bool>true</bool>
-       </property>
-      </widget>
+     <item>
+      <property name="text">
+       <string>Complete Source</string>
+      </property>
      </item>
-     <item row="3" column="0" colspan="2">
-      <widget class="QPushButton" name="updatePB">
-       <property name="enabled">
-        <bool>false</bool>
-       </property>
-       <property name="text">
-        <string>&amp;Update</string>
-       </property>
-      </widget>
+     <item>
+      <property name="text">
+       <string>Preamble Only</string>
+      </property>
      </item>
-     <item row="4" column="0">
-      <spacer>
-       <property name="orientation">
-        <enum>Qt::Vertical</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>20</width>
-         <height>17</height>
-        </size>
-       </property>
-      </spacer>
+     <item>
+      <property name="text">
+       <string>Body Only</string>
+      </property>
      </item>
-    </layout>
+    </widget>
+   </item>
+   <item row="2" column="1" colspan="2">
+    <widget class="QCheckBox" name="autoUpdateCB">
+     <property name="text">
+      <string>Automatic update</string>
+     </property>
+     <property name="checked">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1" colspan="2">
+    <widget class="QPushButton" name="updatePB">
+     <property name="enabled">
+      <bool>false</bool>
+     </property>
+     <property name="text">
+      <string>&amp;Update</string>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="1" colspan="2">
+    <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>
   </layout>
  </widget>
  <tabstops>
   <tabstop>viewSourceTV</tabstop>
-  <tabstop>viewFullSourceCB</tabstop>
   <tabstop>autoUpdateCB</tabstop>
   <tabstop>updatePB</tabstop>
  </tabstops>