]> git.lyx.org Git - features.git/blob - src/ParagraphParameters.C
Create ParagraphParameters::write() and use it
[features.git] / src / ParagraphParameters.C
1 #include <config.h>
2
3 #include "ParagraphParameters.h"
4 #include "ParameterStruct.h"
5 #include "tex-strings.h"
6 #include "lyxlex.h"
7
8 #include <iostream>
9
10 using std::ostream;
11
12 // Initialize static member var.
13 ShareContainer<ParameterStruct> ParagraphParameters::container;
14
15 ParagraphParameters::ParagraphParameters()
16 {
17         ParameterStruct tmp;
18         set_from_struct(tmp);
19 }
20
21
22 void ParagraphParameters::clear()
23 {
24         ParameterStruct tmp(*param);
25         tmp.line_top = false;
26         tmp.line_bottom = false;
27         tmp.pagebreak_top = false;
28         tmp.pagebreak_bottom = false;
29         tmp.added_space_top = VSpace(VSpace::NONE);
30         tmp.added_space_bottom = VSpace(VSpace::NONE);
31         tmp.spacing.set(Spacing::Default);
32         tmp.align = LYX_ALIGN_LAYOUT;
33         tmp.depth = 0;
34         tmp.noindent = false;
35         tmp.labelstring.erase();
36         tmp.labelwidthstring.erase();
37         tmp.start_of_appendix = false;
38         set_from_struct(tmp);
39 }
40
41
42 bool ParagraphParameters::sameLayout(ParagraphParameters const & pp) const
43 {
44         return param->align == pp.param->align &&
45                 param->line_bottom == pp.param->line_bottom &&
46                 param->pagebreak_bottom == pp.param->pagebreak_bottom &&
47                 param->added_space_bottom == pp.param->added_space_bottom &&
48
49                 param->line_top == pp.param->line_top &&
50                 param->pagebreak_top == pp.param->pagebreak_top &&
51                 param->added_space_top == pp.param->added_space_top &&
52                 param->spacing == pp.param->spacing &&
53                 param->noindent == pp.param->noindent &&
54                 param->depth == pp.param->depth;
55 }
56
57
58 void ParagraphParameters::set_from_struct(ParameterStruct const & ps)
59 {
60         // get new param from container with tmp as template
61         param = container.get(ps);
62 }
63
64
65 VSpace const & ParagraphParameters::spaceTop() const
66 {
67         return param->added_space_top;
68 }
69
70
71 void ParagraphParameters::spaceTop(VSpace const & vs)
72 {
73         ParameterStruct tmp(*param);
74         tmp.added_space_top = vs;
75         set_from_struct(tmp);
76 }
77
78
79 VSpace const & ParagraphParameters::spaceBottom() const
80 {
81         return param->added_space_bottom;
82 }
83
84
85 void ParagraphParameters::spaceBottom(VSpace const & vs)
86 {
87         ParameterStruct tmp(*param);
88         tmp.added_space_bottom = vs;
89         set_from_struct(tmp);
90 }
91
92
93 Spacing const & ParagraphParameters::spacing() const
94 {
95         return param->spacing;
96 }
97
98
99 void ParagraphParameters::spacing(Spacing const & s)
100 {
101         ParameterStruct tmp(*param);
102         tmp.spacing = s;
103         set_from_struct(tmp);
104 }
105
106
107 bool ParagraphParameters::noindent() const
108 {
109         return param->noindent;
110 }
111
112
113 void ParagraphParameters::noindent(bool ni)
114 {
115         ParameterStruct tmp(*param);
116         tmp.noindent = ni;
117         set_from_struct(tmp);
118 }
119
120
121 bool ParagraphParameters::lineTop() const
122 {
123         return param->line_top;
124 }
125
126
127 void ParagraphParameters::lineTop(bool lt)
128 {
129         ParameterStruct tmp(*param);
130         tmp.line_top = lt;
131         set_from_struct(tmp);
132 }
133
134
135 bool ParagraphParameters::lineBottom() const
136 {
137         return param->line_bottom;
138 }
139
140
141 void ParagraphParameters::lineBottom(bool lb)
142 {
143         ParameterStruct tmp(*param);
144         tmp.line_bottom = lb;
145         set_from_struct(tmp);
146 }
147
148
149 bool ParagraphParameters::pagebreakTop() const
150 {
151         return param->pagebreak_top;
152 }
153
154
155 void ParagraphParameters::pagebreakTop(bool pbt)
156 {
157         ParameterStruct tmp(*param);
158         tmp.pagebreak_top = pbt;
159         set_from_struct(tmp);
160 }
161
162
163 bool ParagraphParameters::pagebreakBottom() const
164 {
165         return param->pagebreak_bottom;
166 }
167
168
169 void ParagraphParameters::pagebreakBottom(bool pbb)
170 {
171         ParameterStruct tmp(*param);
172         tmp.pagebreak_bottom = pbb;
173         set_from_struct(tmp);
174 }
175
176
177 LyXAlignment ParagraphParameters::align() const
178 {
179         return param->align;
180 }
181
182
183 void ParagraphParameters::align(LyXAlignment la)
184 {
185         ParameterStruct tmp(*param);
186         tmp.align = la;
187         set_from_struct(tmp);
188 }
189
190
191 void ParagraphParameters::depth(depth_type d)
192 {
193         ParameterStruct tmp(*param);
194         tmp.depth = d;
195         set_from_struct(tmp);
196 }
197
198
199 bool ParagraphParameters::startOfAppendix() const
200 {
201         return param->start_of_appendix;
202 }
203
204
205 void ParagraphParameters::startOfAppendix(bool soa)
206 {
207         ParameterStruct tmp(*param);
208         tmp.start_of_appendix = soa;
209         set_from_struct(tmp);
210 }
211
212
213 bool ParagraphParameters::appendix() const
214 {
215         return param->appendix;
216 }
217
218
219 void ParagraphParameters::appendix(bool a)
220 {
221         ParameterStruct tmp(*param);
222         tmp.appendix = a;
223         set_from_struct(tmp);
224 }
225
226
227 string const & ParagraphParameters::labelString() const
228 {
229         return param->labelstring;
230 }
231
232
233 void ParagraphParameters::labelString(string const & ls)
234 {
235         ParameterStruct tmp(*param);
236         tmp.labelstring = ls;
237         set_from_struct(tmp);
238 }
239
240
241 string const & ParagraphParameters::labelWidthString() const
242 {
243         return param->labelwidthstring;
244 }
245
246
247 void ParagraphParameters::labelWidthString(string const & lws)
248 {
249         ParameterStruct tmp(*param);
250         tmp.labelwidthstring = lws;
251         set_from_struct(tmp);
252 }
253
254
255 LyXLength const & ParagraphParameters::leftIndent() const
256 {
257         return param->leftindent;
258 }
259
260
261 void ParagraphParameters::leftIndent(LyXLength const & li)
262 {
263         ParameterStruct tmp(*param);
264         tmp.leftindent = li;
265         set_from_struct(tmp);
266 }
267
268
269 void ParagraphParameters::read(LyXLex & lex)
270 {
271 }
272
273
274 void ParagraphParameters::write(ostream & os) const
275 {
276         // Maybe some vertical spaces.
277         if (spaceTop().kind() != VSpace::NONE)
278                 os << "\\added_space_top "
279                    << spaceTop().asLyXCommand() << ' ';
280         if (spaceBottom().kind() != VSpace::NONE)
281                 os << "\\added_space_bottom "
282                    << spaceBottom().asLyXCommand() << ' ';
283
284         // Maybe the paragraph has special spacing
285         spacing().writeFile(os, true);
286
287         // The labelwidth string used in lists.
288         if (!labelWidthString().empty())
289                 os << "\\labelwidthstring "
290                    << labelWidthString() << '\n';
291
292         // Lines above or below?
293         if (lineTop())
294                 os << "\\line_top ";
295         if (lineBottom())
296                 os << "\\line_bottom ";
297
298         // Pagebreaks above or below?
299         if (pagebreakTop())
300                 os << "\\pagebreak_top ";
301         if (pagebreakBottom())
302                 os << "\\pagebreak_bottom ";
303
304         // Start of appendix?
305         if (startOfAppendix())
306                 os << "\\start_of_appendix ";
307
308         // Noindent?
309         if (noindent())
310                 os << "\\noindent ";
311
312         // Do we have a manual left indent?
313         if (!leftIndent().zero())
314                 os << "\\leftindent " << leftIndent().asString()
315                    << ' ';
316
317         // Alignment?
318         if (align() != LYX_ALIGN_LAYOUT) {
319                 int h = 0;
320                 switch (align()) {
321                 case LYX_ALIGN_LEFT: h = 1; break;
322                 case LYX_ALIGN_RIGHT: h = 2; break;
323                 case LYX_ALIGN_CENTER: h = 3; break;
324                 default: h = 0; break;
325                 }
326                 os << "\\align " << string_align[h] << ' ';
327         }
328 }