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;
25 FloatPlacement::FloatPlacement(QWidget *)
29 connect(topCB, SIGNAL(clicked()), this, SLOT(tbhpClicked()));
30 connect(bottomCB, SIGNAL(clicked()), this, SLOT(tbhpClicked()));
31 connect(pageCB, SIGNAL(clicked()), this, SLOT(tbhpClicked()));
32 connect(herepossiblyCB, SIGNAL(clicked()), this, SLOT(tbhpClicked()));
33 connect(defaultsCB, SIGNAL(clicked()), this, SLOT(tbhpClicked()));
34 connect(defaultsCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
35 connect(ignoreCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
36 connect(pageCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
37 connect(heredefinitelyCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
38 connect(herepossiblyCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
39 connect(bottomCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
40 connect(topCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
47 void FloatPlacement::useWide()
53 void FloatPlacement::useSideways()
59 void FloatPlacement::changedSlot()
66 void FloatPlacement::set(string const & placement)
68 bool def_placement = false;
74 bool here_definitely = false;
76 if (placement.empty()) {
78 } else if (contains(placement, 'H')) {
79 here_definitely = true;
81 if (contains(placement, '!')) {
84 if (contains(placement, 't')) {
87 if (contains(placement, 'b')) {
90 if (contains(placement, 'p')) {
93 if (contains(placement, 'h')) {
98 defaultsCB->setChecked(def_placement);
99 topCB->setChecked(top);
100 bottomCB->setChecked(bottom);
101 pageCB->setChecked(page);
102 herepossiblyCB->setChecked(here);
103 ignoreCB->setChecked(force);
104 ignoreCB->setEnabled(top || bottom || page || here);
105 heredefinitelyCB->setChecked(here_definitely);
110 void FloatPlacement::set(lyx::InsetFloatParams const & params)
112 set(params.placement);
115 herepossiblyCB->setChecked(false);
116 heredefinitelyCB->setChecked(false);
117 bottomCB->setChecked(false);
120 spanCB->setChecked(params.wide);
121 sidewaysCB->setChecked(params.sideways);
122 sidewaysCB->setEnabled(params.type == "figure"
123 || params.type == "table");
128 string const FloatPlacement::get(bool & wide, bool & sideways) const
130 wide = spanCB->isChecked();
131 sideways = sidewaysCB->isChecked();
137 string const FloatPlacement::get() const
141 if (defaultsCB->isChecked())
144 if (heredefinitelyCB->isChecked()) {
147 if (ignoreCB->isChecked()) {
150 if (topCB->isChecked()) {
153 if (bottomCB->isChecked()) {
156 if (pageCB->isChecked()) {
159 if (herepossiblyCB->isChecked()) {
167 void FloatPlacement::tbhpClicked()
169 heredefinitelyCB->setChecked(false);
174 void FloatPlacement::on_heredefinitelyCB_clicked()
176 if (heredefinitelyCB->isChecked())
177 ignoreCB->setEnabled(false);
179 topCB->setChecked(false);
180 bottomCB->setChecked(false);
181 pageCB->setChecked(false);
182 herepossiblyCB->setChecked(false);
183 ignoreCB->setChecked(false);
187 void FloatPlacement::on_spanCB_clicked()
192 if (!spanCB->isChecked())
195 herepossiblyCB->setChecked(false);
196 heredefinitelyCB->setChecked(false);
197 bottomCB->setChecked(false);
201 void FloatPlacement::on_sidewaysCB_clicked()
208 void FloatPlacement::checkAllowed()
210 bool const defaults = defaultsCB->isChecked();
211 bool ignore = topCB->isChecked();
212 ignore |= bottomCB->isChecked();
213 ignore |= pageCB->isChecked();
214 ignore |= herepossiblyCB->isChecked();
216 // float or document dialog?
217 if (spanCB->isVisible()) {
218 bool const span = spanCB->isChecked();
219 bool const sideways = sidewaysCB->isChecked();
220 defaultsCB->setEnabled(!sideways);
221 topCB->setEnabled(!sideways && !defaults);
222 bottomCB->setEnabled(!sideways && !defaults && !span);
223 pageCB->setEnabled(!sideways && !defaults);
224 ignoreCB->setEnabled(!sideways && !defaults && ignore);
225 herepossiblyCB->setEnabled(!sideways && !defaults && !span);
226 heredefinitelyCB->setEnabled(!sideways && !defaults && !span);
227 spanCB->setEnabled(!sideways);
229 topCB->setEnabled(!defaults);
230 bottomCB->setEnabled(!defaults);
231 pageCB->setEnabled(!defaults);
232 ignoreCB->setEnabled(!defaults && ignore);
233 herepossiblyCB->setEnabled(!defaults);
234 heredefinitelyCB->setEnabled(!defaults);
240 #include "FloatPlacement_moc.cpp"