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 "ControlWrap.h"
16 #include "LengthCombo.h"
17 #include "qt_helpers.h"
18 #include "Validator.h"
20 #include "insets/InsetWrap.h"
22 #include "support/lstrings.h"
25 #include <QCloseEvent>
26 #include <QPushButton>
34 GuiWrapDialog::GuiWrapDialog(LyXView & lv)
35 : GuiDialog(lv, "wrap")
38 setViewTitle(_("Wrap Float Settings"));
39 setController(new ControlWrap(*this));
41 connect(restorePB, SIGNAL(clicked()), this, SLOT(slotRestore()));
42 connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK()));
43 connect(applyPB, SIGNAL(clicked()), this, SLOT(slotApply()));
44 connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose()));
46 connect(widthED, SIGNAL(textChanged(const QString &)),
47 this, SLOT(change_adaptor()));
48 connect(widthUnitLC, SIGNAL(selectionChanged(lyx::Length::UNIT)),
49 this, SLOT(change_adaptor()));
50 connect(valignCO, SIGNAL(highlighted(const QString &)),
51 this, SLOT(change_adaptor()));
52 connect(overhangCB, SIGNAL(stateChanged(int)),
53 this, SLOT(change_adaptor()));
54 connect(overhangED, SIGNAL(textChanged(const QString &)),
55 this, SLOT(change_adaptor()));
56 connect(overhangUnitLC, SIGNAL(selectionChanged(lyx::Length::UNIT)),
57 this, SLOT(change_adaptor()));
58 connect(linesCB, SIGNAL(stateChanged(int)),
59 this, SLOT(change_adaptor()));
60 connect(linesSB, SIGNAL(valueChanged(int)),
61 this, SLOT(change_adaptor()));
63 connect(overhangCB, SIGNAL(stateChanged(int)), this, SLOT(overhangChecked(int)));
64 connect(linesCB, SIGNAL(stateChanged(int)), this, SLOT(linesChecked(int)));
66 widthED->setValidator(unsignedLengthValidator(widthED));
68 // overhang can be negative, but the unsignedLengthValidator allows this
69 overhangED->setValidator(unsignedLengthValidator(overhangED));
71 bc().setPolicy(ButtonPolicy::NoRepeatedApplyReadOnlyPolicy);
72 bc().setRestore(restorePB);
74 bc().setApply(applyPB);
75 bc().setCancel(closePB);
77 bc().addReadOnly(widthED);
78 bc().addReadOnly(widthUnitLC);
79 bc().addReadOnly(valignCO);
80 bc().addReadOnly(overhangCB);
81 bc().addReadOnly(overhangED);
82 bc().addReadOnly(overhangUnitLC);
83 bc().addReadOnly(linesCB);
84 bc().addReadOnly(linesSB);
86 // initialize the length validator
87 bc().addCheckedLineEdit(widthED, widthLA);
88 bc().addCheckedLineEdit(overhangED, overhangCB);
92 ControlWrap & GuiWrapDialog::controller()
94 return static_cast<ControlWrap &>(GuiDialog::controller());
98 void GuiWrapDialog::closeEvent(QCloseEvent * e)
105 void GuiWrapDialog::change_adaptor()
111 void GuiWrapDialog::overhangChecked(int checkState)
113 if (checkState == Qt::Checked) {
114 overhangED->setEnabled(true);
115 overhangUnitLC->setEnabled(true);
117 overhangED->setEnabled(false);
118 overhangUnitLC->setEnabled(false);
122 void GuiWrapDialog::linesChecked(int checkState)
124 if (checkState == Qt::Checked)
125 linesSB->setEnabled(true);
127 linesSB->setEnabled(false);
131 void GuiWrapDialog::applyView()
133 double const width_value = widthED->text().toDouble();
134 Length::UNIT widthUnit = widthUnitLC->currentLengthItem();
135 if (widthED->text().isEmpty())
136 widthUnit = Length::UNIT_NONE;
137 double const overhang_value = overhangED->text().toDouble();
138 Length::UNIT overhangUnit = overhangUnitLC->currentLengthItem();
139 if (overhangED->text().isEmpty())
140 overhangUnit = Length::UNIT_NONE;
142 InsetWrapParams & params = controller().params();
144 params.width = Length(width_value, widthUnit);
146 if (overhangCB->checkState() == Qt::Checked)
147 params.overhang = Length(overhang_value, overhangUnit);
149 // when value is "0" the option is not set in the LaTeX-output
151 params.overhang = Length("0in");
153 if (linesCB->checkState() == Qt::Checked)
154 params.lines = linesSB->value();
156 // when value is "0" the option is not set in the LaTeX-output
160 switch (valignCO->currentIndex()) {
162 params.placement = "o";
165 params.placement = "i";
168 params.placement = "l";
171 params.placement = "r";
177 void GuiWrapDialog::updateContents()
179 InsetWrapParams & params = controller().params();
181 //0pt is a legal width now, it yields a
182 //wrapfloat just wide enough for the contents.
183 Length len_w(params.width);
184 widthED->setText(QString::number(len_w.value()));
185 widthUnitLC->setCurrentItem(len_w.unit());
187 Length len_o(params.overhang);
188 overhangED->setText(QString::number(len_o.value()));
189 overhangUnitLC->setCurrentItem(len_o.unit());
190 if (len_o.value() == 0)
191 overhangCB->setCheckState(Qt::Unchecked);
193 overhangCB->setCheckState(Qt::Checked);
195 linesSB->setValue(params.lines);
196 if (params.lines == 0)
197 linesCB->setCheckState(Qt::Unchecked);
199 linesCB->setCheckState(Qt::Checked);
202 if (params.placement == "i")
204 else if (params.placement == "l")
206 else if (params.placement == "r")
209 valignCO->setCurrentIndex(item);
212 } // namespace frontend
216 #include "GuiWrap_moc.cpp"