]> git.lyx.org Git - features.git/blob - src/frontends/kde/FormParagraph.C
b9525118ce59a2fd21da99019ad32550e2f949c1
[features.git] / src / frontends / kde / FormParagraph.C
1 /**
2  * \file FormParagraph.C
3  * Copyright 2001 the LyX Team
4  * Read the file COPYING
5  *
6  * \author John Levon
7  */
8
9 #include <config.h>
10
11 #include "paradlg.h"
12
13 #include "Dialogs.h"
14 #include "FormParagraph.h"
15 #include "Liason.h"
16 #include "gettext.h"
17 #include "buffer.h"
18 #include "QtLyXView.h"
19 #include "lyxtext.h"
20 #include "debug.h"
21
22 using Liason::setMinibuffer;
23 using std::endl;
24
25 FormParagraph::FormParagraph(LyXView *v, Dialogs *d)
26         : dialog_(0), lv_(v), d_(d), h_(0)
27 {
28         d->showLayoutParagraph.connect(slot(this, &FormParagraph::show));
29 }
30
31
32 FormParagraph::~FormParagraph()
33 {
34         delete dialog_;
35 }
36
37
38 void FormParagraph::update(bool switched)
39 {
40         if (switched) {
41                 hide();
42                 return;
43         }
44
45         if (!lv_->view()->available())
46                 return;
47
48         Buffer *buf = lv_->view()->buffer();
49         
50         if (readonly != buf->isReadonly()) {
51                 readonly = buf->isReadonly();
52                 dialog_->setReadOnly(readonly);
53         }
54
55         LyXText * text = 0;
56
57         if (lv_->view()->theLockingInset())
58                 text = lv_->view()->theLockingInset()->getLyXText(lv_->view());
59
60         if (!text)
61                 text = lv_->view()->text;
62
63         LyXParagraph const * par = text->cursor.par();
64
65         int align = par->GetAlign();
66         
67         if (align==LYX_ALIGN_LAYOUT)
68                 align = textclasslist.Style(buf->params.textclass, par->GetLayout()).align;
69
70         LyXParagraph const * physpar = par;
71
72         if (physpar->params.spaceTop().kind() == VSpace::LENGTH) {
73                 LyXGlueLength above = physpar->params.spaceTop().length();
74                 lyxerr[Debug::GUI] << "Reading above space : \"" 
75                         << physpar->params.spaceTop().length().asString() << "\"" << endl;
76  
77                 dialog_->setAboveLength(above.value(), above.plusValue(), above.minusValue(),
78                         above.unit(), above.plusUnit(), above.minusUnit());
79         } else
80                 dialog_->setAboveLength(0.0, 0.0, 0.0, LyXLength::UNIT_NONE, LyXLength::UNIT_NONE, LyXLength::UNIT_NONE);
81
82         if (physpar->params.spaceBottom().kind() == VSpace::LENGTH) {
83                 LyXGlueLength below = physpar->params.spaceBottom().length();
84                 lyxerr[Debug::GUI] << "Reading below space : \"" 
85                         << physpar->params.spaceBottom().length().asString() << "\"" << endl;
86
87                 dialog_->setBelowLength(below.value(), below.plusValue(), below.minusValue(),
88                         below.unit(), below.plusUnit(), below.minusUnit());
89         } else
90                 dialog_->setBelowLength(0.0, 0.0, 0.0, LyXLength::UNIT_NONE, LyXLength::UNIT_NONE, LyXLength::UNIT_NONE);
91
92         dialog_->setLabelWidth(text->cursor.par()->GetLabelWidthString().c_str());
93         dialog_->setAlign(align);
94
95         dialog_->setChecks(physpar->params.lineTop(),
96                            physpar->params.lineBottom(),
97                            physpar->params.pagebreakTop(),
98                            physpar->params.pagebreakBottom(),
99                            physpar->params.noindent());
100  
101         dialog_->setSpace(physpar->params.spaceTop().kind(),
102                           physpar->params.spaceBottom().kind(),
103                           physpar->params.spaceTop().keep(),
104                           physpar->params.spaceBottom().keep());
105 }
106
107
108 void FormParagraph::apply()
109 {
110         if (readonly)
111                 return;
112
113         VSpace spaceabove;
114         VSpace spacebelow;
115
116         if (dialog_->getSpaceAboveKind() == VSpace::LENGTH)
117                 spaceabove = VSpace(dialog_->getAboveLength());
118         else
119                 spaceabove = VSpace(dialog_->getSpaceAboveKind());
120
121         if (dialog_->getSpaceBelowKind() == VSpace::LENGTH)
122                 spacebelow = VSpace(dialog_->getBelowLength());
123         else
124                 spacebelow = VSpace(dialog_->getSpaceBelowKind());
125
126         spaceabove.setKeep(dialog_->getAboveKeep());
127         spacebelow.setKeep(dialog_->getBelowKeep());
128
129         lyxerr[Debug::GUI] << "Setting above space \"" 
130                 << LyXGlueLength(spaceabove.length().asString()).asString() << "\"" << endl;
131         lyxerr[Debug::GUI] << "Setting below space \"" 
132                 << LyXGlueLength(spacebelow.length().asString()).asString() << "\"" << endl;
133
134         lv_->view()->text->SetParagraph(lv_->view(),
135                 dialog_->getLineAbove(), dialog_->getLineBelow(),
136                 dialog_->getPagebreakAbove(), dialog_->getPagebreakBelow(),
137                 spaceabove, spacebelow, dialog_->getAlign(),
138                 dialog_->getLabelWidth(), dialog_->getNoIndent());
139
140         lv_->view()->update(lv_->view()->text, 
141                             BufferView::SELECT |
142                             BufferView::FITCUR |
143                             BufferView::CHANGE);
144         lv_->buffer()->markDirty();
145         setMinibuffer(lv_, _("Paragraph layout set"));
146 }
147
148
149 void FormParagraph::show()
150 {
151         if (!dialog_)
152                 dialog_ = new ParaDialog(this, 0,
153                                          _("LyX: Paragraph Options"), false);
154
155         if (!dialog_->isVisible())
156                 h_ = d_->hideBufferDependent
157                         .connect(slot(this, &FormParagraph::hide));
158
159         dialog_->raise();
160         dialog_->setActiveWindow();
161         update();
162          
163         dialog_->show();
164 }
165
166
167 void FormParagraph::close()
168 {
169         h_.disconnect();
170 }
171
172
173 void FormParagraph::hide()
174 {
175         dialog_->hide();
176         close();
177 }