tdf#130857 qt weld: Implement QtInstanceWidget::get_text_height
[LibreOffice.git] / vcl / source / filter / idxf / dxftblrd.cxx
blob7e20e6c69238a9036408774fd63da3727e38126b
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
21 #include "dxftblrd.hxx"
23 //----------------------------------DXFLType-----------------------------------
25 DXFLType::DXFLType()
26 : pSucc(nullptr)
27 , nFlags(0)
28 , nDashCount(0)
29 , fPatternLength(0.0)
30 , fDash{0.0}
34 void DXFLType::Read(DXFGroupReader & rDGR)
36 tools::Long nDashIndex=-1;
38 while (rDGR.Read()!=0)
40 switch (rDGR.GetG())
42 case 2:
43 m_sName = rDGR.GetS();
44 break;
45 case 3:
46 m_sDescription = rDGR.GetS();
47 break;
48 case 70:
49 nFlags=rDGR.GetI();
50 break;
51 case 73:
52 if (nDashIndex!=-1)
54 rDGR.SetError();
55 return;
57 nDashCount=rDGR.GetI();
58 if (nDashCount>DXF_MAX_DASH_COUNT)
60 nDashCount=DXF_MAX_DASH_COUNT;
62 nDashIndex=0;
63 break;
64 case 40: fPatternLength=rDGR.GetF(); break;
65 case 49:
66 if (nDashCount==-1)
68 rDGR.SetError();
69 return;
71 if (nDashIndex < nDashCount)
73 if (nDashIndex < 0)
75 rDGR.SetError();
76 return;
78 fDash[nDashIndex++] = rDGR.GetF();
80 break;
85 //----------------------------------DXFLayer-----------------------------------
87 DXFLayer::DXFLayer()
89 pSucc=nullptr;
90 nFlags=0;
91 nColor=-1;
94 void DXFLayer::Read(DXFGroupReader & rDGR)
96 while (rDGR.Read()!=0)
98 switch(rDGR.GetG())
100 case 2:
101 m_sName = rDGR.GetS();
102 break;
103 case 6:
104 m_sLineType = rDGR.GetS();
105 break;
106 case 70:
107 nFlags=rDGR.GetI();
108 break;
109 case 62:
110 nColor=rDGR.GetI();
111 break;
116 //----------------------------------DXFStyle-----------------------------------
118 DXFStyle::DXFStyle()
120 pSucc=nullptr;
121 nFlags=0;
122 fHeight=0.0;
123 fWidthFak=1.0;
124 fOblAngle=0.0;
125 nTextGenFlags=0;
126 fLastHeightUsed=0.0;
129 void DXFStyle::Read(DXFGroupReader & rDGR)
131 while (rDGR.Read()!=0)
133 switch(rDGR.GetG())
135 case 2:
136 m_sName = rDGR.GetS();
137 break;
138 case 3:
139 m_sPrimFontFile = rDGR.GetS();
140 break;
141 case 4:
142 m_sBigFontFile = rDGR.GetS();
143 break;
144 case 70:
145 nFlags=rDGR.GetI();
146 break;
147 case 40:
148 fHeight=rDGR.GetF();
149 break;
150 case 41:
151 fWidthFak=rDGR.GetF();
152 break;
153 case 42:
154 fLastHeightUsed=rDGR.GetF();
155 break;
156 case 50:
157 fOblAngle=rDGR.GetF();
158 break;
159 case 71:
160 nTextGenFlags=rDGR.GetI();
161 break;
166 //----------------------------------DXFVPort-----------------------------------
168 DXFVPort::DXFVPort()
169 : pSucc(nullptr)
170 , nFlags(0)
171 , fMinX(0.0)
172 , fMinY(0.0)
173 , fMaxX(0.0)
174 , fMaxY(0.0)
175 , fCenterX(0.0)
176 , fCenterY(0.0)
177 , fSnapBaseX(0.0)
178 , fSnapBaseY(0.0)
179 , fSnapSpacingX(0.0)
180 , fSnapSpacingY(0.0)
181 , fGridX(0.0)
182 , fGridY(0.0)
183 , aDirection(DXFVector(0.0, 0.0, 1.0))
184 , fHeight(0.0)
185 , fAspectRatio(0.0)
186 , fLensLength(0.0)
187 , fFrontClipPlane(0.0)
188 , fBackClipPlane(0.0)
189 , fTwistAngle(0.0)
190 , nStatus(0)
191 , nID(0)
192 , nMode(0)
193 , nCircleZoomPercent(0)
194 , nFastZoom(0)
195 , nUCSICON(0)
196 , nSnap(0)
197 , nGrid(0)
198 , nSnapStyle(0)
199 , nSnapIsopair(0)
203 void DXFVPort::Read(DXFGroupReader & rDGR)
205 while (rDGR.Read()!=0)
207 switch(rDGR.GetG())
209 case 2:
210 m_sName = rDGR.GetS();
211 break;
212 case 10: fMinX=rDGR.GetF(); break;
213 case 11: fMaxX=rDGR.GetF(); break;
214 case 12: fCenterX=rDGR.GetF(); break;
215 case 13: fSnapBaseX=rDGR.GetF(); break;
216 case 14: fSnapSpacingX=rDGR.GetF(); break;
217 case 15: fGridX=rDGR.GetF(); break;
218 case 16: aDirection.fx=rDGR.GetF(); break;
219 case 17: aTarget.fx=rDGR.GetF(); break;
220 case 20: fMinY=rDGR.GetF(); break;
221 case 21: fMaxY=rDGR.GetF(); break;
222 case 22: fCenterY=rDGR.GetF(); break;
223 case 23: fSnapBaseY=rDGR.GetF(); break;
224 case 24: fSnapSpacingY=rDGR.GetF(); break;
225 case 25: fGridY=rDGR.GetF(); break;
226 case 26: aDirection.fy=rDGR.GetF(); break;
227 case 27: aTarget.fy=rDGR.GetF(); break;
228 case 36: aDirection.fz=rDGR.GetF(); break;
229 case 37: aTarget.fz=rDGR.GetF(); break;
230 case 40: fHeight=rDGR.GetF(); break;
231 case 41: fAspectRatio=rDGR.GetF(); break;
232 case 42: fLensLength=rDGR.GetF(); break;
233 case 43: fFrontClipPlane=rDGR.GetF(); break;
234 case 44: fBackClipPlane=rDGR.GetF(); break;
235 case 51: fTwistAngle=rDGR.GetF(); break;
236 case 68: nStatus=rDGR.GetI(); break;
237 case 69: nID=rDGR.GetI(); break;
238 case 70: nFlags=rDGR.GetI(); break;
239 case 71: nMode=rDGR.GetI(); break;
240 case 72: nCircleZoomPercent=rDGR.GetI(); break;
241 case 73: nFastZoom=rDGR.GetI(); break;
242 case 74: nUCSICON=rDGR.GetI(); break;
243 case 75: nSnap=rDGR.GetI(); break;
244 case 76: nGrid=rDGR.GetI(); break;
245 case 77: nSnapStyle=rDGR.GetI(); break;
246 case 78: nSnapIsopair=rDGR.GetI(); break;
251 //----------------------------------DXFTables----------------------------------
254 DXFTables::DXFTables()
256 pLTypes=nullptr;
257 pLayers=nullptr;
258 pStyles=nullptr;
259 pVPorts=nullptr;
263 DXFTables::~DXFTables()
265 Clear();
269 void DXFTables::Read(DXFGroupReader & rDGR)
271 DXFLType * * ppLT, * pLT;
272 DXFLayer * * ppLa, * pLa;
273 DXFStyle * * ppSt, * pSt;
274 DXFVPort * * ppVP, * pVP;
276 ppLT=&pLTypes;
277 while(*ppLT!=nullptr) ppLT=&((*ppLT)->pSucc);
279 ppLa=&pLayers;
280 while(*ppLa!=nullptr) ppLa=&((*ppLa)->pSucc);
282 ppSt=&pStyles;
283 while(*ppSt!=nullptr) ppSt=&((*ppSt)->pSucc);
285 ppVP=&pVPorts;
286 while(*ppVP!=nullptr) ppVP=&((*ppVP)->pSucc);
288 for (;;) {
289 while (rDGR.GetG()!=0) rDGR.Read();
290 if (rDGR.GetS() == "EOF" ||
291 rDGR.GetS() == "ENDSEC") break;
292 else if (rDGR.GetS() == "LTYPE") {
293 pLT=new DXFLType;
294 pLT->Read(rDGR);
295 *ppLT=pLT;
296 ppLT=&(pLT->pSucc);
298 else if (rDGR.GetS() == "LAYER") {
299 pLa=new DXFLayer;
300 pLa->Read(rDGR);
301 *ppLa=pLa;
302 ppLa=&(pLa->pSucc);
304 else if (rDGR.GetS() == "STYLE") {
305 pSt=new DXFStyle;
306 pSt->Read(rDGR);
307 *ppSt=pSt;
308 ppSt=&(pSt->pSucc);
310 else if (rDGR.GetS() == "VPORT") {
311 pVP=new DXFVPort;
312 pVP->Read(rDGR);
313 *ppVP=pVP;
314 ppVP=&(pVP->pSucc);
316 else rDGR.Read();
321 void DXFTables::Clear()
323 DXFLType * pLT;
324 DXFLayer * pLa;
325 DXFStyle * pSt;
326 DXFVPort * pVP;
328 while (pStyles!=nullptr) {
329 pSt=pStyles;
330 pStyles=pSt->pSucc;
331 delete pSt;
333 while (pLayers!=nullptr) {
334 pLa=pLayers;
335 pLayers=pLa->pSucc;
336 delete pLa;
338 while (pLTypes!=nullptr) {
339 pLT=pLTypes;
340 pLTypes=pLT->pSucc;
341 delete pLT;
343 while (pVPorts!=nullptr) {
344 pVP=pVPorts;
345 pVPorts=pVP->pSucc;
346 delete pVP;
351 DXFLType * DXFTables::SearchLType(std::string_view rName) const
353 DXFLType * p;
354 for (p=pLTypes; p!=nullptr; p=p->pSucc) {
355 if (rName == p->m_sName) break;
357 return p;
361 DXFLayer * DXFTables::SearchLayer(std::string_view rName) const
363 DXFLayer * p;
364 for (p=pLayers; p!=nullptr; p=p->pSucc) {
365 if (rName == p->m_sName) break;
367 return p;
371 DXFVPort * DXFTables::SearchVPort(std::string_view rName) const
373 DXFVPort * p;
374 for (p=pVPorts; p!=nullptr; p=p->pSucc) {
375 if (rName == p->m_sName) break;
377 return p;
381 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */