]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/FloatPlacement.cpp
Fix dangling inset pointers after buffer reload
[lyx.git] / src / frontends / qt4 / FloatPlacement.cpp
index 19d72cdb727ef7bf3d429ad91099235a16921e7d..b446c7c057057c6e4877d09835c560a6364d37b4 100644 (file)
@@ -33,7 +33,8 @@ namespace lyx {
 namespace frontend {
 
 FloatPlacement::FloatPlacement(bool show_options, QWidget * parent)
-       : InsetParamsWidget(parent), float_list_(0)
+       : InsetParamsWidget(parent), standardfloat_ (true),
+         allows_wide_(true), allows_sideways_(true), float_list_(0)
 {
        setupUi(this);
 
@@ -146,13 +147,15 @@ void FloatPlacement::paramsToDialog(Inset const * inset)
        InsetFloatParams const & params = fl->params();
 
        BufferParams const & bp = fl->buffer().params();
-       initFloatTypeCO(bp.documentClass().floats());
+       FloatList const & floats = bp.documentClass().floats();
+       initFloatTypeCO(floats);
 
        int const item = floatTypeCO->findData(toqstr(params.type));
        floatTypeCO->setCurrentIndex(item);
 
-       allowed_placement_ =
-               bp.documentClass().floats().allowedPlacement(params.type);
+       allowed_placement_ = floats.allowedPlacement(params.type);
+       allows_sideways_ = floats.allowsSideways(params.type);
+       allows_wide_ = floats.allowsWide(params.type);
 
        set(params.placement);
 
@@ -165,10 +168,9 @@ void FloatPlacement::paramsToDialog(Inset const * inset)
                bottomCB->setChecked(false);
        }
 
-       spanCB->setChecked(params.wide);
-       sidewaysCB->setChecked(params.sideways);
-       // the package rotfloat only has *-versions for figure and table
-       spanCB->setEnabled(!params.sideways || standardfloat_);
+       spanCB->setChecked(params.wide && allows_wide_);
+       sidewaysCB->setChecked(params.sideways && allows_sideways_);
+
        checkAllowed();
 }
 
@@ -255,7 +257,8 @@ void FloatPlacement::checkAllowed() const
                                             && contains(allowed_placement_, 'H'));
                ignoreCB->setEnabled(!sideways && !defaults && ignore && !heredefinitely
                                     && contains(allowed_placement_, '!'));
-               spanCB->setEnabled(!sideways || standardfloat_);
+               spanCB->setEnabled(allows_wide_ && (!sideways || standardfloat_));
+               sidewaysCB->setEnabled(allows_sideways_);
        } else {
                topCB->setEnabled(!defaults && !heredefinitely);
                bottomCB->setEnabled(!defaults && !heredefinitely);