2 * \file FloatPlacement.cpp
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
);
115 standardfloat_
= (params
.type
== "figure"
116 || params
.type
== "table");
119 herepossiblyCB
->setChecked(false);
120 heredefinitelyCB
->setChecked(false);
121 bottomCB
->setChecked(false);
124 spanCB
->setChecked(params
.wide
);
125 sidewaysCB
->setChecked(params
.sideways
);
126 // the package rotfloat only has *-versions for figure and table
127 spanCB
->setEnabled(!params
.sideways
|| standardfloat_
);
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()
196 if (!spanCB
->isChecked())
199 herepossiblyCB
->setChecked(false);
200 heredefinitelyCB
->setChecked(false);
201 bottomCB
->setChecked(false);
205 void FloatPlacement::on_sidewaysCB_clicked()
212 void FloatPlacement::checkAllowed()
214 bool const defaults
= defaultsCB
->isChecked();
215 bool ignore
= topCB
->isChecked();
216 ignore
|= bottomCB
->isChecked();
217 ignore
|= pageCB
->isChecked();
218 ignore
|= herepossiblyCB
->isChecked();
220 // float or document dialog?
221 if (spanCB
->isVisible()) {
222 bool const span
= spanCB
->isChecked();
223 bool const sideways
= sidewaysCB
->isChecked();
224 defaultsCB
->setEnabled(!sideways
);
225 topCB
->setEnabled(!sideways
&& !defaults
);
226 bottomCB
->setEnabled(!sideways
&& !defaults
&& !span
);
227 pageCB
->setEnabled(!sideways
&& !defaults
);
228 ignoreCB
->setEnabled(!sideways
&& !defaults
&& ignore
);
229 herepossiblyCB
->setEnabled(!sideways
&& !defaults
&& !span
);
230 heredefinitelyCB
->setEnabled(!sideways
&& !defaults
&& !span
);
231 spanCB
->setEnabled(!sideways
|| standardfloat_
);
233 topCB
->setEnabled(!defaults
);
234 bottomCB
->setEnabled(!defaults
);
235 pageCB
->setEnabled(!defaults
);
236 ignoreCB
->setEnabled(!defaults
&& ignore
);
237 herepossiblyCB
->setEnabled(!defaults
);
238 heredefinitelyCB
->setEnabled(!defaults
);
244 #include "moc_FloatPlacement.cpp"