]> git.lyx.org Git - lyx.git/blobdiff - src/insets/insetbox.C
The speed patch: redraw only rows that have changed
[lyx.git] / src / insets / insetbox.C
index e4547b6c1ca93c51b025bd6ad32c75e0f4fc7370..9440fc5283d330a3f09aef35a2dcbdbc45f5416b 100644 (file)
 
 #include "insetbox.h"
 
-#include "BufferView.h"
+#include "cursor.h"
 #include "dispatchresult.h"
 #include "debug.h"
+#include "FuncStatus.h"
 #include "funcrequest.h"
 #include "gettext.h"
 #include "LaTeXFeatures.h"
 #include "metricsinfo.h"
 #include "paragraph.h"
 
-#include "support/std_sstream.h"
 #include "support/translator.h"
 
+#include <sstream>
+
 using std::auto_ptr;
 using std::string;
 using std::istringstream;
@@ -103,7 +105,7 @@ InsetBox::~InsetBox()
 }
 
 
-auto_ptr<InsetBase> InsetBox::clone() const
+auto_ptr<InsetBase> InsetBox::doClone() const
 {
        return auto_ptr<InsetBase>(new InsetBox(*this));
 }
@@ -154,14 +156,19 @@ void InsetBox::setButtonLabel()
 void InsetBox::metrics(MetricsInfo & m, Dimension & dim) const
 {
        MetricsInfo mi = m;
-       mi.base.textwidth = params_.width.inPixels(m.base.textwidth); 
+       if (params_.inner_box || params_.special != "width")
+               mi.base.textwidth = params_.width.inPixels(m.base.textwidth);
        InsetCollapsable::metrics(mi, dim);
-       //if (params_.inner_box && isOpen())
-       //      dim.wid = mi.base.textwidth;
        dim_ = dim;
 }
 
 
+bool InsetBox::forceDefaultParagraphs(idx_type) const
+{
+       return !params_.inner_box;
+}
+
+
 bool InsetBox::showInsetDialog(BufferView * bv) const
 {
        InsetBoxMailer(const_cast<InsetBox &>(*this)).showDialog(bv);
@@ -169,38 +176,55 @@ bool InsetBox::showInsetDialog(BufferView * bv) const
 }
 
 
-DispatchResult
-InsetBox::priv_dispatch(FuncRequest const & cmd,
-                       idx_type & idx, pos_type & pos)
+void InsetBox::doDispatch(LCursor & cur, FuncRequest & cmd)
 {
-       DispatchResult result(false);
-       BufferView * bv = cmd.view();
-
        switch (cmd.action) {
 
        case LFUN_INSET_MODIFY: {
                lyxerr << "InsetBox::dispatch MODIFY" << endl;
                InsetBoxMailer::string2params(cmd.argument, params_);
                setButtonLabel();
-               result.dispatched(true);
-               result.update(true);
-               return result;
+               break;
        }
 
        case LFUN_INSET_DIALOG_UPDATE:
-               InsetBoxMailer(*this).updateDialog(bv);
-               result.dispatched(true);
-               return result;
+               InsetBoxMailer(*this).updateDialog(&cur.bv());
+               break;
 
        case LFUN_MOUSE_RELEASE:
                if (cmd.button() == mouse_button::button3 && hitButton(cmd)) {
-                       InsetBoxMailer(*this).showDialog(bv);
-                       return DispatchResult(true);
+                       InsetBoxMailer(*this).showDialog(&cur.bv());
+                       break;
+               }
+               InsetCollapsable::doDispatch(cur, cmd);
+               break;
+
+       default:
+               InsetCollapsable::doDispatch(cur, cmd);
+               break;
+       }
+}
+
+
+bool InsetBox::getStatus(LCursor & cur, FuncRequest const & cmd,
+               FuncStatus & flag) const
+{
+       switch (cmd.action) {
+
+       case LFUN_INSET_MODIFY:
+       case LFUN_INSET_DIALOG_UPDATE:
+               flag.enabled(true);
+               return true;
+       case LFUN_BREAKPARAGRAPH:
+               if (params_.inner_box) {
+                       return InsetCollapsable::getStatus(cur, cmd, flag);
+               } else {
+                       flag.enabled(false);
+                       return true;
                }
-               return InsetCollapsable::priv_dispatch(cmd, idx, pos);
 
        default:
-               return InsetCollapsable::priv_dispatch(cmd, idx, pos);
+               return InsetCollapsable::getStatus(cur, cmd, flag);
        }
 }
 
@@ -302,7 +326,7 @@ int InsetBox::latex(Buffer const & buf, ostream & os,
                i += 1;
        }
 
-       i += inset.latex(buf, os, runparams);
+       i += InsetText::latex(buf, os, runparams);
 
        if (params_.inner_box) {
                if (params_.use_parbox)
@@ -337,14 +361,14 @@ int InsetBox::latex(Buffer const & buf, ostream & os,
 int InsetBox::linuxdoc(Buffer const & buf, std::ostream & os,
                       OutputParams const & runparams) const
 {
-       return inset.linuxdoc(buf, os, runparams);
+       return InsetText::linuxdoc(buf, os, runparams);
 }
 
 
 int InsetBox::docbook(Buffer const & buf, std::ostream & os,
                      OutputParams const & runparams) const
 {
-       return inset.docbook(buf, os, runparams);
+       return InsetText::docbook(buf, os, runparams);
 }
 
 
@@ -362,7 +386,7 @@ int InsetBox::plaintext(Buffer const & buf, std::ostream & os,
                case Doublebox: os << "[["; break;
        }
 
-       int i = inset.plaintext(buf, os, runparams);
+       int i = InsetText::plaintext(buf, os, runparams);
 
        switch (btype) {
                case Frameless: break;
@@ -392,14 +416,13 @@ void InsetBox::validate(LaTeXFeatures & features) const
                features.require("fancybox");
                break;
        }
-       inset.validate(features);
+       InsetText::validate(features);
 }
 
 
 InsetBoxMailer::InsetBoxMailer(InsetBox & inset)
        : inset_(inset)
-{
-}
+{}
 
 
 string const InsetBoxMailer::name_ = "box";