1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_sw.hxx" 30*cdf0e10cSrcweir #ifdef SW_DLLIMPLEMENTATION 31*cdf0e10cSrcweir #undef SW_DLLIMPLEMENTATION 32*cdf0e10cSrcweir #endif 33*cdf0e10cSrcweir #include <mmaddressblockpage.hxx> 34*cdf0e10cSrcweir #include <mailmergewizard.hxx> 35*cdf0e10cSrcweir #include <swtypes.hxx> 36*cdf0e10cSrcweir #include <addresslistdialog.hxx> 37*cdf0e10cSrcweir #include <svtools/xtextedt.hxx> 38*cdf0e10cSrcweir #include <svtools/txtattr.hxx> 39*cdf0e10cSrcweir #include <vcl/msgbox.hxx> 40*cdf0e10cSrcweir #include <mmconfigitem.hxx> 41*cdf0e10cSrcweir #include <com/sun/star/container/XNameAccess.hpp> 42*cdf0e10cSrcweir #include <com/sun/star/sdbcx/XColumnsSupplier.hpp> 43*cdf0e10cSrcweir #include <com/sun/star/sdb/XColumn.hpp> 44*cdf0e10cSrcweir 45*cdf0e10cSrcweir #include <vector> 46*cdf0e10cSrcweir #include <mmaddressblockpage.hrc> 47*cdf0e10cSrcweir #include <dbui.hrc> 48*cdf0e10cSrcweir #include <helpid.h> 49*cdf0e10cSrcweir 50*cdf0e10cSrcweir using namespace svt; 51*cdf0e10cSrcweir using namespace ::com::sun::star; 52*cdf0e10cSrcweir using namespace ::com::sun::star::container; 53*cdf0e10cSrcweir using namespace ::com::sun::star::sdb; 54*cdf0e10cSrcweir using namespace ::com::sun::star::sdbc; 55*cdf0e10cSrcweir using namespace ::com::sun::star::sdbcx; 56*cdf0e10cSrcweir 57*cdf0e10cSrcweir //------------------------------------------------------------------------- 58*cdf0e10cSrcweir void lcl_Move(Control* pCtrl, long nYOffset) 59*cdf0e10cSrcweir { 60*cdf0e10cSrcweir Point aPos(pCtrl->GetPosPixel()); 61*cdf0e10cSrcweir aPos.Y() += nYOffset; 62*cdf0e10cSrcweir pCtrl->SetPosPixel(aPos); 63*cdf0e10cSrcweir } 64*cdf0e10cSrcweir /*-- 02.04.2004 12:46:40--------------------------------------------------- 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 67*cdf0e10cSrcweir SwMailMergeAddressBlockPage::SwMailMergeAddressBlockPage( SwMailMergeWizard* _pParent) : 68*cdf0e10cSrcweir svt::OWizardPage(_pParent, SW_RES(DLG_MM_ADDRESSBLOCK_PAGE)), 69*cdf0e10cSrcweir #ifdef MSC 70*cdf0e10cSrcweir #pragma warning (disable : 4355) 71*cdf0e10cSrcweir #endif 72*cdf0e10cSrcweir m_aHeaderFI( this, SW_RES( FI_HEADER ) ), 73*cdf0e10cSrcweir m_aFirstFI( this, SW_RES( FI_FIRST ) ), 74*cdf0e10cSrcweir m_aAddressListFI( this, SW_RES( FI_ADDRESSLIST ) ), 75*cdf0e10cSrcweir m_aAddressListPB( this, SW_RES( PB_ADDRESSLIST ) ), 76*cdf0e10cSrcweir m_aCurrentAddressFI( this, SW_RES( FI_CURRENTADDRESS ) ), 77*cdf0e10cSrcweir m_aFirstFL( this, SW_RES( FL_FIRST ) ), 78*cdf0e10cSrcweir m_aSecondFI( this, SW_RES( FI_SECOND )), 79*cdf0e10cSrcweir m_aSettingsFI( this, SW_RES( FI_SECOND ) ), 80*cdf0e10cSrcweir m_aAddressCB( this, SW_RES( CB_ADDRESS ) ), 81*cdf0e10cSrcweir m_aSettingsWIN( this, SW_RES( WIN_SETTINGS ) ), 82*cdf0e10cSrcweir m_aSettingsPB( this, SW_RES( PB_SETTINGS ) ), 83*cdf0e10cSrcweir m_aHideEmptyParagraphsCB( this, SW_RES( CB_HIDE_EMPTY_PARA ) ), 84*cdf0e10cSrcweir m_aSecondFL( this, SW_RES( FL_SECOND )), 85*cdf0e10cSrcweir m_aThirdFI( this, SW_RES( FI_THIRD ) ), 86*cdf0e10cSrcweir m_aMatchFieldsFI( this, SW_RES( FI_MATCH_FIELDS ) ), 87*cdf0e10cSrcweir m_aAssignPB( this, SW_RES( PB_ASSIGN ) ), 88*cdf0e10cSrcweir m_aThirdFL( this, SW_RES( FL_THIRD ) ), 89*cdf0e10cSrcweir m_aFourthFI( this, SW_RES( FI_FOURTH ) ), 90*cdf0e10cSrcweir m_aPreviewFI( this, SW_RES( FI_PREVIEW ) ), 91*cdf0e10cSrcweir m_aPreviewWIN( this, SW_RES( WIN_PREVIEW ) ), 92*cdf0e10cSrcweir m_aDocumentIndexFI( this, SW_RES( FI_DOCINDEX ) ), 93*cdf0e10cSrcweir m_aPrevSetIB( this, SW_RES( IB_PREVSET ) ), 94*cdf0e10cSrcweir m_aNextSetIB( this, SW_RES( IB_NEXTSET ) ), 95*cdf0e10cSrcweir #ifdef MSC 96*cdf0e10cSrcweir #pragma warning (default : 4355) 97*cdf0e10cSrcweir #endif 98*cdf0e10cSrcweir m_sDocument( SW_RES( STR_DOCUMENT ) ), 99*cdf0e10cSrcweir m_sChangeAddress( SW_RES( STR_CHANGEADDRESS )), 100*cdf0e10cSrcweir m_pWizard(_pParent) 101*cdf0e10cSrcweir { 102*cdf0e10cSrcweir FreeResource(); 103*cdf0e10cSrcweir m_sCurrentAddress = m_aCurrentAddressFI.GetText(); 104*cdf0e10cSrcweir m_aAddressListPB.SetClickHdl(LINK(this, SwMailMergeAddressBlockPage, AddressListHdl_Impl)); 105*cdf0e10cSrcweir m_aSettingsPB.SetClickHdl(LINK(this, SwMailMergeAddressBlockPage, SettingsHdl_Impl)); 106*cdf0e10cSrcweir m_aAssignPB.SetClickHdl(LINK(this, SwMailMergeAddressBlockPage, AssignHdl_Impl )); 107*cdf0e10cSrcweir m_aAddressCB.SetClickHdl(LINK(this, SwMailMergeAddressBlockPage, AddressBlockHdl_Impl)); 108*cdf0e10cSrcweir m_aSettingsWIN.SetSelectHdl(LINK(this, SwMailMergeAddressBlockPage, AddressBlockSelectHdl_Impl)); 109*cdf0e10cSrcweir m_aHideEmptyParagraphsCB.SetClickHdl(LINK(this, SwMailMergeAddressBlockPage, HideParagraphsHdl_Impl)); 110*cdf0e10cSrcweir 111*cdf0e10cSrcweir Link aLink = LINK(this, SwMailMergeAddressBlockPage, InsertDataHdl_Impl); 112*cdf0e10cSrcweir m_aPrevSetIB.SetClickHdl(aLink); 113*cdf0e10cSrcweir m_aNextSetIB.SetClickHdl(aLink); 114*cdf0e10cSrcweir } 115*cdf0e10cSrcweir /*-- 02.04.2004 12:46:40--------------------------------------------------- 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 118*cdf0e10cSrcweir SwMailMergeAddressBlockPage::~SwMailMergeAddressBlockPage() 119*cdf0e10cSrcweir { 120*cdf0e10cSrcweir } 121*cdf0e10cSrcweir /*-- 05.07.2004 13:55:15--------------------------------------------------- 122*cdf0e10cSrcweir 123*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 124*cdf0e10cSrcweir bool SwMailMergeAddressBlockPage::canAdvance() const 125*cdf0e10cSrcweir { 126*cdf0e10cSrcweir return m_pWizard->GetConfigItem().GetResultSet().is(); 127*cdf0e10cSrcweir } 128*cdf0e10cSrcweir /*-- 16.06.2004 12:34:09--------------------------------------------------- 129*cdf0e10cSrcweir 130*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 131*cdf0e10cSrcweir void SwMailMergeAddressBlockPage::ActivatePage() 132*cdf0e10cSrcweir { 133*cdf0e10cSrcweir SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem(); 134*cdf0e10cSrcweir bool bIsLetter = rConfigItem.IsOutputToLetter(); 135*cdf0e10cSrcweir 136*cdf0e10cSrcweir //no address block is created for e-Mail 137*cdf0e10cSrcweir m_aSettingsFI.Show( bIsLetter ); 138*cdf0e10cSrcweir m_aAddressCB.Show( bIsLetter ); 139*cdf0e10cSrcweir m_aSettingsWIN.Show( bIsLetter ); 140*cdf0e10cSrcweir m_aSettingsPB.Show( bIsLetter ); 141*cdf0e10cSrcweir m_aPreviewFI.Show( bIsLetter ); 142*cdf0e10cSrcweir m_aPreviewWIN.Show( bIsLetter ); 143*cdf0e10cSrcweir m_aAssignPB.Show( bIsLetter ); 144*cdf0e10cSrcweir m_aDocumentIndexFI.Show( bIsLetter ); 145*cdf0e10cSrcweir m_aPrevSetIB.Show( bIsLetter ); 146*cdf0e10cSrcweir m_aNextSetIB.Show( bIsLetter ); 147*cdf0e10cSrcweir m_aHideEmptyParagraphsCB.Show( bIsLetter ); 148*cdf0e10cSrcweir m_aSecondFL.Show( bIsLetter ); 149*cdf0e10cSrcweir m_aSecondFI.Show( bIsLetter ); 150*cdf0e10cSrcweir m_aSettingsFI.Show( bIsLetter ); 151*cdf0e10cSrcweir m_aMatchFieldsFI.Show( bIsLetter ); 152*cdf0e10cSrcweir m_aThirdFI.Show( bIsLetter ); 153*cdf0e10cSrcweir m_aThirdFL.Show( bIsLetter ); 154*cdf0e10cSrcweir m_aFourthFI.Show( bIsLetter ); 155*cdf0e10cSrcweir 156*cdf0e10cSrcweir if(bIsLetter) 157*cdf0e10cSrcweir { 158*cdf0e10cSrcweir m_aHideEmptyParagraphsCB.Check( rConfigItem.IsHideEmptyParagraphs() ); 159*cdf0e10cSrcweir String sTemp(m_sDocument); 160*cdf0e10cSrcweir sTemp.SearchAndReplaceAscii("%1", String::CreateFromInt32(1)); 161*cdf0e10cSrcweir m_aDocumentIndexFI.SetText(sTemp); 162*cdf0e10cSrcweir 163*cdf0e10cSrcweir m_aSettingsWIN.Clear(); 164*cdf0e10cSrcweir const uno::Sequence< ::rtl::OUString> aBlocks = 165*cdf0e10cSrcweir m_pWizard->GetConfigItem().GetAddressBlocks(); 166*cdf0e10cSrcweir for(sal_Int32 nAddress = 0; nAddress < aBlocks.getLength(); ++nAddress) 167*cdf0e10cSrcweir m_aSettingsWIN.AddAddress(aBlocks[nAddress]); 168*cdf0e10cSrcweir m_aSettingsWIN.SelectAddress((sal_uInt16)rConfigItem.GetCurrentAddressBlockIndex()); 169*cdf0e10cSrcweir m_aAddressCB.Check(rConfigItem.IsAddressBlock()); 170*cdf0e10cSrcweir AddressBlockHdl_Impl(&m_aAddressCB); 171*cdf0e10cSrcweir m_aSettingsWIN.SetLayout(1, 2); 172*cdf0e10cSrcweir InsertDataHdl_Impl(0); 173*cdf0e10cSrcweir } 174*cdf0e10cSrcweir } 175*cdf0e10cSrcweir /*-- 27.05.2004 13:59:15--------------------------------------------------- 176*cdf0e10cSrcweir 177*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 178*cdf0e10cSrcweir sal_Bool SwMailMergeAddressBlockPage::commitPage( ::svt::WizardTypes::CommitPageReason _eReason ) 179*cdf0e10cSrcweir { 180*cdf0e10cSrcweir if ( ::svt::WizardTypes::eTravelForward == _eReason && !m_pWizard->GetConfigItem().GetResultSet().is() ) 181*cdf0e10cSrcweir return sal_False; 182*cdf0e10cSrcweir return sal_True; 183*cdf0e10cSrcweir } 184*cdf0e10cSrcweir /*-- 07.04.2004 16:19:30--------------------------------------------------- 185*cdf0e10cSrcweir 186*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 187*cdf0e10cSrcweir IMPL_LINK(SwMailMergeAddressBlockPage, AddressListHdl_Impl, PushButton*, EMPTYARG) 188*cdf0e10cSrcweir { 189*cdf0e10cSrcweir SwAddressListDialog* pAddrDialog = new SwAddressListDialog(this); 190*cdf0e10cSrcweir if(RET_OK == pAddrDialog->Execute()) 191*cdf0e10cSrcweir { 192*cdf0e10cSrcweir SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem(); 193*cdf0e10cSrcweir rConfigItem.SetCurrentConnection( 194*cdf0e10cSrcweir pAddrDialog->GetSource(), 195*cdf0e10cSrcweir pAddrDialog->GetConnection(), 196*cdf0e10cSrcweir pAddrDialog->GetColumnsSupplier(), 197*cdf0e10cSrcweir pAddrDialog->GetDBData()); 198*cdf0e10cSrcweir ::rtl::OUString sFilter = pAddrDialog->GetFilter(); 199*cdf0e10cSrcweir rConfigItem.SetFilter( sFilter ); 200*cdf0e10cSrcweir InsertDataHdl_Impl(0); 201*cdf0e10cSrcweir GetWizard()->UpdateRoadmap(); 202*cdf0e10cSrcweir GetWizard()->enableButtons(WZB_NEXT, GetWizard()->isStateEnabled(MM_GREETINGSPAGE)); 203*cdf0e10cSrcweir } 204*cdf0e10cSrcweir delete pAddrDialog; 205*cdf0e10cSrcweir return 0; 206*cdf0e10cSrcweir } 207*cdf0e10cSrcweir /*-- 07.04.2004 16:19:30--------------------------------------------------- 208*cdf0e10cSrcweir 209*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 210*cdf0e10cSrcweir IMPL_LINK(SwMailMergeAddressBlockPage, SettingsHdl_Impl, PushButton*, pButton) 211*cdf0e10cSrcweir { 212*cdf0e10cSrcweir SwSelectAddressBlockDialog* pDlg = 213*cdf0e10cSrcweir new SwSelectAddressBlockDialog(pButton, m_pWizard->GetConfigItem()); 214*cdf0e10cSrcweir SwMailMergeConfigItem& rConfig = m_pWizard->GetConfigItem(); 215*cdf0e10cSrcweir pDlg->SetAddressBlocks(rConfig.GetAddressBlocks(), m_aSettingsWIN.GetSelectedAddress()); 216*cdf0e10cSrcweir pDlg->SetSettings(rConfig.IsIncludeCountry(), rConfig.GetExcludeCountry()); 217*cdf0e10cSrcweir if(RET_OK == pDlg->Execute()) 218*cdf0e10cSrcweir { 219*cdf0e10cSrcweir //the dialog provides the selected address at the first position! 220*cdf0e10cSrcweir const uno::Sequence< ::rtl::OUString> aBlocks = 221*cdf0e10cSrcweir pDlg->GetAddressBlocks(); 222*cdf0e10cSrcweir rConfig.SetAddressBlocks(aBlocks); 223*cdf0e10cSrcweir m_aSettingsWIN.Clear(); 224*cdf0e10cSrcweir for(sal_Int32 nAddress = 0; nAddress < aBlocks.getLength(); ++nAddress) 225*cdf0e10cSrcweir m_aSettingsWIN.AddAddress(aBlocks[nAddress]); 226*cdf0e10cSrcweir m_aSettingsWIN.SelectAddress(0); 227*cdf0e10cSrcweir m_aSettingsWIN.Invalidate(); // #i40408 228*cdf0e10cSrcweir rConfig.SetCountrySettings(pDlg->IsIncludeCountry(), pDlg->GetCountry()); 229*cdf0e10cSrcweir InsertDataHdl_Impl(0); 230*cdf0e10cSrcweir } 231*cdf0e10cSrcweir delete pDlg; 232*cdf0e10cSrcweir GetWizard()->UpdateRoadmap(); 233*cdf0e10cSrcweir GetWizard()->enableButtons(WZB_NEXT, GetWizard()->isStateEnabled(MM_GREETINGSPAGE)); 234*cdf0e10cSrcweir return 0; 235*cdf0e10cSrcweir } 236*cdf0e10cSrcweir /*-- 07.04.2004 16:19:31--------------------------------------------------- 237*cdf0e10cSrcweir 238*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 239*cdf0e10cSrcweir IMPL_LINK(SwMailMergeAddressBlockPage, AssignHdl_Impl, PushButton*, pButton) 240*cdf0e10cSrcweir { 241*cdf0e10cSrcweir SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem(); 242*cdf0e10cSrcweir sal_uInt16 nSel = m_aSettingsWIN.GetSelectedAddress(); 243*cdf0e10cSrcweir const uno::Sequence< ::rtl::OUString> aBlocks = rConfigItem.GetAddressBlocks(); 244*cdf0e10cSrcweir SwAssignFieldsDialog* pDlg = 245*cdf0e10cSrcweir new SwAssignFieldsDialog(pButton, m_pWizard->GetConfigItem(), aBlocks[nSel], true); 246*cdf0e10cSrcweir if(RET_OK == pDlg->Execute()) 247*cdf0e10cSrcweir { 248*cdf0e10cSrcweir //preview update 249*cdf0e10cSrcweir InsertDataHdl_Impl(0); 250*cdf0e10cSrcweir GetWizard()->UpdateRoadmap(); 251*cdf0e10cSrcweir GetWizard()->enableButtons(WZB_NEXT, GetWizard()->isStateEnabled(MM_GREETINGSPAGE)); 252*cdf0e10cSrcweir } 253*cdf0e10cSrcweir delete pDlg; 254*cdf0e10cSrcweir return 0; 255*cdf0e10cSrcweir } 256*cdf0e10cSrcweir /*-- 11.06.2004 13:37:22--------------------------------------------------- 257*cdf0e10cSrcweir 258*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 259*cdf0e10cSrcweir void SwMailMergeAddressBlockPage::EnableAddressBlock(sal_Bool bAll, sal_Bool bSelective) 260*cdf0e10cSrcweir { 261*cdf0e10cSrcweir m_aSettingsFI.Enable(bAll); 262*cdf0e10cSrcweir m_aAddressCB.Enable(bAll); 263*cdf0e10cSrcweir bSelective &= bAll; 264*cdf0e10cSrcweir m_aHideEmptyParagraphsCB.Enable(bSelective); 265*cdf0e10cSrcweir m_aSettingsWIN.Enable(bSelective); 266*cdf0e10cSrcweir m_aSettingsPB.Enable(bSelective); 267*cdf0e10cSrcweir m_aPreviewFI.Enable(bSelective); 268*cdf0e10cSrcweir m_aPreviewWIN.Enable(bSelective); 269*cdf0e10cSrcweir m_aThirdFI.Enable(bSelective); 270*cdf0e10cSrcweir m_aMatchFieldsFI.Enable(bSelective); 271*cdf0e10cSrcweir m_aAssignPB.Enable(bSelective); 272*cdf0e10cSrcweir m_aDocumentIndexFI.Enable(bSelective); 273*cdf0e10cSrcweir m_aPrevSetIB.Enable(bSelective); 274*cdf0e10cSrcweir m_aNextSetIB.Enable(bSelective); 275*cdf0e10cSrcweir } 276*cdf0e10cSrcweir /*-- 28.04.2004 12:45:58--------------------------------------------------- 277*cdf0e10cSrcweir 278*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 279*cdf0e10cSrcweir IMPL_LINK(SwMailMergeAddressBlockPage, AddressBlockHdl_Impl, CheckBox*, pBox) 280*cdf0e10cSrcweir { 281*cdf0e10cSrcweir EnableAddressBlock(pBox->IsEnabled(), pBox->IsChecked()); 282*cdf0e10cSrcweir SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem(); 283*cdf0e10cSrcweir rConfigItem.SetAddressBlock(m_aAddressCB.IsChecked()); 284*cdf0e10cSrcweir m_pWizard->UpdateRoadmap(); 285*cdf0e10cSrcweir return 0; 286*cdf0e10cSrcweir } 287*cdf0e10cSrcweir /*-- 08.06.2004 13:00:29--------------------------------------------------- 288*cdf0e10cSrcweir 289*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 290*cdf0e10cSrcweir IMPL_LINK(SwMailMergeAddressBlockPage, AddressBlockSelectHdl_Impl, SwAddressPreview*, EMPTYARG) 291*cdf0e10cSrcweir { 292*cdf0e10cSrcweir sal_uInt16 nSel = m_aSettingsWIN.GetSelectedAddress(); 293*cdf0e10cSrcweir const uno::Sequence< ::rtl::OUString> aBlocks = 294*cdf0e10cSrcweir m_pWizard->GetConfigItem().GetAddressBlocks(); 295*cdf0e10cSrcweir String sPreview = SwAddressPreview::FillData(aBlocks[nSel], m_pWizard->GetConfigItem()); 296*cdf0e10cSrcweir m_aPreviewWIN.SetAddress(sPreview); 297*cdf0e10cSrcweir m_pWizard->GetConfigItem().SetCurrentAddressBlockIndex( nSel ); 298*cdf0e10cSrcweir GetWizard()->UpdateRoadmap(); 299*cdf0e10cSrcweir GetWizard()->enableButtons(WZB_NEXT, GetWizard()->isStateEnabled(MM_GREETINGSPAGE)); 300*cdf0e10cSrcweir return 0; 301*cdf0e10cSrcweir } 302*cdf0e10cSrcweir /*-- 31.08.2005 15:34:55--------------------------------------------------- 303*cdf0e10cSrcweir 304*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 305*cdf0e10cSrcweir IMPL_LINK(SwMailMergeAddressBlockPage, HideParagraphsHdl_Impl, CheckBox*, pBox) 306*cdf0e10cSrcweir { 307*cdf0e10cSrcweir SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem(); 308*cdf0e10cSrcweir rConfigItem.SetHideEmptyParagraphs( pBox->IsChecked() ); 309*cdf0e10cSrcweir return 0; 310*cdf0e10cSrcweir } 311*cdf0e10cSrcweir 312*cdf0e10cSrcweir // ------------------------------------------------------------------------------ 313*cdf0e10cSrcweir IMPL_LINK(SwMailMergeAddressBlockPage, InsertDataHdl_Impl, ImageButton*, pButton) 314*cdf0e10cSrcweir { 315*cdf0e10cSrcweir //if no pButton is given, the first set has to be pre-set 316*cdf0e10cSrcweir SwMailMergeConfigItem& rConfig = m_pWizard->GetConfigItem(); 317*cdf0e10cSrcweir m_pWizard->EnterWait(); 318*cdf0e10cSrcweir if(!pButton) 319*cdf0e10cSrcweir { 320*cdf0e10cSrcweir rConfig.GetResultSet(); 321*cdf0e10cSrcweir } 322*cdf0e10cSrcweir else 323*cdf0e10cSrcweir { 324*cdf0e10cSrcweir sal_Bool bNext = pButton == &m_aNextSetIB; 325*cdf0e10cSrcweir sal_Int32 nPos = rConfig.GetResultSetPosition(); 326*cdf0e10cSrcweir rConfig.MoveResultSet( bNext ? ++nPos : --nPos); 327*cdf0e10cSrcweir } 328*cdf0e10cSrcweir m_pWizard->LeaveWait(); 329*cdf0e10cSrcweir sal_Int32 nPos = rConfig.GetResultSetPosition(); 330*cdf0e10cSrcweir sal_Bool bEnable = sal_True; 331*cdf0e10cSrcweir if(nPos < 1) 332*cdf0e10cSrcweir { 333*cdf0e10cSrcweir bEnable = sal_False; 334*cdf0e10cSrcweir nPos = 1; 335*cdf0e10cSrcweir } 336*cdf0e10cSrcweir else 337*cdf0e10cSrcweir { 338*cdf0e10cSrcweir //if output type is letter 339*cdf0e10cSrcweir if(m_aSettingsWIN.IsVisible()) 340*cdf0e10cSrcweir { 341*cdf0e10cSrcweir //Fill data into preview 342*cdf0e10cSrcweir sal_uInt16 nSel = m_aSettingsWIN.GetSelectedAddress(); 343*cdf0e10cSrcweir const uno::Sequence< ::rtl::OUString> aBlocks = 344*cdf0e10cSrcweir m_pWizard->GetConfigItem().GetAddressBlocks(); 345*cdf0e10cSrcweir String sPreview = SwAddressPreview::FillData(aBlocks[nSel], rConfig); 346*cdf0e10cSrcweir m_aPreviewWIN.SetAddress(sPreview); 347*cdf0e10cSrcweir } 348*cdf0e10cSrcweir } 349*cdf0e10cSrcweir m_aPrevSetIB.Enable(bEnable); 350*cdf0e10cSrcweir //m_aNextSetIB.Enable(bEnable); 351*cdf0e10cSrcweir //m_aDocumentIndexFI.Enable(bEnable); 352*cdf0e10cSrcweir String sTemp(m_sDocument); 353*cdf0e10cSrcweir sTemp.SearchAndReplaceAscii("%1", String::CreateFromInt32(nPos)); 354*cdf0e10cSrcweir m_aDocumentIndexFI.SetText(sTemp); 355*cdf0e10cSrcweir 356*cdf0e10cSrcweir GetWizard()->enableButtons(WZB_NEXT, GetWizard()->isStateEnabled(MM_GREETINGSPAGE)); 357*cdf0e10cSrcweir sal_Bool bHasResultSet = rConfig.GetResultSet().is(); 358*cdf0e10cSrcweir m_aCurrentAddressFI.Show(bHasResultSet); 359*cdf0e10cSrcweir if(bHasResultSet) 360*cdf0e10cSrcweir { 361*cdf0e10cSrcweir String sTmp = m_sCurrentAddress; 362*cdf0e10cSrcweir sTmp.SearchAndReplaceAscii("%1", rConfig.GetCurrentDBData().sDataSource ); 363*cdf0e10cSrcweir m_aCurrentAddressFI.SetText(sTmp); 364*cdf0e10cSrcweir m_aAddressListPB.SetText(m_sChangeAddress); 365*cdf0e10cSrcweir } 366*cdf0e10cSrcweir EnableAddressBlock(bHasResultSet, m_aAddressCB.IsChecked()); 367*cdf0e10cSrcweir return 0; 368*cdf0e10cSrcweir } 369*cdf0e10cSrcweir /*-- 13.04.2004 16:01:26--------------------------------------------------- 370*cdf0e10cSrcweir 371*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 372*cdf0e10cSrcweir SwSelectAddressBlockDialog::SwSelectAddressBlockDialog( 373*cdf0e10cSrcweir Window* pParent, SwMailMergeConfigItem& rConfig) : 374*cdf0e10cSrcweir SfxModalDialog(pParent, SW_RES(DLG_MM_SELECTADDRESSBLOCK)), 375*cdf0e10cSrcweir #ifdef MSC 376*cdf0e10cSrcweir #pragma warning (disable : 4355) 377*cdf0e10cSrcweir #endif 378*cdf0e10cSrcweir m_aSelectFT( this, SW_RES( FT_SELECT)), 379*cdf0e10cSrcweir m_aPreview( this, SW_RES( WIN_PREVIEW)), 380*cdf0e10cSrcweir m_aNewPB( this, SW_RES( PB_NEW)), 381*cdf0e10cSrcweir m_aCustomizePB( this, SW_RES( PB_CUSTOMIZE)), 382*cdf0e10cSrcweir m_aDeletePB( this, SW_RES( PB_DELETE)), 383*cdf0e10cSrcweir m_aSettingsFI( this, SW_RES( FI_SETTINGS)), 384*cdf0e10cSrcweir m_aNeverRB( this, SW_RES( RB_NEVER)), 385*cdf0e10cSrcweir m_aAlwaysRB( this, SW_RES( RB_ALWAYS)), 386*cdf0e10cSrcweir m_aDependentRB( this, SW_RES( RB_DEPENDENT)), 387*cdf0e10cSrcweir m_aCountryED( this, SW_RES( ED_COUNTRY)), 388*cdf0e10cSrcweir m_aSeparatorFL( this, SW_RES( FL_SEPARATOR)), 389*cdf0e10cSrcweir m_aOK( this, SW_RES( PB_OK)), 390*cdf0e10cSrcweir m_aCancel( this, SW_RES( PB_CANCEL)), 391*cdf0e10cSrcweir m_aHelp( this, SW_RES( PB_HELP)), 392*cdf0e10cSrcweir #ifdef MSC 393*cdf0e10cSrcweir #pragma warning (default : 4355) 394*cdf0e10cSrcweir #endif 395*cdf0e10cSrcweir m_rConfig(rConfig) 396*cdf0e10cSrcweir { 397*cdf0e10cSrcweir FreeResource(); 398*cdf0e10cSrcweir 399*cdf0e10cSrcweir Link aCustomizeHdl = LINK(this, SwSelectAddressBlockDialog, NewCustomizeHdl_Impl); 400*cdf0e10cSrcweir m_aNewPB.SetClickHdl(aCustomizeHdl); 401*cdf0e10cSrcweir m_aCustomizePB.SetClickHdl(aCustomizeHdl); 402*cdf0e10cSrcweir 403*cdf0e10cSrcweir m_aDeletePB.SetClickHdl(LINK(this, SwSelectAddressBlockDialog, DeleteHdl_Impl)); 404*cdf0e10cSrcweir 405*cdf0e10cSrcweir Link aLk = LINK(this, SwSelectAddressBlockDialog, IncludeHdl_Impl); 406*cdf0e10cSrcweir m_aNeverRB.SetClickHdl(aLk); 407*cdf0e10cSrcweir m_aAlwaysRB.SetClickHdl(aLk); 408*cdf0e10cSrcweir m_aDependentRB.SetClickHdl(aLk); 409*cdf0e10cSrcweir m_aPreview.SetLayout(2, 2); 410*cdf0e10cSrcweir m_aPreview.EnableScrollBar(); 411*cdf0e10cSrcweir } 412*cdf0e10cSrcweir /*-- 13.04.2004 16:01:27--------------------------------------------------- 413*cdf0e10cSrcweir 414*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 415*cdf0e10cSrcweir SwSelectAddressBlockDialog::~SwSelectAddressBlockDialog() 416*cdf0e10cSrcweir { 417*cdf0e10cSrcweir } 418*cdf0e10cSrcweir /*-- 28.04.2004 11:48:11--------------------------------------------------- 419*cdf0e10cSrcweir 420*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 421*cdf0e10cSrcweir void SwSelectAddressBlockDialog::SetAddressBlocks(const uno::Sequence< ::rtl::OUString>& rBlocks, 422*cdf0e10cSrcweir sal_uInt16 nSelectedAddress) 423*cdf0e10cSrcweir { 424*cdf0e10cSrcweir m_aAddressBlocks = rBlocks; 425*cdf0e10cSrcweir for(sal_Int32 nAddress = 0; nAddress < m_aAddressBlocks.getLength(); ++nAddress) 426*cdf0e10cSrcweir m_aPreview.AddAddress(m_aAddressBlocks[nAddress]); 427*cdf0e10cSrcweir m_aPreview.SelectAddress(nSelectedAddress); 428*cdf0e10cSrcweir } 429*cdf0e10cSrcweir /*-- 25.06.2004 10:51:36--------------------------------------------------- 430*cdf0e10cSrcweir return the address blocks and put the selected one to the first position 431*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 432*cdf0e10cSrcweir const uno::Sequence< ::rtl::OUString >& SwSelectAddressBlockDialog::GetAddressBlocks() 433*cdf0e10cSrcweir { 434*cdf0e10cSrcweir //put the selected block to the first position 435*cdf0e10cSrcweir sal_uInt16 nSelect = m_aPreview.GetSelectedAddress(); 436*cdf0e10cSrcweir if(nSelect) 437*cdf0e10cSrcweir { 438*cdf0e10cSrcweir uno::Sequence< ::rtl::OUString >aTemp = m_aAddressBlocks; 439*cdf0e10cSrcweir ::rtl::OUString* pTemp = aTemp.getArray(); 440*cdf0e10cSrcweir pTemp[0] = m_aAddressBlocks[nSelect]; 441*cdf0e10cSrcweir sal_uInt32 nIndex = 0; 442*cdf0e10cSrcweir const sal_uInt32 nNumBlocks = m_aAddressBlocks.getLength(); 443*cdf0e10cSrcweir for(sal_uInt32 nAddress = 1; nAddress < nNumBlocks; ++nAddress) 444*cdf0e10cSrcweir { 445*cdf0e10cSrcweir if(nIndex == nSelect) 446*cdf0e10cSrcweir ++nIndex; 447*cdf0e10cSrcweir pTemp[nAddress] = m_aAddressBlocks[nIndex]; 448*cdf0e10cSrcweir nIndex++; 449*cdf0e10cSrcweir } 450*cdf0e10cSrcweir m_aAddressBlocks = aTemp; 451*cdf0e10cSrcweir } 452*cdf0e10cSrcweir return m_aAddressBlocks; 453*cdf0e10cSrcweir } 454*cdf0e10cSrcweir /*-- 28.04.2004 11:48:11--------------------------------------------------- 455*cdf0e10cSrcweir 456*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 457*cdf0e10cSrcweir void SwSelectAddressBlockDialog::SetSettings( 458*cdf0e10cSrcweir sal_Bool bIsCountry, ::rtl::OUString rCountry) 459*cdf0e10cSrcweir { 460*cdf0e10cSrcweir if(bIsCountry) 461*cdf0e10cSrcweir { 462*cdf0e10cSrcweir rCountry.getLength() ? m_aDependentRB.Check() : m_aAlwaysRB.Check(); 463*cdf0e10cSrcweir m_aCountryED.SetText(rCountry); 464*cdf0e10cSrcweir } 465*cdf0e10cSrcweir else 466*cdf0e10cSrcweir m_aNeverRB.Check(); 467*cdf0e10cSrcweir m_aDeletePB.Enable(m_aAddressBlocks.getLength() > 1); 468*cdf0e10cSrcweir } 469*cdf0e10cSrcweir /*-- 10.05.2004 11:17:06--------------------------------------------------- 470*cdf0e10cSrcweir 471*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 472*cdf0e10cSrcweir ::rtl::OUString SwSelectAddressBlockDialog::GetCountry() const 473*cdf0e10cSrcweir { 474*cdf0e10cSrcweir ::rtl::OUString sRet; 475*cdf0e10cSrcweir if(m_aDependentRB.IsChecked()) 476*cdf0e10cSrcweir sRet = m_aCountryED.GetText(); 477*cdf0e10cSrcweir return sRet; 478*cdf0e10cSrcweir } 479*cdf0e10cSrcweir 480*cdf0e10cSrcweir /*-- 13.04.2004 16:02:32--------------------------------------------------- 481*cdf0e10cSrcweir 482*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 483*cdf0e10cSrcweir IMPL_LINK(SwSelectAddressBlockDialog, DeleteHdl_Impl, PushButton*, pButton) 484*cdf0e10cSrcweir { 485*cdf0e10cSrcweir if(m_aAddressBlocks.getLength()) 486*cdf0e10cSrcweir { 487*cdf0e10cSrcweir sal_uInt16 nSelected = m_aPreview.GetSelectedAddress(); 488*cdf0e10cSrcweir ::rtl::OUString* pAddressBlocks = m_aAddressBlocks.getArray(); 489*cdf0e10cSrcweir sal_Int32 nSource = 0; 490*cdf0e10cSrcweir for(sal_Int32 nTarget = 0; nTarget < m_aAddressBlocks.getLength() - 1; nTarget++) 491*cdf0e10cSrcweir { 492*cdf0e10cSrcweir if(nSource == nSelected) 493*cdf0e10cSrcweir ++nSource; 494*cdf0e10cSrcweir pAddressBlocks[nTarget] = pAddressBlocks[nSource++]; 495*cdf0e10cSrcweir } 496*cdf0e10cSrcweir m_aAddressBlocks.realloc(m_aAddressBlocks.getLength() - 1); 497*cdf0e10cSrcweir if(m_aAddressBlocks.getLength() <= 1) 498*cdf0e10cSrcweir pButton->Enable(sal_False); 499*cdf0e10cSrcweir m_aPreview.RemoveSelectedAddress(); 500*cdf0e10cSrcweir } 501*cdf0e10cSrcweir return 0; 502*cdf0e10cSrcweir } 503*cdf0e10cSrcweir /*-- 13.04.2004 16:02:32--------------------------------------------------- 504*cdf0e10cSrcweir 505*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 506*cdf0e10cSrcweir IMPL_LINK(SwSelectAddressBlockDialog, NewCustomizeHdl_Impl, PushButton*, pButton) 507*cdf0e10cSrcweir { 508*cdf0e10cSrcweir bool bCustomize = pButton == &m_aCustomizePB; 509*cdf0e10cSrcweir SwCustomizeAddressBlockDialog::DialogType nType = bCustomize ? 510*cdf0e10cSrcweir SwCustomizeAddressBlockDialog::ADDRESSBLOCK_EDIT : 511*cdf0e10cSrcweir SwCustomizeAddressBlockDialog::ADDRESSBLOCK_NEW; 512*cdf0e10cSrcweir SwCustomizeAddressBlockDialog *pDlg = 513*cdf0e10cSrcweir new SwCustomizeAddressBlockDialog(pButton,m_rConfig,nType); 514*cdf0e10cSrcweir if(bCustomize) 515*cdf0e10cSrcweir { 516*cdf0e10cSrcweir pDlg->SetAddress(m_aAddressBlocks[m_aPreview.GetSelectedAddress()]); 517*cdf0e10cSrcweir } 518*cdf0e10cSrcweir if(RET_OK == pDlg->Execute()) 519*cdf0e10cSrcweir { 520*cdf0e10cSrcweir if(bCustomize) 521*cdf0e10cSrcweir { 522*cdf0e10cSrcweir ::rtl::OUString sNew = pDlg->GetAddress(); 523*cdf0e10cSrcweir m_aPreview.ReplaceSelectedAddress(sNew); 524*cdf0e10cSrcweir m_aAddressBlocks[m_aPreview.GetSelectedAddress()] = sNew; 525*cdf0e10cSrcweir } 526*cdf0e10cSrcweir else 527*cdf0e10cSrcweir { 528*cdf0e10cSrcweir ::rtl::OUString sNew = pDlg->GetAddress(); 529*cdf0e10cSrcweir m_aPreview.AddAddress(sNew); 530*cdf0e10cSrcweir m_aAddressBlocks.realloc(m_aAddressBlocks.getLength() + 1); 531*cdf0e10cSrcweir sal_uInt16 nSelect = (sal_uInt16)m_aAddressBlocks.getLength() - 1; 532*cdf0e10cSrcweir m_aAddressBlocks[nSelect] = sNew; 533*cdf0e10cSrcweir m_aPreview.SelectAddress(nSelect); 534*cdf0e10cSrcweir } 535*cdf0e10cSrcweir m_aDeletePB.Enable( m_aAddressBlocks.getLength() > 1); 536*cdf0e10cSrcweir } 537*cdf0e10cSrcweir delete pDlg; 538*cdf0e10cSrcweir return 0; 539*cdf0e10cSrcweir } 540*cdf0e10cSrcweir /*-- 13.04.2004 16:02:33--------------------------------------------------- 541*cdf0e10cSrcweir 542*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 543*cdf0e10cSrcweir IMPL_LINK(SwSelectAddressBlockDialog, IncludeHdl_Impl, RadioButton*, pButton) 544*cdf0e10cSrcweir { 545*cdf0e10cSrcweir m_aCountryED.Enable(&m_aDependentRB == pButton); 546*cdf0e10cSrcweir return 0; 547*cdf0e10cSrcweir } 548*cdf0e10cSrcweir 549*cdf0e10cSrcweir /* -----------------------------28.02.05 09:00-------------------------------- 550*cdf0e10cSrcweir 551*cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 552*cdf0e10cSrcweir SwRestrictedComboBox::~SwRestrictedComboBox() 553*cdf0e10cSrcweir { 554*cdf0e10cSrcweir } 555*cdf0e10cSrcweir /* -----------------------------28.02.05 09:00-------------------------------- 556*cdf0e10cSrcweir 557*cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 558*cdf0e10cSrcweir void SwRestrictedComboBox::KeyInput(const KeyEvent& rEvt) 559*cdf0e10cSrcweir { 560*cdf0e10cSrcweir sal_Bool bCallParent = sal_True; 561*cdf0e10cSrcweir if(rEvt.GetCharCode()) 562*cdf0e10cSrcweir { 563*cdf0e10cSrcweir String sKey = rEvt.GetCharCode(); 564*cdf0e10cSrcweir if( STRING_NOTFOUND != sForbiddenChars.Search(sKey)) 565*cdf0e10cSrcweir bCallParent = sal_False; 566*cdf0e10cSrcweir } 567*cdf0e10cSrcweir if(bCallParent) 568*cdf0e10cSrcweir ComboBox::KeyInput(rEvt); 569*cdf0e10cSrcweir } 570*cdf0e10cSrcweir /* -----------------------------28.02.05 09:00-------------------------------- 571*cdf0e10cSrcweir 572*cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 573*cdf0e10cSrcweir void SwRestrictedComboBox::Modify() 574*cdf0e10cSrcweir { 575*cdf0e10cSrcweir Selection aSel = GetSelection(); 576*cdf0e10cSrcweir String sTemp = GetText(); 577*cdf0e10cSrcweir for(sal_uInt16 i = 0; i < sForbiddenChars.Len(); i++) 578*cdf0e10cSrcweir { 579*cdf0e10cSrcweir sTemp.EraseAllChars( sForbiddenChars.GetChar(i) ); 580*cdf0e10cSrcweir } 581*cdf0e10cSrcweir sal_uInt16 nDiff = GetText().Len() - sTemp.Len(); 582*cdf0e10cSrcweir if(nDiff) 583*cdf0e10cSrcweir { 584*cdf0e10cSrcweir aSel.setMin(aSel.getMin() - nDiff); 585*cdf0e10cSrcweir aSel.setMax(aSel.getMin()); 586*cdf0e10cSrcweir SetText(sTemp); 587*cdf0e10cSrcweir SetSelection(aSel); 588*cdf0e10cSrcweir } 589*cdf0e10cSrcweir if(GetModifyHdl().IsSet()) 590*cdf0e10cSrcweir GetModifyHdl().Call(this); 591*cdf0e10cSrcweir } 592*cdf0e10cSrcweir 593*cdf0e10cSrcweir /*-- 13.04.2004 16:01:08--------------------------------------------------- 594*cdf0e10cSrcweir 595*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 596*cdf0e10cSrcweir #define USER_DATA_SALUTATION -1 597*cdf0e10cSrcweir #define USER_DATA_PUNCTUATION -2 598*cdf0e10cSrcweir #define USER_DATA_TEXT -3 599*cdf0e10cSrcweir #define USER_DATA_NONE -4 600*cdf0e10cSrcweir 601*cdf0e10cSrcweir SwCustomizeAddressBlockDialog::SwCustomizeAddressBlockDialog( 602*cdf0e10cSrcweir Window* pParent, SwMailMergeConfigItem& rConfig, DialogType eType) : 603*cdf0e10cSrcweir SfxModalDialog(pParent, SW_RES(DLG_MM_CUSTOMIZEADDRESSBLOCK)), 604*cdf0e10cSrcweir #ifdef MSC 605*cdf0e10cSrcweir #pragma warning (disable : 4355) 606*cdf0e10cSrcweir #endif 607*cdf0e10cSrcweir m_aAddressElementsFT( this, SW_RES( FT_ADDRESSELEMENTS )), 608*cdf0e10cSrcweir m_aAddressElementsLB( this, SW_RES( LB_ADDRESSELEMENTS )), 609*cdf0e10cSrcweir m_aInsertFieldIB( this, SW_RES( IB_INSERTFIELD )), 610*cdf0e10cSrcweir m_aRemoveFieldIB( this, SW_RES( IB_REMOVEFIELD )), 611*cdf0e10cSrcweir m_aDragFT( this, SW_RES( FT_DRAG )), 612*cdf0e10cSrcweir m_aDragED( this, SW_RES( ED_DRAG )), 613*cdf0e10cSrcweir m_aUpIB( this, SW_RES( IB_UP )), 614*cdf0e10cSrcweir m_aLeftIB( this, SW_RES( IB_LEFT )), 615*cdf0e10cSrcweir m_aRightIB( this, SW_RES( IB_RIGHT )), 616*cdf0e10cSrcweir m_aDownIB( this, SW_RES( IB_DOWN )), 617*cdf0e10cSrcweir m_aFieldFT( this, SW_RES( FT_FIELD )), 618*cdf0e10cSrcweir m_aFieldCB( this, SW_RES( CB_FIELD )), 619*cdf0e10cSrcweir m_aPreviewFI( this, SW_RES( FI_PREVIEW )), 620*cdf0e10cSrcweir m_aPreviewWIN( this, SW_RES( WIN_PREVIEW )), 621*cdf0e10cSrcweir m_aSeparatorFL( this, SW_RES( FL_SEPARATOR )), 622*cdf0e10cSrcweir m_aOK( this, SW_RES( PB_OK )), 623*cdf0e10cSrcweir m_aCancel( this, SW_RES( PB_CANCEL )), 624*cdf0e10cSrcweir m_aHelp( this, SW_RES( PB_HELP )), 625*cdf0e10cSrcweir #ifdef MSC 626*cdf0e10cSrcweir #pragma warning (default : 4355) 627*cdf0e10cSrcweir #endif 628*cdf0e10cSrcweir m_rConfigItem(rConfig), 629*cdf0e10cSrcweir m_eType(eType) 630*cdf0e10cSrcweir { 631*cdf0e10cSrcweir m_aFieldCB.SetForbiddenChars( String::CreateFromAscii("<>")); 632*cdf0e10cSrcweir m_aDragED.SetStyle(m_aDragED.GetStyle() |WB_NOHIDESELECTION); 633*cdf0e10cSrcweir if( eType >= GREETING_FEMALE ) 634*cdf0e10cSrcweir { 635*cdf0e10cSrcweir m_aFieldFT.Show(); 636*cdf0e10cSrcweir m_aFieldCB.Show(); 637*cdf0e10cSrcweir SvLBoxEntry* pEntry = m_aAddressElementsLB.InsertEntry(String(SW_RES(ST_SALUTATION ))); 638*cdf0e10cSrcweir pEntry->SetUserData((void*)(sal_Int32)USER_DATA_SALUTATION ); 639*cdf0e10cSrcweir pEntry = m_aAddressElementsLB.InsertEntry(String(SW_RES(ST_PUNCTUATION))); 640*cdf0e10cSrcweir pEntry->SetUserData((void*)(sal_Int32)USER_DATA_PUNCTUATION ); 641*cdf0e10cSrcweir pEntry = m_aAddressElementsLB.InsertEntry(String(SW_RES(ST_TEXT ))); 642*cdf0e10cSrcweir pEntry->SetUserData((void*)(sal_Int32)USER_DATA_TEXT ); 643*cdf0e10cSrcweir ResStringArray aSalutArr(SW_RES( 644*cdf0e10cSrcweir eType == GREETING_MALE ? RA_SALUTATION_MALE : RA_SALUTATION_FEMALE)); 645*cdf0e10cSrcweir sal_uInt16 i; 646*cdf0e10cSrcweir for(i = 0; i < aSalutArr.Count(); ++i) 647*cdf0e10cSrcweir m_aSalutations.push_back(aSalutArr.GetString(i)); 648*cdf0e10cSrcweir ResStringArray aPunctArr(SW_RES(RA_PUNCTUATION)); 649*cdf0e10cSrcweir for(i = 0; i < aPunctArr.Count(); ++i) 650*cdf0e10cSrcweir m_aPunctuations.push_back(aPunctArr.GetString(i)); 651*cdf0e10cSrcweir m_aDragED.SetText(String::CreateFromAscii(" ")); 652*cdf0e10cSrcweir SetText( String( SW_RES( eType == GREETING_MALE ? ST_TITLE_MALE : ST_TITLE_FEMALE))); 653*cdf0e10cSrcweir m_aAddressElementsFT.SetText(String(SW_RES(ST_SALUTATIONELEMENTS))); 654*cdf0e10cSrcweir m_aInsertFieldIB.SetQuickHelpText(String(SW_RES(ST_INSERTSALUTATIONFIELD))); 655*cdf0e10cSrcweir m_aRemoveFieldIB.SetQuickHelpText(String(SW_RES(ST_REMOVESALUTATIONFIELD))); 656*cdf0e10cSrcweir m_aDragFT.SetText(String(SW_RES(ST_DRAGSALUTATION))); 657*cdf0e10cSrcweir } 658*cdf0e10cSrcweir else 659*cdf0e10cSrcweir { 660*cdf0e10cSrcweir if(eType == ADDRESSBLOCK_EDIT) 661*cdf0e10cSrcweir SetText(String(SW_RES(ST_TITLE_EDIT))); 662*cdf0e10cSrcweir 663*cdf0e10cSrcweir //resize the preview 664*cdf0e10cSrcweir Point aFieldPos(m_aFieldFT.GetPosPixel()); 665*cdf0e10cSrcweir long nDiff = m_aPreviewFI.GetPosPixel().Y() - aFieldPos.Y(); 666*cdf0e10cSrcweir m_aPreviewFI.SetPosPixel(aFieldPos); 667*cdf0e10cSrcweir Size aPreviewSize = m_aPreviewWIN.GetSizePixel(); 668*cdf0e10cSrcweir aPreviewSize.Height() += nDiff; 669*cdf0e10cSrcweir m_aPreviewWIN.SetSizePixel(aPreviewSize); 670*cdf0e10cSrcweir m_aPreviewWIN.SetPosPixel(m_aFieldCB.GetPosPixel()); 671*cdf0e10cSrcweir m_aDragED.SetText(String::CreateFromAscii("\n\n\n\n\n")); 672*cdf0e10cSrcweir } 673*cdf0e10cSrcweir FreeResource(); 674*cdf0e10cSrcweir const ResStringArray& rHeaders = m_rConfigItem.GetDefaultAddressHeaders(); 675*cdf0e10cSrcweir for(sal_uInt16 i = 0; i < rHeaders.Count(); ++i) 676*cdf0e10cSrcweir { 677*cdf0e10cSrcweir const XubString& rHeader = rHeaders.GetString( i ); 678*cdf0e10cSrcweir SvLBoxEntry* pEntry = m_aAddressElementsLB.InsertEntry(rHeader); 679*cdf0e10cSrcweir pEntry->SetUserData((void*)(sal_Int32)i); 680*cdf0e10cSrcweir } 681*cdf0e10cSrcweir m_aOK.SetClickHdl(LINK(this, SwCustomizeAddressBlockDialog, OKHdl_Impl)); 682*cdf0e10cSrcweir m_aAddressElementsLB.SetSelectHdl(LINK(this, SwCustomizeAddressBlockDialog, ListBoxSelectHdl_Impl )); 683*cdf0e10cSrcweir m_aDragED.SetModifyHdl(LINK(this, SwCustomizeAddressBlockDialog, EditModifyHdl_Impl)); 684*cdf0e10cSrcweir m_aDragED.SetSelectionChangedHdl( LINK( this, SwCustomizeAddressBlockDialog, SelectionChangedHdl_Impl)); 685*cdf0e10cSrcweir Link aFieldsLink = LINK(this, SwCustomizeAddressBlockDialog, FieldChangeHdl_Impl); 686*cdf0e10cSrcweir m_aFieldCB.SetModifyHdl(aFieldsLink); 687*cdf0e10cSrcweir m_aFieldCB.SetSelectHdl(aFieldsLink); 688*cdf0e10cSrcweir Link aImgButtonHdl = LINK(this, SwCustomizeAddressBlockDialog, ImageButtonHdl_Impl); 689*cdf0e10cSrcweir m_aInsertFieldIB.SetClickHdl(aImgButtonHdl); 690*cdf0e10cSrcweir m_aRemoveFieldIB.SetClickHdl(aImgButtonHdl); 691*cdf0e10cSrcweir m_aUpIB.SetClickHdl(aImgButtonHdl); 692*cdf0e10cSrcweir m_aLeftIB.SetClickHdl(aImgButtonHdl); 693*cdf0e10cSrcweir m_aRightIB.SetClickHdl(aImgButtonHdl); 694*cdf0e10cSrcweir m_aDownIB.SetClickHdl(aImgButtonHdl); 695*cdf0e10cSrcweir UpdateImageButtons_Impl(); 696*cdf0e10cSrcweir } 697*cdf0e10cSrcweir /*-- 13.04.2004 16:01:08--------------------------------------------------- 698*cdf0e10cSrcweir 699*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 700*cdf0e10cSrcweir SwCustomizeAddressBlockDialog::~SwCustomizeAddressBlockDialog() 701*cdf0e10cSrcweir { 702*cdf0e10cSrcweir } 703*cdf0e10cSrcweir /*-- 07.06.2004 13:51:11--------------------------------------------------- 704*cdf0e10cSrcweir 705*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 706*cdf0e10cSrcweir IMPL_LINK(SwCustomizeAddressBlockDialog, OKHdl_Impl, OKButton*, EMPTYARG) 707*cdf0e10cSrcweir { 708*cdf0e10cSrcweir EndDialog(RET_OK); 709*cdf0e10cSrcweir return 0; 710*cdf0e10cSrcweir } 711*cdf0e10cSrcweir /*-- 24.06.2004 11:36:05--------------------------------------------------- 712*cdf0e10cSrcweir 713*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 714*cdf0e10cSrcweir IMPL_LINK(SwCustomizeAddressBlockDialog, ListBoxSelectHdl_Impl, DDListBox*, pBox) 715*cdf0e10cSrcweir { 716*cdf0e10cSrcweir sal_Int32 nUserData = (sal_Int32)(sal_IntPtr)pBox->FirstSelected()->GetUserData(); 717*cdf0e10cSrcweir // Check if the selected entry is already in the address and then forbid inserting 718*cdf0e10cSrcweir m_aInsertFieldIB.Enable(nUserData >= 0 || !HasItem_Impl(nUserData)); 719*cdf0e10cSrcweir return 0; 720*cdf0e10cSrcweir } 721*cdf0e10cSrcweir /*-- 25.06.2004 11:21:24--------------------------------------------------- 722*cdf0e10cSrcweir 723*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 724*cdf0e10cSrcweir IMPL_LINK(SwCustomizeAddressBlockDialog, EditModifyHdl_Impl, AddressMultiLineEdit*, EMPTYARG) 725*cdf0e10cSrcweir { 726*cdf0e10cSrcweir String sAddress = SwAddressPreview::FillData( 727*cdf0e10cSrcweir GetAddress(), 728*cdf0e10cSrcweir m_rConfigItem); 729*cdf0e10cSrcweir m_aPreviewWIN.SetAddress(sAddress); 730*cdf0e10cSrcweir UpdateImageButtons_Impl(); 731*cdf0e10cSrcweir return 0; 732*cdf0e10cSrcweir } 733*cdf0e10cSrcweir /*-- 25.06.2004 12:14:11--------------------------------------------------- 734*cdf0e10cSrcweir 735*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 736*cdf0e10cSrcweir IMPL_LINK(SwCustomizeAddressBlockDialog, ImageButtonHdl_Impl, ImageButton*, pButton) 737*cdf0e10cSrcweir { 738*cdf0e10cSrcweir if(&m_aInsertFieldIB == pButton) 739*cdf0e10cSrcweir { 740*cdf0e10cSrcweir SvLBoxEntry* pEntry = m_aAddressElementsLB.GetCurEntry(); 741*cdf0e10cSrcweir if(pEntry) 742*cdf0e10cSrcweir { 743*cdf0e10cSrcweir String sEntry = m_aAddressElementsLB.GetEntryText(pEntry); 744*cdf0e10cSrcweir sEntry.Insert('<', 0); 745*cdf0e10cSrcweir sEntry += '>'; 746*cdf0e10cSrcweir m_aDragED.InsertNewEntry(sEntry); 747*cdf0e10cSrcweir } 748*cdf0e10cSrcweir } 749*cdf0e10cSrcweir else if(&m_aRemoveFieldIB == pButton) 750*cdf0e10cSrcweir { 751*cdf0e10cSrcweir m_aDragED.RemoveCurrentEntry(); 752*cdf0e10cSrcweir } 753*cdf0e10cSrcweir else 754*cdf0e10cSrcweir { 755*cdf0e10cSrcweir sal_uInt16 nMove = MOVE_ITEM_DOWN; 756*cdf0e10cSrcweir if(&m_aUpIB == pButton) 757*cdf0e10cSrcweir nMove = MOVE_ITEM_UP; 758*cdf0e10cSrcweir else if(&m_aLeftIB == pButton) 759*cdf0e10cSrcweir nMove = MOVE_ITEM_LEFT; 760*cdf0e10cSrcweir else if(&m_aRightIB == pButton) 761*cdf0e10cSrcweir nMove = MOVE_ITEM_RIGHT; 762*cdf0e10cSrcweir m_aDragED.MoveCurrentItem(nMove); 763*cdf0e10cSrcweir } 764*cdf0e10cSrcweir UpdateImageButtons_Impl(); 765*cdf0e10cSrcweir return 0; 766*cdf0e10cSrcweir } 767*cdf0e10cSrcweir /*-- 01.07.2004 09:27:02--------------------------------------------------- 768*cdf0e10cSrcweir 769*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 770*cdf0e10cSrcweir sal_Int32 SwCustomizeAddressBlockDialog::GetSelectedItem_Impl() 771*cdf0e10cSrcweir { 772*cdf0e10cSrcweir sal_Int32 nRet = USER_DATA_NONE; 773*cdf0e10cSrcweir String sSelected = m_aDragED.GetCurrentItem(); 774*cdf0e10cSrcweir if(sSelected.Len()) 775*cdf0e10cSrcweir for(sal_uLong i = 0; i < m_aAddressElementsLB.GetEntryCount(); ++i) 776*cdf0e10cSrcweir { 777*cdf0e10cSrcweir SvLBoxEntry* pEntry = m_aAddressElementsLB.GetEntry(i); 778*cdf0e10cSrcweir String sEntry = m_aAddressElementsLB.GetEntryText(pEntry); 779*cdf0e10cSrcweir if( sSelected.Equals( sEntry, 1, sSelected.Len() - 2 ) ) 780*cdf0e10cSrcweir { 781*cdf0e10cSrcweir nRet = (sal_Int32)(sal_IntPtr)pEntry->GetUserData(); 782*cdf0e10cSrcweir break; 783*cdf0e10cSrcweir } 784*cdf0e10cSrcweir } 785*cdf0e10cSrcweir return nRet; 786*cdf0e10cSrcweir } 787*cdf0e10cSrcweir /*-- 01.07.2004 10:01:19--------------------------------------------------- 788*cdf0e10cSrcweir 789*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 790*cdf0e10cSrcweir bool SwCustomizeAddressBlockDialog::HasItem_Impl(sal_Int32 nUserData) 791*cdf0e10cSrcweir { 792*cdf0e10cSrcweir //get the entry from the ListBox 793*cdf0e10cSrcweir String sEntry; 794*cdf0e10cSrcweir for(sal_uLong i = 0; i < m_aAddressElementsLB.GetEntryCount(); ++i) 795*cdf0e10cSrcweir { 796*cdf0e10cSrcweir SvLBoxEntry* pEntry = m_aAddressElementsLB.GetEntry(i); 797*cdf0e10cSrcweir if((sal_Int32)(sal_IntPtr)pEntry->GetUserData() == nUserData) 798*cdf0e10cSrcweir { 799*cdf0e10cSrcweir sEntry = m_aAddressElementsLB.GetEntryText(pEntry); 800*cdf0e10cSrcweir break; 801*cdf0e10cSrcweir } 802*cdf0e10cSrcweir } 803*cdf0e10cSrcweir //put it into '<>' 804*cdf0e10cSrcweir sEntry += '>'; 805*cdf0e10cSrcweir sEntry.Insert( '<', 0); 806*cdf0e10cSrcweir //search for this entry in the content 807*cdf0e10cSrcweir String sText = m_aDragED.GetText(); 808*cdf0e10cSrcweir bool bRet = sText.Search(sEntry) != STRING_NOTFOUND; 809*cdf0e10cSrcweir return bRet; 810*cdf0e10cSrcweir } 811*cdf0e10cSrcweir /*-- 25.06.2004 13:10:16--------------------------------------------------- 812*cdf0e10cSrcweir 813*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 814*cdf0e10cSrcweir IMPL_LINK(SwCustomizeAddressBlockDialog, SelectionChangedHdl_Impl, AddressMultiLineEdit*, pEdit) 815*cdf0e10cSrcweir { 816*cdf0e10cSrcweir // called in case the selection of the edit field changes. 817*cdf0e10cSrcweir // determine selection - if it's one of the editable fields then 818*cdf0e10cSrcweir // enable the related ComboBox and fill it 819*cdf0e10cSrcweir static bool bOnEntry = false; 820*cdf0e10cSrcweir if(bOnEntry) 821*cdf0e10cSrcweir return 0; 822*cdf0e10cSrcweir 823*cdf0e10cSrcweir bOnEntry = true; 824*cdf0e10cSrcweir sal_Int32 nSelected = GetSelectedItem_Impl(); 825*cdf0e10cSrcweir if(USER_DATA_NONE != nSelected) 826*cdf0e10cSrcweir pEdit->SelectCurrentItem(); 827*cdf0e10cSrcweir 828*cdf0e10cSrcweir if(m_aFieldCB.IsVisible() && (USER_DATA_NONE != nSelected) && (nSelected < 0)) 829*cdf0e10cSrcweir { 830*cdf0e10cSrcweir //search in ListBox if it's one of the first entries 831*cdf0e10cSrcweir String sSelect; 832*cdf0e10cSrcweir ::std::vector<String>* pVector = 0; 833*cdf0e10cSrcweir switch(nSelected) { 834*cdf0e10cSrcweir case USER_DATA_SALUTATION: 835*cdf0e10cSrcweir sSelect = m_sCurrentSalutation; 836*cdf0e10cSrcweir pVector = &m_aSalutations; 837*cdf0e10cSrcweir break; 838*cdf0e10cSrcweir case USER_DATA_PUNCTUATION: 839*cdf0e10cSrcweir sSelect = m_sCurrentPunctuation; 840*cdf0e10cSrcweir pVector = &m_aPunctuations; 841*cdf0e10cSrcweir break; 842*cdf0e10cSrcweir case USER_DATA_TEXT: 843*cdf0e10cSrcweir sSelect = m_sCurrentText; 844*cdf0e10cSrcweir break; 845*cdf0e10cSrcweir } 846*cdf0e10cSrcweir m_aFieldCB.Clear(); 847*cdf0e10cSrcweir if(pVector) { 848*cdf0e10cSrcweir ::std::vector<String>::iterator aIterator; 849*cdf0e10cSrcweir for( aIterator = pVector->begin(); aIterator != pVector->end(); ++aIterator) 850*cdf0e10cSrcweir m_aFieldCB.InsertEntry(*aIterator); 851*cdf0e10cSrcweir } 852*cdf0e10cSrcweir m_aFieldCB.SetText(sSelect); 853*cdf0e10cSrcweir m_aFieldCB.Enable(sal_True); 854*cdf0e10cSrcweir m_aFieldFT.Enable(sal_True); 855*cdf0e10cSrcweir } 856*cdf0e10cSrcweir else 857*cdf0e10cSrcweir { 858*cdf0e10cSrcweir m_aFieldCB.Enable(sal_False); 859*cdf0e10cSrcweir m_aFieldFT.Enable(sal_False); 860*cdf0e10cSrcweir } 861*cdf0e10cSrcweir 862*cdf0e10cSrcweir UpdateImageButtons_Impl(); 863*cdf0e10cSrcweir bOnEntry = false; 864*cdf0e10cSrcweir return 0; 865*cdf0e10cSrcweir } 866*cdf0e10cSrcweir /*-- 25.06.2004 13:36:29--------------------------------------------------- 867*cdf0e10cSrcweir 868*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 869*cdf0e10cSrcweir IMPL_LINK(SwCustomizeAddressBlockDialog, FieldChangeHdl_Impl, ComboBox*, EMPTYARG) 870*cdf0e10cSrcweir { 871*cdf0e10cSrcweir //changing the field content changes the related members, too 872*cdf0e10cSrcweir sal_Int32 nSelected = GetSelectedItem_Impl(); 873*cdf0e10cSrcweir String sContent = m_aFieldCB.GetText(); 874*cdf0e10cSrcweir switch(nSelected) { 875*cdf0e10cSrcweir case USER_DATA_SALUTATION: 876*cdf0e10cSrcweir m_sCurrentSalutation = sContent; 877*cdf0e10cSrcweir break; 878*cdf0e10cSrcweir case USER_DATA_PUNCTUATION: 879*cdf0e10cSrcweir m_sCurrentPunctuation = sContent; 880*cdf0e10cSrcweir break; 881*cdf0e10cSrcweir case USER_DATA_TEXT: 882*cdf0e10cSrcweir m_sCurrentText = sContent; 883*cdf0e10cSrcweir break; 884*cdf0e10cSrcweir } 885*cdf0e10cSrcweir UpdateImageButtons_Impl(); 886*cdf0e10cSrcweir m_aPreviewWIN.SetAddress(GetAddress()); 887*cdf0e10cSrcweir m_aDragED.Modify(); 888*cdf0e10cSrcweir return 0; 889*cdf0e10cSrcweir } 890*cdf0e10cSrcweir 891*cdf0e10cSrcweir /*-- 25.06.2004 12:35:51--------------------------------------------------- 892*cdf0e10cSrcweir 893*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 894*cdf0e10cSrcweir void SwCustomizeAddressBlockDialog::UpdateImageButtons_Impl() 895*cdf0e10cSrcweir { 896*cdf0e10cSrcweir sal_uInt16 nMove = m_aDragED.IsCurrentItemMoveable(); 897*cdf0e10cSrcweir m_aUpIB.Enable(nMove & MOVE_ITEM_UP ); 898*cdf0e10cSrcweir m_aLeftIB.Enable(nMove & MOVE_ITEM_LEFT ); 899*cdf0e10cSrcweir m_aRightIB.Enable(nMove & MOVE_ITEM_RIGHT ); 900*cdf0e10cSrcweir m_aDownIB.Enable(nMove & MOVE_ITEM_DOWN); 901*cdf0e10cSrcweir m_aRemoveFieldIB.Enable(m_aDragED.HasCurrentItem() ? sal_True : sal_False); 902*cdf0e10cSrcweir SvLBoxEntry* pEntry = m_aAddressElementsLB.GetCurEntry(); 903*cdf0e10cSrcweir m_aInsertFieldIB.Enable( pEntry && 904*cdf0e10cSrcweir (0 < (sal_Int32)(sal_IntPtr)pEntry->GetUserData() || m_aFieldCB.GetText().Len())); 905*cdf0e10cSrcweir } 906*cdf0e10cSrcweir /*-- 28.04.2004 12:04:14--------------------------------------------------- 907*cdf0e10cSrcweir 908*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 909*cdf0e10cSrcweir void SwCustomizeAddressBlockDialog::SetAddress(const ::rtl::OUString& rAddress) 910*cdf0e10cSrcweir { 911*cdf0e10cSrcweir m_aDragED.SetText( rAddress ); 912*cdf0e10cSrcweir UpdateImageButtons_Impl(); 913*cdf0e10cSrcweir m_aDragED.Modify(); 914*cdf0e10cSrcweir } 915*cdf0e10cSrcweir /*-- 28.04.2004 12:04:14--------------------------------------------------- 916*cdf0e10cSrcweir 917*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 918*cdf0e10cSrcweir ::rtl::OUString SwCustomizeAddressBlockDialog::GetAddress() 919*cdf0e10cSrcweir { 920*cdf0e10cSrcweir String sAddress(m_aDragED.GetAddress()); 921*cdf0e10cSrcweir //remove placeholders by the actual content 922*cdf0e10cSrcweir if(m_aFieldFT.IsVisible()) 923*cdf0e10cSrcweir { 924*cdf0e10cSrcweir for(sal_uLong i = 0; i < m_aAddressElementsLB.GetEntryCount(); ++i) 925*cdf0e10cSrcweir { 926*cdf0e10cSrcweir SvLBoxEntry* pEntry = m_aAddressElementsLB.GetEntry(i); 927*cdf0e10cSrcweir String sEntry = m_aAddressElementsLB.GetEntryText(pEntry); 928*cdf0e10cSrcweir sEntry += '>'; 929*cdf0e10cSrcweir sEntry.Insert('<', 0); 930*cdf0e10cSrcweir sal_Int32 nUserData = (sal_Int32)(sal_IntPtr)pEntry->GetUserData(); 931*cdf0e10cSrcweir switch(nUserData) 932*cdf0e10cSrcweir { 933*cdf0e10cSrcweir case USER_DATA_SALUTATION : sAddress.SearchAndReplace(sEntry, m_sCurrentSalutation); break; 934*cdf0e10cSrcweir case USER_DATA_PUNCTUATION: sAddress.SearchAndReplace(sEntry, m_sCurrentPunctuation); break; 935*cdf0e10cSrcweir case USER_DATA_TEXT : sAddress.SearchAndReplace(sEntry, m_sCurrentText); break; 936*cdf0e10cSrcweir } 937*cdf0e10cSrcweir } 938*cdf0e10cSrcweir } 939*cdf0e10cSrcweir return sAddress; 940*cdf0e10cSrcweir } 941*cdf0e10cSrcweir /*-- 28.02.2005 11:03:35--------------------------------------------------- 942*cdf0e10cSrcweir 943*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 944*cdf0e10cSrcweir void SwCustomizeAddressBlockDialog::MoveFocus( Window* pMember, bool bNext ) 945*cdf0e10cSrcweir { 946*cdf0e10cSrcweir ::std::vector< Window* > aControls; 947*cdf0e10cSrcweir 948*cdf0e10cSrcweir aControls.push_back(&m_aAddressElementsLB); 949*cdf0e10cSrcweir aControls.push_back(&m_aInsertFieldIB); 950*cdf0e10cSrcweir aControls.push_back(&m_aRemoveFieldIB); 951*cdf0e10cSrcweir aControls.push_back(&m_aDragED); 952*cdf0e10cSrcweir aControls.push_back(&m_aUpIB); 953*cdf0e10cSrcweir aControls.push_back(&m_aLeftIB); 954*cdf0e10cSrcweir aControls.push_back(&m_aRightIB); 955*cdf0e10cSrcweir aControls.push_back(&m_aDownIB); 956*cdf0e10cSrcweir aControls.push_back(&m_aFieldCB); 957*cdf0e10cSrcweir aControls.push_back(&m_aOK); 958*cdf0e10cSrcweir aControls.push_back(&m_aCancel); 959*cdf0e10cSrcweir aControls.push_back(&m_aHelp); 960*cdf0e10cSrcweir 961*cdf0e10cSrcweir ::std::vector< Window* >::iterator aMemberIter = aControls.begin(); 962*cdf0e10cSrcweir for( ; aMemberIter != aControls.end(); ++aMemberIter) 963*cdf0e10cSrcweir { 964*cdf0e10cSrcweir if(*aMemberIter == pMember) 965*cdf0e10cSrcweir break; 966*cdf0e10cSrcweir } 967*cdf0e10cSrcweir if( aMemberIter == aControls.end() ) 968*cdf0e10cSrcweir { 969*cdf0e10cSrcweir DBG_ERROR( "Window not found?" ); 970*cdf0e10cSrcweir return; 971*cdf0e10cSrcweir } 972*cdf0e10cSrcweir 973*cdf0e10cSrcweir if( bNext ) 974*cdf0e10cSrcweir { 975*cdf0e10cSrcweir ::std::vector< Window* >::iterator aSearch = aMemberIter; 976*cdf0e10cSrcweir ++aSearch; 977*cdf0e10cSrcweir while( true ) 978*cdf0e10cSrcweir { 979*cdf0e10cSrcweir if( aSearch == aControls.end()) 980*cdf0e10cSrcweir aSearch = aControls.begin(); 981*cdf0e10cSrcweir else if( (*aSearch)->IsEnabled() ) 982*cdf0e10cSrcweir { 983*cdf0e10cSrcweir (*aSearch)->GrabFocus(); 984*cdf0e10cSrcweir break; 985*cdf0e10cSrcweir } 986*cdf0e10cSrcweir else 987*cdf0e10cSrcweir ++aSearch; 988*cdf0e10cSrcweir } 989*cdf0e10cSrcweir } 990*cdf0e10cSrcweir else 991*cdf0e10cSrcweir { 992*cdf0e10cSrcweir ::std::vector< Window* >::iterator aSearch = aMemberIter; 993*cdf0e10cSrcweir if(aSearch == aControls.begin()) 994*cdf0e10cSrcweir aSearch = aControls.end(); 995*cdf0e10cSrcweir while( true ) 996*cdf0e10cSrcweir { 997*cdf0e10cSrcweir if(aSearch == aControls.begin()) 998*cdf0e10cSrcweir aSearch = aControls.end(); 999*cdf0e10cSrcweir else 1000*cdf0e10cSrcweir --aSearch; 1001*cdf0e10cSrcweir if( (*aSearch)->IsEnabled() ) 1002*cdf0e10cSrcweir { 1003*cdf0e10cSrcweir (*aSearch)->GrabFocus(); 1004*cdf0e10cSrcweir break; 1005*cdf0e10cSrcweir } 1006*cdf0e10cSrcweir } 1007*cdf0e10cSrcweir } 1008*cdf0e10cSrcweir 1009*cdf0e10cSrcweir } 1010*cdf0e10cSrcweir /*-- 13.04.2004 17:49:45--------------------------------------------------- 1011*cdf0e10cSrcweir 1012*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1013*cdf0e10cSrcweir class SwAssignFieldsControl : public Control 1014*cdf0e10cSrcweir { 1015*cdf0e10cSrcweir friend class SwAssignFieldsDialog; 1016*cdf0e10cSrcweir ScrollBar m_aVScroll; 1017*cdf0e10cSrcweir HeaderBar m_aHeaderHB; 1018*cdf0e10cSrcweir Window m_aWindow; 1019*cdf0e10cSrcweir 1020*cdf0e10cSrcweir ::std::vector<FixedInfo*> m_aFieldNames; 1021*cdf0e10cSrcweir ::std::vector<ListBox*> m_aMatches; 1022*cdf0e10cSrcweir ::std::vector<FixedInfo*> m_aPreviews; 1023*cdf0e10cSrcweir 1024*cdf0e10cSrcweir SwMailMergeConfigItem& m_rConfigItem; 1025*cdf0e10cSrcweir 1026*cdf0e10cSrcweir Link m_aModifyHdl; 1027*cdf0e10cSrcweir 1028*cdf0e10cSrcweir long m_nLBStartTopPos; 1029*cdf0e10cSrcweir long m_nYOffset; 1030*cdf0e10cSrcweir long m_nFirstYPos; 1031*cdf0e10cSrcweir 1032*cdf0e10cSrcweir DECL_LINK(ScrollHdl_Impl, ScrollBar*); 1033*cdf0e10cSrcweir DECL_LINK(MatchHdl_Impl, ListBox*); 1034*cdf0e10cSrcweir DECL_LINK(GotFocusHdl_Impl, ListBox*); 1035*cdf0e10cSrcweir 1036*cdf0e10cSrcweir virtual long PreNotify( NotifyEvent& rNEvt ); 1037*cdf0e10cSrcweir virtual void Command( const CommandEvent& rCEvt ); 1038*cdf0e10cSrcweir 1039*cdf0e10cSrcweir void MakeVisible( sal_Int32 nIndex ); 1040*cdf0e10cSrcweir public: 1041*cdf0e10cSrcweir SwAssignFieldsControl(Window* pParent, const ResId& rResId, 1042*cdf0e10cSrcweir SwMailMergeConfigItem& rConfigItem); 1043*cdf0e10cSrcweir ~SwAssignFieldsControl(); 1044*cdf0e10cSrcweir 1045*cdf0e10cSrcweir void SetModifyHdl(const Link& rModifyHdl) 1046*cdf0e10cSrcweir { 1047*cdf0e10cSrcweir m_aModifyHdl = rModifyHdl; 1048*cdf0e10cSrcweir m_aModifyHdl.Call(this); 1049*cdf0e10cSrcweir } 1050*cdf0e10cSrcweir }; 1051*cdf0e10cSrcweir /*-- 13.04.2004 17:51:27--------------------------------------------------- 1052*cdf0e10cSrcweir 1053*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1054*cdf0e10cSrcweir //------------------------------------------------------------------------- 1055*cdf0e10cSrcweir SwAssignFieldsControl::SwAssignFieldsControl( 1056*cdf0e10cSrcweir Window* pParent, const ResId& rResId, SwMailMergeConfigItem& rConfigItem) : 1057*cdf0e10cSrcweir Control(pParent, rResId), 1058*cdf0e10cSrcweir #ifdef MSC 1059*cdf0e10cSrcweir #pragma warning (disable : 4355) 1060*cdf0e10cSrcweir #endif 1061*cdf0e10cSrcweir m_aVScroll(this, ResId(SCR_1, *rResId.GetResMgr() )), 1062*cdf0e10cSrcweir m_aHeaderHB(this, WB_BUTTONSTYLE | WB_BOTTOMBORDER), 1063*cdf0e10cSrcweir m_aWindow(this, ResId(WIN_DATA, *rResId.GetResMgr())), 1064*cdf0e10cSrcweir #ifdef MSC 1065*cdf0e10cSrcweir #pragma warning (default : 4355) 1066*cdf0e10cSrcweir #endif 1067*cdf0e10cSrcweir m_rConfigItem(rConfigItem), 1068*cdf0e10cSrcweir m_nLBStartTopPos(0), 1069*cdf0e10cSrcweir m_nYOffset(0), 1070*cdf0e10cSrcweir m_nFirstYPos(0) 1071*cdf0e10cSrcweir { 1072*cdf0e10cSrcweir SetStyle(GetStyle()|WB_TABSTOP|WB_DIALOGCONTROL); 1073*cdf0e10cSrcweir SetHelpId(HID_MM_ASSIGN_FIELDS); 1074*cdf0e10cSrcweir long nHBHeight = m_aHeaderHB.CalcWindowSizePixel().Height(); 1075*cdf0e10cSrcweir Size aOutputSize(GetOutputSize()); 1076*cdf0e10cSrcweir m_aHeaderHB.SetSizePixel( 1077*cdf0e10cSrcweir Size(aOutputSize.Width(), nHBHeight)); 1078*cdf0e10cSrcweir m_aHeaderHB.Show(); 1079*cdf0e10cSrcweir m_aWindow.SetPosPixel(Point( 0, nHBHeight) ); 1080*cdf0e10cSrcweir m_aWindow.SetSizePixel(Size(aOutputSize.Width() - m_aVScroll.GetSizePixel().Width(), aOutputSize.Height() - nHBHeight)); 1081*cdf0e10cSrcweir m_aWindow.Show(); 1082*cdf0e10cSrcweir 1083*cdf0e10cSrcweir //get the name of the default headers 1084*cdf0e10cSrcweir const ResStringArray& rHeaders = rConfigItem.GetDefaultAddressHeaders(); 1085*cdf0e10cSrcweir //get the actual data 1086*cdf0e10cSrcweir uno::Reference< XColumnsSupplier > xColsSupp( rConfigItem.GetResultSet(), uno::UNO_QUERY); 1087*cdf0e10cSrcweir //get the name of the actual columns 1088*cdf0e10cSrcweir uno::Reference <XNameAccess> xColAccess = xColsSupp.is() ? xColsSupp->getColumns() : 0; 1089*cdf0e10cSrcweir uno::Sequence< ::rtl::OUString > aFields; 1090*cdf0e10cSrcweir if(xColAccess.is()) 1091*cdf0e10cSrcweir aFields = xColAccess->getElementNames(); 1092*cdf0e10cSrcweir const ::rtl::OUString* pFields = aFields.getConstArray(); 1093*cdf0e10cSrcweir 1094*cdf0e10cSrcweir //get the current assignment list 1095*cdf0e10cSrcweir //each position in this sequence matches the position in the header array rHeaders 1096*cdf0e10cSrcweir //if no assignment is available an empty sequence will be returned 1097*cdf0e10cSrcweir uno::Sequence< ::rtl::OUString> aAssignments = rConfigItem.GetColumnAssignment( rConfigItem.GetCurrentDBData() ); 1098*cdf0e10cSrcweir Link aMatchHdl = LINK(this, SwAssignFieldsControl, MatchHdl_Impl); 1099*cdf0e10cSrcweir Link aFocusHdl = LINK(this, SwAssignFieldsControl, GotFocusHdl_Impl); 1100*cdf0e10cSrcweir 1101*cdf0e10cSrcweir static const char* aHIDs[] = 1102*cdf0e10cSrcweir { 1103*cdf0e10cSrcweir HID_MM_HEADER_0, 1104*cdf0e10cSrcweir HID_MM_HEADER_1, 1105*cdf0e10cSrcweir HID_MM_HEADER_2, 1106*cdf0e10cSrcweir HID_MM_HEADER_3, 1107*cdf0e10cSrcweir HID_MM_HEADER_4, 1108*cdf0e10cSrcweir HID_MM_HEADER_5, 1109*cdf0e10cSrcweir HID_MM_HEADER_6, 1110*cdf0e10cSrcweir HID_MM_HEADER_7, 1111*cdf0e10cSrcweir HID_MM_HEADER_8, 1112*cdf0e10cSrcweir HID_MM_HEADER_9, 1113*cdf0e10cSrcweir HID_MM_HEADER_10, 1114*cdf0e10cSrcweir HID_MM_HEADER_11, 1115*cdf0e10cSrcweir HID_MM_HEADER_12, 1116*cdf0e10cSrcweir HID_MM_HEADER_13 1117*cdf0e10cSrcweir }; 1118*cdf0e10cSrcweir 1119*cdf0e10cSrcweir //fill the controls 1120*cdf0e10cSrcweir for(sal_uInt16 i = 0; i < rHeaders.Count(); ++i) 1121*cdf0e10cSrcweir { 1122*cdf0e10cSrcweir const XubString& rHeader = rHeaders.GetString( i ); 1123*cdf0e10cSrcweir FixedInfo* pNewText = new FixedInfo(&m_aWindow, ResId( FT_FIELDS, *rResId.GetResMgr())); 1124*cdf0e10cSrcweir String sLabel(String::CreateFromAscii("<>")); 1125*cdf0e10cSrcweir sLabel.Insert(rHeader, 1); 1126*cdf0e10cSrcweir pNewText->SetText(sLabel); 1127*cdf0e10cSrcweir ListBox* pNewLB = new ListBox(&m_aWindow, ResId(LB_FIELDS, *rResId.GetResMgr())); 1128*cdf0e10cSrcweir pNewLB->SetHelpId( aHIDs[i] ); 1129*cdf0e10cSrcweir pNewLB->SelectEntryPos(0); 1130*cdf0e10cSrcweir for(sal_Int32 nField = 0; nField < aFields.getLength(); ++nField) 1131*cdf0e10cSrcweir pNewLB->InsertEntry(pFields[nField]); 1132*cdf0e10cSrcweir FixedInfo* pNewPreview = new FixedInfo(&m_aWindow, ResId( FT_PREVIEW, *rResId.GetResMgr() )); 1133*cdf0e10cSrcweir //select the ListBox 1134*cdf0e10cSrcweir //if there is an assignment 1135*cdf0e10cSrcweir if(aAssignments.getLength() > i && aAssignments[i].getLength()) 1136*cdf0e10cSrcweir pNewLB->SelectEntry(aAssignments[i]); 1137*cdf0e10cSrcweir else //otherwise the current column name may match one of the db columns 1138*cdf0e10cSrcweir pNewLB->SelectEntry(rHeader); 1139*cdf0e10cSrcweir //then the preview can be filled accordingly 1140*cdf0e10cSrcweir if(xColAccess.is() && pNewLB->GetSelectEntryPos() > 0 && 1141*cdf0e10cSrcweir xColAccess->hasByName(pNewLB->GetSelectEntry())) 1142*cdf0e10cSrcweir { 1143*cdf0e10cSrcweir uno::Any aCol = xColAccess->getByName(pNewLB->GetSelectEntry()); 1144*cdf0e10cSrcweir uno::Reference< XColumn > xColumn; 1145*cdf0e10cSrcweir aCol >>= xColumn; 1146*cdf0e10cSrcweir if(xColumn.is()) 1147*cdf0e10cSrcweir try 1148*cdf0e10cSrcweir { 1149*cdf0e10cSrcweir pNewPreview->SetText(xColumn->getString()); 1150*cdf0e10cSrcweir } 1151*cdf0e10cSrcweir catch(SQLException& ) 1152*cdf0e10cSrcweir { 1153*cdf0e10cSrcweir } 1154*cdf0e10cSrcweir } 1155*cdf0e10cSrcweir if(!i) 1156*cdf0e10cSrcweir { 1157*cdf0e10cSrcweir //determine the vertical offset, use the bottom position of the ListBox 1158*cdf0e10cSrcweir m_nFirstYPos = m_nYOffset = pNewLB->GetPosPixel().Y(); 1159*cdf0e10cSrcweir m_nLBStartTopPos = m_nYOffset; 1160*cdf0e10cSrcweir m_nYOffset += pNewLB->GetSizePixel().Height(); 1161*cdf0e10cSrcweir } 1162*cdf0e10cSrcweir 1163*cdf0e10cSrcweir long nMove = m_nYOffset * i; 1164*cdf0e10cSrcweir lcl_Move(pNewText, nMove); 1165*cdf0e10cSrcweir lcl_Move(pNewLB, nMove); 1166*cdf0e10cSrcweir lcl_Move(pNewPreview, nMove); 1167*cdf0e10cSrcweir //set the select handler 1168*cdf0e10cSrcweir pNewLB->SetSelectHdl(aMatchHdl); 1169*cdf0e10cSrcweir pNewLB->SetGetFocusHdl(aFocusHdl); 1170*cdf0e10cSrcweir 1171*cdf0e10cSrcweir m_aFieldNames.push_back(pNewText); 1172*cdf0e10cSrcweir m_aMatches.push_back(pNewLB); 1173*cdf0e10cSrcweir m_aPreviews.push_back(pNewPreview); 1174*cdf0e10cSrcweir } 1175*cdf0e10cSrcweir ListBox* pBottomBox = m_aMatches[rHeaders.Count() -1]; 1176*cdf0e10cSrcweir long nYBottom = pBottomBox->GetPosPixel().Y(); 1177*cdf0e10cSrcweir nYBottom += pBottomBox->GetDropDownPosSizePixel().GetHeight(); 1178*cdf0e10cSrcweir m_aVScroll.SetRange(Range(0, rHeaders.Count())); 1179*cdf0e10cSrcweir m_aVScroll.SetPageSize((aOutputSize.Height() - nHBHeight - m_nLBStartTopPos)/ m_nYOffset); 1180*cdf0e10cSrcweir m_aVScroll.EnableDrag(); 1181*cdf0e10cSrcweir m_aVScroll.SetVisibleSize(m_aVScroll.GetPageSize()); 1182*cdf0e10cSrcweir m_aVScroll.SetScrollHdl(LINK(this, SwAssignFieldsControl, ScrollHdl_Impl)); 1183*cdf0e10cSrcweir 1184*cdf0e10cSrcweir FreeResource(); 1185*cdf0e10cSrcweir m_aVScroll.SetPosPixel(Point(aOutputSize.Width() - m_aVScroll.GetSizePixel().Width(), nHBHeight)); 1186*cdf0e10cSrcweir m_aVScroll.SetSizePixel(Size(m_aVScroll.GetSizePixel().Width(), aOutputSize.Height() - nHBHeight)); 1187*cdf0e10cSrcweir 1188*cdf0e10cSrcweir } 1189*cdf0e10cSrcweir /*-- 13.04.2004 17:51:28--------------------------------------------------- 1190*cdf0e10cSrcweir 1191*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1192*cdf0e10cSrcweir SwAssignFieldsControl::~SwAssignFieldsControl() 1193*cdf0e10cSrcweir { 1194*cdf0e10cSrcweir ::std::vector<FixedInfo*>::iterator aFIIter; 1195*cdf0e10cSrcweir for(aFIIter = m_aFieldNames.begin(); aFIIter != m_aFieldNames.end(); ++aFIIter) 1196*cdf0e10cSrcweir delete *aFIIter; 1197*cdf0e10cSrcweir ::std::vector<ListBox*>::iterator aLBIter; 1198*cdf0e10cSrcweir for(aLBIter = m_aMatches.begin(); aLBIter != m_aMatches.end(); ++aLBIter) 1199*cdf0e10cSrcweir delete *aLBIter; 1200*cdf0e10cSrcweir for(aFIIter = m_aPreviews.begin(); aFIIter != m_aPreviews.end(); ++aFIIter) 1201*cdf0e10cSrcweir delete *aFIIter; 1202*cdf0e10cSrcweir } 1203*cdf0e10cSrcweir 1204*cdf0e10cSrcweir /*-- 07.05.2004 13:11:26--------------------------------------------------- 1205*cdf0e10cSrcweir 1206*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1207*cdf0e10cSrcweir void SwAssignFieldsControl::Command( const CommandEvent& rCEvt ) 1208*cdf0e10cSrcweir { 1209*cdf0e10cSrcweir switch ( rCEvt.GetCommand() ) 1210*cdf0e10cSrcweir { 1211*cdf0e10cSrcweir case COMMAND_WHEEL: 1212*cdf0e10cSrcweir case COMMAND_STARTAUTOSCROLL: 1213*cdf0e10cSrcweir case COMMAND_AUTOSCROLL: 1214*cdf0e10cSrcweir { 1215*cdf0e10cSrcweir const CommandWheelData* pWheelData = rCEvt.GetWheelData(); 1216*cdf0e10cSrcweir if(pWheelData && !pWheelData->IsHorz() && COMMAND_WHEEL_ZOOM != pWheelData->GetMode()) 1217*cdf0e10cSrcweir { 1218*cdf0e10cSrcweir HandleScrollCommand( rCEvt, 0, &m_aVScroll ); 1219*cdf0e10cSrcweir } 1220*cdf0e10cSrcweir } 1221*cdf0e10cSrcweir break; 1222*cdf0e10cSrcweir default: 1223*cdf0e10cSrcweir Control::Command(rCEvt); 1224*cdf0e10cSrcweir } 1225*cdf0e10cSrcweir } 1226*cdf0e10cSrcweir /*-- 07.05.2004 13:11:21--------------------------------------------------- 1227*cdf0e10cSrcweir 1228*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1229*cdf0e10cSrcweir long SwAssignFieldsControl::PreNotify( NotifyEvent& rNEvt ) 1230*cdf0e10cSrcweir { 1231*cdf0e10cSrcweir if(rNEvt.GetType() == EVENT_COMMAND) 1232*cdf0e10cSrcweir { 1233*cdf0e10cSrcweir const CommandEvent* pCEvt = rNEvt.GetCommandEvent(); 1234*cdf0e10cSrcweir sal_uInt16 nCmd = pCEvt->GetCommand(); 1235*cdf0e10cSrcweir if( COMMAND_WHEEL == nCmd ) 1236*cdf0e10cSrcweir { 1237*cdf0e10cSrcweir Command(*pCEvt); 1238*cdf0e10cSrcweir return 1; 1239*cdf0e10cSrcweir } 1240*cdf0e10cSrcweir } 1241*cdf0e10cSrcweir return Control::PreNotify(rNEvt); 1242*cdf0e10cSrcweir } 1243*cdf0e10cSrcweir /*-- 03.09.2004 13:19:09--------------------------------------------------- 1244*cdf0e10cSrcweir 1245*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1246*cdf0e10cSrcweir void SwAssignFieldsControl::MakeVisible( sal_Int32 nIndex ) 1247*cdf0e10cSrcweir { 1248*cdf0e10cSrcweir long nThumb = m_aVScroll.GetThumbPos(); 1249*cdf0e10cSrcweir long nPage = m_aVScroll.GetPageSize(); 1250*cdf0e10cSrcweir if(nThumb > nIndex) 1251*cdf0e10cSrcweir m_aVScroll.SetThumbPos( nIndex ); 1252*cdf0e10cSrcweir else if( (nThumb + nPage) < nIndex) 1253*cdf0e10cSrcweir m_aVScroll.SetThumbPos( nIndex - nPage ); 1254*cdf0e10cSrcweir else 1255*cdf0e10cSrcweir return; 1256*cdf0e10cSrcweir ScrollHdl_Impl( &m_aVScroll ); 1257*cdf0e10cSrcweir } 1258*cdf0e10cSrcweir /*-- 30.04.2004 16:10:58--------------------------------------------------- 1259*cdf0e10cSrcweir 1260*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1261*cdf0e10cSrcweir IMPL_LINK(SwAssignFieldsControl, ScrollHdl_Impl, ScrollBar*, pScroll) 1262*cdf0e10cSrcweir { 1263*cdf0e10cSrcweir long nThumb = pScroll->GetThumbPos(); 1264*cdf0e10cSrcweir // the scrollbar moves on a per line basis 1265*cdf0e10cSrcweir // the height of a line is stored in m_nYOffset 1266*cdf0e10cSrcweir // nThumb determines which line has to be set at the top (m_nYOffset) 1267*cdf0e10cSrcweir // The first line has to be -(nThumb * m_nYOffset) in the negative 1268*cdf0e10cSrcweir long nMove = m_nFirstYPos - (*m_aMatches.begin())->GetPosPixel().Y() - (nThumb * m_nYOffset); 1269*cdf0e10cSrcweir 1270*cdf0e10cSrcweir SetUpdateMode(sal_False); 1271*cdf0e10cSrcweir long nIndex; 1272*cdf0e10cSrcweir ::std::vector<FixedInfo*>::iterator aFIIter; 1273*cdf0e10cSrcweir for(nIndex = 0, aFIIter = m_aFieldNames.begin(); aFIIter != m_aFieldNames.end(); ++aFIIter, ++nIndex) 1274*cdf0e10cSrcweir lcl_Move(*aFIIter, nMove); 1275*cdf0e10cSrcweir ::std::vector<ListBox*>::iterator aLBIter; 1276*cdf0e10cSrcweir for(nIndex = 0, aLBIter = m_aMatches.begin(); aLBIter != m_aMatches.end(); ++aLBIter, ++nIndex) 1277*cdf0e10cSrcweir lcl_Move(*aLBIter, nMove); 1278*cdf0e10cSrcweir for(nIndex = 0, aFIIter = m_aPreviews.begin(); aFIIter != m_aPreviews.end(); ++aFIIter, ++nIndex) 1279*cdf0e10cSrcweir lcl_Move(*aFIIter, nMove); 1280*cdf0e10cSrcweir SetUpdateMode(sal_True); 1281*cdf0e10cSrcweir 1282*cdf0e10cSrcweir return 0; 1283*cdf0e10cSrcweir } 1284*cdf0e10cSrcweir 1285*cdf0e10cSrcweir /*-- 03.05.2004 15:37:52--------------------------------------------------- 1286*cdf0e10cSrcweir 1287*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1288*cdf0e10cSrcweir IMPL_LINK(SwAssignFieldsControl, MatchHdl_Impl, ListBox*, pBox) 1289*cdf0e10cSrcweir { 1290*cdf0e10cSrcweir String sColumn = pBox->GetSelectEntry(); 1291*cdf0e10cSrcweir uno::Reference< XColumnsSupplier > xColsSupp( m_rConfigItem.GetResultSet(), uno::UNO_QUERY); 1292*cdf0e10cSrcweir uno::Reference <XNameAccess> xColAccess = xColsSupp.is() ? xColsSupp->getColumns() : 0; 1293*cdf0e10cSrcweir ::rtl::OUString sPreview; 1294*cdf0e10cSrcweir if(xColAccess.is() && xColAccess->hasByName(sColumn)) 1295*cdf0e10cSrcweir { 1296*cdf0e10cSrcweir uno::Any aCol = xColAccess->getByName(sColumn); 1297*cdf0e10cSrcweir uno::Reference< XColumn > xColumn; 1298*cdf0e10cSrcweir aCol >>= xColumn; 1299*cdf0e10cSrcweir if(xColumn.is()) 1300*cdf0e10cSrcweir { 1301*cdf0e10cSrcweir try 1302*cdf0e10cSrcweir { 1303*cdf0e10cSrcweir sPreview = xColumn->getString(); 1304*cdf0e10cSrcweir } 1305*cdf0e10cSrcweir catch( sdbc::SQLException& ) 1306*cdf0e10cSrcweir { 1307*cdf0e10cSrcweir } 1308*cdf0e10cSrcweir } 1309*cdf0e10cSrcweir } 1310*cdf0e10cSrcweir ::std::vector<ListBox*>::iterator aLBIter; 1311*cdf0e10cSrcweir sal_Int32 nIndex = 0; 1312*cdf0e10cSrcweir for(aLBIter = m_aMatches.begin(); aLBIter != m_aMatches.end(); ++aLBIter, ++nIndex) 1313*cdf0e10cSrcweir { 1314*cdf0e10cSrcweir if(*aLBIter == pBox) 1315*cdf0e10cSrcweir { 1316*cdf0e10cSrcweir m_aPreviews[nIndex]->SetText(sPreview); 1317*cdf0e10cSrcweir break; 1318*cdf0e10cSrcweir } 1319*cdf0e10cSrcweir } 1320*cdf0e10cSrcweir m_aModifyHdl.Call(0); 1321*cdf0e10cSrcweir return 0; 1322*cdf0e10cSrcweir } 1323*cdf0e10cSrcweir /*-- 03.09.2004 13:16:04--------------------------------------------------- 1324*cdf0e10cSrcweir 1325*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1326*cdf0e10cSrcweir IMPL_LINK(SwAssignFieldsControl, GotFocusHdl_Impl, ListBox*, pBox) 1327*cdf0e10cSrcweir { 1328*cdf0e10cSrcweir if(0 != (GETFOCUS_TAB & pBox->GetGetFocusFlags())) 1329*cdf0e10cSrcweir { 1330*cdf0e10cSrcweir sal_Int32 nIndex = 0; 1331*cdf0e10cSrcweir ::std::vector<ListBox*>::iterator aLBIter; 1332*cdf0e10cSrcweir for(aLBIter = m_aMatches.begin(); aLBIter != m_aMatches.end(); ++aLBIter, ++nIndex) 1333*cdf0e10cSrcweir { 1334*cdf0e10cSrcweir if(*aLBIter == pBox) 1335*cdf0e10cSrcweir { 1336*cdf0e10cSrcweir MakeVisible(nIndex); 1337*cdf0e10cSrcweir break; 1338*cdf0e10cSrcweir } 1339*cdf0e10cSrcweir } 1340*cdf0e10cSrcweir } 1341*cdf0e10cSrcweir return 0; 1342*cdf0e10cSrcweir } 1343*cdf0e10cSrcweir /*-- 13.04.2004 17:44:01--------------------------------------------------- 1344*cdf0e10cSrcweir 1345*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1346*cdf0e10cSrcweir SwAssignFieldsDialog::SwAssignFieldsDialog( 1347*cdf0e10cSrcweir Window* pParent, SwMailMergeConfigItem& rConfigItem, 1348*cdf0e10cSrcweir const ::rtl::OUString& rPreview, 1349*cdf0e10cSrcweir bool bIsAddressBlock) : 1350*cdf0e10cSrcweir SfxModalDialog(pParent, SW_RES(DLG_MM_ASSIGNFIELDS)), 1351*cdf0e10cSrcweir #ifdef MSC 1352*cdf0e10cSrcweir #pragma warning (disable : 4355) 1353*cdf0e10cSrcweir #endif 1354*cdf0e10cSrcweir m_aMatchingFI( this, SW_RES( FI_MATCHING)), 1355*cdf0e10cSrcweir m_pFieldsControl( new SwAssignFieldsControl(this, SW_RES( CT_FIELDS ), rConfigItem)), 1356*cdf0e10cSrcweir m_aPreviewFI( this, SW_RES( FI_PREVIEW )), 1357*cdf0e10cSrcweir m_aPreviewWIN( this, SW_RES( WIN_PREVIEW )), 1358*cdf0e10cSrcweir m_aSeparatorFL( this, SW_RES( FL_SEPARATOR)), 1359*cdf0e10cSrcweir m_aOK( this, SW_RES( PB_OK )), 1360*cdf0e10cSrcweir m_aCancel( this, SW_RES( PB_CANCEL )), 1361*cdf0e10cSrcweir m_aHelp( this, SW_RES( PB_HELP )), 1362*cdf0e10cSrcweir #ifdef MSC 1363*cdf0e10cSrcweir #pragma warning (default : 4355) 1364*cdf0e10cSrcweir #endif 1365*cdf0e10cSrcweir m_sNone(SW_RES(ST_NONE)), 1366*cdf0e10cSrcweir m_rPreviewString(rPreview), 1367*cdf0e10cSrcweir m_rConfigItem(rConfigItem) 1368*cdf0e10cSrcweir { 1369*cdf0e10cSrcweir //resize the HeaderBar 1370*cdf0e10cSrcweir String sAddressElement( SW_RES(ST_ADDRESSELEMENT )); 1371*cdf0e10cSrcweir String sMatchesTo( SW_RES(ST_MATCHESTO )); 1372*cdf0e10cSrcweir String sPreview( SW_RES(ST_PREVIEW )); 1373*cdf0e10cSrcweir if(!bIsAddressBlock) 1374*cdf0e10cSrcweir { 1375*cdf0e10cSrcweir m_aPreviewFI.SetText(String(SW_RES(ST_SALUTATIONPREVIEW))); 1376*cdf0e10cSrcweir m_aMatchingFI.SetText(String(SW_RES(ST_SALUTATIONMATCHING))); 1377*cdf0e10cSrcweir sAddressElement = String(SW_RES(ST_SALUTATIONELEMENT)); 1378*cdf0e10cSrcweir } 1379*cdf0e10cSrcweir FreeResource(); 1380*cdf0e10cSrcweir Size aOutputSize(m_pFieldsControl->m_aHeaderHB.GetSizePixel()); 1381*cdf0e10cSrcweir sal_Int32 nFirstWidth; 1382*cdf0e10cSrcweir sal_Int32 nSecondWidth = nFirstWidth = aOutputSize.Width() / 3; 1383*cdf0e10cSrcweir const WinBits nHeadBits = HIB_VCENTER | HIB_FIXED| HIB_FIXEDPOS; 1384*cdf0e10cSrcweir m_pFieldsControl->m_aHeaderHB.InsertItem( 1, sAddressElement, nFirstWidth, nHeadBits|HIB_LEFT); 1385*cdf0e10cSrcweir m_pFieldsControl->m_aHeaderHB.InsertItem( 2, sMatchesTo, nSecondWidth, nHeadBits|HIB_LEFT); 1386*cdf0e10cSrcweir m_pFieldsControl->m_aHeaderHB.InsertItem( 3, sPreview, 1387*cdf0e10cSrcweir aOutputSize.Width() - nFirstWidth - nSecondWidth, nHeadBits|HIB_LEFT); 1388*cdf0e10cSrcweir 1389*cdf0e10cSrcweir m_pFieldsControl->SetModifyHdl(LINK(this, SwAssignFieldsDialog, AssignmentModifyHdl_Impl )); 1390*cdf0e10cSrcweir 1391*cdf0e10cSrcweir String sMatching = m_aMatchingFI.GetText(); 1392*cdf0e10cSrcweir sMatching.SearchAndReplaceAscii("%1", sMatchesTo); 1393*cdf0e10cSrcweir m_aMatchingFI.SetText(sMatching); 1394*cdf0e10cSrcweir 1395*cdf0e10cSrcweir m_aOK.SetClickHdl(LINK(this, SwAssignFieldsDialog, OkHdl_Impl)); 1396*cdf0e10cSrcweir } 1397*cdf0e10cSrcweir /*-- 13.04.2004 17:44:02--------------------------------------------------- 1398*cdf0e10cSrcweir 1399*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1400*cdf0e10cSrcweir SwAssignFieldsDialog::~SwAssignFieldsDialog() 1401*cdf0e10cSrcweir { 1402*cdf0e10cSrcweir delete m_pFieldsControl; 1403*cdf0e10cSrcweir } 1404*cdf0e10cSrcweir /*-- 05.05.2004 14:39:13--------------------------------------------------- 1405*cdf0e10cSrcweir 1406*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1407*cdf0e10cSrcweir uno::Sequence< ::rtl::OUString > SwAssignFieldsDialog::CreateAssignments() 1408*cdf0e10cSrcweir { 1409*cdf0e10cSrcweir uno::Sequence< ::rtl::OUString > aAssignments( 1410*cdf0e10cSrcweir m_rConfigItem.GetDefaultAddressHeaders().Count()); 1411*cdf0e10cSrcweir ::rtl::OUString* pAssignments = aAssignments.getArray(); 1412*cdf0e10cSrcweir ::std::vector<ListBox*>::iterator aLBIter; 1413*cdf0e10cSrcweir sal_Int32 nIndex = 0; 1414*cdf0e10cSrcweir for(aLBIter = m_pFieldsControl->m_aMatches.begin(); 1415*cdf0e10cSrcweir aLBIter != m_pFieldsControl->m_aMatches.end(); 1416*cdf0e10cSrcweir ++aLBIter, ++nIndex) 1417*cdf0e10cSrcweir { 1418*cdf0e10cSrcweir String sSelect = (*aLBIter)->GetSelectEntry(); 1419*cdf0e10cSrcweir if(m_sNone != sSelect) 1420*cdf0e10cSrcweir pAssignments[nIndex] = sSelect; 1421*cdf0e10cSrcweir else 1422*cdf0e10cSrcweir pAssignments[nIndex] = ::rtl::OUString(); 1423*cdf0e10cSrcweir } 1424*cdf0e10cSrcweir return aAssignments; 1425*cdf0e10cSrcweir } 1426*cdf0e10cSrcweir /*-- 03.05.2004 18:04:00--------------------------------------------------- 1427*cdf0e10cSrcweir 1428*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1429*cdf0e10cSrcweir IMPL_LINK(SwAssignFieldsDialog, OkHdl_Impl, PushButton*, EMPTYARG) 1430*cdf0e10cSrcweir { 1431*cdf0e10cSrcweir m_rConfigItem.SetColumnAssignment( 1432*cdf0e10cSrcweir m_rConfigItem.GetCurrentDBData(), 1433*cdf0e10cSrcweir CreateAssignments() ); 1434*cdf0e10cSrcweir EndDialog(RET_OK); 1435*cdf0e10cSrcweir return 0; 1436*cdf0e10cSrcweir } 1437*cdf0e10cSrcweir /*-- 05.05.2004 14:37:19--------------------------------------------------- 1438*cdf0e10cSrcweir 1439*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1440*cdf0e10cSrcweir IMPL_LINK(SwAssignFieldsDialog, AssignmentModifyHdl_Impl, void*, EMPTYARG) 1441*cdf0e10cSrcweir { 1442*cdf0e10cSrcweir uno::Sequence< ::rtl::OUString > aAssignments = CreateAssignments(); 1443*cdf0e10cSrcweir String sPreview = SwAddressPreview::FillData( 1444*cdf0e10cSrcweir m_rPreviewString, m_rConfigItem, &aAssignments); 1445*cdf0e10cSrcweir m_aPreviewWIN.SetAddress(sPreview); 1446*cdf0e10cSrcweir return 0; 1447*cdf0e10cSrcweir } 1448*cdf0e10cSrcweir 1449*cdf0e10cSrcweir /*-- 26.05.2004 11:20:11--------------------------------------------------- 1450*cdf0e10cSrcweir 1451*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1452*cdf0e10cSrcweir DDListBox::DDListBox(SwCustomizeAddressBlockDialog* pParent, const ResId rResId) : 1453*cdf0e10cSrcweir SvTreeListBox(pParent, rResId), 1454*cdf0e10cSrcweir m_pParentDialog(pParent) 1455*cdf0e10cSrcweir { 1456*cdf0e10cSrcweir SetStyle( GetStyle() | /*WB_HASBUTTONS|WB_HASBUTTONSATROOT|*/ 1457*cdf0e10cSrcweir WB_CLIPCHILDREN ); 1458*cdf0e10cSrcweir // SetSpaceBetweenEntries(3); 1459*cdf0e10cSrcweir SetSelectionMode( SINGLE_SELECTION ); 1460*cdf0e10cSrcweir SetDragDropMode( SV_DRAGDROP_CTRL_COPY ); 1461*cdf0e10cSrcweir EnableAsyncDrag(sal_True); 1462*cdf0e10cSrcweir SetHelpId(HID_MM_CUSTOMFIELDS); 1463*cdf0e10cSrcweir // expand selection to the complete width of the ListBox 1464*cdf0e10cSrcweir SetHighlightRange(); 1465*cdf0e10cSrcweir Show(); 1466*cdf0e10cSrcweir 1467*cdf0e10cSrcweir } 1468*cdf0e10cSrcweir /*-- 26.05.2004 11:20:15--------------------------------------------------- 1469*cdf0e10cSrcweir 1470*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1471*cdf0e10cSrcweir DDListBox::~DDListBox() 1472*cdf0e10cSrcweir { 1473*cdf0e10cSrcweir } 1474*cdf0e10cSrcweir /*-- 26.05.2004 11:20:16--------------------------------------------------- 1475*cdf0e10cSrcweir 1476*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1477*cdf0e10cSrcweir void DDListBox::StartDrag( sal_Int8 /*nAction*/, const Point& /*rPosPixel*/ ) 1478*cdf0e10cSrcweir { 1479*cdf0e10cSrcweir SvLBoxEntry* pEntry = GetCurEntry(); 1480*cdf0e10cSrcweir if(pEntry) 1481*cdf0e10cSrcweir { 1482*cdf0e10cSrcweir ReleaseMouse(); 1483*cdf0e10cSrcweir 1484*cdf0e10cSrcweir TransferDataContainer* pContainer = new TransferDataContainer; 1485*cdf0e10cSrcweir uno::Reference< 1486*cdf0e10cSrcweir datatransfer::XTransferable > xRef( pContainer ); 1487*cdf0e10cSrcweir 1488*cdf0e10cSrcweir sal_Int32 nUserData = (sal_Int32)(sal_IntPtr)pEntry->GetUserData(); 1489*cdf0e10cSrcweir //special entries can only be once in the address / greeting 1490*cdf0e10cSrcweir if(nUserData >= 0 || !m_pParentDialog->HasItem_Impl(nUserData)) 1491*cdf0e10cSrcweir { 1492*cdf0e10cSrcweir String sEntry; 1493*cdf0e10cSrcweir sEntry = GetEntryText(pEntry); 1494*cdf0e10cSrcweir sEntry.Insert('<', 0); 1495*cdf0e10cSrcweir sEntry += '>'; 1496*cdf0e10cSrcweir if(sEntry.Len()) 1497*cdf0e10cSrcweir { 1498*cdf0e10cSrcweir pContainer->CopyString( sEntry ); 1499*cdf0e10cSrcweir pContainer->StartDrag( this, DND_ACTION_COPY, GetDragFinishedHdl() ); 1500*cdf0e10cSrcweir } 1501*cdf0e10cSrcweir } 1502*cdf0e10cSrcweir } 1503*cdf0e10cSrcweir } 1504*cdf0e10cSrcweir /*-- 26.05.2004 13:14:53--------------------------------------------------- 1505*cdf0e10cSrcweir 1506*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1507*cdf0e10cSrcweir AddressMultiLineEdit::AddressMultiLineEdit(SwCustomizeAddressBlockDialog* pParent, const ResId& rResId) : 1508*cdf0e10cSrcweir MultiLineEdit(pParent, rResId), 1509*cdf0e10cSrcweir m_pParentDialog(pParent) 1510*cdf0e10cSrcweir 1511*cdf0e10cSrcweir { 1512*cdf0e10cSrcweir GetTextView()->SupportProtectAttribute(sal_True); 1513*cdf0e10cSrcweir StartListening(*GetTextEngine()); 1514*cdf0e10cSrcweir //DisableSelectionOnFocus(); 1515*cdf0e10cSrcweir EnableFocusSelectionHide(sal_False); 1516*cdf0e10cSrcweir } 1517*cdf0e10cSrcweir /*-- 26.05.2004 13:14:53--------------------------------------------------- 1518*cdf0e10cSrcweir 1519*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1520*cdf0e10cSrcweir AddressMultiLineEdit::~AddressMultiLineEdit() 1521*cdf0e10cSrcweir { 1522*cdf0e10cSrcweir EndListening(*GetTextEngine()); 1523*cdf0e10cSrcweir } 1524*cdf0e10cSrcweir /*-- 25.06.2004 13:02:49--------------------------------------------------- 1525*cdf0e10cSrcweir 1526*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1527*cdf0e10cSrcweir void AddressMultiLineEdit::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint ) 1528*cdf0e10cSrcweir { 1529*cdf0e10cSrcweir if(rHint.ISA(TextHint) && 1530*cdf0e10cSrcweir static_cast<const TextHint&>(rHint).GetId() == TEXT_HINT_VIEWSELECTIONCHANGED && 1531*cdf0e10cSrcweir m_aSelectionLink.IsSet()) 1532*cdf0e10cSrcweir { 1533*cdf0e10cSrcweir m_aSelectionLink.Call(this); 1534*cdf0e10cSrcweir } 1535*cdf0e10cSrcweir } 1536*cdf0e10cSrcweir /*-- 26.05.2004 13:45:46--------------------------------------------------- 1537*cdf0e10cSrcweir 1538*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1539*cdf0e10cSrcweir long AddressMultiLineEdit::PreNotify( NotifyEvent& rNEvt ) 1540*cdf0e10cSrcweir { 1541*cdf0e10cSrcweir long nHandled = 0; 1542*cdf0e10cSrcweir if( EVENT_KEYINPUT == rNEvt.GetType() && 1543*cdf0e10cSrcweir rNEvt.GetKeyEvent()->GetCharCode()) 1544*cdf0e10cSrcweir { 1545*cdf0e10cSrcweir const KeyEvent* pKEvent = rNEvt.GetKeyEvent(); 1546*cdf0e10cSrcweir if('\t' == pKEvent->GetCharCode() && 1547*cdf0e10cSrcweir 0 == (pKEvent->GetKeyCode().GetModifier() & (KEY_MOD1|KEY_MOD2))) 1548*cdf0e10cSrcweir { 1549*cdf0e10cSrcweir m_pParentDialog->MoveFocus(this, !pKEvent->GetKeyCode().IsShift()); 1550*cdf0e10cSrcweir } 1551*cdf0e10cSrcweir nHandled = 1; 1552*cdf0e10cSrcweir } 1553*cdf0e10cSrcweir else if(EVENT_MOUSEBUTTONDOWN == rNEvt.GetType()) { 1554*cdf0e10cSrcweir const MouseEvent *pMEvt = rNEvt.GetMouseEvent(); 1555*cdf0e10cSrcweir if(pMEvt->GetClicks() >= 2) 1556*cdf0e10cSrcweir nHandled = 1; 1557*cdf0e10cSrcweir } 1558*cdf0e10cSrcweir if(!nHandled) 1559*cdf0e10cSrcweir nHandled = MultiLineEdit::PreNotify( rNEvt ); 1560*cdf0e10cSrcweir return nHandled; 1561*cdf0e10cSrcweir 1562*cdf0e10cSrcweir } 1563*cdf0e10cSrcweir /*-- 25.06.2004 08:20:54--------------------------------------------------- 1564*cdf0e10cSrcweir 1565*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1566*cdf0e10cSrcweir void AddressMultiLineEdit::SetText( const String& rStr ) 1567*cdf0e10cSrcweir { 1568*cdf0e10cSrcweir MultiLineEdit::SetText(rStr); 1569*cdf0e10cSrcweir //set attributes to all address tokens 1570*cdf0e10cSrcweir 1571*cdf0e10cSrcweir ExtTextEngine* pTextEngine = GetTextEngine(); 1572*cdf0e10cSrcweir TextAttribProtect aProtectAttr; 1573*cdf0e10cSrcweir sal_uLong nParaCount = pTextEngine->GetParagraphCount(); 1574*cdf0e10cSrcweir for(sal_uLong nPara = 0; nPara < nParaCount; ++nPara) 1575*cdf0e10cSrcweir { 1576*cdf0e10cSrcweir xub_StrLen nIndex = 0; 1577*cdf0e10cSrcweir String sPara = pTextEngine->GetText( nPara ); 1578*cdf0e10cSrcweir if(sPara.Len() && sPara.GetChar(sPara.Len() - 1) != ' ') 1579*cdf0e10cSrcweir { 1580*cdf0e10cSrcweir TextPaM aPaM(nPara, sPara.Len()); 1581*cdf0e10cSrcweir pTextEngine->ReplaceText(TextSelection( aPaM ), String(' ')); 1582*cdf0e10cSrcweir } 1583*cdf0e10cSrcweir while(true) 1584*cdf0e10cSrcweir { 1585*cdf0e10cSrcweir sal_uInt16 nStart = sPara.Search( '<', nIndex ); 1586*cdf0e10cSrcweir sal_uInt16 nEnd = sPara.Search( '>', nStart ); 1587*cdf0e10cSrcweir nIndex = nEnd; 1588*cdf0e10cSrcweir if(nStart != STRING_NOTFOUND && nEnd != STRING_NOTFOUND) 1589*cdf0e10cSrcweir pTextEngine->SetAttrib( aProtectAttr, nPara, nStart, nEnd + 1, sal_False ); 1590*cdf0e10cSrcweir else 1591*cdf0e10cSrcweir break; 1592*cdf0e10cSrcweir } 1593*cdf0e10cSrcweir 1594*cdf0e10cSrcweir } 1595*cdf0e10cSrcweir // add two empty paragraphs at the end 1596*cdf0e10cSrcweir if(m_pParentDialog->m_eType == SwCustomizeAddressBlockDialog::ADDRESSBLOCK_NEW || 1597*cdf0e10cSrcweir m_pParentDialog->m_eType == SwCustomizeAddressBlockDialog::ADDRESSBLOCK_EDIT) 1598*cdf0e10cSrcweir { 1599*cdf0e10cSrcweir xub_StrLen nLastLen = pTextEngine->GetText(nParaCount - 1).Len(); 1600*cdf0e10cSrcweir if(nLastLen) 1601*cdf0e10cSrcweir { 1602*cdf0e10cSrcweir TextPaM aPaM(nParaCount ? nParaCount - 1 : 0, nLastLen); 1603*cdf0e10cSrcweir pTextEngine->ReplaceText( TextSelection( aPaM ), String::CreateFromAscii("\n \n ")); 1604*cdf0e10cSrcweir } 1605*cdf0e10cSrcweir } 1606*cdf0e10cSrcweir } 1607*cdf0e10cSrcweir 1608*cdf0e10cSrcweir /*-- 25.06.2004 12:32:41--------------------------------------------------- 1609*cdf0e10cSrcweir Insert the new entry in front of the entry at the beginning of the selection 1610*cdf0e10cSrcweir 1611*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1612*cdf0e10cSrcweir void AddressMultiLineEdit::InsertNewEntry( const String& rStr ) 1613*cdf0e10cSrcweir { 1614*cdf0e10cSrcweir // insert new entry after current selected one. 1615*cdf0e10cSrcweir ExtTextView* pTextView = GetTextView(); 1616*cdf0e10cSrcweir const TextSelection& rSelection = pTextView->GetSelection(); 1617*cdf0e10cSrcweir sal_uLong nPara = rSelection.GetStart().GetPara(); 1618*cdf0e10cSrcweir sal_uInt16 nIndex = rSelection.GetEnd().GetIndex(); 1619*cdf0e10cSrcweir ExtTextEngine *pTextEngine = GetTextEngine(); 1620*cdf0e10cSrcweir const TextCharAttrib *pAttrib; 1621*cdf0e10cSrcweir if(0 != (pAttrib = pTextEngine->FindCharAttrib( rSelection.GetStart(), TEXTATTR_PROTECTED ))) 1622*cdf0e10cSrcweir nIndex = pAttrib->GetEnd(); 1623*cdf0e10cSrcweir InsertNewEntryAtPosition( rStr, nPara, nIndex ); 1624*cdf0e10cSrcweir 1625*cdf0e10cSrcweir // select the new entry 1626*cdf0e10cSrcweir pAttrib = pTextEngine->FindCharAttrib(TextPaM(nPara, nIndex),TEXTATTR_PROTECTED); 1627*cdf0e10cSrcweir TextSelection aEntrySel(TextPaM(nPara, nIndex), TextPaM(nPara, pAttrib->GetEnd())); 1628*cdf0e10cSrcweir pTextView->SetSelection(aEntrySel); 1629*cdf0e10cSrcweir Invalidate(); 1630*cdf0e10cSrcweir Modify(); 1631*cdf0e10cSrcweir } 1632*cdf0e10cSrcweir 1633*cdf0e10cSrcweir void AddressMultiLineEdit::InsertNewEntryAtPosition( const String& rStr, sal_uLong nPara, sal_uInt16 nIndex ) 1634*cdf0e10cSrcweir { 1635*cdf0e10cSrcweir ExtTextEngine* pTextEngine = GetTextEngine(); 1636*cdf0e10cSrcweir TextPaM aInsertPos( nPara, nIndex ); 1637*cdf0e10cSrcweir 1638*cdf0e10cSrcweir pTextEngine->ReplaceText( aInsertPos, rStr ); 1639*cdf0e10cSrcweir 1640*cdf0e10cSrcweir //restore the attributes 1641*cdf0e10cSrcweir SetText( GetAddress() ); 1642*cdf0e10cSrcweir //select the newly inserted/moved element 1643*cdf0e10cSrcweir TextSelection aEntrySel(aInsertPos); 1644*cdf0e10cSrcweir ExtTextView* pTextView = GetTextView(); 1645*cdf0e10cSrcweir pTextView->SetSelection(aEntrySel); 1646*cdf0e10cSrcweir m_aSelectionLink.Call(this); 1647*cdf0e10cSrcweir } 1648*cdf0e10cSrcweir /*-- 25.06.2004 12:32:41--------------------------------------------------- 1649*cdf0e10cSrcweir 1650*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1651*cdf0e10cSrcweir void AddressMultiLineEdit::RemoveCurrentEntry() 1652*cdf0e10cSrcweir { 1653*cdf0e10cSrcweir ExtTextEngine* pTextEngine = GetTextEngine(); 1654*cdf0e10cSrcweir ExtTextView* pTextView = GetTextView(); 1655*cdf0e10cSrcweir const TextSelection& rSelection = pTextView->GetSelection(); 1656*cdf0e10cSrcweir const TextCharAttrib* pBeginAttrib = pTextEngine->FindCharAttrib( rSelection.GetStart(), TEXTATTR_PROTECTED ); 1657*cdf0e10cSrcweir // const TextCharAttrib* pEndAttrib = pTextEngine->FindCharAttrib( rSelection.GetEnd(), TEXTATTR_PROTECTED ); 1658*cdf0e10cSrcweir if(pBeginAttrib && 1659*cdf0e10cSrcweir (pBeginAttrib->GetStart() <= rSelection.GetStart().GetIndex() 1660*cdf0e10cSrcweir && pBeginAttrib->GetEnd() >= rSelection.GetEnd().GetIndex())) 1661*cdf0e10cSrcweir { 1662*cdf0e10cSrcweir sal_uLong nPara = rSelection.GetStart().GetPara(); 1663*cdf0e10cSrcweir TextSelection aEntrySel(TextPaM( nPara, pBeginAttrib->GetStart()), TextPaM(nPara, pBeginAttrib->GetEnd())); 1664*cdf0e10cSrcweir pTextEngine->ReplaceText(aEntrySel, String()); 1665*cdf0e10cSrcweir //restore the attributes 1666*cdf0e10cSrcweir SetText( GetAddress() ); 1667*cdf0e10cSrcweir Modify(); 1668*cdf0e10cSrcweir } 1669*cdf0e10cSrcweir } 1670*cdf0e10cSrcweir /*-- 25.06.2004 12:32:41--------------------------------------------------- 1671*cdf0e10cSrcweir 1672*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1673*cdf0e10cSrcweir void AddressMultiLineEdit::MoveCurrentItem(sal_uInt16 nMove) 1674*cdf0e10cSrcweir { 1675*cdf0e10cSrcweir ExtTextEngine* pTextEngine = GetTextEngine(); 1676*cdf0e10cSrcweir ExtTextView* pTextView = GetTextView(); 1677*cdf0e10cSrcweir const TextSelection& rSelection = pTextView->GetSelection(); 1678*cdf0e10cSrcweir const TextCharAttrib* pBeginAttrib = pTextEngine->FindCharAttrib( rSelection.GetStart(), TEXTATTR_PROTECTED ); 1679*cdf0e10cSrcweir if(pBeginAttrib && 1680*cdf0e10cSrcweir (pBeginAttrib->GetStart() <= rSelection.GetStart().GetIndex() 1681*cdf0e10cSrcweir && pBeginAttrib->GetEnd() >= rSelection.GetEnd().GetIndex())) 1682*cdf0e10cSrcweir { 1683*cdf0e10cSrcweir //current item has been found 1684*cdf0e10cSrcweir sal_uLong nPara = rSelection.GetStart().GetPara(); 1685*cdf0e10cSrcweir sal_uInt16 nIndex = pBeginAttrib->GetStart(); 1686*cdf0e10cSrcweir TextSelection aEntrySel(TextPaM( nPara, pBeginAttrib->GetStart()), TextPaM(nPara, pBeginAttrib->GetEnd())); 1687*cdf0e10cSrcweir String sCurrentItem = pTextEngine->GetText(aEntrySel); 1688*cdf0e10cSrcweir pTextEngine->RemoveAttrib( nPara, *pBeginAttrib ); 1689*cdf0e10cSrcweir pTextEngine->ReplaceText(aEntrySel, String()); 1690*cdf0e10cSrcweir switch(nMove) 1691*cdf0e10cSrcweir { 1692*cdf0e10cSrcweir case MOVE_ITEM_LEFT : 1693*cdf0e10cSrcweir if(nIndex) 1694*cdf0e10cSrcweir { 1695*cdf0e10cSrcweir //go left to find a predecessor or simple text 1696*cdf0e10cSrcweir --nIndex; 1697*cdf0e10cSrcweir String sPara = pTextEngine->GetText( nPara ); 1698*cdf0e10cSrcweir xub_StrLen nSearchIndex = sPara.SearchBackward( '>', nIndex+1 ); 1699*cdf0e10cSrcweir if( nSearchIndex != STRING_NOTFOUND && nSearchIndex == nIndex ) 1700*cdf0e10cSrcweir { 1701*cdf0e10cSrcweir nSearchIndex = sPara.SearchBackward( '<', nIndex ); 1702*cdf0e10cSrcweir if( nSearchIndex != STRING_NOTFOUND ) 1703*cdf0e10cSrcweir nIndex = nSearchIndex; 1704*cdf0e10cSrcweir } 1705*cdf0e10cSrcweir } 1706*cdf0e10cSrcweir break; 1707*cdf0e10cSrcweir case MOVE_ITEM_RIGHT: 1708*cdf0e10cSrcweir { 1709*cdf0e10cSrcweir //go right to find a successor or simple text 1710*cdf0e10cSrcweir ++nIndex; 1711*cdf0e10cSrcweir const TextCharAttrib* pEndAttrib = pTextEngine->FindCharAttrib( rSelection.GetStart(), TEXTATTR_PROTECTED ); 1712*cdf0e10cSrcweir if(pEndAttrib && pEndAttrib->GetEnd() >= nIndex) 1713*cdf0e10cSrcweir { 1714*cdf0e10cSrcweir nIndex = pEndAttrib->GetEnd(); 1715*cdf0e10cSrcweir } 1716*cdf0e10cSrcweir } 1717*cdf0e10cSrcweir break; 1718*cdf0e10cSrcweir case MOVE_ITEM_UP : 1719*cdf0e10cSrcweir --nPara; 1720*cdf0e10cSrcweir nIndex = 0; 1721*cdf0e10cSrcweir break; 1722*cdf0e10cSrcweir case MOVE_ITEM_DOWN : 1723*cdf0e10cSrcweir ++nPara; 1724*cdf0e10cSrcweir nIndex = 0; 1725*cdf0e10cSrcweir break; 1726*cdf0e10cSrcweir } 1727*cdf0e10cSrcweir //add a new paragraph if there is none yet 1728*cdf0e10cSrcweir if(nPara >= pTextEngine->GetParagraphCount()) 1729*cdf0e10cSrcweir { 1730*cdf0e10cSrcweir 1731*cdf0e10cSrcweir TextPaM aTemp(nPara - 1, pTextEngine->GetTextLen( nPara - 1 )); 1732*cdf0e10cSrcweir pTextEngine->ReplaceText( aTemp, String('\n')); 1733*cdf0e10cSrcweir } 1734*cdf0e10cSrcweir InsertNewEntryAtPosition( sCurrentItem, nPara, nIndex ); 1735*cdf0e10cSrcweir 1736*cdf0e10cSrcweir // select the new entry [#i40817] 1737*cdf0e10cSrcweir const TextCharAttrib *pAttrib; 1738*cdf0e10cSrcweir pAttrib = pTextEngine->FindCharAttrib(TextPaM(nPara, nIndex),TEXTATTR_PROTECTED); 1739*cdf0e10cSrcweir aEntrySel = TextSelection(TextPaM(nPara, nIndex), TextPaM(nPara, pAttrib->GetEnd())); 1740*cdf0e10cSrcweir pTextView->SetSelection(aEntrySel); 1741*cdf0e10cSrcweir Invalidate(); 1742*cdf0e10cSrcweir Modify(); 1743*cdf0e10cSrcweir } 1744*cdf0e10cSrcweir } 1745*cdf0e10cSrcweir /*-- 25.06.2004 12:32:41--------------------------------------------------- 1746*cdf0e10cSrcweir 1747*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1748*cdf0e10cSrcweir sal_uInt16 AddressMultiLineEdit::IsCurrentItemMoveable() 1749*cdf0e10cSrcweir { 1750*cdf0e10cSrcweir sal_uInt16 nRet = 0; 1751*cdf0e10cSrcweir ExtTextEngine* pTextEngine = GetTextEngine(); 1752*cdf0e10cSrcweir ExtTextView* pTextView = GetTextView(); 1753*cdf0e10cSrcweir const TextSelection& rSelection = pTextView->GetSelection(); 1754*cdf0e10cSrcweir const TextCharAttrib* pBeginAttrib = pTextEngine->FindCharAttrib( rSelection.GetStart(), TEXTATTR_PROTECTED ); 1755*cdf0e10cSrcweir // const TextCharAttrib* pEndAttrib = pTextEngine->FindCharAttrib( rSelection.GetEnd(), TEXTATTR_PROTECTED ); 1756*cdf0e10cSrcweir if(pBeginAttrib && 1757*cdf0e10cSrcweir (pBeginAttrib->GetStart() <= rSelection.GetStart().GetIndex() 1758*cdf0e10cSrcweir && pBeginAttrib->GetEnd() >= rSelection.GetEnd().GetIndex())) 1759*cdf0e10cSrcweir { 1760*cdf0e10cSrcweir if(pBeginAttrib->GetStart()) 1761*cdf0e10cSrcweir nRet |= MOVE_ITEM_LEFT; 1762*cdf0e10cSrcweir //if there is an entry it can always be move to the right and down 1763*cdf0e10cSrcweir nRet |= MOVE_ITEM_RIGHT|MOVE_ITEM_DOWN; 1764*cdf0e10cSrcweir if(rSelection.GetStart().GetPara() > 0) 1765*cdf0e10cSrcweir nRet |= MOVE_ITEM_UP; 1766*cdf0e10cSrcweir } 1767*cdf0e10cSrcweir return nRet; 1768*cdf0e10cSrcweir } 1769*cdf0e10cSrcweir /*-- 25.06.2004 12:32:42--------------------------------------------------- 1770*cdf0e10cSrcweir 1771*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1772*cdf0e10cSrcweir bool AddressMultiLineEdit::HasCurrentItem() 1773*cdf0e10cSrcweir { 1774*cdf0e10cSrcweir ExtTextEngine* pTextEngine = GetTextEngine(); 1775*cdf0e10cSrcweir ExtTextView* pTextView = GetTextView(); 1776*cdf0e10cSrcweir const TextSelection& rSelection = pTextView->GetSelection(); 1777*cdf0e10cSrcweir const TextCharAttrib* pBeginAttrib = pTextEngine->FindCharAttrib( rSelection.GetStart(), TEXTATTR_PROTECTED ); 1778*cdf0e10cSrcweir return (pBeginAttrib && 1779*cdf0e10cSrcweir (pBeginAttrib->GetStart() <= rSelection.GetStart().GetIndex() 1780*cdf0e10cSrcweir && pBeginAttrib->GetEnd() >= rSelection.GetEnd().GetIndex())); 1781*cdf0e10cSrcweir } 1782*cdf0e10cSrcweir /*-- 01.07.2004 09:07:44--------------------------------------------------- 1783*cdf0e10cSrcweir 1784*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1785*cdf0e10cSrcweir String AddressMultiLineEdit::GetCurrentItem() 1786*cdf0e10cSrcweir { 1787*cdf0e10cSrcweir String sRet; 1788*cdf0e10cSrcweir ExtTextEngine* pTextEngine = GetTextEngine(); 1789*cdf0e10cSrcweir ExtTextView* pTextView = GetTextView(); 1790*cdf0e10cSrcweir const TextSelection& rSelection = pTextView->GetSelection(); 1791*cdf0e10cSrcweir const TextCharAttrib* pBeginAttrib = pTextEngine->FindCharAttrib( rSelection.GetStart(), TEXTATTR_PROTECTED ); 1792*cdf0e10cSrcweir if(pBeginAttrib && 1793*cdf0e10cSrcweir (pBeginAttrib->GetStart() <= rSelection.GetStart().GetIndex() 1794*cdf0e10cSrcweir && pBeginAttrib->GetEnd() >= rSelection.GetEnd().GetIndex())) 1795*cdf0e10cSrcweir { 1796*cdf0e10cSrcweir sal_uLong nPara = rSelection.GetStart().GetPara(); 1797*cdf0e10cSrcweir TextSelection aEntrySel(TextPaM( nPara, pBeginAttrib->GetStart()), TextPaM(nPara, pBeginAttrib->GetEnd())); 1798*cdf0e10cSrcweir sRet = pTextEngine->GetText( aEntrySel ); 1799*cdf0e10cSrcweir } 1800*cdf0e10cSrcweir return sRet; 1801*cdf0e10cSrcweir } 1802*cdf0e10cSrcweir /*-- 05.07.2004 14:29:02--------------------------------------------------- 1803*cdf0e10cSrcweir 1804*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1805*cdf0e10cSrcweir void AddressMultiLineEdit::SelectCurrentItem() 1806*cdf0e10cSrcweir { 1807*cdf0e10cSrcweir ExtTextEngine* pTextEngine = GetTextEngine(); 1808*cdf0e10cSrcweir ExtTextView* pTextView = GetTextView(); 1809*cdf0e10cSrcweir const TextSelection& rSelection = pTextView->GetSelection(); 1810*cdf0e10cSrcweir const TextCharAttrib* pBeginAttrib = pTextEngine->FindCharAttrib( rSelection.GetStart(), TEXTATTR_PROTECTED ); 1811*cdf0e10cSrcweir if(pBeginAttrib && 1812*cdf0e10cSrcweir (pBeginAttrib->GetStart() <= rSelection.GetStart().GetIndex() 1813*cdf0e10cSrcweir && pBeginAttrib->GetEnd() >= rSelection.GetEnd().GetIndex())) 1814*cdf0e10cSrcweir { 1815*cdf0e10cSrcweir sal_uLong nPara = rSelection.GetStart().GetPara(); 1816*cdf0e10cSrcweir TextSelection aEntrySel(TextPaM( nPara, pBeginAttrib->GetStart()), TextPaM(nPara, pBeginAttrib->GetEnd())); 1817*cdf0e10cSrcweir pTextView->SetSelection(aEntrySel); 1818*cdf0e10cSrcweir Invalidate(); 1819*cdf0e10cSrcweir } 1820*cdf0e10cSrcweir } 1821*cdf0e10cSrcweir /*-- 25.06.2004 09:10:43--------------------------------------------------- 1822*cdf0e10cSrcweir returns the address 1823*cdf0e10cSrcweir remove trailing spaces 1824*cdf0e10cSrcweir and trailing empty paragraphs 1825*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 1826*cdf0e10cSrcweir String AddressMultiLineEdit::GetAddress() 1827*cdf0e10cSrcweir { 1828*cdf0e10cSrcweir String sRet; 1829*cdf0e10cSrcweir ExtTextEngine* pTextEngine = GetTextEngine(); 1830*cdf0e10cSrcweir sal_uLong nParaCount = pTextEngine->GetParagraphCount(); 1831*cdf0e10cSrcweir for(sal_uLong nPara = nParaCount; nPara; --nPara) 1832*cdf0e10cSrcweir { 1833*cdf0e10cSrcweir String sPara = pTextEngine->GetText( nPara - 1); 1834*cdf0e10cSrcweir sPara.EraseTrailingChars(' '); 1835*cdf0e10cSrcweir //don't add empty trailing paragraphs 1836*cdf0e10cSrcweir if(sRet.Len() || sPara.Len()) 1837*cdf0e10cSrcweir { 1838*cdf0e10cSrcweir sRet.Insert(sPara, 0); 1839*cdf0e10cSrcweir //insert the para break 1840*cdf0e10cSrcweir if(nPara > 1) 1841*cdf0e10cSrcweir sRet.Insert( '\n', 0); 1842*cdf0e10cSrcweir } 1843*cdf0e10cSrcweir } 1844*cdf0e10cSrcweir return sRet; 1845*cdf0e10cSrcweir } 1846*cdf0e10cSrcweir 1847