2 * \file FormParagraph.C
3 * Copyright 2001 the LyX Team
4 * Read the file COPYING
14 #include "FormParagraph.h"
18 #include "QtLyXView.h"
22 using Liason::setMinibuffer;
25 FormParagraph::FormParagraph(LyXView *v, Dialogs *d)
26 : dialog_(0), lv_(v), d_(d), h_(0)
28 d->showLayoutParagraph.connect(slot(this, &FormParagraph::show));
32 FormParagraph::~FormParagraph()
38 void FormParagraph::update(bool switched)
45 if (!lv_->view()->available())
48 Buffer *buf = lv_->view()->buffer();
50 if (readonly != buf->isReadonly()) {
51 readonly = buf->isReadonly();
52 dialog_->setReadOnly(readonly);
57 if (lv_->view()->theLockingInset())
58 text = lv_->view()->theLockingInset()->getLyXText(lv_->view());
61 text = lv_->view()->text;
63 LyXParagraph const * par = text->cursor.par();
65 int align = par->GetAlign();
67 if (align==LYX_ALIGN_LAYOUT)
68 align = textclasslist.Style(buf->params.textclass, par->GetLayout()).align;
71 LyXParagraph const * physpar = par->FirstPhysicalPar();
73 LyXParagraph const * physpar = par;
76 if (physpar->params.spaceTop().kind() == VSpace::LENGTH) {
77 LyXGlueLength above = physpar->params.spaceTop().length();
78 lyxerr[Debug::GUI] << "Reading above space : \""
79 << physpar->params.spaceTop().length().asString() << "\"" << endl;
81 dialog_->setAboveLength(above.value(), above.plusValue(), above.minusValue(),
82 above.unit(), above.plusUnit(), above.minusUnit());
84 dialog_->setAboveLength(0.0, 0.0, 0.0, LyXLength::UNIT_NONE, LyXLength::UNIT_NONE, LyXLength::UNIT_NONE);
86 if (physpar->params.spaceBottom().kind() == VSpace::LENGTH) {
87 LyXGlueLength below = physpar->params.spaceBottom().length();
88 lyxerr[Debug::GUI] << "Reading below space : \""
89 << physpar->params.spaceBottom().length().asString() << "\"" << endl;
91 dialog_->setBelowLength(below.value(), below.plusValue(), below.minusValue(),
92 below.unit(), below.plusUnit(), below.minusUnit());
94 dialog_->setBelowLength(0.0, 0.0, 0.0, LyXLength::UNIT_NONE, LyXLength::UNIT_NONE, LyXLength::UNIT_NONE);
96 dialog_->setLabelWidth(text->cursor.par()->GetLabelWidthString().c_str());
97 dialog_->setAlign(align);
99 dialog_->setChecks(physpar->params.lineTop(),
100 physpar->params.lineBottom(),
101 physpar->params.pagebreakTop(),
102 physpar->params.pagebreakBottom(),
103 physpar->params.noindent());
105 dialog_->setSpace(physpar->params.spaceTop().kind(),
106 physpar->params.spaceBottom().kind(),
107 physpar->params.spaceTop().keep(),
108 physpar->params.spaceBottom().keep());
110 // now the extras page
112 LyXLength extrawidth;
114 LyXLength::UNIT unit = LyXLength::CM;
116 if (isValidLength(par->params.pextraWidth(), &extrawidth)) {
117 lyxerr[Debug::GUI] << "Reading extra width \"" << extrawidth.asString() << "\"" << endl;
118 val = extrawidth.value();
119 unit = extrawidth.unit();
122 lyxerr[Debug::GUI] << "Reading widthp \"" << par->params.pextraWidthp() << "\"" << endl;
124 dialog_->setExtra(val, unit, par->params.pextraWidthp(),
125 par->params.pextraAlignment(),
126 par->params.pextraHfill(),
127 par->params.pextraStartMinipage(),
128 static_cast<LyXParagraph::PEXTRA_TYPE>
129 (par->params.pextraType()));
133 void FormParagraph::apply()
141 if (dialog_->getSpaceAboveKind() == VSpace::LENGTH)
142 spaceabove = VSpace(dialog_->getAboveLength());
144 spaceabove = VSpace(dialog_->getSpaceAboveKind());
146 if (dialog_->getSpaceBelowKind() == VSpace::LENGTH)
147 spacebelow = VSpace(dialog_->getBelowLength());
149 spacebelow = VSpace(dialog_->getSpaceBelowKind());
151 spaceabove.setKeep(dialog_->getAboveKeep());
152 spacebelow.setKeep(dialog_->getBelowKeep());
154 lyxerr[Debug::GUI] << "Setting above space \""
155 << LyXGlueLength(spaceabove.length().asString()).asString() << "\"" << endl;
156 lyxerr[Debug::GUI] << "Setting below space \""
157 << LyXGlueLength(spacebelow.length().asString()).asString() << "\"" << endl;
159 lv_->view()->text->SetParagraph(lv_->view(),
160 dialog_->getLineAbove(), dialog_->getLineBelow(),
161 dialog_->getPagebreakAbove(), dialog_->getPagebreakBelow(),
162 spaceabove, spacebelow, dialog_->getAlign(),
163 dialog_->getLabelWidth(), dialog_->getNoIndent());
170 LyXLength extrawidth(dialog_->getExtraWidth());
171 if (extrawidth.unit() == LyXLength::UNIT_NONE) {
172 widthp = dialog_->getExtraWidthPercent();
174 width = extrawidth.asString();
176 lyxerr[Debug::GUI] << "Setting extrawidth \"" << width << "\"" << endl;
177 lyxerr[Debug::GUI] << "Setting percent extrawidth \"" << widthp << "\"" << endl;
180 lv_->view()->text->SetParagraphExtraOpt(lv_->view(),
181 dialog_->getExtraType(), width, widthp,
182 dialog_->getExtraAlign(),
183 dialog_->getHfillBetween(),
184 dialog_->getStartNewMinipage());
187 lv_->view()->update(lv_->view()->text,
191 lv_->buffer()->markDirty();
192 setMinibuffer(lv_, _("Paragraph layout set"));
196 void FormParagraph::show()
199 dialog_ = new ParaDialog(this, 0, _("LyX: Paragraph Options"), false);
201 if (!dialog_->isVisible())
202 h_ = d_->hideBufferDependent.connect(slot(this, &FormParagraph::hide));
205 dialog_->setActiveWindow();
212 void FormParagraph::close()
218 void FormParagraph::hide()