diff options
Diffstat (limited to 'sw/source/ui/envelp/envlop1.cxx')
-rw-r--r-- | sw/source/ui/envelp/envlop1.cxx | 441 |
1 files changed, 441 insertions, 0 deletions
diff --git a/sw/source/ui/envelp/envlop1.cxx b/sw/source/ui/envelp/envlop1.cxx new file mode 100644 index 000000000000..baa0013392ab --- /dev/null +++ b/sw/source/ui/envelp/envlop1.cxx @@ -0,0 +1,441 @@ +/************************************************************************* + * + * 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 "dbmgr.hxx" +#include <sfx2/app.hxx> +#include <vcl/msgbox.hxx> +#include <swwait.hxx> +#include <viewopt.hxx> + +#include "wrtsh.hxx" +#include "errhdl.hxx" +#include "cmdid.h" +#include "helpid.h" +#include "envfmt.hxx" +#include "envlop.hxx" +#include "envprt.hxx" +#include "fmtcol.hxx" +#include "poolfmt.hxx" +#include "view.hxx" + +#include "envlop.hrc" +#include <comphelper/processfactory.hxx> + +#include <unomid.h> + +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::container; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star; +using namespace ::rtl; + + +//impl in envimg.cxx +extern SW_DLLPUBLIC String MakeSender(); + +// -------------------------------------------------------------------------- + +SwEnvPreview::SwEnvPreview(SfxTabPage* pParent, const ResId& rResID) : + + Window(pParent, rResID) + +{ + SetMapMode(MapMode(MAP_PIXEL)); +} + +// -------------------------------------------------------------------------- + + + +SwEnvPreview::~SwEnvPreview() +{ +} + +// ---------------------------------------------------------------------------- +void SwEnvPreview::DataChanged( const DataChangedEvent& rDCEvt ) +{ + Window::DataChanged( rDCEvt ); + if ( DATACHANGED_SETTINGS == rDCEvt.GetType() ) + SetBackground( GetSettings().GetStyleSettings().GetDialogColor() ); +} + +// ---------------------------------------------------------------------------- + +void SwEnvPreview::Paint(const Rectangle &) +{ + const StyleSettings& rSettings = GetSettings().GetStyleSettings(); + + const SwEnvItem& rItem = + ((SwEnvDlg*) GetParent()->GetParent()->GetParent())->aEnvItem; + + sal_uInt16 nPageW = (sal_uInt16) Max(rItem.lWidth, rItem.lHeight), + nPageH = (sal_uInt16) Min(rItem.lWidth, rItem.lHeight); + + float fx = (float)GetOutputSizePixel().Width () / (float)nPageW, + fy = (float)GetOutputSizePixel().Height() / (float)nPageH, + f = 0.8f * ( fx < fy ? fx : fy ); + + Color aBack = rSettings.GetWindowColor( ); + Color aFront = SwViewOption::GetFontColor(); + Color aMedium = Color( ( aBack.GetRed() + aFront.GetRed() ) / 2, + ( aBack.GetGreen() + aFront.GetGreen() ) / 2, + ( aBack.GetBlue() + aFront.GetBlue() ) / 2 + ); + + SetLineColor( aFront ); + + // Umschlag + long nW = (sal_uInt16) (f * nPageW), + nH = (sal_uInt16) (f * nPageH), + nX = (GetOutputSizePixel().Width () - nW) / 2, + nY = (GetOutputSizePixel().Height() - nH) / 2; + SetFillColor( aBack ); + DrawRect(Rectangle(Point(nX, nY), Size(nW, nH))); + + // Absender + if (rItem.bSend) + { + long nSendX = nX + (sal_uInt16) (f * rItem.lSendFromLeft), + nSendY = nY + (sal_uInt16) (f * rItem.lSendFromTop ), + nSendW = (sal_uInt16) (f * (rItem.lAddrFromLeft - rItem.lSendFromLeft)), + nSendH = (sal_uInt16) (f * (rItem.lAddrFromTop - rItem.lSendFromTop - 566)); + SetFillColor( aMedium ); + + DrawRect(Rectangle(Point(nSendX, nSendY), Size(nSendW, nSendH))); + } + + // Empfaenger + long nAddrX = nX + (sal_uInt16) (f * rItem.lAddrFromLeft), + nAddrY = nY + (sal_uInt16) (f * rItem.lAddrFromTop ), + nAddrW = (sal_uInt16) (f * (nPageW - rItem.lAddrFromLeft - 566)), + nAddrH = (sal_uInt16) (f * (nPageH - rItem.lAddrFromTop - 566)); + SetFillColor( aMedium ); + DrawRect(Rectangle(Point(nAddrX, nAddrY), Size(nAddrW, nAddrH))); + + // Briefmarke + long nStmpW = (sal_uInt16) (f * 1417 /* 2,5 cm */), + nStmpH = (sal_uInt16) (f * 1701 /* 3,0 cm */), + nStmpX = nX + nW - (sal_uInt16) (f * 566) - nStmpW, + nStmpY = nY + (sal_uInt16) (f * 566); + + SetFillColor( aBack ); + DrawRect(Rectangle(Point(nStmpX, nStmpY), Size(nStmpW, nStmpH))); +} + +// -------------------------------------------------------------------------- + + + +SwEnvDlg::SwEnvDlg(Window* pParent, const SfxItemSet& rSet, + SwWrtShell* pWrtSh, Printer* pPrt, sal_Bool bInsert) : + + SfxTabDialog(pParent, SW_RES(DLG_ENV), &rSet, sal_False, &aEmptyStr), + sInsert(SW_RES(ST_INSERT)), + sChange(SW_RES(ST_CHANGE)), + aEnvItem((const SwEnvItem&) rSet.Get(FN_ENVELOP)), + pSh(pWrtSh), + pPrinter(pPrt), + pAddresseeSet(0), + pSenderSet(0) +{ + FreeResource(); + + GetOKButton().SetText(String(SW_RES(STR_BTN_NEWDOC))); + GetOKButton().SetHelpId(HID_ENVELOP_PRINT); + GetOKButton().SetHelpText(aEmptyStr); // Damit generierter Hilfetext verwendet wird + if (GetUserButton()) + { + GetUserButton()->SetText(bInsert ? sInsert : sChange); + GetUserButton()->SetHelpId(HID_ENVELOP_INSERT); + } + + AddTabPage(TP_ENV_ENV, SwEnvPage ::Create, 0); + AddTabPage(TP_ENV_FMT, SwEnvFmtPage::Create, 0); + AddTabPage(TP_ENV_PRT, SwEnvPrtPage::Create, 0); +} + +// -------------------------------------------------------------------------- + + + +SwEnvDlg::~SwEnvDlg() +{ + delete pAddresseeSet; + delete pSenderSet; +} + +// -------------------------------------------------------------------------- + + + +void SwEnvDlg::PageCreated(sal_uInt16 nId, SfxTabPage &rPage) +{ + if (nId == TP_ENV_PRT) + { + ((SwEnvPrtPage*)&rPage)->SetPrt(pPrinter); + } +} + +// -------------------------------------------------------------------------- + +short SwEnvDlg::Ok() +{ + short nRet = SfxTabDialog::Ok(); + + if (nRet == RET_OK || nRet == RET_USER) + { + if (pAddresseeSet) + { + SwTxtFmtColl* pColl = pSh->GetTxtCollFromPool(RES_POOLCOLL_JAKETADRESS); + pColl->SetFmtAttr(*pAddresseeSet); + } + if (pSenderSet) + { + SwTxtFmtColl* pColl = pSh->GetTxtCollFromPool(RES_POOLCOLL_SENDADRESS); + pColl->SetFmtAttr(*pSenderSet); + } + } + + return nRet; +} + +// -------------------------------------------------------------------------- + + + +SwEnvPage::SwEnvPage(Window* pParent, const SfxItemSet& rSet) : + + SfxTabPage(pParent, SW_RES(TP_ENV_ENV), rSet), + + aAddrText (this, SW_RES(TXT_ADDR )), + aAddrEdit (this, SW_RES(EDT_ADDR )), + aDatabaseFT (this, SW_RES(FT_DATABASE)), + aDatabaseLB (this, SW_RES(LB_DATABASE)), + aTableFT (this, SW_RES(FT_TABLE )), + aTableLB (this, SW_RES(LB_TABLE )), + aInsertBT (this, SW_RES(BTN_INSERT )), + aDBFieldFT (this, SW_RES(FT_DBFIELD )), + aDBFieldLB (this, SW_RES(LB_DBFIELD )), + aSenderBox (this, SW_RES(BOX_SEND )), + aSenderEdit (this, SW_RES(EDT_SEND )), + aPreview (this, SW_RES(WIN_PREVIEW)) + +{ + FreeResource(); + SetExchangeSupport(); + pSh = GetParent()->pSh; + + // Handler installieren + aDatabaseLB .SetSelectHdl(LINK(this, SwEnvPage, DatabaseHdl )); + aTableLB .SetSelectHdl(LINK(this, SwEnvPage, DatabaseHdl )); + aInsertBT .SetClickHdl (LINK(this, SwEnvPage, FieldHdl )); + aSenderBox .SetClickHdl (LINK(this, SwEnvPage, SenderHdl )); + aPreview.SetBorderStyle( WINDOW_BORDER_MONO ); + + SwDBData aData = pSh->GetDBData(); + sActDBName = aData.sDataSource; + sActDBName += DB_DELIM; + sActDBName += (String)aData.sCommand; + InitDatabaseBox(); +} + +// -------------------------------------------------------------------------- + + + +SwEnvPage::~SwEnvPage() +{ +} + +// -------------------------------------------------------------------------- + + + +IMPL_LINK( SwEnvPage, DatabaseHdl, ListBox *, pListBox ) +{ + SwWait aWait( *pSh->GetView().GetDocShell(), sal_True ); + + if (pListBox == &aDatabaseLB) + { + sActDBName = pListBox->GetSelectEntry(); + pSh->GetNewDBMgr()->GetTableNames(&aTableLB, sActDBName); + sActDBName += DB_DELIM; + } + else + sActDBName.SetToken(1, DB_DELIM, aTableLB.GetSelectEntry()); + pSh->GetNewDBMgr()->GetColumnNames( + &aDBFieldLB, aDatabaseLB.GetSelectEntry(), aTableLB.GetSelectEntry()); + return 0; +} + +// -------------------------------------------------------------------------- + + + +IMPL_LINK( SwEnvPage, FieldHdl, Button *, EMPTYARG ) +{ + String aStr ( '<' ); + aStr += aDatabaseLB.GetSelectEntry(); + aStr += '.'; +// aStr += DB_DELIM; + aStr += aTableLB.GetSelectEntry(); + aStr += '.'; + aStr += aTableLB.GetEntryData(aTableLB.GetSelectEntryPos()) == 0 ? '0' : '1'; + aStr += '.'; +// aStr += DB_DELIM; + aStr += aDBFieldLB.GetSelectEntry(); + aStr += '>'; + aAddrEdit.ReplaceSelected(aStr); + Selection aSel = aAddrEdit.GetSelection(); + aAddrEdit.GrabFocus(); + aAddrEdit.SetSelection(aSel); + return 0; +} + +// -------------------------------------------------------------------------- + + + +IMPL_LINK( SwEnvPage, SenderHdl, Button *, EMPTYARG ) +{ + const sal_Bool bEnable = aSenderBox.IsChecked(); + GetParent()->aEnvItem.bSend = bEnable; + aSenderEdit.Enable(bEnable); + if ( bEnable ) + { + aSenderEdit.GrabFocus(); + if(!aSenderEdit.GetText().Len()) + aSenderEdit.SetText(MakeSender()); + } + aPreview.Invalidate(); + return 0; +} + +// -------------------------------------------------------------------------- + + + +void SwEnvPage::InitDatabaseBox() +{ + if (pSh->GetNewDBMgr()) + { + aDatabaseLB.Clear(); + Sequence<OUString> aDataNames = SwNewDBMgr::GetExistingDatabaseNames(); + const OUString* pDataNames = aDataNames.getConstArray(); + for (long i = 0; i < aDataNames.getLength(); i++) + aDatabaseLB.InsertEntry(pDataNames[i]); + + String sDBName = sActDBName.GetToken( 0, DB_DELIM ); + String sTableName = sActDBName.GetToken( 1, DB_DELIM ); + aDatabaseLB.SelectEntry(sDBName); + if (pSh->GetNewDBMgr()->GetTableNames(&aTableLB, sDBName)) + { + aTableLB.SelectEntry(sTableName); + pSh->GetNewDBMgr()->GetColumnNames(&aDBFieldLB, sDBName, sTableName); + } + else + aDBFieldLB.Clear(); + + } +} + +// -------------------------------------------------------------------------- + + + +SfxTabPage* SwEnvPage::Create(Window* pParent, const SfxItemSet& rSet) +{ + return new SwEnvPage(pParent, rSet); +} + +// -------------------------------------------------------------------------- + + + +void SwEnvPage::ActivatePage(const SfxItemSet& rSet) +{ + SfxItemSet aSet(rSet); + aSet.Put(GetParent()->aEnvItem); + Reset(aSet); +} + +// -------------------------------------------------------------------------- + + + +int SwEnvPage::DeactivatePage(SfxItemSet* _pSet) +{ + FillItem(GetParent()->aEnvItem); + if( _pSet ) + FillItemSet(*_pSet); + return SfxTabPage::LEAVE_PAGE; +} + +// -------------------------------------------------------------------------- + + + +void SwEnvPage::FillItem(SwEnvItem& rItem) +{ + rItem.aAddrText = aAddrEdit .GetText(); + rItem.bSend = aSenderBox .IsChecked(); + rItem.aSendText = aSenderEdit.GetText(); +} + +// -------------------------------------------------------------------------- + + + +sal_Bool SwEnvPage::FillItemSet(SfxItemSet& rSet) +{ + FillItem(GetParent()->aEnvItem); + rSet.Put(GetParent()->aEnvItem); + return sal_True; +} + +// ---------------------------------------------------------------------------- + + + +void SwEnvPage::Reset(const SfxItemSet& rSet) +{ + SwEnvItem aItem = (const SwEnvItem&) rSet.Get(FN_ENVELOP); + aAddrEdit .SetText(String(aItem.aAddrText).ConvertLineEnd()); + aSenderEdit.SetText(String(aItem.aSendText).ConvertLineEnd()); + aSenderBox .Check (aItem.bSend); + aSenderBox.GetClickHdl().Call(&aSenderBox); +} + + |