diff options
Diffstat (limited to 'sw/source/ui/envelp/labfmt.cxx')
-rw-r--r-- | sw/source/ui/envelp/labfmt.cxx | 655 |
1 files changed, 655 insertions, 0 deletions
diff --git a/sw/source/ui/envelp/labfmt.cxx b/sw/source/ui/envelp/labfmt.cxx new file mode 100644 index 000000000000..4567ae74c747 --- /dev/null +++ b/sw/source/ui/envelp/labfmt.cxx @@ -0,0 +1,655 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sw.hxx" +#ifdef SW_DLLIMPLEMENTATION +#undef SW_DLLIMPLEMENTATION +#endif + + +#include <tools/poly.hxx> +#include <viewopt.hxx> + +#include "swtypes.hxx" +#include "cmdid.h" +#include "label.hxx" +#include "labimp.hxx" +#include "labimg.hxx" +#include "labfmt.hxx" +#include "uitool.hxx" + +#include "label.hrc" +#include "labfmt.hrc" +#include <unomid.h> + +using namespace utl; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::beans; + +using ::rtl::OUString; + +#define ROUND(x) ((sal_uInt16) ((x) + .5)) + +SwLabPreview::SwLabPreview( const SwLabFmtPage* pParent, const ResId& rResID ) : + + Window((Window*) pParent, rResID), + + aGrayColor(COL_LIGHTGRAY), + + aHDistStr (SW_RES(STR_HDIST )), + aVDistStr (SW_RES(STR_VDIST )), + aWidthStr (SW_RES(STR_WIDTH )), + aHeightStr(SW_RES(STR_HEIGHT)), + aLeftStr (SW_RES(STR_LEFT )), + aUpperStr (SW_RES(STR_UPPER )), + aColsStr (SW_RES(STR_COLS )), + aRowsStr (SW_RES(STR_ROWS )) +{ + SetMapMode(MAP_PIXEL); + + const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); + const Color& rWinColor = rStyleSettings.GetWindowColor(); + SetBackground(Wallpaper(rWinColor)); + + Font aFont = GetFont(); + aFont.SetTransparent(sal_True); + aFont.SetWeight (WEIGHT_NORMAL); + SetFont(aFont); + + const Size aSz(GetOutputSizePixel()); + + lOutWPix = aSz.Width (); + lOutHPix = aSz.Height(); + + + lHDistWidth = GetTextWidth(aHDistStr ); + lVDistWidth = GetTextWidth(aVDistStr ); + lHeightWidth = GetTextWidth(aHeightStr); + lLeftWidth = GetTextWidth(aLeftStr ); + lUpperWidth = GetTextWidth(aUpperStr ); + lColsWidth = GetTextWidth(aColsStr ); + + lXHeight = GetTextHeight(); + lXWidth = GetTextWidth('X'); + + // Scale factor + float fx = (float)(lOutWPix - (2 * (lLeftWidth + 15))) / (float)lOutWPix; + + lOutWPix23 = (long)((float)lOutWPix * fx); + lOutHPix23 = (long)((float)lOutHPix * fx); +} + +SwLabPreview::~SwLabPreview() +{ +} + +void SwLabPreview::Paint(const Rectangle &) +{ + const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); + const Color& rWinColor = rStyleSettings.GetWindowColor(); + const Color& rFieldTextColor = SwViewOption::GetFontColor(); + + Font aFont = GetFont(); + aFont.SetFillColor( rWinColor ); + aFont.SetColor(rFieldTextColor); + SetFont(aFont); + + SetBackground(Wallpaper(rWinColor)); + + SetLineColor(rWinColor); + SetFillColor(aGrayColor); + Font aPaintFont(GetFont()); + aPaintFont.SetTransparent(sal_False); + SetFont(aPaintFont); + + // size of region to be displayed + long lDispW = ROUND(aItem.lLeft + aItem.lHDist); + long lDispH = ROUND(aItem.lUpper + aItem.lVDist); + if (aItem.nCols == 1) + lDispW += ROUND(aItem.lLeft ); + else + lDispW += ROUND(aItem.lHDist / 10); + if (aItem.nRows == 1) + lDispH += ROUND(aItem.lUpper); + else + lDispH += ROUND(aItem.lVDist / 10); + + // Scale factor + float fx = (float) lOutWPix23 / Max(1L, lDispW), + fy = (float) lOutHPix23 / Max(1L, lDispH), + f = fx < fy ? fx : fy; + + // zero point + long lOutlineW = ROUND(f * lDispW); + long lOutlineH = ROUND(f * lDispH); + + long lX0 = (lOutWPix - lOutlineW) / 2; + long lY0 = (lOutHPix - lOutlineH) / 2; + long lX1 = ROUND(lX0 + f * aItem.lLeft ); + long lY1 = ROUND(lY0 + f * aItem.lUpper); + long lX2 = ROUND(lX0 + f * (aItem.lLeft + aItem.lWidth )); + long lY2 = ROUND(lY0 + f * (aItem.lUpper + aItem.lHeight)); + long lX3 = ROUND(lX0 + f * (aItem.lLeft + aItem.lHDist )); + long lY3 = ROUND(lY0 + f * (aItem.lUpper + aItem.lVDist )); + + // draw outline (area) + DrawRect(Rectangle(Point(lX0, lY0), Size(lOutlineW, lOutlineH))); + + // draw outline (border) + SetLineColor(rFieldTextColor); + DrawLine(Point(lX0, lY0), Point(lX0 + lOutlineW - 1, lY0)); // Up + DrawLine(Point(lX0, lY0), Point(lX0, lY0 + lOutlineH - 1)); // Left + if (aItem.nCols == 1) + DrawLine(Point(lX0 + lOutlineW - 1, lY0), Point(lX0 + lOutlineW - 1, lY0 + lOutlineH - 1)); // Right + if (aItem.nRows == 1) + DrawLine(Point(lX0, lY0 + lOutlineH - 1), Point(lX0 + lOutlineW - 1, lY0 + lOutlineH - 1)); // Down + + // Labels + SetClipRegion (Rectangle(Point(lX0, lY0), Size(lOutlineW, lOutlineH))); + SetFillColor(rWinColor); + for (sal_uInt16 nRow = 0; nRow < Min((sal_uInt16) 2, (sal_uInt16) aItem.nRows); nRow++) + for (sal_uInt16 nCol = 0; nCol < Min((sal_uInt16) 2, (sal_uInt16) aItem.nCols); nCol++) + DrawRect(Rectangle( + Point(ROUND(lX0 + f * (aItem.lLeft + nCol * aItem.lHDist)), + ROUND(lY0 + f * (aItem.lUpper + nRow * aItem.lVDist))), + Size (ROUND(f * aItem.lWidth ), + ROUND(f * aItem.lHeight)))); + SetClipRegion(); + + // annotation: left border + if (aItem.lLeft) + { + long lX = (lX0 + lX1) / 2; + DrawArrow(Point(lX0, lY0 - 5), Point(lX1, lY0 - 5), sal_False); + DrawArrow(Point(lX, lY0 - 10), Point(lX, lY0 - 5), sal_True); + DrawText(Point(lX1 - lLeftWidth, lY0 - 10 - lXHeight), aLeftStr); + } + + // annotation: upper border + if (aItem.lUpper) + { + DrawArrow(Point(lX0 - 5, lY0), Point(lX0 - 5, lY1), sal_False); + DrawText(Point(lX0 - 10 - lUpperWidth, ROUND(lY0 + f * aItem.lUpper / 2 - lXHeight / 2)), aUpperStr); + } + + // annotation: width and height + { + long lX = lX2 - lXWidth / 2 - lHeightWidth / 2; + long lY = lY1 + lXHeight; + + DrawLine(Point(lX1, lY), Point(lX2 - 1, lY)); + DrawLine(Point(lX, lY1), Point(lX, lY2 - 1)); + + DrawText(Point(lX1 + lXWidth / 2, lY - lXHeight / 2), aWidthStr); + DrawText(Point(lX - lHeightWidth / 2, lY2 - lXHeight - lXHeight / 2), aHeightStr); + } + + // annotation: horizontal gap + if (aItem.nCols > 1) + { + long lX = (lX1 + lX3) / 2; + DrawArrow(Point(lX1, lY0 - 5), Point(lX3, lY0 - 5), sal_False); + DrawArrow(Point(lX, lY0 - 10), Point(lX, lY0 - 5), sal_True); + DrawText(Point(lX - lHDistWidth / 2, lY0 - 10 - lXHeight), aHDistStr); + } + + // annotation: vertical gap + if (aItem.nRows > 1) + { + DrawArrow(Point(lX0 - 5, lY1), Point(lX0 - 5, lY3), sal_False); + DrawText(Point(lX0 - 10 - lVDistWidth, ROUND(lY1 + f * aItem.lVDist / 2 - lXHeight / 2)), aVDistStr); + } + + // annotation: columns + { + long lY = lY0 + lOutlineH + 4; + DrawArrow(Point(lX0, lY), Point(lX0 + lOutlineW - 1, lY), sal_True); + DrawText(Point((lX0 + lX0 + lOutlineW - 1) / 2 - lColsWidth / 2, lY + 5), aColsStr); + } + + // annotation: lines + { + long lX = lX0 + lOutlineW + 4; + DrawArrow(Point(lX, lY0), Point(lX, lY0 + lOutlineH - 1), sal_True); + DrawText(Point(lX + 5, (lY0 + lY0 + lOutlineH - 1 - lXHeight / 2) / 2), aRowsStr); + } +} + +// Arror or interval character -------------------------------------------- + +void SwLabPreview::DrawArrow(const Point &rP1, const Point &rP2, sal_Bool bArrow) +{ + DrawLine(rP1, rP2); + + if (bArrow) + { + Point aArr[3]; + + // Arrow character + if (rP1.Y() == rP2.Y()) + { + // Horizontal + aArr[0].X() = rP2.X() - 5; + aArr[0].Y() = rP2.Y() - 2; + aArr[1].X() = rP2.X(); + aArr[1].Y() = rP2.Y(); + aArr[2].X() = rP2.X() - 5; + aArr[2].Y() = rP2.Y() + 2; + } + else + { + // Vertical + aArr[0].X() = rP2.X() - 2; + aArr[0].Y() = rP2.Y() - 5; + aArr[1].X() = rP2.X() + 2; + aArr[1].Y() = rP2.Y() - 5; + aArr[2].X() = rP2.X(); + aArr[2].Y() = rP2.Y(); + } + + const Color& rFieldTextColor = SwViewOption::GetFontColor(); + SetFillColor(rFieldTextColor); + DrawPolygon(Polygon(3, aArr)); + } + else + { + // Interval symbol + if (rP1.Y() == rP2.Y()) + { + // Horizontal + DrawLine(Point(rP1.X(), rP1.Y() - 2), Point(rP1.X(), rP1.Y() + 2)); + DrawLine(Point(rP2.X(), rP2.Y() - 2), Point(rP2.X(), rP2.Y() + 2)); + } + else + { + // Vertical + DrawLine(Point(rP1.X() - 2, rP1.Y()), Point(rP1.X() + 2, rP1.Y())); + DrawLine(Point(rP2.X() - 2, rP2.Y()), Point(rP2.X() + 2, rP2.Y())); + } + } +} + +void SwLabPreview::Update(const SwLabItem& rItem) +{ + aItem = rItem; + Invalidate(); +} + +SwLabFmtPage::SwLabFmtPage(Window* pParent, const SfxItemSet& rSet) : + + SfxTabPage(pParent, SW_RES(TP_LAB_FMT), rSet), + aMakeFI (this, SW_RES(FI_MAKE)), + aTypeFI (this, SW_RES(FI_TYPE)), + aPreview (this, SW_RES(WIN_PREVIEW)), + aHDistText (this, SW_RES(TXT_HDIST )), + aHDistField (this, SW_RES(FLD_HDIST )), + aVDistText (this, SW_RES(TXT_VDIST )), + aVDistField (this, SW_RES(FLD_VDIST )), + aWidthText (this, SW_RES(TXT_WIDTH )), + aWidthField (this, SW_RES(FLD_WIDTH )), + aHeightText (this, SW_RES(TXT_HEIGHT )), + aHeightField (this, SW_RES(FLD_HEIGHT )), + aLeftText (this, SW_RES(TXT_LEFT )), + aLeftField (this, SW_RES(FLD_LEFT )), + aUpperText (this, SW_RES(TXT_UPPER )), + aUpperField (this, SW_RES(FLD_UPPER )), + aColsText (this, SW_RES(TXT_COLUMNS)), + aColsField (this, SW_RES(FLD_COLUMNS)), + aRowsText (this, SW_RES(TXT_ROWS )), + aRowsField (this, SW_RES(FLD_ROWS )), + aSavePB (this, SW_RES(PB_SAVE )), + bModified(sal_False), + aItem ((const SwLabItem&) rSet.Get(FN_LABEL)) +{ + FreeResource(); + SetExchangeSupport(); + + // Metrics + FieldUnit aMetric = ::GetDfltMetric(sal_False); + SetMetric(aHDistField , aMetric); + SetMetric(aVDistField , aMetric); + SetMetric(aWidthField , aMetric); + SetMetric(aHeightField, aMetric); + SetMetric(aLeftField , aMetric); + SetMetric(aUpperField , aMetric); + + // Install handlers + Link aLk = LINK(this, SwLabFmtPage, ModifyHdl); + aHDistField .SetModifyHdl( aLk ); + aVDistField .SetModifyHdl( aLk ); + aWidthField .SetModifyHdl( aLk ); + aHeightField.SetModifyHdl( aLk ); + aLeftField .SetModifyHdl( aLk ); + aUpperField .SetModifyHdl( aLk ); + aColsField .SetModifyHdl( aLk ); + aRowsField .SetModifyHdl( aLk ); + + aLk = LINK(this, SwLabFmtPage, LoseFocusHdl); + aHDistField .SetLoseFocusHdl( aLk ); + aVDistField .SetLoseFocusHdl( aLk ); + aWidthField .SetLoseFocusHdl( aLk ); + aHeightField.SetLoseFocusHdl( aLk ); + aLeftField .SetLoseFocusHdl( aLk ); + aUpperField .SetLoseFocusHdl( aLk ); + aColsField .SetLoseFocusHdl( aLk ); + aRowsField .SetLoseFocusHdl( aLk ); + + aSavePB.SetClickHdl( LINK (this, SwLabFmtPage, SaveHdl)); + // Set timer + aPreviewTimer.SetTimeout(1000); + aPreviewTimer.SetTimeoutHdl(LINK(this, SwLabFmtPage, PreviewHdl)); +} + +SwLabFmtPage::~SwLabFmtPage() +{ +} + +// Modify-handler of MetricFields. start preview timer +IMPL_LINK_INLINE_START( SwLabFmtPage, ModifyHdl, Edit *, EMPTYARG ) +{ + bModified = sal_True; + aPreviewTimer.Start(); + return 0; +} +IMPL_LINK_INLINE_END( SwLabFmtPage, ModifyHdl, Edit *, EMPTYARG ) + +// Invalidate preview +IMPL_LINK_INLINE_START( SwLabFmtPage, PreviewHdl, Timer *, EMPTYARG ) +{ + aPreviewTimer.Stop(); + ChangeMinMax(); + FillItem( aItem ); + aPreview.Update( aItem ); + + return 0; +} +IMPL_LINK_INLINE_END( SwLabFmtPage, PreviewHdl, Timer *, EMPTYARG ) + +// LoseFocus-Handler: Update on change -------------------------- +IMPL_LINK_INLINE_START( SwLabFmtPage, LoseFocusHdl, Control *, pControl ) +{ + if (((Edit*) pControl)->IsModified()) + PreviewHdl(0); + return 0; +} +IMPL_LINK_INLINE_END( SwLabFmtPage, LoseFocusHdl, Control *, pControl ) + +void SwLabFmtPage::ChangeMinMax() +{ + long lMax = 31748; // 56 cm + + // Min and Max + + long lLeft = static_cast< long >(GETFLDVAL(aLeftField )), + lUpper = static_cast< long >(GETFLDVAL(aUpperField)), + lHDist = static_cast< long >(GETFLDVAL(aHDistField)), + lVDist = static_cast< long >(GETFLDVAL(aVDistField)); + + long nMinSize = 10; // 0,1cm + + aHDistField .SetMin(nMinSize, FUNIT_CM); + aVDistField .SetMin(nMinSize, FUNIT_CM); + + aHDistField .SetMax((long) 100 * ((lMax - lLeft ) / Max(1L, (long) aColsField.GetValue())), FUNIT_TWIP); + aVDistField .SetMax((long) 100 * ((lMax - lUpper) / Max(1L, (long) aRowsField.GetValue())), FUNIT_TWIP); + + aWidthField .SetMin(nMinSize, FUNIT_CM); + aHeightField.SetMin(nMinSize, FUNIT_CM); + + aWidthField .SetMax((long) 100 * (lHDist), FUNIT_TWIP); + aHeightField.SetMax((long) 100 * (lVDist), FUNIT_TWIP); + + aLeftField .SetMax((long) 100 * (lMax - (long) aColsField.GetValue() * GETFLDVAL(aHDistField)), FUNIT_TWIP); + aUpperField .SetMax((long) 100 * (lMax - (long) aRowsField.GetValue() * GETFLDVAL(aVDistField)), FUNIT_TWIP); + + aColsField .SetMax((lMax - lLeft ) / Max(1L, lHDist)); + aRowsField .SetMax((lMax - lUpper) / Max(1L, lVDist)); + + // First and Last + + aHDistField .SetFirst(aHDistField .GetMin()); + aVDistField .SetFirst(aVDistField .GetMin()); + + aHDistField .SetLast (aHDistField .GetMax()); + aVDistField .SetLast (aVDistField .GetMax()); + + aWidthField .SetFirst(aWidthField .GetMin()); + aHeightField.SetFirst(aHeightField.GetMin()); + + aWidthField .SetLast (aWidthField .GetMax()); + aHeightField.SetLast (aHeightField.GetMax()); + + aLeftField .SetLast (aLeftField .GetMax()); + aUpperField .SetLast (aUpperField .GetMax()); + + aColsField .SetLast (aColsField .GetMax()); + aRowsField .SetLast (aRowsField .GetMax()); + + aHDistField .Reformat(); + aVDistField .Reformat(); + aWidthField .Reformat(); + aHeightField.Reformat(); + aLeftField .Reformat(); + aUpperField .Reformat(); + aColsField .Reformat(); + aRowsField .Reformat(); +} + +SfxTabPage* SwLabFmtPage::Create(Window* pParent, const SfxItemSet& rSet) +{ + return new SwLabFmtPage(pParent, rSet); +} + +void SwLabFmtPage::ActivatePage(const SfxItemSet& rSet) +{ + SfxItemSet aSet(rSet); + Reset(aSet); +} + +int SwLabFmtPage::DeactivatePage(SfxItemSet* _pSet) +{ + if (_pSet) + FillItemSet(*_pSet); + + return sal_True; +} + +void SwLabFmtPage::FillItem(SwLabItem& rItem) +{ + if (bModified) + { + rItem.aMake = rItem.aType = SW_RESSTR(STR_CUSTOM); + + SwLabRec& rRec = *GetParent()->Recs()[0]; + rItem.lHDist = rRec.lHDist = static_cast< long >(GETFLDVAL(aHDistField )); + rItem.lVDist = rRec.lVDist = static_cast< long >(GETFLDVAL(aVDistField )); + rItem.lWidth = rRec.lWidth = static_cast< long >(GETFLDVAL(aWidthField )); + rItem.lHeight = rRec.lHeight = static_cast< long >(GETFLDVAL(aHeightField)); + rItem.lLeft = rRec.lLeft = static_cast< long >(GETFLDVAL(aLeftField )); + rItem.lUpper = rRec.lUpper = static_cast< long >(GETFLDVAL(aUpperField )); + rItem.nCols = rRec.nCols = (sal_uInt16) aColsField.GetValue(); + rItem.nRows = rRec.nRows = (sal_uInt16) aRowsField.GetValue(); + } +} + +sal_Bool SwLabFmtPage::FillItemSet(SfxItemSet& rSet) +{ + FillItem(aItem); + rSet.Put(aItem); + + return sal_True; +} + +void SwLabFmtPage::Reset(const SfxItemSet& ) +{ + // Initialise fields + GetParent()->GetLabItem(aItem); + + aHDistField .SetMax(100 * aItem.lHDist , FUNIT_TWIP); + aVDistField .SetMax(100 * aItem.lVDist , FUNIT_TWIP); + aWidthField .SetMax(100 * aItem.lWidth , FUNIT_TWIP); + aHeightField.SetMax(100 * aItem.lHeight, FUNIT_TWIP); + aLeftField .SetMax(100 * aItem.lLeft , FUNIT_TWIP); + aUpperField .SetMax(100 * aItem.lUpper , FUNIT_TWIP); + + SETFLDVAL(aHDistField , aItem.lHDist ); + SETFLDVAL(aVDistField , aItem.lVDist ); + SETFLDVAL(aWidthField , aItem.lWidth ); + SETFLDVAL(aHeightField, aItem.lHeight); + SETFLDVAL(aLeftField , aItem.lLeft ); + SETFLDVAL(aUpperField , aItem.lUpper ); + + aColsField.SetMax(aItem.nCols); + aRowsField.SetMax(aItem.nRows); + + aColsField .SetValue(aItem.nCols); + aRowsField .SetValue(aItem.nRows); + aMakeFI.SetText(aItem.aMake); + aTypeFI.SetText(aItem.aType); + PreviewHdl(0); +} + +IMPL_LINK( SwLabFmtPage, SaveHdl, PushButton *, EMPTYARG ) +{ + SwLabRec aRec; + aRec.lHDist = static_cast< long >(GETFLDVAL(aHDistField )); + aRec.lVDist = static_cast< long >(GETFLDVAL(aVDistField )); + aRec.lWidth = static_cast< long >(GETFLDVAL(aWidthField )); + aRec.lHeight = static_cast< long >(GETFLDVAL(aHeightField)); + aRec.lLeft = static_cast< long >(GETFLDVAL(aLeftField )); + aRec.lUpper = static_cast< long >(GETFLDVAL(aUpperField )); + aRec.nCols = (sal_uInt16) aColsField.GetValue(); + aRec.nRows = (sal_uInt16) aRowsField.GetValue(); + aRec.bCont = aItem.bCont; + SwSaveLabelDlg* pSaveDlg = new SwSaveLabelDlg(this, aRec); + pSaveDlg->SetLabel(aItem.aLstMake, aItem.aLstType); + pSaveDlg->Execute(); + if(pSaveDlg->GetLabel(aItem)) + { + bModified = sal_False; + const Sequence<OUString>& rMan = GetParent()->GetLabelsConfig().GetManufacturers(); + SvStringsDtor& rMakes = GetParent()->Makes(); + if(rMakes.Count() < (sal_uInt16)rMan.getLength()) + { + rMakes.DeleteAndDestroy(0, rMakes.Count()); + const OUString* pMan = rMan.getConstArray(); + for(sal_Int32 nMan = 0; nMan < rMan.getLength(); nMan++) + { + rMakes.Insert( new String(pMan[nMan]), rMakes.Count() ); + } + } + aMakeFI.SetText(aItem.aMake); + aTypeFI.SetText(aItem.aType); + } + delete pSaveDlg; + return 0; +} + +SwSaveLabelDlg::SwSaveLabelDlg(SwLabFmtPage* pParent, SwLabRec& rRec) : + ModalDialog(pParent, SW_RES(DLG_SAVE_LABEL)), + aOptionsFL(this,SW_RES(FL_OPTIONS )), + aMakeFT(this, SW_RES(FT_MAKE )), + aMakeCB(this, SW_RES(CB_MAKE )), + aTypeFT(this, SW_RES(FT_TYPE )), + aTypeED(this, SW_RES(ED_TYPE )), + + aOKPB(this, SW_RES(PB_OK )), + aCancelPB(this, SW_RES(PB_CANCEL )), + aHelpPB(this, SW_RES(PB_HELP )), + + aQueryMB(this, SW_RES(MB_QUERY )), + + bSuccess(sal_False), + pLabPage(pParent), + rLabRec(rRec) +{ + FreeResource(); + + aOKPB.SetClickHdl(LINK(this, SwSaveLabelDlg, OkHdl)); + Link aLk(LINK(this, SwSaveLabelDlg, ModifyHdl)); + aMakeCB.SetModifyHdl(aLk); + aTypeED.SetModifyHdl(aLk); + + SwLabelConfig& rCfg = pLabPage->GetParent()->GetLabelsConfig(); + const Sequence<OUString>& rMan = rCfg.GetManufacturers(); + const OUString* pMan = rMan.getConstArray(); + for(sal_Int32 i = 0; i < rMan.getLength(); i++) + aMakeCB.InsertEntry(pMan[i]); +} + +IMPL_LINK(SwSaveLabelDlg, OkHdl, OKButton*, EMPTYARG) +{ + SwLabelConfig& rCfg = pLabPage->GetParent()->GetLabelsConfig(); + String sMake(aMakeCB.GetText()); + String sType(aTypeED.GetText()); + if(rCfg.HasLabel(sMake, sType)) + { + String sTmp(aQueryMB.GetMessText()); + String sQuery(sTmp); + sQuery.SearchAndReplace(C2S("%1"), sMake); + sQuery.SearchAndReplace(C2S("%2"), sType); + aQueryMB.SetMessText(sQuery); + + short eRet = aQueryMB.Execute(); + aQueryMB.SetMessText(sTmp); + if(RET_YES != eRet) + return 0; + } + rLabRec.aType = sType; + rCfg.SaveLabel(sMake, sType, rLabRec); + bSuccess = sal_True; + EndDialog(RET_OK); + return 0; +} + +IMPL_LINK(SwSaveLabelDlg, ModifyHdl, Edit*, EMPTYARG) +{ + aOKPB.Enable(aMakeCB.GetText().Len() && aTypeED.GetText().Len()); + return 0; +} + +sal_Bool SwSaveLabelDlg::GetLabel(SwLabItem& rItem) +{ + if(bSuccess) + { + rItem.aMake = aMakeCB.GetText(); + rItem.aType = aTypeED.GetText(); + rItem.lHDist = rLabRec.lHDist; + rItem.lVDist = rLabRec.lVDist; + rItem.lWidth = rLabRec.lWidth; + rItem.lHeight = rLabRec.lHeight; + rItem.lLeft = rLabRec.lLeft; + rItem.lUpper = rLabRec.lUpper; + rItem.nCols = rLabRec.nCols; + rItem.nRows = rLabRec.nRows; + } + return bSuccess; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |