]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/FloatPlacement.cpp
'using namespace std' instead of 'using std::xxx'
[lyx.git] / src / frontends / qt4 / FloatPlacement.cpp
1 /**
2  * \file floatplacement.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Edwin Leuven
7  * \author John Levon
8  *
9  * Full author contact details are available in file CREDITS.
10  */
11
12 #include <config.h>
13
14 #include "FloatPlacement.h"
15 #include "qt_helpers.h"
16
17 #include "insets/InsetFloat.h"
18 #include "support/lstrings.h"
19
20 using namespace std;
21
22 using lyx::support::contains;
23
24 //namespace lyx {
25
26 FloatPlacement::FloatPlacement(QWidget *)
27 {
28         setupUi(this);
29
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()));
42
43         spanCB->hide();
44         sidewaysCB->hide();
45 }
46
47
48 void FloatPlacement::useWide()
49 {
50         spanCB->show();
51 }
52
53
54 void FloatPlacement::useSideways()
55 {
56         sidewaysCB->show();
57 }
58
59
60 void FloatPlacement::changedSlot()
61 {
62         // emit signal
63         changed();
64 }
65
66
67 void FloatPlacement::set(string const & placement)
68 {
69         bool def_placement = false;
70         bool top = false;
71         bool bottom = false;
72         bool page = false;
73         bool here = false;
74         bool force = false;
75         bool here_definitely = false;
76
77         if (placement.empty()) {
78                 def_placement = true;
79         } else if (contains(placement, 'H')) {
80                 here_definitely = true;
81         } else {
82                 if (contains(placement, '!')) {
83                         force = true;
84                 }
85                 if (contains(placement, 't')) {
86                         top = true;
87                 }
88                 if (contains(placement, 'b')) {
89                         bottom = true;
90                 }
91                 if (contains(placement, 'p')) {
92                         page = true;
93                 }
94                 if (contains(placement, 'h')) {
95                         here = true;
96                 }
97         }
98
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);
107         checkAllowed();
108 }
109
110
111 void FloatPlacement::set(lyx::InsetFloatParams const & params)
112 {
113         set(params.placement);
114
115         if (params.wide) {
116                 herepossiblyCB->setChecked(false);
117                 heredefinitelyCB->setChecked(false);
118                 bottomCB->setChecked(false);
119         }
120
121         spanCB->setChecked(params.wide);
122         sidewaysCB->setChecked(params.sideways);
123         sidewaysCB->setEnabled(params.type == "figure"
124                 || params.type == "table");
125         checkAllowed();
126 }
127
128
129 string const FloatPlacement::get(bool & wide, bool & sideways) const
130 {
131         wide = spanCB->isChecked();
132         sideways = sidewaysCB->isChecked();
133
134         return get();
135 }
136
137
138 string const FloatPlacement::get() const
139 {
140         string placement;
141
142         if (defaultsCB->isChecked())
143                 return placement;
144
145         if (heredefinitelyCB->isChecked()) {
146                 placement += 'H';
147         } else {
148                 if (ignoreCB->isChecked()) {
149                         placement += '!';
150                 }
151                 if (topCB->isChecked()) {
152                         placement += 't';
153                 }
154                 if (bottomCB->isChecked()) {
155                         placement += 'b';
156                 }
157                 if (pageCB->isChecked()) {
158                         placement += 'p';
159                 }
160                 if (herepossiblyCB->isChecked()) {
161                         placement += 'h';
162                 }
163         }
164         return placement;
165 }
166
167
168 void FloatPlacement::tbhpClicked()
169 {
170         heredefinitelyCB->setChecked(false);
171         checkAllowed();
172 }
173
174
175 void FloatPlacement::on_heredefinitelyCB_clicked()
176 {
177         if (heredefinitelyCB->isChecked())
178                 ignoreCB->setEnabled(false);
179
180         topCB->setChecked(false);
181         bottomCB->setChecked(false);
182         pageCB->setChecked(false);
183         herepossiblyCB->setChecked(false);
184         ignoreCB->setChecked(false);
185 }
186
187
188 void FloatPlacement::on_spanCB_clicked()
189 {
190         checkAllowed();
191         changed();
192
193         if (!spanCB->isChecked())
194                 return;
195
196         herepossiblyCB->setChecked(false);
197         heredefinitelyCB->setChecked(false);
198         bottomCB->setChecked(false);
199 }
200
201
202 void FloatPlacement::on_sidewaysCB_clicked()
203 {
204         checkAllowed();
205         changed();
206 }
207
208
209 void FloatPlacement::checkAllowed()
210 {
211         bool const defaults = defaultsCB->isChecked();
212         bool ignore = topCB->isChecked();
213         ignore |= bottomCB->isChecked();
214         ignore |= pageCB->isChecked();
215         ignore |= herepossiblyCB->isChecked();
216
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);
229         } else {
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);
236         }
237 }
238
239 //} // namespace lyx
240
241 #include "FloatPlacement_moc.cpp"