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