/************************************************************** * * 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 #include #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 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 )), aPaperWidthText (this, SW_RES(TXT_PAPER_WIDTH)), aPaperWidthField (this, SW_RES(FLD_PAPER_WIDTH)), aPaperHeightText (this, SW_RES(TXT_PAPER_HEIGHT)), aPaperHeightField(this, SW_RES(FLD_PAPER_HEIGHT)), 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); SetMetric(aPaperWidthField, aMetric); SetMetric(aPaperHeightField, 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 ); aPaperWidthField .SetModifyHdl( aLk ); aPaperHeightField.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(); rItem.lPaperWidth = rRec.lPaperWidth = static_cast< long >(GETFLDVAL(aPaperWidthField)); rItem.lPaperHeight = rRec.lPaperHeight = static_cast< long >(GETFLDVAL(aPaperHeightField)); } } // -------------------------------------------------------------------------- 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 ); SETFLDVAL(aPaperWidthField , aItem.lPaperWidth ); SETFLDVAL(aPaperHeightField, aItem.lPaperHeight); 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.lPaperWidth = static_cast< long >(GETFLDVAL(aPaperWidthField )); aRec.lPaperHeight = static_cast< long >(GETFLDVAL(aPaperHeightField)); 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& 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& 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; rItem.lPaperWidth = rLabRec.lPaperWidth; rItem.lPaperHeight = rLabRec.lPaperHeight; } return bSuccess; }