blob: 14db46cbfa298a4bd7607c9b69bb190b12163287 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the 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 rtl;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
// #define ------------------------------------------------------------------
#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');
// Skalierungsfaktor
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);
// Groesse des darzustellenden Bereichs
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);
// Skalierungsfaktor
float fx = (float) lOutWPix23 / Max(1L, lDispW),
fy = (float) lOutHPix23 / Max(1L, lDispH),
f = fx < fy ? fx : fy;
// Nullpunkt
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 ));
// Umriss zeichnen (Flaeche)
DrawRect(Rectangle(Point(lX0, lY0), Size(lOutlineW, lOutlineH)));
// Umriss zeichnen (Umrandung)
SetLineColor(rFieldTextColor);
DrawLine(Point(lX0, lY0), Point(lX0 + lOutlineW - 1, lY0)); // Oben
DrawLine(Point(lX0, lY0), Point(lX0, lY0 + lOutlineH - 1)); // Links
if (aItem.nCols == 1)
DrawLine(Point(lX0 + lOutlineW - 1, lY0), Point(lX0 + lOutlineW - 1, lY0 + lOutlineH - 1)); // Rechts
if (aItem.nRows == 1)
DrawLine(Point(lX0, lY0 + lOutlineH - 1), Point(lX0 + lOutlineW - 1, lY0 + lOutlineH - 1)); // Unten
// Etiketten
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();
// Beschritung: Rand links
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);
}
// Beschriftung: Rand oben
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);
}
// Beschriftung: Breite und Hoehe
{
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);
}
// Beschriftung: Horz. Abstand
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);
}
// Beschriftung: Vertikaler Abstand
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);
}
// Beschriftung: Spalten
{
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);
}
// Beschriftung: Zeilen
{
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);
}
}
// Pfeil bzw. Intervall zeichnen --------------------------------------------
void SwLabPreview::DrawArrow(const Point &rP1, const Point &rP2, sal_Bool bArrow)
{
DrawLine(rP1, rP2);
if (bArrow)
{
Point aArr[3];
// Pfeil zeichnen
if (rP1.Y() == rP2.Y())
{
// Waagerecht
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
{
// Senkrecht
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
{
// Intervall zeichnen
if (rP1.Y() == rP2.Y())
{
// Waagerecht
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
{
// Senkrecht
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();
// Metriken
FieldUnit aMetric = ::GetDfltMetric(sal_False);
SetMetric(aHDistField , aMetric);
SetMetric(aVDistField , aMetric);
SetMetric(aWidthField , aMetric);
SetMetric(aHeightField, aMetric);
SetMetric(aLeftField , aMetric);
SetMetric(aUpperField , aMetric);
// Handler installieren
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));
// Timer einstellen
aPreviewTimer.SetTimeout(1000);
aPreviewTimer.SetTimeoutHdl(LINK(this, SwLabFmtPage, PreviewHdl));
}
// --------------------------------------------------------------------------
SwLabFmtPage::~SwLabFmtPage()
{
}
// Modify-Handler der MetricFields. Preview-Timer starten -------------------
IMPL_LINK_INLINE_START( SwLabFmtPage, ModifyHdl, Edit *, EMPTYARG )
{
bModified = sal_True;
aPreviewTimer.Start();
return 0;
}
IMPL_LINK_INLINE_END( SwLabFmtPage, ModifyHdl, Edit *, EMPTYARG )
// Preview invalidaten ------------------------------------------------------
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: Bei Aenderung sofort updaten --------------------------
IMPL_LINK_INLINE_START( SwLabFmtPage, LoseFocusHdl, Control *, pControl )
{
if (((Edit*) pControl)->IsModified())
PreviewHdl(0);
return 0;
}
IMPL_LINK_INLINE_END( SwLabFmtPage, LoseFocusHdl, Control *, pControl )
// Minima und Maxima fuer Fields festlegen ----------------------------------
void SwLabFmtPage::ChangeMinMax()
{
long lMax = 31748; // 56 cm
// Min und 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 und 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& )
{
// Fields initialisieren
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);
}
/* -----------------------------22.01.01 15:11--------------------------------
---------------------------------------------------------------------------*/
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;
}
/* -----------------------------23.01.01 10:41--------------------------------
---------------------------------------------------------------------------*/
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]);
}
/* -----------------------------23.01.01 10:40--------------------------------
---------------------------------------------------------------------------*/
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;
}
/* -----------------------------23.01.01 11:22--------------------------------
---------------------------------------------------------------------------*/
IMPL_LINK(SwSaveLabelDlg, ModifyHdl, Edit*, EMPTYARG)
{
aOKPB.Enable(aMakeCB.GetText().Len() && aTypeED.GetText().Len());
return 0;
}
/* -----------------------------23.01.01 16:06--------------------------------
---------------------------------------------------------------------------*/
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;
}