Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
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/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
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 .
18 : */
19 :
20 : #include <tools/poly.hxx>
21 : #include <viewopt.hxx>
22 :
23 : #include "swtypes.hxx"
24 : #include "cmdid.h"
25 : #include "label.hxx"
26 : #include "labimp.hxx"
27 : #include "labimg.hxx"
28 : #include "labfmt.hxx"
29 : #include "uitool.hxx"
30 :
31 : #include "label.hrc"
32 : #include "labfmt.hrc"
33 : #include <unomid.h>
34 :
35 : using namespace utl;
36 : using namespace ::com::sun::star::uno;
37 : using namespace ::com::sun::star::beans;
38 :
39 : using ::rtl::OUString;
40 :
41 : #define ROUND(x) ((sal_uInt16) ((x) + .5))
42 :
43 0 : SwLabPreview::SwLabPreview( const SwLabFmtPage* pParent, const ResId& rResID ) :
44 :
45 : Window((Window*) pParent, rResID),
46 :
47 : aGrayColor(COL_LIGHTGRAY),
48 :
49 : aHDistStr (SW_RES(STR_HDIST )),
50 : aVDistStr (SW_RES(STR_VDIST )),
51 : aWidthStr (SW_RES(STR_WIDTH )),
52 : aHeightStr(SW_RES(STR_HEIGHT)),
53 : aLeftStr (SW_RES(STR_LEFT )),
54 : aUpperStr (SW_RES(STR_UPPER )),
55 : aColsStr (SW_RES(STR_COLS )),
56 : aRowsStr (SW_RES(STR_ROWS )),
57 : aPWidthStr (SW_RES(STR_PWIDTH )),
58 0 : aPHeightStr(SW_RES(STR_PHEIGHT))
59 : {
60 0 : SetMapMode(MAP_PIXEL);
61 :
62 0 : const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
63 0 : const Color& rWinColor = rStyleSettings.GetWindowColor();
64 0 : SetBackground(Wallpaper(rWinColor));
65 :
66 0 : Font aFont = GetFont();
67 0 : aFont.SetTransparent(sal_True);
68 0 : aFont.SetWeight (WEIGHT_NORMAL);
69 0 : SetFont(aFont);
70 :
71 0 : const Size aSz(GetOutputSizePixel());
72 :
73 0 : lOutWPix = aSz.Width ();
74 0 : lOutHPix = aSz.Height();
75 :
76 :
77 0 : lHDistWidth = GetTextWidth(aHDistStr );
78 0 : lVDistWidth = GetTextWidth(aVDistStr );
79 0 : lHeightWidth = GetTextWidth(aHeightStr);
80 0 : lLeftWidth = GetTextWidth(aLeftStr );
81 0 : lUpperWidth = GetTextWidth(aUpperStr );
82 0 : lColsWidth = GetTextWidth(aColsStr );
83 0 : lPWidthWidth = GetTextWidth(aPWidthStr);
84 0 : lPHeightWidth = GetTextWidth(aPHeightStr);
85 0 : lXHeight = GetTextHeight();
86 0 : lXWidth = GetTextWidth(rtl::OUString('X'));
87 :
88 : // Scale factor
89 0 : float fx = (float)(lOutWPix - (2 * (lLeftWidth + 15))) / (float)lOutWPix;
90 :
91 0 : lOutWPix23 = (long)((float)lOutWPix * fx);
92 0 : lOutHPix23 = (long)((float)lOutHPix * fx);
93 0 : }
94 :
95 0 : SwLabPreview::~SwLabPreview()
96 : {
97 0 : }
98 :
99 0 : void SwLabPreview::Paint(const Rectangle &)
100 : {
101 0 : const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
102 0 : const Color& rWinColor = rStyleSettings.GetWindowColor();
103 0 : const Color& rFieldTextColor = SwViewOption::GetFontColor();
104 :
105 0 : Font aFont = GetFont();
106 0 : aFont.SetFillColor( rWinColor );
107 0 : aFont.SetColor(rFieldTextColor);
108 0 : SetFont(aFont);
109 :
110 0 : SetBackground(Wallpaper(rWinColor));
111 :
112 0 : SetLineColor(rWinColor);
113 0 : SetFillColor(aGrayColor);
114 0 : Font aPaintFont(GetFont());
115 0 : aPaintFont.SetTransparent(sal_False);
116 0 : SetFont(aPaintFont);
117 :
118 : // size of region to be displayed
119 0 : long lDispW = ROUND(aItem.lLeft + aItem.lHDist);
120 0 : long lDispH = ROUND(aItem.lUpper + aItem.lVDist);
121 0 : if (aItem.nCols == 1)
122 0 : lDispW += ROUND(aItem.lLeft );
123 : else
124 0 : lDispW += ROUND(aItem.lHDist / 10);
125 0 : if (aItem.nRows == 1)
126 0 : lDispH += ROUND(aItem.lUpper);
127 : else
128 0 : lDispH += ROUND(aItem.lVDist / 10);
129 :
130 : // Scale factor
131 0 : float fx = (float) lOutWPix23 / Max(1L, lDispW),
132 0 : fy = (float) lOutHPix23 / Max(1L, lDispH),
133 0 : f = fx < fy ? fx : fy;
134 :
135 : // zero point
136 0 : long lOutlineW = ROUND(f * lDispW);
137 0 : long lOutlineH = ROUND(f * lDispH);
138 :
139 0 : long lX0 = (lOutWPix - lOutlineW) / 2;
140 0 : long lY0 = (lOutHPix - lOutlineH) / 2;
141 0 : long lX1 = ROUND(lX0 + f * aItem.lLeft );
142 0 : long lY1 = ROUND(lY0 + f * aItem.lUpper);
143 0 : long lX2 = ROUND(lX0 + f * (aItem.lLeft + aItem.lWidth ));
144 0 : long lY2 = ROUND(lY0 + f * (aItem.lUpper + aItem.lHeight));
145 0 : long lX3 = ROUND(lX0 + f * (aItem.lLeft + aItem.lHDist ));
146 0 : long lY3 = ROUND(lY0 + f * (aItem.lUpper + aItem.lVDist ));
147 :
148 : // draw outline (area)
149 0 : DrawRect(Rectangle(Point(lX0, lY0), Size(lOutlineW, lOutlineH)));
150 :
151 : // draw outline (border)
152 0 : SetLineColor(rFieldTextColor);
153 0 : DrawLine(Point(lX0, lY0), Point(lX0 + lOutlineW - 1, lY0)); // Up
154 0 : DrawLine(Point(lX0, lY0), Point(lX0, lY0 + lOutlineH - 1)); // Left
155 0 : if (aItem.nCols == 1)
156 0 : DrawLine(Point(lX0 + lOutlineW - 1, lY0), Point(lX0 + lOutlineW - 1, lY0 + lOutlineH - 1)); // Right
157 0 : if (aItem.nRows == 1)
158 0 : DrawLine(Point(lX0, lY0 + lOutlineH - 1), Point(lX0 + lOutlineW - 1, lY0 + lOutlineH - 1)); // Down
159 :
160 : // Labels
161 0 : SetClipRegion (Rectangle(Point(lX0, lY0), Size(lOutlineW, lOutlineH)));
162 0 : SetFillColor( COL_LIGHTGRAYBLUE );
163 0 : for (sal_uInt16 nRow = 0; nRow < Min((sal_uInt16) 2, (sal_uInt16) aItem.nRows); nRow++)
164 0 : for (sal_uInt16 nCol = 0; nCol < Min((sal_uInt16) 2, (sal_uInt16) aItem.nCols); nCol++)
165 : DrawRect(Rectangle(
166 : Point(ROUND(lX0 + f * (aItem.lLeft + nCol * aItem.lHDist)),
167 : ROUND(lY0 + f * (aItem.lUpper + nRow * aItem.lVDist))),
168 : Size (ROUND(f * aItem.lWidth ),
169 0 : ROUND(f * aItem.lHeight))));
170 0 : SetClipRegion();
171 :
172 : // annotation: left border
173 0 : if (aItem.lLeft)
174 : {
175 0 : long lX = (lX0 + lX1) / 2;
176 0 : DrawArrow(Point(lX0, lY0 - 5), Point(lX1, lY0 - 5), sal_False);
177 0 : DrawArrow(Point(lX, lY0 - 10), Point(lX, lY0 - 5), sal_True);
178 0 : DrawText(Point(lX1 - lLeftWidth, lY0 - 10 - lXHeight), aLeftStr);
179 : }
180 :
181 : // annotation: upper border
182 0 : if (aItem.lUpper)
183 : {
184 0 : DrawArrow(Point(lX0 - 5, lY0), Point(lX0 - 5, lY1), sal_False);
185 0 : DrawText(Point(lX0 - 10 - lUpperWidth, ROUND(lY0 + f * aItem.lUpper / 2 - lXHeight / 2)), aUpperStr);
186 : }
187 :
188 : // annotation: width and height
189 : {
190 0 : long lX = lX2 - lXWidth / 2 - lHeightWidth / 2;
191 0 : long lY = lY1 + lXHeight;
192 :
193 0 : DrawLine(Point(lX1, lY), Point(lX2 - 1, lY));
194 0 : DrawLine(Point(lX, lY1), Point(lX, lY2 - 1));
195 :
196 0 : DrawText(Point(lX1 + lXWidth / 2, lY - lXHeight / 2), aWidthStr);
197 0 : DrawText(Point(lX - lHeightWidth / 2, lY2 - lXHeight - lXHeight / 2), aHeightStr);
198 : }
199 :
200 : // annotation: horizontal gap
201 0 : if (aItem.nCols > 1)
202 : {
203 0 : long lX = (lX1 + lX3) / 2;
204 0 : DrawArrow(Point(lX1, lY0 - 5), Point(lX3, lY0 - 5), sal_False);
205 0 : DrawArrow(Point(lX, lY0 - 10), Point(lX, lY0 - 5), sal_True);
206 0 : DrawText(Point(lX - lHDistWidth / 2, lY0 - 10 - lXHeight), aHDistStr);
207 : }
208 :
209 : // annotation: vertical gap
210 0 : if (aItem.nRows > 1)
211 : {
212 0 : DrawArrow(Point(lX0 - 5, lY1), Point(lX0 - 5, lY3), sal_False);
213 0 : DrawText(Point(lX0 - 10 - lVDistWidth, ROUND(lY1 + f * aItem.lVDist / 2 - lXHeight / 2)), aVDistStr);
214 : }
215 :
216 : // annotation: columns
217 : {
218 0 : long lY = lY0 + lOutlineH + 4;
219 0 : DrawArrow(Point(lX0, lY), Point(lX0 + lOutlineW - 1, lY), sal_True);
220 0 : DrawText(Point((lX0 + lX0 + lOutlineW - 1) / 2 - lColsWidth / 2, lY + 5), aColsStr);
221 : }
222 :
223 : // annotation: lines
224 : {
225 0 : long lX = lX0 + lOutlineW + 4;
226 0 : DrawArrow(Point(lX, lY0), Point(lX, lY0 + lOutlineH - 1), sal_True);
227 0 : DrawText(Point(lX + 5, (lY0 + lY0 + lOutlineH - 1 - lXHeight / 2) / 2), aRowsStr);
228 0 : }
229 0 : }
230 :
231 : // Arror or interval character --------------------------------------------
232 :
233 0 : void SwLabPreview::DrawArrow(const Point &rP1, const Point &rP2, sal_Bool bArrow)
234 : {
235 0 : DrawLine(rP1, rP2);
236 :
237 0 : if (bArrow)
238 : {
239 0 : Point aArr[3];
240 :
241 : // Arrow character
242 0 : if (rP1.Y() == rP2.Y())
243 : {
244 : // Horizontal
245 0 : aArr[0].X() = rP2.X() - 5;
246 0 : aArr[0].Y() = rP2.Y() - 2;
247 0 : aArr[1].X() = rP2.X();
248 0 : aArr[1].Y() = rP2.Y();
249 0 : aArr[2].X() = rP2.X() - 5;
250 0 : aArr[2].Y() = rP2.Y() + 2;
251 : }
252 : else
253 : {
254 : // Vertical
255 0 : aArr[0].X() = rP2.X() - 2;
256 0 : aArr[0].Y() = rP2.Y() - 5;
257 0 : aArr[1].X() = rP2.X() + 2;
258 0 : aArr[1].Y() = rP2.Y() - 5;
259 0 : aArr[2].X() = rP2.X();
260 0 : aArr[2].Y() = rP2.Y();
261 : }
262 :
263 0 : const Color& rFieldTextColor = SwViewOption::GetFontColor();
264 0 : SetFillColor(rFieldTextColor);
265 0 : DrawPolygon(Polygon(3, aArr));
266 : }
267 : else
268 : {
269 : // Interval symbol
270 0 : if (rP1.Y() == rP2.Y())
271 : {
272 : // Horizontal
273 0 : DrawLine(Point(rP1.X(), rP1.Y() - 2), Point(rP1.X(), rP1.Y() + 2));
274 0 : DrawLine(Point(rP2.X(), rP2.Y() - 2), Point(rP2.X(), rP2.Y() + 2));
275 : }
276 : else
277 : {
278 : // Vertical
279 0 : DrawLine(Point(rP1.X() - 2, rP1.Y()), Point(rP1.X() + 2, rP1.Y()));
280 0 : DrawLine(Point(rP2.X() - 2, rP2.Y()), Point(rP2.X() + 2, rP2.Y()));
281 : }
282 : }
283 0 : }
284 :
285 0 : void SwLabPreview::Update(const SwLabItem& rItem)
286 : {
287 0 : aItem = rItem;
288 0 : Invalidate();
289 0 : }
290 :
291 0 : SwLabFmtPage::SwLabFmtPage(Window* pParent, const SfxItemSet& rSet) :
292 :
293 : SfxTabPage(pParent, SW_RES(TP_LAB_FMT), rSet),
294 : aMakeFI (this, SW_RES(FI_MAKE)),
295 : aTypeFI (this, SW_RES(FI_TYPE)),
296 : aPreview (this, SW_RES(WIN_PREVIEW)),
297 : aHDistText (this, SW_RES(TXT_HDIST )),
298 : aHDistField (this, SW_RES(FLD_HDIST )),
299 : aVDistText (this, SW_RES(TXT_VDIST )),
300 : aVDistField (this, SW_RES(FLD_VDIST )),
301 : aWidthText (this, SW_RES(TXT_WIDTH )),
302 : aWidthField (this, SW_RES(FLD_WIDTH )),
303 : aHeightText (this, SW_RES(TXT_HEIGHT )),
304 : aHeightField (this, SW_RES(FLD_HEIGHT )),
305 : aLeftText (this, SW_RES(TXT_LEFT )),
306 : aLeftField (this, SW_RES(FLD_LEFT )),
307 : aUpperText (this, SW_RES(TXT_UPPER )),
308 : aUpperField (this, SW_RES(FLD_UPPER )),
309 : aColsText (this, SW_RES(TXT_COLUMNS)),
310 : aColsField (this, SW_RES(FLD_COLUMNS)),
311 : aRowsText (this, SW_RES(TXT_ROWS )),
312 : aRowsField (this, SW_RES(FLD_ROWS )),
313 : aPWidthText (this, SW_RES(TXT_PWIDTH )),
314 : aPWidthField (this, SW_RES(FLD_PWIDTH )),
315 : aPHeightText (this, SW_RES(TXT_PHEIGHT )),
316 : aPHeightField (this, SW_RES(FLD_PHEIGHT )),
317 : aSavePB (this, SW_RES(PB_SAVE )),
318 : bModified(sal_False),
319 0 : aItem ((const SwLabItem&) rSet.Get(FN_LABEL))
320 : {
321 0 : FreeResource();
322 0 : SetExchangeSupport();
323 :
324 : // Metrics
325 0 : FieldUnit aMetric = ::GetDfltMetric(sal_False);
326 0 : SetMetric(aHDistField , aMetric);
327 0 : SetMetric(aVDistField , aMetric);
328 0 : SetMetric(aWidthField , aMetric);
329 0 : SetMetric(aHeightField, aMetric);
330 0 : SetMetric(aLeftField , aMetric);
331 0 : SetMetric(aUpperField , aMetric);
332 0 : SetMetric(aPWidthField , aMetric);
333 0 : SetMetric(aPHeightField, aMetric);
334 :
335 : // Install handlers
336 0 : Link aLk = LINK(this, SwLabFmtPage, ModifyHdl);
337 0 : aHDistField .SetModifyHdl( aLk );
338 0 : aVDistField .SetModifyHdl( aLk );
339 0 : aWidthField .SetModifyHdl( aLk );
340 0 : aHeightField.SetModifyHdl( aLk );
341 0 : aLeftField .SetModifyHdl( aLk );
342 0 : aUpperField .SetModifyHdl( aLk );
343 0 : aColsField .SetModifyHdl( aLk );
344 0 : aRowsField .SetModifyHdl( aLk );
345 0 : aPWidthField .SetModifyHdl( aLk );
346 0 : aPHeightField.SetModifyHdl( aLk );
347 :
348 0 : aLk = LINK(this, SwLabFmtPage, LoseFocusHdl);
349 0 : aHDistField .SetLoseFocusHdl( aLk );
350 0 : aVDistField .SetLoseFocusHdl( aLk );
351 0 : aWidthField .SetLoseFocusHdl( aLk );
352 0 : aHeightField.SetLoseFocusHdl( aLk );
353 0 : aLeftField .SetLoseFocusHdl( aLk );
354 0 : aUpperField .SetLoseFocusHdl( aLk );
355 0 : aColsField .SetLoseFocusHdl( aLk );
356 0 : aRowsField .SetLoseFocusHdl( aLk );
357 0 : aPWidthField .SetLoseFocusHdl( aLk );
358 0 : aPHeightField.SetLoseFocusHdl( aLk );
359 :
360 0 : aSavePB.SetClickHdl( LINK (this, SwLabFmtPage, SaveHdl));
361 : // Set timer
362 0 : aPreviewTimer.SetTimeout(1000);
363 0 : aPreviewTimer.SetTimeoutHdl(LINK(this, SwLabFmtPage, PreviewHdl));
364 0 : }
365 :
366 0 : SwLabFmtPage::~SwLabFmtPage()
367 : {
368 0 : }
369 :
370 : // Modify-handler of MetricFields. start preview timer
371 0 : IMPL_LINK_NOARG_INLINE_START(SwLabFmtPage, ModifyHdl)
372 : {
373 0 : bModified = sal_True;
374 0 : aPreviewTimer.Start();
375 0 : return 0;
376 : }
377 0 : IMPL_LINK_NOARG_INLINE_END(SwLabFmtPage, ModifyHdl)
378 :
379 : // Invalidate preview
380 0 : IMPL_LINK_NOARG_INLINE_START(SwLabFmtPage, PreviewHdl)
381 : {
382 0 : aPreviewTimer.Stop();
383 0 : ChangeMinMax();
384 0 : FillItem( aItem );
385 0 : aPreview.Update( aItem );
386 :
387 0 : return 0;
388 : }
389 0 : IMPL_LINK_NOARG_INLINE_END(SwLabFmtPage, PreviewHdl)
390 :
391 : // LoseFocus-Handler: Update on change --------------------------
392 0 : IMPL_LINK_INLINE_START( SwLabFmtPage, LoseFocusHdl, Control *, pControl )
393 : {
394 0 : if (((Edit*) pControl)->IsModified())
395 0 : PreviewHdl(0);
396 0 : return 0;
397 : }
398 0 : IMPL_LINK_INLINE_END( SwLabFmtPage, LoseFocusHdl, Control *, pControl )
399 :
400 0 : void SwLabFmtPage::ChangeMinMax()
401 : {
402 0 : long lMax = 31748; // 56 cm
403 0 : long nMinSize = 10; // 0,1cm
404 :
405 : // Min and Max
406 :
407 0 : int nCols = aColsField.GetValue(),
408 0 : nRows = aRowsField.GetValue();
409 0 : long lLeft = static_cast< long >(GETFLDVAL(aLeftField )),
410 0 : lUpper = static_cast< long >(GETFLDVAL(aUpperField)),
411 0 : lHDist = static_cast< long >(GETFLDVAL(aHDistField)),
412 0 : lVDist = static_cast< long >(GETFLDVAL(aVDistField)),
413 0 : lWidth = static_cast< long >(GETFLDVAL(aWidthField)),
414 0 : lHeight = static_cast< long >(GETFLDVAL(aHeightField)),
415 0 : lMinPWidth = lLeft + (nCols - 1) * lHDist + lWidth,
416 0 : lMinPHeight = lUpper + (nRows - 1) * lVDist + lHeight;
417 :
418 0 : aHDistField .SetMin(nMinSize, FUNIT_CM);
419 0 : aVDistField .SetMin(nMinSize, FUNIT_CM);
420 :
421 0 : aHDistField .SetMax((long) 100 * ((lMax - lLeft ) / Max(1L, (long) nCols)), FUNIT_TWIP);
422 0 : aVDistField .SetMax((long) 100 * ((lMax - lUpper) / Max(1L, (long) nRows)), FUNIT_TWIP);
423 :
424 0 : aWidthField .SetMin(nMinSize, FUNIT_CM);
425 0 : aHeightField.SetMin(nMinSize, FUNIT_CM);
426 :
427 0 : aWidthField .SetMax((long) 100 * (lHDist), FUNIT_TWIP);
428 0 : aHeightField.SetMax((long) 100 * (lVDist), FUNIT_TWIP);
429 :
430 0 : aLeftField .SetMax((long) 100 * (lMax - nCols * lHDist), FUNIT_TWIP);
431 0 : aUpperField .SetMax((long) 100 * (lMax - nRows * lVDist), FUNIT_TWIP);
432 :
433 0 : aColsField .SetMin( 1 );
434 0 : aRowsField .SetMin( 1 );
435 :
436 0 : aColsField .SetMax((lMax - lLeft ) / Max(1L, lHDist));
437 0 : aRowsField .SetMax((lMax - lUpper) / Max(1L, lVDist));
438 0 : aPWidthField .SetMin( (long) 100 * lMinPWidth, FUNIT_TWIP );
439 0 : aPHeightField.SetMin( (long) 100 * lMinPHeight, FUNIT_TWIP );
440 :
441 0 : aPWidthField .SetMax( (long) 100 * lMax, FUNIT_TWIP);
442 0 : aPHeightField.SetMax( (long) 100 * lMax, FUNIT_TWIP);
443 : // First and Last
444 :
445 0 : aHDistField .SetFirst(aHDistField .GetMin());
446 0 : aVDistField .SetFirst(aVDistField .GetMin());
447 :
448 0 : aHDistField .SetLast (aHDistField .GetMax());
449 0 : aVDistField .SetLast (aVDistField .GetMax());
450 :
451 0 : aWidthField .SetFirst(aWidthField .GetMin());
452 0 : aHeightField.SetFirst(aHeightField.GetMin());
453 :
454 0 : aWidthField .SetLast (aWidthField .GetMax());
455 0 : aHeightField.SetLast (aHeightField.GetMax());
456 :
457 0 : aLeftField .SetLast (aLeftField .GetMax());
458 0 : aUpperField .SetLast (aUpperField .GetMax());
459 :
460 0 : aColsField .SetLast (aColsField .GetMax());
461 0 : aRowsField .SetLast (aRowsField .GetMax());
462 0 : aPWidthField .SetFirst(aPWidthField .GetMin());
463 0 : aPHeightField.SetFirst(aPHeightField.GetMin());
464 :
465 0 : aPWidthField .SetLast (aPWidthField .GetMax());
466 0 : aPHeightField.SetLast (aPHeightField.GetMax());
467 0 : aHDistField .Reformat();
468 0 : aVDistField .Reformat();
469 0 : aWidthField .Reformat();
470 0 : aHeightField.Reformat();
471 0 : aLeftField .Reformat();
472 0 : aUpperField .Reformat();
473 0 : aColsField .Reformat();
474 0 : aRowsField .Reformat();
475 0 : aPWidthField .Reformat();
476 0 : aPHeightField.Reformat();
477 0 : }
478 :
479 0 : SfxTabPage* SwLabFmtPage::Create(Window* pParent, const SfxItemSet& rSet)
480 : {
481 0 : return new SwLabFmtPage(pParent, rSet);
482 : }
483 :
484 0 : void SwLabFmtPage::ActivatePage(const SfxItemSet& rSet)
485 : {
486 0 : SfxItemSet aSet(rSet);
487 0 : Reset(aSet);
488 0 : }
489 :
490 0 : int SwLabFmtPage::DeactivatePage(SfxItemSet* _pSet)
491 : {
492 0 : if (_pSet)
493 0 : FillItemSet(*_pSet);
494 :
495 0 : return sal_True;
496 : }
497 :
498 0 : void SwLabFmtPage::FillItem(SwLabItem& rItem)
499 : {
500 0 : if (bModified)
501 : {
502 0 : rItem.aMake = rItem.aType = SW_RESSTR(STR_CUSTOM);
503 :
504 0 : SwLabRec& rRec = *GetParentSwLabDlg()->Recs()[0];
505 0 : rItem.lHDist = rRec.lHDist = static_cast< long >(GETFLDVAL(aHDistField ));
506 0 : rItem.lVDist = rRec.lVDist = static_cast< long >(GETFLDVAL(aVDistField ));
507 0 : rItem.lWidth = rRec.lWidth = static_cast< long >(GETFLDVAL(aWidthField ));
508 0 : rItem.lHeight = rRec.lHeight = static_cast< long >(GETFLDVAL(aHeightField));
509 0 : rItem.lLeft = rRec.lLeft = static_cast< long >(GETFLDVAL(aLeftField ));
510 0 : rItem.lUpper = rRec.lUpper = static_cast< long >(GETFLDVAL(aUpperField ));
511 0 : rItem.nCols = rRec.nCols = (sal_uInt16) aColsField.GetValue();
512 0 : rItem.nRows = rRec.nRows = (sal_uInt16) aRowsField.GetValue();
513 0 : rItem.lPWidth = rRec.lPWidth = static_cast< long >(GETFLDVAL(aPWidthField ));
514 0 : rItem.lPHeight = rRec.lPHeight = static_cast< long >(GETFLDVAL(aPHeightField));
515 : }
516 0 : }
517 :
518 0 : sal_Bool SwLabFmtPage::FillItemSet(SfxItemSet& rSet)
519 : {
520 0 : FillItem(aItem);
521 0 : rSet.Put(aItem);
522 :
523 0 : return sal_True;
524 : }
525 :
526 0 : void SwLabFmtPage::Reset(const SfxItemSet& )
527 : {
528 : // Initialise fields
529 0 : GetParentSwLabDlg()->GetLabItem(aItem);
530 :
531 0 : aHDistField .SetMax(100 * aItem.lHDist , FUNIT_TWIP);
532 0 : aVDistField .SetMax(100 * aItem.lVDist , FUNIT_TWIP);
533 0 : aWidthField .SetMax(100 * aItem.lWidth , FUNIT_TWIP);
534 0 : aHeightField.SetMax(100 * aItem.lHeight, FUNIT_TWIP);
535 0 : aLeftField .SetMax(100 * aItem.lLeft , FUNIT_TWIP);
536 0 : aUpperField .SetMax(100 * aItem.lUpper , FUNIT_TWIP);
537 0 : aPWidthField .SetMax(100 * aItem.lPWidth , FUNIT_TWIP);
538 0 : aPHeightField.SetMax(100 * aItem.lPHeight, FUNIT_TWIP);
539 :
540 0 : SETFLDVAL(aHDistField , aItem.lHDist );
541 0 : SETFLDVAL(aVDistField , aItem.lVDist );
542 0 : SETFLDVAL(aWidthField , aItem.lWidth );
543 0 : SETFLDVAL(aHeightField, aItem.lHeight);
544 0 : SETFLDVAL(aLeftField , aItem.lLeft );
545 0 : SETFLDVAL(aUpperField , aItem.lUpper );
546 0 : SETFLDVAL(aPWidthField , aItem.lPWidth );
547 0 : SETFLDVAL(aPHeightField, aItem.lPHeight);
548 :
549 0 : aColsField.SetMax(aItem.nCols);
550 0 : aRowsField.SetMax(aItem.nRows);
551 :
552 0 : aColsField .SetValue(aItem.nCols);
553 0 : aRowsField .SetValue(aItem.nRows);
554 0 : aMakeFI.SetText(aItem.aMake);
555 0 : aTypeFI.SetText(aItem.aType);
556 0 : PreviewHdl(0);
557 0 : }
558 :
559 0 : IMPL_LINK_NOARG(SwLabFmtPage, SaveHdl)
560 : {
561 0 : SwLabRec aRec;
562 0 : aRec.lHDist = static_cast< long >(GETFLDVAL(aHDistField ));
563 0 : aRec.lVDist = static_cast< long >(GETFLDVAL(aVDistField ));
564 0 : aRec.lWidth = static_cast< long >(GETFLDVAL(aWidthField ));
565 0 : aRec.lHeight = static_cast< long >(GETFLDVAL(aHeightField));
566 0 : aRec.lLeft = static_cast< long >(GETFLDVAL(aLeftField ));
567 0 : aRec.lUpper = static_cast< long >(GETFLDVAL(aUpperField ));
568 0 : aRec.nCols = (sal_uInt16) aColsField.GetValue();
569 0 : aRec.nRows = (sal_uInt16) aRowsField.GetValue();
570 0 : aRec.lPWidth = static_cast< long >(GETFLDVAL(aPWidthField ));
571 0 : aRec.lPHeight = static_cast< long >(GETFLDVAL(aPHeightField));
572 0 : aRec.bCont = aItem.bCont;
573 0 : SwSaveLabelDlg* pSaveDlg = new SwSaveLabelDlg(this, aRec);
574 0 : pSaveDlg->SetLabel(aItem.aLstMake, aItem.aLstType);
575 0 : pSaveDlg->Execute();
576 0 : if(pSaveDlg->GetLabel(aItem))
577 : {
578 0 : bModified = sal_False;
579 0 : const Sequence<OUString>& rMan = GetParentSwLabDlg()->GetLabelsConfig().GetManufacturers();
580 0 : std::vector<rtl::OUString>& rMakes(GetParentSwLabDlg()->Makes());
581 0 : if(rMakes.size() < (sal_uInt16)rMan.getLength())
582 : {
583 0 : rMakes.clear();
584 0 : const OUString* pMan = rMan.getConstArray();
585 0 : for(sal_Int32 nMan = 0; nMan < rMan.getLength(); nMan++)
586 0 : rMakes.push_back(pMan[nMan]);
587 : }
588 0 : aMakeFI.SetText(aItem.aMake);
589 0 : aTypeFI.SetText(aItem.aType);
590 : }
591 0 : delete pSaveDlg;
592 0 : return 0;
593 : }
594 :
595 0 : SwSaveLabelDlg::SwSaveLabelDlg(SwLabFmtPage* pParent, SwLabRec& rRec) :
596 : ModalDialog(pParent, SW_RES(DLG_SAVE_LABEL)),
597 : aOptionsFL(this,SW_RES(FL_OPTIONS )),
598 : aMakeFT(this, SW_RES(FT_MAKE )),
599 : aMakeCB(this, SW_RES(CB_MAKE )),
600 : aTypeFT(this, SW_RES(FT_TYPE )),
601 : aTypeED(this, SW_RES(ED_TYPE )),
602 :
603 : aOKPB(this, SW_RES(PB_OK )),
604 : aCancelPB(this, SW_RES(PB_CANCEL )),
605 : aHelpPB(this, SW_RES(PB_HELP )),
606 :
607 : aQueryMB(this, SW_RES(MB_QUERY )),
608 :
609 : bSuccess(sal_False),
610 : pLabPage(pParent),
611 0 : rLabRec(rRec)
612 : {
613 0 : FreeResource();
614 :
615 0 : aOKPB.SetClickHdl(LINK(this, SwSaveLabelDlg, OkHdl));
616 0 : Link aLk(LINK(this, SwSaveLabelDlg, ModifyHdl));
617 0 : aMakeCB.SetModifyHdl(aLk);
618 0 : aTypeED.SetModifyHdl(aLk);
619 :
620 0 : SwLabelConfig& rCfg = pLabPage->GetParentSwLabDlg()->GetLabelsConfig();
621 0 : const Sequence<OUString>& rMan = rCfg.GetManufacturers();
622 0 : const OUString* pMan = rMan.getConstArray();
623 0 : for(sal_Int32 i = 0; i < rMan.getLength(); i++)
624 0 : aMakeCB.InsertEntry(pMan[i]);
625 0 : }
626 :
627 0 : IMPL_LINK_NOARG(SwSaveLabelDlg, OkHdl)
628 : {
629 0 : SwLabelConfig& rCfg = pLabPage->GetParentSwLabDlg()->GetLabelsConfig();
630 0 : String sMake(aMakeCB.GetText());
631 0 : String sType(aTypeED.GetText());
632 0 : if(rCfg.HasLabel(sMake, sType))
633 : {
634 0 : String sTmp(aQueryMB.GetMessText());
635 0 : String sQuery(sTmp);
636 0 : sQuery.SearchAndReplace(rtl::OUString("%1"), sMake);
637 0 : sQuery.SearchAndReplace(rtl::OUString("%2"), sType);
638 0 : aQueryMB.SetMessText(sQuery);
639 :
640 0 : short eRet = aQueryMB.Execute();
641 0 : aQueryMB.SetMessText(sTmp);
642 0 : if(RET_YES != eRet)
643 0 : return 0;
644 : }
645 0 : rLabRec.aType = sType;
646 0 : rCfg.SaveLabel(sMake, sType, rLabRec);
647 0 : bSuccess = sal_True;
648 0 : EndDialog(RET_OK);
649 0 : return 0;
650 : }
651 :
652 0 : IMPL_LINK_NOARG(SwSaveLabelDlg, ModifyHdl)
653 : {
654 0 : aOKPB.Enable(aMakeCB.GetText().Len() && aTypeED.GetText().Len());
655 0 : return 0;
656 : }
657 :
658 0 : sal_Bool SwSaveLabelDlg::GetLabel(SwLabItem& rItem)
659 : {
660 0 : if(bSuccess)
661 : {
662 0 : rItem.aMake = aMakeCB.GetText();
663 0 : rItem.aType = aTypeED.GetText();
664 0 : rItem.lHDist = rLabRec.lHDist;
665 0 : rItem.lVDist = rLabRec.lVDist;
666 0 : rItem.lWidth = rLabRec.lWidth;
667 0 : rItem.lHeight = rLabRec.lHeight;
668 0 : rItem.lLeft = rLabRec.lLeft;
669 0 : rItem.lUpper = rLabRec.lUpper;
670 0 : rItem.nCols = rLabRec.nCols;
671 0 : rItem.nRows = rLabRec.nRows;
672 0 : rItem.lPWidth = rLabRec.lPWidth;
673 0 : rItem.lPHeight = rLabRec.lPHeight;
674 : }
675 0 : return bSuccess;
676 0 : }
677 :
678 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|