LCOV - code coverage report
Current view: top level - libreoffice/sw/source/ui/envelp - labfmt.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 389 0.0 %
Date: 2012-12-27 Functions: 0 32 0.0 %
Legend: Lines: hit not hit

          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: */

Generated by: LCOV version 1.10