]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetIPA.cpp
Change tracking cue: for instant preview
[lyx.git] / src / insets / InsetIPA.cpp
index bfa0ca9d5c3408aee59e616e87eb123cfc163876..1da5a24299c2fbc1d106dbbe0e9e144f4093d6cc 100644 (file)
@@ -19,7 +19,6 @@
 #include "FuncStatus.h"
 #include "LaTeXFeatures.h"
 #include "Lexer.h"
-#include "LyXRC.h"
 #include "MetricsInfo.h"
 #include "OutputParams.h"
 #include "RenderPreview.h"
@@ -37,9 +36,8 @@ namespace lyx {
 
 InsetIPA::InsetIPA(Buffer * buf) 
        : InsetText(buf),
-         preview_(new RenderPreview(this)), use_preview_(true)
+         preview_(new RenderPreview(this))
 {
-       setAutoBreakRows(true);
        setDrawFrame(true);
        setFrameColor(Color_insetframe);
 }
@@ -56,6 +54,18 @@ InsetIPA::InsetIPA(InsetIPA const & other)
 }
 
 
+InsetIPA & InsetIPA::operator=(InsetIPA const & other)
+{
+       if (&other == this)
+               return *this;
+
+       InsetText::operator=(other);
+       preview_.reset(new RenderPreview(*other.preview_, this));
+
+       return *this;
+}
+
+
 void InsetIPA::write(ostream & os) const
 {
        os << "IPA" << "\n";
@@ -63,6 +73,22 @@ void InsetIPA::write(ostream & os) const
 }
 
 
+void InsetIPA::doDispatch(Cursor & cur, FuncRequest & cmd)
+{
+       switch (cmd.action()) {
+       case LFUN_QUOTE_INSERT: {
+               FuncRequest fr(LFUN_SELF_INSERT, "\"");
+               InsetText::doDispatch(cur, fr);
+               break;
+       }
+       default:
+               InsetText::doDispatch(cur, cmd);
+               break;
+       }
+
+}
+
+
 bool InsetIPA::getStatus(Cursor & cur, FuncRequest const & cmd,
                FuncStatus & flag) const
 {
@@ -74,6 +100,10 @@ bool InsetIPA::getStatus(Cursor & cur, FuncRequest const & cmd,
                }
                break;
        }
+       case LFUN_IN_IPA:
+               flag.setEnabled(true);
+               return true;
+               break;
        default:
                break;
        }
@@ -102,8 +132,7 @@ void InsetIPA::preparePreview(DocIterator const & pos) const
 
 bool InsetIPA::previewState(BufferView * bv) const
 {
-       if (!editing(bv) && (RenderPreview::status() == LyXRC::PREVIEW_ON ||
-                            RenderPreview::status() == LyXRC::PREVIEW_NO_MATH)) {
+       if (!editing(bv) && RenderPreview::previewText()) {
                graphics::PreviewImage const * pimage =
                        preview_->getPreviewImage(bv->buffer());
                return pimage && pimage->image();
@@ -121,9 +150,7 @@ void InsetIPA::reloadPreview(DocIterator const & pos) const
 
 void InsetIPA::draw(PainterInfo & pi, int x, int y) const
 {
-       use_preview_ = previewState(pi.base.bv);
-
-       if (use_preview_) {
+       if (previewState(pi.base.bv)) {
                preview_->draw(pi, x + TEXT_TO_INSET_OFFSET, y);
                setPosCache(pi, x, y);
                return;
@@ -141,7 +168,7 @@ void InsetIPA::edit(Cursor & cur, bool front, EntryDirection entry_from)
 
 Inset * InsetIPA::editXY(Cursor & cur, int x, int y)
 {
-       if (use_preview_) {
+       if (previewState(&cur.bv())) {
                edit(cur, true, ENTRY_DIRECTION_IGNORE);
                return this;
        }
@@ -162,7 +189,6 @@ void InsetIPA::metrics(MetricsInfo & mi, Dimension & dim) const
                dim.asc += TEXT_TO_INSET_OFFSET;
                dim.des += TEXT_TO_INSET_OFFSET;
                dim.wid += TEXT_TO_INSET_OFFSET;
-               dim_ = dim;
                dim.wid += TEXT_TO_INSET_OFFSET;
                // insert a one pixel gap
                dim.wid += 1;
@@ -187,15 +213,17 @@ bool InsetIPA::notifyCursorLeaves(Cursor const & old, Cursor & cur)
 
 void InsetIPA::validate(LaTeXFeatures & features) const
 {
-       if (buffer_->params().useNonTeXFonts)
-               return;
        features.require("tipa");
        features.require("tipx");
+
+       InsetText::validate(features);
 }
 
 
-void InsetIPA::latex(otexstream & os, OutputParams const & runparams) const
+void InsetIPA::latex(otexstream & os, OutputParams const & runparams_in) const
 {
+       OutputParams runparams(runparams_in);
+       runparams.inIPA = true;
        bool const multipar = (text().paragraphs().size() > 1);
        // fontspec knows \textipa, but not the IPA environment
        bool const nontexfonts = buffer_->params().useNonTeXFonts;
@@ -211,11 +239,21 @@ void InsetIPA::latex(otexstream & os, OutputParams const & runparams) const
 }
 
 
+docstring InsetIPA::xhtml(XHTMLStream & xs, OutputParams const & runparams_in) const
+{
+       OutputParams runparams(runparams_in);
+       runparams.inIPA = true;
+       return InsetText::xhtml(xs, runparams);
+}
+
+
 bool InsetIPA::insetAllowed(InsetCode code) const
 {
        switch (code) {
        // code that is allowed
        case ERT_CODE:
+       case IPACHAR_CODE:
+       case IPADECO_CODE:
        case SCRIPT_CODE:
                return true;
        default: