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"
21 using namespace lyx::support;
26 FloatPlacement::FloatPlacement(QWidget *)
30 connect(topCB, SIGNAL(clicked()), this, SLOT(tbhpClicked()));
31 connect(bottomCB, SIGNAL(clicked()), this, SLOT(tbhpClicked()));
32 connect(pageCB, SIGNAL(clicked()), this, SLOT(tbhpClicked()));
33 connect(herepossiblyCB, SIGNAL(clicked()), this, SLOT(tbhpClicked()));
34 connect(defaultsCB, SIGNAL(clicked()), this, SLOT(tbhpClicked()));
35 connect(defaultsCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
36 connect(ignoreCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
37 connect(pageCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
38 connect(heredefinitelyCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
39 connect(herepossiblyCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
40 connect(bottomCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
41 connect(topCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
48 void FloatPlacement::useWide()
54 void FloatPlacement::useSideways()
60 void FloatPlacement::changedSlot()
67 void FloatPlacement::set(string const & placement)
69 bool def_placement = false;
75 bool here_definitely = false;
77 if (placement.empty()) {
79 } else if (contains(placement, 'H')) {
80 here_definitely = true;
82 if (contains(placement, '!')) {
85 if (contains(placement, 't')) {
88 if (contains(placement, 'b')) {
91 if (contains(placement, 'p')) {
94 if (contains(placement, 'h')) {
99 defaultsCB->setChecked(def_placement);
100 topCB->setChecked(top);
101 bottomCB->setChecked(bottom);
102 pageCB->setChecked(page);
103 herepossiblyCB->setChecked(here);
104 ignoreCB->setChecked(force);
105 ignoreCB->setEnabled(top || bottom || page || here);
106 heredefinitelyCB->setChecked(here_definitely);
111 void FloatPlacement::set(lyx::InsetFloatParams const & params)
113 set(params.placement);
116 herepossiblyCB->setChecked(false);
117 heredefinitelyCB->setChecked(false);
118 bottomCB->setChecked(false);
121 spanCB->setChecked(params.wide);
122 sidewaysCB->setChecked(params.sideways);
123 sidewaysCB->setEnabled(params.type == "figure"
124 || params.type == "table");
129 string const FloatPlacement::get(bool & wide, bool & sideways) const
131 wide = spanCB->isChecked();
132 sideways = sidewaysCB->isChecked();
138 string const FloatPlacement::get() const
142 if (defaultsCB->isChecked())
145 if (heredefinitelyCB->isChecked()) {
148 if (ignoreCB->isChecked()) {
151 if (topCB->isChecked()) {
154 if (bottomCB->isChecked()) {
157 if (pageCB->isChecked()) {
160 if (herepossiblyCB->isChecked()) {
168 void FloatPlacement::tbhpClicked()
170 heredefinitelyCB->setChecked(false);
175 void FloatPlacement::on_heredefinitelyCB_clicked()
177 if (heredefinitelyCB->isChecked())
178 ignoreCB->setEnabled(false);
180 topCB->setChecked(false);
181 bottomCB->setChecked(false);
182 pageCB->setChecked(false);
183 herepossiblyCB->setChecked(false);
184 ignoreCB->setChecked(false);
188 void FloatPlacement::on_spanCB_clicked()
193 if (!spanCB->isChecked())
196 herepossiblyCB->setChecked(false);
197 heredefinitelyCB->setChecked(false);
198 bottomCB->setChecked(false);
202 void FloatPlacement::on_sidewaysCB_clicked()
209 void FloatPlacement::checkAllowed()
211 bool const defaults = defaultsCB->isChecked();
212 bool ignore = topCB->isChecked();
213 ignore |= bottomCB->isChecked();
214 ignore |= pageCB->isChecked();
215 ignore |= herepossiblyCB->isChecked();
217 // float or document dialog?
218 if (spanCB->isVisible()) {
219 bool const span = spanCB->isChecked();
220 bool const sideways = sidewaysCB->isChecked();
221 defaultsCB->setEnabled(!sideways);
222 topCB->setEnabled(!sideways && !defaults);
223 bottomCB->setEnabled(!sideways && !defaults && !span);
224 pageCB->setEnabled(!sideways && !defaults);
225 ignoreCB->setEnabled(!sideways && !defaults && ignore);
226 herepossiblyCB->setEnabled(!sideways && !defaults && !span);
227 heredefinitelyCB->setEnabled(!sideways && !defaults && !span);
228 spanCB->setEnabled(!sideways);
230 topCB->setEnabled(!defaults);
231 bottomCB->setEnabled(!defaults);
232 pageCB->setEnabled(!defaults);
233 ignoreCB->setEnabled(!defaults && ignore);
234 herepossiblyCB->setEnabled(!defaults);
235 heredefinitelyCB->setEnabled(!defaults);
241 #include "FloatPlacement_moc.cpp"