]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/FloatPlacement.cpp
Improve wording (#10670)
[lyx.git] / src / frontends / qt4 / FloatPlacement.cpp
index 19d72cdb727ef7bf3d429ad91099235a16921e7d..59bdf62ec83a87ab6c4950fd003f7ae5e009a72d 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();
 }
 
@@ -242,20 +244,36 @@ void FloatPlacement::checkAllowed() const
        if (spanCB->isVisible()) {
                bool const span = spanCB->isChecked();
                bool const sideways = sidewaysCB->isChecked();
-               defaultsCB->setEnabled(!sideways);
                topCB->setEnabled(!sideways && !defaults && !heredefinitely
                                  && contains(allowed_placement_, 't'));
                bottomCB->setEnabled(!sideways && !defaults && !span && !heredefinitely
                                     && contains(allowed_placement_, 'b'));
                pageCB->setEnabled(!sideways && !defaults && !heredefinitely
                                   && contains(allowed_placement_, 'p'));
-               herepossiblyCB->setEnabled(!sideways && !defaults && !span && !heredefinitely
+               if (!pageCB->isChecked())
+                       pageCB->setChecked(sideways && contains(allowed_placement_, 'p'));
+               herepossiblyCB->setEnabled(!defaults && !span && !heredefinitely
                                           && contains(allowed_placement_, 'h'));
-               heredefinitelyCB->setEnabled(!sideways && !defaults && !span
+               heredefinitelyCB->setEnabled(!defaults && !span
                                             && contains(allowed_placement_, 'H'));
-               ignoreCB->setEnabled(!sideways && !defaults && ignore && !heredefinitely
+               ignoreCB->setEnabled(!defaults && ignore && !heredefinitely
                                     && contains(allowed_placement_, '!'));
-               spanCB->setEnabled(!sideways || standardfloat_);
+               // handle special case with sideways
+               if ((!herepossiblyCB->isChecked() && sideways) || (span && sideways))
+                       ignoreCB->setEnabled(false);
+               // when disabled the options must be unchecked to avoid strange LaTeX export
+               // don't do it for pageCB because this case is handled with sideways
+               if (ignoreCB->isChecked() && !ignoreCB->isEnabled())
+                       ignoreCB->setChecked(false);
+               if (herepossiblyCB->isChecked() && !herepossiblyCB->isEnabled())
+                       herepossiblyCB->setChecked(false);
+               if (topCB->isChecked() && !topCB->isEnabled())
+                       topCB->setChecked(false);
+               if (bottomCB->isChecked() && !bottomCB->isEnabled())
+                       bottomCB->setChecked(false);
+               spanCB->setEnabled(allows_wide_ && (!sideways || standardfloat_));
+               sidewaysCB->setEnabled(allows_sideways_);
+               defaultsCB->setEnabled(!(sideways && span));
        } else {
                topCB->setEnabled(!defaults && !heredefinitely);
                bottomCB->setEnabled(!defaults && !heredefinitely);