2 * \file floatplacement.C
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
9 * Full author contact details are available in file CREDITS.
14 #include "FloatPlacement.h"
15 #include "qt_helpers.h"
17 #include "insets/insetfloat.h"
18 #include "support/lstrings.h"
20 using lyx::support::contains;
23 FloatPlacement::FloatPlacement(QWidget *)
27 connect(topCB, SIGNAL(clicked()), this, SLOT(tbhpClicked()));
28 connect(bottomCB, SIGNAL(clicked()), this, SLOT(tbhpClicked()));
29 connect(pageCB, SIGNAL(clicked()), this, SLOT(tbhpClicked()));
30 connect(herepossiblyCB, SIGNAL(clicked()), this, SLOT(tbhpClicked()));
31 connect(defaultsCB, SIGNAL(clicked()), this, SLOT(tbhpClicked()));
33 connect(defaultsCB, SIGNAL(toggled(bool)), this, SLOT(changedSlot()));
34 connect(ignoreCB, SIGNAL(toggled(bool)), this, SLOT(changedSlot()));
35 connect(pageCB, SIGNAL(toggled(bool)), this, SLOT(changedSlot()));
36 connect(heredefinitelyCB, SIGNAL(toggled(bool)), this, SLOT(changedSlot()));
37 connect(herepossiblyCB, SIGNAL(toggled(bool)), this, SLOT(changedSlot()));
38 connect(bottomCB, SIGNAL(toggled(bool)), this, SLOT(changedSlot()));
39 connect(topCB, SIGNAL(toggled(bool)), this, SLOT(changedSlot()));
46 FloatPlacement::~FloatPlacement()
51 void FloatPlacement::useWide()
57 void FloatPlacement::useSideways()
63 void FloatPlacement::changedSlot()
70 void FloatPlacement::set(string const & placement)
72 bool def_placement = false;
78 bool here_definitely = false;
80 if (placement.empty()) {
82 } else if (contains(placement, 'H')) {
83 here_definitely = true;
85 if (contains(placement, '!')) {
88 if (contains(placement, 't')) {
91 if (contains(placement, 'b')) {
94 if (contains(placement, 'p')) {
97 if (contains(placement, 'h')) {
102 defaultsCB->setChecked(def_placement);
103 topCB->setChecked(top);
104 bottomCB->setChecked(bottom);
105 pageCB->setChecked(page);
106 herepossiblyCB->setChecked(here);
107 ignoreCB->setChecked(force);
108 ignoreCB->setEnabled(top || bottom || page || here);
109 heredefinitelyCB->setChecked(here_definitely);
114 void FloatPlacement::set(InsetFloatParams const & params)
116 set(params.placement);
119 herepossiblyCB->setChecked(false);
120 heredefinitelyCB->setChecked(false);
121 bottomCB->setChecked(false);
124 spanCB->setChecked(params.wide);
125 sidewaysCB->setChecked(params.sideways);
126 sidewaysCB->setEnabled(params.type == "figure"
127 || params.type == "table");
132 string const FloatPlacement::get(bool & wide, bool & sideways) const
134 wide = spanCB->isChecked();
135 sideways = sidewaysCB->isChecked();
141 string const FloatPlacement::get() const
145 if (defaultsCB->isChecked())
148 if (heredefinitelyCB->isChecked()) {
151 if (ignoreCB->isChecked()) {
154 if (topCB->isChecked()) {
157 if (bottomCB->isChecked()) {
160 if (pageCB->isChecked()) {
163 if (herepossiblyCB->isChecked()) {
171 void FloatPlacement::tbhpClicked()
173 heredefinitelyCB->setChecked(false);
178 void FloatPlacement::on_heredefinitelyCB_clicked()
180 if (heredefinitelyCB->isChecked())
181 ignoreCB->setEnabled(false);
183 topCB->setChecked(false);
184 bottomCB->setChecked(false);
185 pageCB->setChecked(false);
186 herepossiblyCB->setChecked(false);
187 ignoreCB->setChecked(false);
191 void FloatPlacement::on_spanCB_clicked()
195 if (!spanCB->isChecked())
198 herepossiblyCB->setChecked(false);
199 heredefinitelyCB->setChecked(false);
200 bottomCB->setChecked(false);
204 void FloatPlacement::on_sidewaysCB_clicked()
210 void FloatPlacement::checkAllowed()
212 bool const defaults(defaultsCB->isChecked());
213 bool ignore(topCB->isChecked());
214 ignore |= bottomCB->isChecked();
215 ignore |= pageCB->isChecked();
216 ignore |= herepossiblyCB->isChecked();
218 // float or document dialog?
219 if (spanCB->isVisible()) {
220 bool const span(spanCB->isChecked());
221 bool const sideways(sidewaysCB->isChecked());
222 defaultsCB->setEnabled(!sideways);
223 topCB->setEnabled(!sideways && !defaults);
224 bottomCB->setEnabled(!sideways && !defaults && !span);
225 pageCB->setEnabled(!sideways && !defaults);
226 ignoreCB->setEnabled(!sideways && !defaults && ignore);
227 herepossiblyCB->setEnabled(!sideways && !defaults && !span);
228 heredefinitelyCB->setEnabled(!sideways && !defaults && !span);
229 spanCB->setEnabled(!sideways);
231 topCB->setEnabled(!defaults);
232 bottomCB->setEnabled(!defaults);
233 pageCB->setEnabled(!defaults);
234 ignoreCB->setEnabled(!defaults && ignore);
235 herepossiblyCB->setEnabled(!defaults);
236 heredefinitelyCB->setEnabled(!defaults);
241 #include "FloatPlacement_moc.cpp"