1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sw.hxx" 26 #ifdef SW_DLLIMPLEMENTATION 27 #undef SW_DLLIMPLEMENTATION 28 #endif 29 30 31 #include <tools/poly.hxx> 32 #include <viewopt.hxx> 33 34 #include "swtypes.hxx" 35 #include "cmdid.h" 36 #include "label.hxx" 37 #include "labimp.hxx" 38 #include "labimg.hxx" 39 #include "labfmt.hxx" 40 #include "uitool.hxx" 41 42 #include "label.hrc" 43 #include "labfmt.hrc" 44 #include <unomid.h> 45 46 using namespace utl; 47 using namespace rtl; 48 using namespace ::com::sun::star::uno; 49 using namespace ::com::sun::star::beans; 50 51 // #define ------------------------------------------------------------------ 52 53 #define ROUND(x) ((sal_uInt16) ((x) + .5)) 54 55 // -------------------------------------------------------------------------- 56 SwLabPreview::SwLabPreview( const SwLabFmtPage* pParent, const ResId& rResID ) : 57 58 Window((Window*) pParent, rResID), 59 60 aGrayColor(COL_LIGHTGRAY), 61 62 aHDistStr (SW_RES(STR_HDIST )), 63 aVDistStr (SW_RES(STR_VDIST )), 64 aWidthStr (SW_RES(STR_WIDTH )), 65 aHeightStr(SW_RES(STR_HEIGHT)), 66 aLeftStr (SW_RES(STR_LEFT )), 67 aUpperStr (SW_RES(STR_UPPER )), 68 aColsStr (SW_RES(STR_COLS )), 69 aRowsStr (SW_RES(STR_ROWS )) 70 { 71 SetMapMode(MAP_PIXEL); 72 73 const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); 74 const Color& rWinColor = rStyleSettings.GetWindowColor(); 75 SetBackground(Wallpaper(rWinColor)); 76 77 Font aFont = GetFont(); 78 aFont.SetTransparent(sal_True); 79 aFont.SetWeight (WEIGHT_NORMAL); 80 SetFont(aFont); 81 82 const Size aSz(GetOutputSizePixel()); 83 84 lOutWPix = aSz.Width (); 85 lOutHPix = aSz.Height(); 86 87 88 lHDistWidth = GetTextWidth(aHDistStr ); 89 lVDistWidth = GetTextWidth(aVDistStr ); 90 lHeightWidth = GetTextWidth(aHeightStr); 91 lLeftWidth = GetTextWidth(aLeftStr ); 92 lUpperWidth = GetTextWidth(aUpperStr ); 93 lColsWidth = GetTextWidth(aColsStr ); 94 95 lXHeight = GetTextHeight(); 96 lXWidth = GetTextWidth('X'); 97 98 // Skalierungsfaktor 99 float fx = (float)(lOutWPix - (2 * (lLeftWidth + 15))) / (float)lOutWPix; 100 101 lOutWPix23 = (long)((float)lOutWPix * fx); 102 lOutHPix23 = (long)((float)lOutHPix * fx); 103 } 104 105 // -------------------------------------------------------------------------- 106 SwLabPreview::~SwLabPreview() 107 { 108 } 109 // -------------------------------------------------------------------------- 110 void SwLabPreview::Paint(const Rectangle &) 111 { 112 const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); 113 const Color& rWinColor = rStyleSettings.GetWindowColor(); 114 const Color& rFieldTextColor = SwViewOption::GetFontColor(); 115 116 Font aFont = GetFont(); 117 aFont.SetFillColor( rWinColor ); 118 aFont.SetColor(rFieldTextColor); 119 SetFont(aFont); 120 121 SetBackground(Wallpaper(rWinColor)); 122 123 SetLineColor(rWinColor); 124 SetFillColor(aGrayColor); 125 Font aPaintFont(GetFont()); 126 aPaintFont.SetTransparent(sal_False); 127 SetFont(aPaintFont); 128 129 // Groesse des darzustellenden Bereichs 130 long lDispW = ROUND(aItem.lLeft + aItem.lHDist); 131 long lDispH = ROUND(aItem.lUpper + aItem.lVDist); 132 if (aItem.nCols == 1) 133 lDispW += ROUND(aItem.lLeft ); 134 else 135 lDispW += ROUND(aItem.lHDist / 10); 136 if (aItem.nRows == 1) 137 lDispH += ROUND(aItem.lUpper); 138 else 139 lDispH += ROUND(aItem.lVDist / 10); 140 141 // Skalierungsfaktor 142 float fx = (float) lOutWPix23 / Max(1L, lDispW), 143 fy = (float) lOutHPix23 / Max(1L, lDispH), 144 f = fx < fy ? fx : fy; 145 146 // Nullpunkt 147 long lOutlineW = ROUND(f * lDispW); 148 long lOutlineH = ROUND(f * lDispH); 149 150 long lX0 = (lOutWPix - lOutlineW) / 2; 151 long lY0 = (lOutHPix - lOutlineH) / 2; 152 long lX1 = ROUND(lX0 + f * aItem.lLeft ); 153 long lY1 = ROUND(lY0 + f * aItem.lUpper); 154 long lX2 = ROUND(lX0 + f * (aItem.lLeft + aItem.lWidth )); 155 long lY2 = ROUND(lY0 + f * (aItem.lUpper + aItem.lHeight)); 156 long lX3 = ROUND(lX0 + f * (aItem.lLeft + aItem.lHDist )); 157 long lY3 = ROUND(lY0 + f * (aItem.lUpper + aItem.lVDist )); 158 159 // Umriss zeichnen (Flaeche) 160 DrawRect(Rectangle(Point(lX0, lY0), Size(lOutlineW, lOutlineH))); 161 162 // Umriss zeichnen (Umrandung) 163 SetLineColor(rFieldTextColor); 164 DrawLine(Point(lX0, lY0), Point(lX0 + lOutlineW - 1, lY0)); // Oben 165 DrawLine(Point(lX0, lY0), Point(lX0, lY0 + lOutlineH - 1)); // Links 166 if (aItem.nCols == 1) 167 DrawLine(Point(lX0 + lOutlineW - 1, lY0), Point(lX0 + lOutlineW - 1, lY0 + lOutlineH - 1)); // Rechts 168 if (aItem.nRows == 1) 169 DrawLine(Point(lX0, lY0 + lOutlineH - 1), Point(lX0 + lOutlineW - 1, lY0 + lOutlineH - 1)); // Unten 170 171 // Etiketten 172 SetClipRegion (Rectangle(Point(lX0, lY0), Size(lOutlineW, lOutlineH))); 173 SetFillColor(rWinColor); 174 for (sal_uInt16 nRow = 0; nRow < Min((sal_uInt16) 2, (sal_uInt16) aItem.nRows); nRow++) 175 for (sal_uInt16 nCol = 0; nCol < Min((sal_uInt16) 2, (sal_uInt16) aItem.nCols); nCol++) 176 DrawRect(Rectangle( 177 Point(ROUND(lX0 + f * (aItem.lLeft + nCol * aItem.lHDist)), 178 ROUND(lY0 + f * (aItem.lUpper + nRow * aItem.lVDist))), 179 Size (ROUND(f * aItem.lWidth ), 180 ROUND(f * aItem.lHeight)))); 181 SetClipRegion(); 182 183 // Beschritung: Rand links 184 if (aItem.lLeft) 185 { 186 long lX = (lX0 + lX1) / 2; 187 DrawArrow(Point(lX0, lY0 - 5), Point(lX1, lY0 - 5), sal_False); 188 DrawArrow(Point(lX, lY0 - 10), Point(lX, lY0 - 5), sal_True); 189 DrawText(Point(lX1 - lLeftWidth, lY0 - 10 - lXHeight), aLeftStr); 190 } 191 192 // Beschriftung: Rand oben 193 if (aItem.lUpper) 194 { 195 DrawArrow(Point(lX0 - 5, lY0), Point(lX0 - 5, lY1), sal_False); 196 DrawText(Point(lX0 - 10 - lUpperWidth, ROUND(lY0 + f * aItem.lUpper / 2 - lXHeight / 2)), aUpperStr); 197 } 198 199 // Beschriftung: Breite und Hoehe 200 { 201 long lX = lX2 - lXWidth / 2 - lHeightWidth / 2; 202 long lY = lY1 + lXHeight; 203 204 DrawLine(Point(lX1, lY), Point(lX2 - 1, lY)); 205 DrawLine(Point(lX, lY1), Point(lX, lY2 - 1)); 206 207 DrawText(Point(lX1 + lXWidth / 2, lY - lXHeight / 2), aWidthStr); 208 DrawText(Point(lX - lHeightWidth / 2, lY2 - lXHeight - lXHeight / 2), aHeightStr); 209 } 210 211 // Beschriftung: Horz. Abstand 212 if (aItem.nCols > 1) 213 { 214 long lX = (lX1 + lX3) / 2; 215 DrawArrow(Point(lX1, lY0 - 5), Point(lX3, lY0 - 5), sal_False); 216 DrawArrow(Point(lX, lY0 - 10), Point(lX, lY0 - 5), sal_True); 217 DrawText(Point(lX - lHDistWidth / 2, lY0 - 10 - lXHeight), aHDistStr); 218 } 219 220 // Beschriftung: Vertikaler Abstand 221 if (aItem.nRows > 1) 222 { 223 DrawArrow(Point(lX0 - 5, lY1), Point(lX0 - 5, lY3), sal_False); 224 DrawText(Point(lX0 - 10 - lVDistWidth, ROUND(lY1 + f * aItem.lVDist / 2 - lXHeight / 2)), aVDistStr); 225 } 226 227 // Beschriftung: Spalten 228 { 229 long lY = lY0 + lOutlineH + 4; 230 DrawArrow(Point(lX0, lY), Point(lX0 + lOutlineW - 1, lY), sal_True); 231 DrawText(Point((lX0 + lX0 + lOutlineW - 1) / 2 - lColsWidth / 2, lY + 5), aColsStr); 232 } 233 234 // Beschriftung: Zeilen 235 { 236 long lX = lX0 + lOutlineW + 4; 237 DrawArrow(Point(lX, lY0), Point(lX, lY0 + lOutlineH - 1), sal_True); 238 DrawText(Point(lX + 5, (lY0 + lY0 + lOutlineH - 1 - lXHeight / 2) / 2), aRowsStr); 239 } 240 } 241 242 // Pfeil bzw. Intervall zeichnen -------------------------------------------- 243 244 245 246 void SwLabPreview::DrawArrow(const Point &rP1, const Point &rP2, sal_Bool bArrow) 247 { 248 DrawLine(rP1, rP2); 249 250 if (bArrow) 251 { 252 Point aArr[3]; 253 254 // Pfeil zeichnen 255 if (rP1.Y() == rP2.Y()) 256 { 257 // Waagerecht 258 aArr[0].X() = rP2.X() - 5; 259 aArr[0].Y() = rP2.Y() - 2; 260 aArr[1].X() = rP2.X(); 261 aArr[1].Y() = rP2.Y(); 262 aArr[2].X() = rP2.X() - 5; 263 aArr[2].Y() = rP2.Y() + 2; 264 } 265 else 266 { 267 // Senkrecht 268 aArr[0].X() = rP2.X() - 2; 269 aArr[0].Y() = rP2.Y() - 5; 270 aArr[1].X() = rP2.X() + 2; 271 aArr[1].Y() = rP2.Y() - 5; 272 aArr[2].X() = rP2.X(); 273 aArr[2].Y() = rP2.Y(); 274 } 275 276 const Color& rFieldTextColor = SwViewOption::GetFontColor(); 277 SetFillColor(rFieldTextColor); 278 DrawPolygon(Polygon(3, aArr)); 279 } 280 else 281 { 282 // Intervall zeichnen 283 if (rP1.Y() == rP2.Y()) 284 { 285 // Waagerecht 286 DrawLine(Point(rP1.X(), rP1.Y() - 2), Point(rP1.X(), rP1.Y() + 2)); 287 DrawLine(Point(rP2.X(), rP2.Y() - 2), Point(rP2.X(), rP2.Y() + 2)); 288 } 289 else 290 { 291 // Senkrecht 292 DrawLine(Point(rP1.X() - 2, rP1.Y()), Point(rP1.X() + 2, rP1.Y())); 293 DrawLine(Point(rP2.X() - 2, rP2.Y()), Point(rP2.X() + 2, rP2.Y())); 294 } 295 } 296 } 297 298 // -------------------------------------------------------------------------- 299 300 void SwLabPreview::Update(const SwLabItem& rItem) 301 { 302 aItem = rItem; 303 Invalidate(); 304 } 305 306 // -------------------------------------------------------------------------- 307 308 309 310 SwLabFmtPage::SwLabFmtPage(Window* pParent, const SfxItemSet& rSet) : 311 312 SfxTabPage(pParent, SW_RES(TP_LAB_FMT), rSet), 313 aMakeFI (this, SW_RES(FI_MAKE)), 314 aTypeFI (this, SW_RES(FI_TYPE)), 315 aPreview (this, SW_RES(WIN_PREVIEW)), 316 aHDistText (this, SW_RES(TXT_HDIST )), 317 aHDistField (this, SW_RES(FLD_HDIST )), 318 aVDistText (this, SW_RES(TXT_VDIST )), 319 aVDistField (this, SW_RES(FLD_VDIST )), 320 aWidthText (this, SW_RES(TXT_WIDTH )), 321 aWidthField (this, SW_RES(FLD_WIDTH )), 322 aHeightText (this, SW_RES(TXT_HEIGHT )), 323 aHeightField (this, SW_RES(FLD_HEIGHT )), 324 aLeftText (this, SW_RES(TXT_LEFT )), 325 aLeftField (this, SW_RES(FLD_LEFT )), 326 aUpperText (this, SW_RES(TXT_UPPER )), 327 aUpperField (this, SW_RES(FLD_UPPER )), 328 aColsText (this, SW_RES(TXT_COLUMNS)), 329 aColsField (this, SW_RES(FLD_COLUMNS)), 330 aRowsText (this, SW_RES(TXT_ROWS )), 331 aRowsField (this, SW_RES(FLD_ROWS )), 332 aPaperWidthText (this, SW_RES(TXT_PAPER_WIDTH)), 333 aPaperWidthField (this, SW_RES(FLD_PAPER_WIDTH)), 334 aPaperHeightText (this, SW_RES(TXT_PAPER_HEIGHT)), 335 aPaperHeightField(this, SW_RES(FLD_PAPER_HEIGHT)), 336 aSavePB (this, SW_RES(PB_SAVE )), 337 bModified(sal_False), 338 aItem ((const SwLabItem&) rSet.Get(FN_LABEL)) 339 { 340 FreeResource(); 341 SetExchangeSupport(); 342 343 // Metriken 344 FieldUnit aMetric = ::GetDfltMetric(sal_False); 345 SetMetric(aHDistField , aMetric); 346 SetMetric(aVDistField , aMetric); 347 SetMetric(aWidthField , aMetric); 348 SetMetric(aHeightField, aMetric); 349 SetMetric(aLeftField , aMetric); 350 SetMetric(aUpperField , aMetric); 351 SetMetric(aPaperWidthField, aMetric); 352 SetMetric(aPaperHeightField, aMetric); 353 354 // Handler installieren 355 Link aLk = LINK(this, SwLabFmtPage, ModifyHdl); 356 aHDistField .SetModifyHdl( aLk ); 357 aVDistField .SetModifyHdl( aLk ); 358 aWidthField .SetModifyHdl( aLk ); 359 aHeightField.SetModifyHdl( aLk ); 360 aLeftField .SetModifyHdl( aLk ); 361 aUpperField .SetModifyHdl( aLk ); 362 aColsField .SetModifyHdl( aLk ); 363 aRowsField .SetModifyHdl( aLk ); 364 aPaperWidthField .SetModifyHdl( aLk ); 365 aPaperHeightField.SetModifyHdl( aLk ); 366 367 aLk = LINK(this, SwLabFmtPage, LoseFocusHdl); 368 aHDistField .SetLoseFocusHdl( aLk ); 369 aVDistField .SetLoseFocusHdl( aLk ); 370 aWidthField .SetLoseFocusHdl( aLk ); 371 aHeightField.SetLoseFocusHdl( aLk ); 372 aLeftField .SetLoseFocusHdl( aLk ); 373 aUpperField .SetLoseFocusHdl( aLk ); 374 aColsField .SetLoseFocusHdl( aLk ); 375 aRowsField .SetLoseFocusHdl( aLk ); 376 377 aSavePB.SetClickHdl( LINK (this, SwLabFmtPage, SaveHdl)); 378 // Timer einstellen 379 aPreviewTimer.SetTimeout(1000); 380 aPreviewTimer.SetTimeoutHdl(LINK(this, SwLabFmtPage, PreviewHdl)); 381 } 382 383 // -------------------------------------------------------------------------- 384 385 386 387 SwLabFmtPage::~SwLabFmtPage() 388 { 389 } 390 391 // Modify-Handler der MetricFields. Preview-Timer starten ------------------- 392 393 394 395 IMPL_LINK_INLINE_START( SwLabFmtPage, ModifyHdl, Edit *, EMPTYARG ) 396 { 397 bModified = sal_True; 398 aPreviewTimer.Start(); 399 return 0; 400 } 401 IMPL_LINK_INLINE_END( SwLabFmtPage, ModifyHdl, Edit *, EMPTYARG ) 402 403 // Preview invalidaten ------------------------------------------------------ 404 405 406 407 IMPL_LINK_INLINE_START( SwLabFmtPage, PreviewHdl, Timer *, EMPTYARG ) 408 { 409 aPreviewTimer.Stop(); 410 ChangeMinMax(); 411 FillItem( aItem ); 412 aPreview.Update( aItem ); 413 414 return 0; 415 } 416 IMPL_LINK_INLINE_END( SwLabFmtPage, PreviewHdl, Timer *, EMPTYARG ) 417 418 // LoseFocus-Handler: Bei Aenderung sofort updaten -------------------------- 419 420 421 422 IMPL_LINK_INLINE_START( SwLabFmtPage, LoseFocusHdl, Control *, pControl ) 423 { 424 if (((Edit*) pControl)->IsModified()) 425 PreviewHdl(0); 426 return 0; 427 } 428 IMPL_LINK_INLINE_END( SwLabFmtPage, LoseFocusHdl, Control *, pControl ) 429 430 // Minima und Maxima fuer Fields festlegen ---------------------------------- 431 432 433 void SwLabFmtPage::ChangeMinMax() 434 { 435 long lMax = 31748; // 56 cm 436 437 // Min und Max 438 439 long lLeft = static_cast< long >(GETFLDVAL(aLeftField )), 440 lUpper = static_cast< long >(GETFLDVAL(aUpperField)), 441 lHDist = static_cast< long >(GETFLDVAL(aHDistField)), 442 lVDist = static_cast< long >(GETFLDVAL(aVDistField)); 443 444 long nMinSize = 10; // 0,1cm 445 446 aHDistField .SetMin(nMinSize, FUNIT_CM); 447 aVDistField .SetMin(nMinSize, FUNIT_CM); 448 449 aHDistField .SetMax((long) 100 * ((lMax - lLeft ) / Max(1L, (long) aColsField.GetValue())), FUNIT_TWIP); 450 aVDistField .SetMax((long) 100 * ((lMax - lUpper) / Max(1L, (long) aRowsField.GetValue())), FUNIT_TWIP); 451 452 aWidthField .SetMin(nMinSize, FUNIT_CM); 453 aHeightField.SetMin(nMinSize, FUNIT_CM); 454 455 aWidthField .SetMax((long) 100 * (lHDist), FUNIT_TWIP); 456 aHeightField.SetMax((long) 100 * (lVDist), FUNIT_TWIP); 457 458 aLeftField .SetMax((long) 100 * (lMax - (long) aColsField.GetValue() * GETFLDVAL(aHDistField)), FUNIT_TWIP); 459 aUpperField .SetMax((long) 100 * (lMax - (long) aRowsField.GetValue() * GETFLDVAL(aVDistField)), FUNIT_TWIP); 460 461 aColsField .SetMax((lMax - lLeft ) / Max(1L, lHDist)); 462 aRowsField .SetMax((lMax - lUpper) / Max(1L, lVDist)); 463 464 // First und Last 465 466 aHDistField .SetFirst(aHDistField .GetMin()); 467 aVDistField .SetFirst(aVDistField .GetMin()); 468 469 aHDistField .SetLast (aHDistField .GetMax()); 470 aVDistField .SetLast (aVDistField .GetMax()); 471 472 aWidthField .SetFirst(aWidthField .GetMin()); 473 aHeightField.SetFirst(aHeightField.GetMin()); 474 475 aWidthField .SetLast (aWidthField .GetMax()); 476 aHeightField.SetLast (aHeightField.GetMax()); 477 478 aLeftField .SetLast (aLeftField .GetMax()); 479 aUpperField .SetLast (aUpperField .GetMax()); 480 481 aColsField .SetLast (aColsField .GetMax()); 482 aRowsField .SetLast (aRowsField .GetMax()); 483 484 aHDistField .Reformat(); 485 aVDistField .Reformat(); 486 aWidthField .Reformat(); 487 aHeightField.Reformat(); 488 aLeftField .Reformat(); 489 aUpperField .Reformat(); 490 aColsField .Reformat(); 491 aRowsField .Reformat(); 492 } 493 494 // -------------------------------------------------------------------------- 495 496 497 498 SfxTabPage* SwLabFmtPage::Create(Window* pParent, const SfxItemSet& rSet) 499 { 500 return new SwLabFmtPage(pParent, rSet); 501 } 502 503 // ---------------------------------------------------------------------------- 504 505 506 507 void SwLabFmtPage::ActivatePage(const SfxItemSet& rSet) 508 { 509 SfxItemSet aSet(rSet); 510 Reset(aSet); 511 } 512 513 // ---------------------------------------------------------------------------- 514 515 516 517 int SwLabFmtPage::DeactivatePage(SfxItemSet* _pSet) 518 { 519 if (_pSet) 520 FillItemSet(*_pSet); 521 522 return sal_True; 523 } 524 525 // -------------------------------------------------------------------------- 526 527 528 529 void SwLabFmtPage::FillItem(SwLabItem& rItem) 530 { 531 if (bModified) 532 { 533 rItem.aMake = rItem.aType = SW_RESSTR(STR_CUSTOM); 534 535 SwLabRec& rRec = *GetParent()->Recs()[0]; 536 rItem.lHDist = rRec.lHDist = static_cast< long >(GETFLDVAL(aHDistField )); 537 rItem.lVDist = rRec.lVDist = static_cast< long >(GETFLDVAL(aVDistField )); 538 rItem.lWidth = rRec.lWidth = static_cast< long >(GETFLDVAL(aWidthField )); 539 rItem.lHeight = rRec.lHeight = static_cast< long >(GETFLDVAL(aHeightField)); 540 rItem.lLeft = rRec.lLeft = static_cast< long >(GETFLDVAL(aLeftField )); 541 rItem.lUpper = rRec.lUpper = static_cast< long >(GETFLDVAL(aUpperField )); 542 rItem.nCols = rRec.nCols = (sal_uInt16) aColsField.GetValue(); 543 rItem.nRows = rRec.nRows = (sal_uInt16) aRowsField.GetValue(); 544 rItem.lPaperWidth = rRec.lPaperWidth = static_cast< long >(GETFLDVAL(aPaperWidthField)); 545 rItem.lPaperHeight = rRec.lPaperHeight = static_cast< long >(GETFLDVAL(aPaperHeightField)); 546 } 547 } 548 549 // -------------------------------------------------------------------------- 550 551 552 553 sal_Bool SwLabFmtPage::FillItemSet(SfxItemSet& rSet) 554 { 555 FillItem(aItem); 556 rSet.Put(aItem); 557 558 return sal_True; 559 } 560 561 // -------------------------------------------------------------------------- 562 void SwLabFmtPage::Reset(const SfxItemSet& ) 563 { 564 // Fields initialisieren 565 GetParent()->GetLabItem(aItem); 566 567 aHDistField .SetMax(100 * aItem.lHDist , FUNIT_TWIP); 568 aVDistField .SetMax(100 * aItem.lVDist , FUNIT_TWIP); 569 aWidthField .SetMax(100 * aItem.lWidth , FUNIT_TWIP); 570 aHeightField.SetMax(100 * aItem.lHeight, FUNIT_TWIP); 571 aLeftField .SetMax(100 * aItem.lLeft , FUNIT_TWIP); 572 aUpperField .SetMax(100 * aItem.lUpper , FUNIT_TWIP); 573 574 SETFLDVAL(aHDistField , aItem.lHDist ); 575 SETFLDVAL(aVDistField , aItem.lVDist ); 576 SETFLDVAL(aWidthField , aItem.lWidth ); 577 SETFLDVAL(aHeightField, aItem.lHeight); 578 SETFLDVAL(aLeftField , aItem.lLeft ); 579 SETFLDVAL(aUpperField , aItem.lUpper ); 580 SETFLDVAL(aPaperWidthField , aItem.lPaperWidth ); 581 SETFLDVAL(aPaperHeightField, aItem.lPaperHeight); 582 583 aColsField.SetMax(aItem.nCols); 584 aRowsField.SetMax(aItem.nRows); 585 586 aColsField .SetValue(aItem.nCols); 587 aRowsField .SetValue(aItem.nRows); 588 aMakeFI.SetText(aItem.aMake); 589 aTypeFI.SetText(aItem.aType); 590 PreviewHdl(0); 591 } 592 /* -----------------------------22.01.01 15:11-------------------------------- 593 594 ---------------------------------------------------------------------------*/ 595 596 IMPL_LINK( SwLabFmtPage, SaveHdl, PushButton *, EMPTYARG ) 597 { 598 SwLabRec aRec; 599 aRec.lHDist = static_cast< long >(GETFLDVAL(aHDistField )); 600 aRec.lVDist = static_cast< long >(GETFLDVAL(aVDistField )); 601 aRec.lWidth = static_cast< long >(GETFLDVAL(aWidthField )); 602 aRec.lHeight = static_cast< long >(GETFLDVAL(aHeightField)); 603 aRec.lLeft = static_cast< long >(GETFLDVAL(aLeftField )); 604 aRec.lUpper = static_cast< long >(GETFLDVAL(aUpperField )); 605 aRec.nCols = (sal_uInt16) aColsField.GetValue(); 606 aRec.nRows = (sal_uInt16) aRowsField.GetValue(); 607 aRec.lPaperWidth = static_cast< long >(GETFLDVAL(aPaperWidthField )); 608 aRec.lPaperHeight = static_cast< long >(GETFLDVAL(aPaperHeightField)); 609 aRec.bCont = aItem.bCont; 610 SwSaveLabelDlg* pSaveDlg = new SwSaveLabelDlg(this, aRec); 611 pSaveDlg->SetLabel(aItem.aLstMake, aItem.aLstType); 612 pSaveDlg->Execute(); 613 if(pSaveDlg->GetLabel(aItem)) 614 { 615 bModified = sal_False; 616 const Sequence<OUString>& rMan = GetParent()->GetLabelsConfig().GetManufacturers(); 617 SvStringsDtor& rMakes = GetParent()->Makes(); 618 if(rMakes.Count() < (sal_uInt16)rMan.getLength()) 619 { 620 rMakes.DeleteAndDestroy(0, rMakes.Count()); 621 const OUString* pMan = rMan.getConstArray(); 622 for(sal_Int32 nMan = 0; nMan < rMan.getLength(); nMan++) 623 { 624 rMakes.Insert( new String(pMan[nMan]), rMakes.Count() ); 625 } 626 } 627 aMakeFI.SetText(aItem.aMake); 628 aTypeFI.SetText(aItem.aType); 629 } 630 delete pSaveDlg; 631 return 0; 632 } 633 /* -----------------------------23.01.01 10:41-------------------------------- 634 635 ---------------------------------------------------------------------------*/ 636 SwSaveLabelDlg::SwSaveLabelDlg(SwLabFmtPage* pParent, SwLabRec& rRec) : 637 ModalDialog(pParent, SW_RES(DLG_SAVE_LABEL)), 638 aOptionsFL(this,SW_RES(FL_OPTIONS )), 639 aMakeFT(this, SW_RES(FT_MAKE )), 640 aMakeCB(this, SW_RES(CB_MAKE )), 641 aTypeFT(this, SW_RES(FT_TYPE )), 642 aTypeED(this, SW_RES(ED_TYPE )), 643 644 aOKPB(this, SW_RES(PB_OK )), 645 aCancelPB(this, SW_RES(PB_CANCEL )), 646 aHelpPB(this, SW_RES(PB_HELP )), 647 648 aQueryMB(this, SW_RES(MB_QUERY )), 649 650 bSuccess(sal_False), 651 pLabPage(pParent), 652 rLabRec(rRec) 653 { 654 FreeResource(); 655 656 aOKPB.SetClickHdl(LINK(this, SwSaveLabelDlg, OkHdl)); 657 Link aLk(LINK(this, SwSaveLabelDlg, ModifyHdl)); 658 aMakeCB.SetModifyHdl(aLk); 659 aTypeED.SetModifyHdl(aLk); 660 661 SwLabelConfig& rCfg = pLabPage->GetParent()->GetLabelsConfig(); 662 const Sequence<OUString>& rMan = rCfg.GetManufacturers(); 663 const OUString* pMan = rMan.getConstArray(); 664 for(sal_Int32 i = 0; i < rMan.getLength(); i++) 665 aMakeCB.InsertEntry(pMan[i]); 666 } 667 /* -----------------------------23.01.01 10:40-------------------------------- 668 669 ---------------------------------------------------------------------------*/ 670 IMPL_LINK(SwSaveLabelDlg, OkHdl, OKButton*, EMPTYARG) 671 { 672 SwLabelConfig& rCfg = pLabPage->GetParent()->GetLabelsConfig(); 673 String sMake(aMakeCB.GetText()); 674 String sType(aTypeED.GetText()); 675 if(rCfg.HasLabel(sMake, sType)) 676 { 677 String sTmp(aQueryMB.GetMessText()); 678 String sQuery(sTmp); 679 sQuery.SearchAndReplace(C2S("%1"), sMake); 680 sQuery.SearchAndReplace(C2S("%2"), sType); 681 aQueryMB.SetMessText(sQuery); 682 683 short eRet = aQueryMB.Execute(); 684 aQueryMB.SetMessText(sTmp); 685 if(RET_YES != eRet) 686 return 0; 687 } 688 rLabRec.aType = sType; 689 rCfg.SaveLabel(sMake, sType, rLabRec); 690 bSuccess = sal_True; 691 EndDialog(RET_OK); 692 return 0; 693 } 694 /* -----------------------------23.01.01 11:22-------------------------------- 695 696 ---------------------------------------------------------------------------*/ 697 IMPL_LINK(SwSaveLabelDlg, ModifyHdl, Edit*, EMPTYARG) 698 { 699 aOKPB.Enable(aMakeCB.GetText().Len() && aTypeED.GetText().Len()); 700 return 0; 701 } 702 /* -----------------------------23.01.01 16:06-------------------------------- 703 704 ---------------------------------------------------------------------------*/ 705 sal_Bool SwSaveLabelDlg::GetLabel(SwLabItem& rItem) 706 { 707 if(bSuccess) 708 { 709 rItem.aMake = aMakeCB.GetText(); 710 rItem.aType = aTypeED.GetText(); 711 rItem.lHDist = rLabRec.lHDist; 712 rItem.lVDist = rLabRec.lVDist; 713 rItem.lWidth = rLabRec.lWidth; 714 rItem.lHeight = rLabRec.lHeight; 715 rItem.lLeft = rLabRec.lLeft; 716 rItem.lUpper = rLabRec.lUpper; 717 rItem.nCols = rLabRec.nCols; 718 rItem.nRows = rLabRec.nRows; 719 rItem.lPaperWidth = rLabRec.lPaperWidth; 720 rItem.lPaperHeight = rLabRec.lPaperHeight; 721 } 722 return bSuccess; 723 } 724 725