3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author Jürgen Spitzmüller
8 * Full author contact details are available in file CREDITS.
15 #include "LengthCombo.h"
16 #include "qt_helpers.h"
17 #include "Validator.h"
18 #include "FuncRequest.h"
20 #include "insets/InsetWrap.h"
22 #include "support/gettext.h"
23 #include "support/lstrings.h"
26 #include <QPushButton>
33 GuiWrap::GuiWrap(GuiView & lv)
34 : GuiDialog(lv, "wrap", qt_("Wrap Float Settings"))
38 connect(restorePB, SIGNAL(clicked()), this, SLOT(slotRestore()));
39 connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK()));
40 connect(applyPB, SIGNAL(clicked()), this, SLOT(slotApply()));
41 connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose()));
43 connect(valignCO, SIGNAL(highlighted(QString)),
44 this, SLOT(change_adaptor()));
45 connect(floatCB, SIGNAL(stateChanged(int)),
46 this, SLOT(change_adaptor()));
47 connect(widthED, SIGNAL(textChanged(QString)),
48 this, SLOT(change_adaptor()));
49 connect(widthUnitLC, SIGNAL(selectionChanged(lyx::Length::UNIT)),
50 this, SLOT(change_adaptor()));
51 connect(overhangCB, SIGNAL(stateChanged(int)),
52 this, SLOT(change_adaptor()));
53 connect(overhangED, SIGNAL(textChanged(QString)),
54 this, SLOT(change_adaptor()));
55 connect(overhangUnitLC, SIGNAL(selectionChanged(lyx::Length::UNIT)),
56 this, SLOT(change_adaptor()));
57 connect(linesCB, SIGNAL(stateChanged(int)),
58 this, SLOT(change_adaptor()));
59 connect(linesSB, SIGNAL(valueChanged(int)),
60 this, SLOT(change_adaptor()));
62 widthED->setValidator(unsignedLengthValidator(widthED));
64 // overhang can be negative, but the unsignedLengthValidator allows this
65 overhangED->setValidator(unsignedLengthValidator(overhangED));
67 bc().setPolicy(ButtonPolicy::NoRepeatedApplyReadOnlyPolicy);
68 bc().setRestore(restorePB);
70 bc().setApply(applyPB);
71 bc().setCancel(closePB);
73 bc().addReadOnly(valignCO);
74 bc().addReadOnly(floatCB);
75 bc().addReadOnly(widthED);
76 bc().addReadOnly(widthUnitLC);
77 bc().addReadOnly(overhangCB);
78 bc().addReadOnly(overhangED);
79 bc().addReadOnly(overhangUnitLC);
80 bc().addReadOnly(linesCB);
81 bc().addReadOnly(linesSB);
83 // initialize the length validator
84 bc().addCheckedLineEdit(widthED, widthLA);
85 bc().addCheckedLineEdit(overhangED, overhangCB);
89 void GuiWrap::change_adaptor()
95 void GuiWrap::applyView()
97 double const width_value = widthED->text().toDouble();
98 Length::UNIT widthUnit = widthUnitLC->currentLengthItem();
99 if (widthED->text().isEmpty())
100 widthUnit = Length::UNIT_NONE;
101 double const overhang_value = overhangED->text().toDouble();
102 Length::UNIT overhangUnit = overhangUnitLC->currentLengthItem();
103 if (overhangED->text().isEmpty())
104 overhangUnit = Length::UNIT_NONE;
106 params_.width = Length(width_value, widthUnit);
108 if (overhangCB->checkState() == Qt::Checked)
109 params_.overhang = Length(overhang_value, overhangUnit);
111 // when value is "0" the option is not set in the LaTeX-output
113 params_.overhang = Length("0in");
115 if (linesCB->checkState() == Qt::Checked)
116 params_.lines = linesSB->value();
118 // when value is "0" the option is not set in the LaTeX-output
122 bool floatOn = false;
123 if (floatCB->checkState() == Qt::Checked)
125 switch (valignCO->currentIndex()) {
128 params_.placement = "O";
130 params_.placement = "o";
134 params_.placement = "I";
136 params_.placement = "i";
140 params_.placement = "L";
142 params_.placement = "l";
146 params_.placement = "R";
148 params_.placement = "r";
154 void GuiWrap::updateContents()
156 // 0pt is a legal width now, it yields a
157 // wrapfloat just wide enough for the contents.
158 Length len_w = params_.width;
159 widthED->setText(QString::number(len_w.value()));
160 widthUnitLC->setCurrentItem(len_w.unit());
162 Length len_o(params_.overhang);
163 overhangED->setText(QString::number(len_o.value()));
164 overhangUnitLC->setCurrentItem(len_o.unit());
165 if (len_o.value() == 0)
166 overhangCB->setCheckState(Qt::Unchecked);
168 overhangCB->setCheckState(Qt::Checked);
170 linesSB->setValue(params_.lines);
171 if (params_.lines == 0)
172 linesCB->setCheckState(Qt::Unchecked);
174 linesCB->setCheckState(Qt::Checked);
177 if (params_.placement == "i" || params_.placement == "I")
179 else if (params_.placement == "l" || params_.placement == "L")
181 else if (params_.placement == "r" || params_.placement == "R")
184 valignCO->setCurrentIndex(item);
186 if (params_.placement == "O" || params_.placement == "I"
187 || params_.placement == "L" || params_.placement == "R")
188 floatCB->setCheckState(Qt::Checked);
192 bool GuiWrap::initialiseParams(string const & data)
194 InsetWrapMailer::string2params(data, params_);
199 void GuiWrap::clearParams()
201 params_ = InsetWrapParams();
205 void GuiWrap::dispatchParams()
207 string const lfun = InsetWrapMailer::params2string(params_);
208 dispatch(FuncRequest(getLfun(), lfun));
212 Dialog * createGuiWrap(GuiView & lv) { return new GuiWrap(lv); }
215 } // namespace frontend
219 #include "GuiWrap_moc.cpp"