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 aSavePB (this, SW_RES(PB_SAVE )), 333 bModified(sal_False), 334 aItem ((const SwLabItem&) rSet.Get(FN_LABEL)) 335 { 336 FreeResource(); 337 SetExchangeSupport(); 338 339 // Metriken 340 FieldUnit aMetric = ::GetDfltMetric(sal_False); 341 SetMetric(aHDistField , aMetric); 342 SetMetric(aVDistField , aMetric); 343 SetMetric(aWidthField , aMetric); 344 SetMetric(aHeightField, aMetric); 345 SetMetric(aLeftField , aMetric); 346 SetMetric(aUpperField , aMetric); 347 348 // Handler installieren 349 Link aLk = LINK(this, SwLabFmtPage, ModifyHdl); 350 aHDistField .SetModifyHdl( aLk ); 351 aVDistField .SetModifyHdl( aLk ); 352 aWidthField .SetModifyHdl( aLk ); 353 aHeightField.SetModifyHdl( aLk ); 354 aLeftField .SetModifyHdl( aLk ); 355 aUpperField .SetModifyHdl( aLk ); 356 aColsField .SetModifyHdl( aLk ); 357 aRowsField .SetModifyHdl( aLk ); 358 359 aLk = LINK(this, SwLabFmtPage, LoseFocusHdl); 360 aHDistField .SetLoseFocusHdl( aLk ); 361 aVDistField .SetLoseFocusHdl( aLk ); 362 aWidthField .SetLoseFocusHdl( aLk ); 363 aHeightField.SetLoseFocusHdl( aLk ); 364 aLeftField .SetLoseFocusHdl( aLk ); 365 aUpperField .SetLoseFocusHdl( aLk ); 366 aColsField .SetLoseFocusHdl( aLk ); 367 aRowsField .SetLoseFocusHdl( aLk ); 368 369 aSavePB.SetClickHdl( LINK (this, SwLabFmtPage, SaveHdl)); 370 // Timer einstellen 371 aPreviewTimer.SetTimeout(1000); 372 aPreviewTimer.SetTimeoutHdl(LINK(this, SwLabFmtPage, PreviewHdl)); 373 } 374 375 // -------------------------------------------------------------------------- 376 377 378 379 SwLabFmtPage::~SwLabFmtPage() 380 { 381 } 382 383 // Modify-Handler der MetricFields. Preview-Timer starten ------------------- 384 385 386 387 IMPL_LINK_INLINE_START( SwLabFmtPage, ModifyHdl, Edit *, EMPTYARG ) 388 { 389 bModified = sal_True; 390 aPreviewTimer.Start(); 391 return 0; 392 } 393 IMPL_LINK_INLINE_END( SwLabFmtPage, ModifyHdl, Edit *, EMPTYARG ) 394 395 // Preview invalidaten ------------------------------------------------------ 396 397 398 399 IMPL_LINK_INLINE_START( SwLabFmtPage, PreviewHdl, Timer *, EMPTYARG ) 400 { 401 aPreviewTimer.Stop(); 402 ChangeMinMax(); 403 FillItem( aItem ); 404 aPreview.Update( aItem ); 405 406 return 0; 407 } 408 IMPL_LINK_INLINE_END( SwLabFmtPage, PreviewHdl, Timer *, EMPTYARG ) 409 410 // LoseFocus-Handler: Bei Aenderung sofort updaten -------------------------- 411 412 413 414 IMPL_LINK_INLINE_START( SwLabFmtPage, LoseFocusHdl, Control *, pControl ) 415 { 416 if (((Edit*) pControl)->IsModified()) 417 PreviewHdl(0); 418 return 0; 419 } 420 IMPL_LINK_INLINE_END( SwLabFmtPage, LoseFocusHdl, Control *, pControl ) 421 422 // Minima und Maxima fuer Fields festlegen ---------------------------------- 423 424 425 void SwLabFmtPage::ChangeMinMax() 426 { 427 long lMax = 31748; // 56 cm 428 429 // Min und Max 430 431 long lLeft = static_cast< long >(GETFLDVAL(aLeftField )), 432 lUpper = static_cast< long >(GETFLDVAL(aUpperField)), 433 lHDist = static_cast< long >(GETFLDVAL(aHDistField)), 434 lVDist = static_cast< long >(GETFLDVAL(aVDistField)); 435 436 long nMinSize = 10; // 0,1cm 437 438 aHDistField .SetMin(nMinSize, FUNIT_CM); 439 aVDistField .SetMin(nMinSize, FUNIT_CM); 440 441 aHDistField .SetMax((long) 100 * ((lMax - lLeft ) / Max(1L, (long) aColsField.GetValue())), FUNIT_TWIP); 442 aVDistField .SetMax((long) 100 * ((lMax - lUpper) / Max(1L, (long) aRowsField.GetValue())), FUNIT_TWIP); 443 444 aWidthField .SetMin(nMinSize, FUNIT_CM); 445 aHeightField.SetMin(nMinSize, FUNIT_CM); 446 447 aWidthField .SetMax((long) 100 * (lHDist), FUNIT_TWIP); 448 aHeightField.SetMax((long) 100 * (lVDist), FUNIT_TWIP); 449 450 aLeftField .SetMax((long) 100 * (lMax - (long) aColsField.GetValue() * GETFLDVAL(aHDistField)), FUNIT_TWIP); 451 aUpperField .SetMax((long) 100 * (lMax - (long) aRowsField.GetValue() * GETFLDVAL(aVDistField)), FUNIT_TWIP); 452 453 aColsField .SetMax((lMax - lLeft ) / Max(1L, lHDist)); 454 aRowsField .SetMax((lMax - lUpper) / Max(1L, lVDist)); 455 456 // First und Last 457 458 aHDistField .SetFirst(aHDistField .GetMin()); 459 aVDistField .SetFirst(aVDistField .GetMin()); 460 461 aHDistField .SetLast (aHDistField .GetMax()); 462 aVDistField .SetLast (aVDistField .GetMax()); 463 464 aWidthField .SetFirst(aWidthField .GetMin()); 465 aHeightField.SetFirst(aHeightField.GetMin()); 466 467 aWidthField .SetLast (aWidthField .GetMax()); 468 aHeightField.SetLast (aHeightField.GetMax()); 469 470 aLeftField .SetLast (aLeftField .GetMax()); 471 aUpperField .SetLast (aUpperField .GetMax()); 472 473 aColsField .SetLast (aColsField .GetMax()); 474 aRowsField .SetLast (aRowsField .GetMax()); 475 476 aHDistField .Reformat(); 477 aVDistField .Reformat(); 478 aWidthField .Reformat(); 479 aHeightField.Reformat(); 480 aLeftField .Reformat(); 481 aUpperField .Reformat(); 482 aColsField .Reformat(); 483 aRowsField .Reformat(); 484 } 485 486 // -------------------------------------------------------------------------- 487 488 489 490 SfxTabPage* SwLabFmtPage::Create(Window* pParent, const SfxItemSet& rSet) 491 { 492 return new SwLabFmtPage(pParent, rSet); 493 } 494 495 // ---------------------------------------------------------------------------- 496 497 498 499 void SwLabFmtPage::ActivatePage(const SfxItemSet& rSet) 500 { 501 SfxItemSet aSet(rSet); 502 Reset(aSet); 503 } 504 505 // ---------------------------------------------------------------------------- 506 507 508 509 int SwLabFmtPage::DeactivatePage(SfxItemSet* _pSet) 510 { 511 if (_pSet) 512 FillItemSet(*_pSet); 513 514 return sal_True; 515 } 516 517 // -------------------------------------------------------------------------- 518 519 520 521 void SwLabFmtPage::FillItem(SwLabItem& rItem) 522 { 523 if (bModified) 524 { 525 rItem.aMake = rItem.aType = SW_RESSTR(STR_CUSTOM); 526 527 SwLabRec& rRec = *GetParent()->Recs()[0]; 528 rItem.lHDist = rRec.lHDist = static_cast< long >(GETFLDVAL(aHDistField )); 529 rItem.lVDist = rRec.lVDist = static_cast< long >(GETFLDVAL(aVDistField )); 530 rItem.lWidth = rRec.lWidth = static_cast< long >(GETFLDVAL(aWidthField )); 531 rItem.lHeight = rRec.lHeight = static_cast< long >(GETFLDVAL(aHeightField)); 532 rItem.lLeft = rRec.lLeft = static_cast< long >(GETFLDVAL(aLeftField )); 533 rItem.lUpper = rRec.lUpper = static_cast< long >(GETFLDVAL(aUpperField )); 534 rItem.nCols = rRec.nCols = (sal_uInt16) aColsField.GetValue(); 535 rItem.nRows = rRec.nRows = (sal_uInt16) aRowsField.GetValue(); 536 } 537 } 538 539 // -------------------------------------------------------------------------- 540 541 542 543 sal_Bool SwLabFmtPage::FillItemSet(SfxItemSet& rSet) 544 { 545 FillItem(aItem); 546 rSet.Put(aItem); 547 548 return sal_True; 549 } 550 551 // -------------------------------------------------------------------------- 552 void SwLabFmtPage::Reset(const SfxItemSet& ) 553 { 554 // Fields initialisieren 555 GetParent()->GetLabItem(aItem); 556 557 aHDistField .SetMax(100 * aItem.lHDist , FUNIT_TWIP); 558 aVDistField .SetMax(100 * aItem.lVDist , FUNIT_TWIP); 559 aWidthField .SetMax(100 * aItem.lWidth , FUNIT_TWIP); 560 aHeightField.SetMax(100 * aItem.lHeight, FUNIT_TWIP); 561 aLeftField .SetMax(100 * aItem.lLeft , FUNIT_TWIP); 562 aUpperField .SetMax(100 * aItem.lUpper , FUNIT_TWIP); 563 564 SETFLDVAL(aHDistField , aItem.lHDist ); 565 SETFLDVAL(aVDistField , aItem.lVDist ); 566 SETFLDVAL(aWidthField , aItem.lWidth ); 567 SETFLDVAL(aHeightField, aItem.lHeight); 568 SETFLDVAL(aLeftField , aItem.lLeft ); 569 SETFLDVAL(aUpperField , aItem.lUpper ); 570 571 aColsField.SetMax(aItem.nCols); 572 aRowsField.SetMax(aItem.nRows); 573 574 aColsField .SetValue(aItem.nCols); 575 aRowsField .SetValue(aItem.nRows); 576 aMakeFI.SetText(aItem.aMake); 577 aTypeFI.SetText(aItem.aType); 578 PreviewHdl(0); 579 } 580 /* -----------------------------22.01.01 15:11-------------------------------- 581 582 ---------------------------------------------------------------------------*/ 583 584 IMPL_LINK( SwLabFmtPage, SaveHdl, PushButton *, EMPTYARG ) 585 { 586 SwLabRec aRec; 587 aRec.lHDist = static_cast< long >(GETFLDVAL(aHDistField )); 588 aRec.lVDist = static_cast< long >(GETFLDVAL(aVDistField )); 589 aRec.lWidth = static_cast< long >(GETFLDVAL(aWidthField )); 590 aRec.lHeight = static_cast< long >(GETFLDVAL(aHeightField)); 591 aRec.lLeft = static_cast< long >(GETFLDVAL(aLeftField )); 592 aRec.lUpper = static_cast< long >(GETFLDVAL(aUpperField )); 593 aRec.nCols = (sal_uInt16) aColsField.GetValue(); 594 aRec.nRows = (sal_uInt16) aRowsField.GetValue(); 595 aRec.bCont = aItem.bCont; 596 SwSaveLabelDlg* pSaveDlg = new SwSaveLabelDlg(this, aRec); 597 pSaveDlg->SetLabel(aItem.aLstMake, aItem.aLstType); 598 pSaveDlg->Execute(); 599 if(pSaveDlg->GetLabel(aItem)) 600 { 601 bModified = sal_False; 602 const Sequence<OUString>& rMan = GetParent()->GetLabelsConfig().GetManufacturers(); 603 SvStringsDtor& rMakes = GetParent()->Makes(); 604 if(rMakes.Count() < (sal_uInt16)rMan.getLength()) 605 { 606 rMakes.DeleteAndDestroy(0, rMakes.Count()); 607 const OUString* pMan = rMan.getConstArray(); 608 for(sal_Int32 nMan = 0; nMan < rMan.getLength(); nMan++) 609 { 610 rMakes.Insert( new String(pMan[nMan]), rMakes.Count() ); 611 } 612 } 613 aMakeFI.SetText(aItem.aMake); 614 aTypeFI.SetText(aItem.aType); 615 } 616 delete pSaveDlg; 617 return 0; 618 } 619 /* -----------------------------23.01.01 10:41-------------------------------- 620 621 ---------------------------------------------------------------------------*/ 622 SwSaveLabelDlg::SwSaveLabelDlg(SwLabFmtPage* pParent, SwLabRec& rRec) : 623 ModalDialog(pParent, SW_RES(DLG_SAVE_LABEL)), 624 aOptionsFL(this,SW_RES(FL_OPTIONS )), 625 aMakeFT(this, SW_RES(FT_MAKE )), 626 aMakeCB(this, SW_RES(CB_MAKE )), 627 aTypeFT(this, SW_RES(FT_TYPE )), 628 aTypeED(this, SW_RES(ED_TYPE )), 629 630 aOKPB(this, SW_RES(PB_OK )), 631 aCancelPB(this, SW_RES(PB_CANCEL )), 632 aHelpPB(this, SW_RES(PB_HELP )), 633 634 aQueryMB(this, SW_RES(MB_QUERY )), 635 636 bSuccess(sal_False), 637 pLabPage(pParent), 638 rLabRec(rRec) 639 { 640 FreeResource(); 641 642 aOKPB.SetClickHdl(LINK(this, SwSaveLabelDlg, OkHdl)); 643 Link aLk(LINK(this, SwSaveLabelDlg, ModifyHdl)); 644 aMakeCB.SetModifyHdl(aLk); 645 aTypeED.SetModifyHdl(aLk); 646 647 SwLabelConfig& rCfg = pLabPage->GetParent()->GetLabelsConfig(); 648 const Sequence<OUString>& rMan = rCfg.GetManufacturers(); 649 const OUString* pMan = rMan.getConstArray(); 650 for(sal_Int32 i = 0; i < rMan.getLength(); i++) 651 aMakeCB.InsertEntry(pMan[i]); 652 } 653 /* -----------------------------23.01.01 10:40-------------------------------- 654 655 ---------------------------------------------------------------------------*/ 656 IMPL_LINK(SwSaveLabelDlg, OkHdl, OKButton*, EMPTYARG) 657 { 658 SwLabelConfig& rCfg = pLabPage->GetParent()->GetLabelsConfig(); 659 String sMake(aMakeCB.GetText()); 660 String sType(aTypeED.GetText()); 661 if(rCfg.HasLabel(sMake, sType)) 662 { 663 String sTmp(aQueryMB.GetMessText()); 664 String sQuery(sTmp); 665 sQuery.SearchAndReplace(C2S("%1"), sMake); 666 sQuery.SearchAndReplace(C2S("%2"), sType); 667 aQueryMB.SetMessText(sQuery); 668 669 short eRet = aQueryMB.Execute(); 670 aQueryMB.SetMessText(sTmp); 671 if(RET_YES != eRet) 672 return 0; 673 } 674 rLabRec.aType = sType; 675 rCfg.SaveLabel(sMake, sType, rLabRec); 676 bSuccess = sal_True; 677 EndDialog(RET_OK); 678 return 0; 679 } 680 /* -----------------------------23.01.01 11:22-------------------------------- 681 682 ---------------------------------------------------------------------------*/ 683 IMPL_LINK(SwSaveLabelDlg, ModifyHdl, Edit*, EMPTYARG) 684 { 685 aOKPB.Enable(aMakeCB.GetText().Len() && aTypeED.GetText().Len()); 686 return 0; 687 } 688 /* -----------------------------23.01.01 16:06-------------------------------- 689 690 ---------------------------------------------------------------------------*/ 691 sal_Bool SwSaveLabelDlg::GetLabel(SwLabItem& rItem) 692 { 693 if(bSuccess) 694 { 695 rItem.aMake = aMakeCB.GetText(); 696 rItem.aType = aTypeED.GetText(); 697 rItem.lHDist = rLabRec.lHDist; 698 rItem.lVDist = rLabRec.lVDist; 699 rItem.lWidth = rLabRec.lWidth; 700 rItem.lHeight = rLabRec.lHeight; 701 rItem.lLeft = rLabRec.lLeft; 702 rItem.lUpper = rLabRec.lUpper; 703 rItem.nCols = rLabRec.nCols; 704 rItem.nRows = rLabRec.nRows; 705 } 706 return bSuccess; 707 } 708 709