1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_sw.hxx" 30*cdf0e10cSrcweir #ifdef SW_DLLIMPLEMENTATION 31*cdf0e10cSrcweir #undef SW_DLLIMPLEMENTATION 32*cdf0e10cSrcweir #endif 33*cdf0e10cSrcweir #include <swtypes.hxx> 34*cdf0e10cSrcweir #include <createaddresslistdialog.hxx> 35*cdf0e10cSrcweir #include <customizeaddresslistdialog.hxx> 36*cdf0e10cSrcweir #include <mmconfigitem.hxx> 37*cdf0e10cSrcweir #include <vcl/scrbar.hxx> 38*cdf0e10cSrcweir #include <vcl/msgbox.hxx> 39*cdf0e10cSrcweir #ifndef _SVT_CONTROLDIMS_HRC_ 40*cdf0e10cSrcweir #include <svtools/controldims.hrc> 41*cdf0e10cSrcweir #endif 42*cdf0e10cSrcweir #include <unotools/pathoptions.hxx> 43*cdf0e10cSrcweir #include <sfx2/filedlghelper.hxx> 44*cdf0e10cSrcweir #include <sfx2/docfilt.hxx> 45*cdf0e10cSrcweir #include <sfx2/fcontnr.hxx> 46*cdf0e10cSrcweir #include <sfx2/docfac.hxx> 47*cdf0e10cSrcweir #include <sfx2/docfile.hxx> 48*cdf0e10cSrcweir #include <rtl/textenc.h> 49*cdf0e10cSrcweir #include "com/sun/star/ui/dialogs/TemplateDescription.hpp" 50*cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/XFilePicker.hpp> 51*cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/XFilterManager.hpp> 52*cdf0e10cSrcweir #include <tools/urlobj.hxx> 53*cdf0e10cSrcweir #include <createaddresslistdialog.hrc> 54*cdf0e10cSrcweir #include <dbui.hrc> 55*cdf0e10cSrcweir #include <helpid.h> 56*cdf0e10cSrcweir #include <unomid.h> 57*cdf0e10cSrcweir 58*cdf0e10cSrcweir 59*cdf0e10cSrcweir using namespace ::com::sun::star; 60*cdf0e10cSrcweir using namespace ::com::sun::star::ui::dialogs; 61*cdf0e10cSrcweir using ::rtl::OUString; 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir /*-- 19.04.2004 12:19:50--------------------------------------------------- 64*cdf0e10cSrcweir 65*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 66*cdf0e10cSrcweir class SwAddressControl_Impl : public Control 67*cdf0e10cSrcweir { 68*cdf0e10cSrcweir ScrollBar m_aScrollBar; 69*cdf0e10cSrcweir Window m_aWindow; 70*cdf0e10cSrcweir 71*cdf0e10cSrcweir ::std::vector<FixedText*> m_aFixedTexts; 72*cdf0e10cSrcweir ::std::vector<Edit*> m_aEdits; 73*cdf0e10cSrcweir 74*cdf0e10cSrcweir SwCSVData* m_pData; 75*cdf0e10cSrcweir Size m_aWinOutputSize; 76*cdf0e10cSrcweir sal_Int32 m_nLineHeight; 77*cdf0e10cSrcweir sal_uInt32 m_nCurrentDataSet; 78*cdf0e10cSrcweir 79*cdf0e10cSrcweir bool m_bNoDataSet; 80*cdf0e10cSrcweir 81*cdf0e10cSrcweir DECL_LINK(ScrollHdl_Impl, ScrollBar*); 82*cdf0e10cSrcweir DECL_LINK(GotFocusHdl_Impl, Edit*); 83*cdf0e10cSrcweir DECL_LINK(EditModifyHdl_Impl, Edit*); 84*cdf0e10cSrcweir 85*cdf0e10cSrcweir void MakeVisible(const Rectangle& aRect); 86*cdf0e10cSrcweir 87*cdf0e10cSrcweir virtual long PreNotify( NotifyEvent& rNEvt ); 88*cdf0e10cSrcweir virtual void Command( const CommandEvent& rCEvt ); 89*cdf0e10cSrcweir 90*cdf0e10cSrcweir using Window::SetData; 91*cdf0e10cSrcweir 92*cdf0e10cSrcweir public: 93*cdf0e10cSrcweir SwAddressControl_Impl(Window* pParent, const ResId& rResId ); 94*cdf0e10cSrcweir ~SwAddressControl_Impl(); 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir void SetData(SwCSVData& rDBData); 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir void SetCurrentDataSet(sal_uInt32 nSet); 99*cdf0e10cSrcweir sal_uInt32 GetCurrentDataSet() const { return m_nCurrentDataSet;} 100*cdf0e10cSrcweir void SetCursorTo(sal_uInt32 nElement); 101*cdf0e10cSrcweir }; 102*cdf0e10cSrcweir 103*cdf0e10cSrcweir /*-- 13.04.2004 10:09:42--------------------------------------------------- 104*cdf0e10cSrcweir 105*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 106*cdf0e10cSrcweir SwAddressControl_Impl::SwAddressControl_Impl(Window* pParent, const ResId& rResId ) : 107*cdf0e10cSrcweir Control(pParent, rResId), 108*cdf0e10cSrcweir #ifdef MSC 109*cdf0e10cSrcweir #pragma warning (disable : 4355) 110*cdf0e10cSrcweir #endif 111*cdf0e10cSrcweir m_aScrollBar(this, ResId(SCR_1,*rResId.GetResMgr())), 112*cdf0e10cSrcweir m_aWindow(this, ResId(WIN_DATA,*rResId.GetResMgr())), 113*cdf0e10cSrcweir #ifdef MSC 114*cdf0e10cSrcweir #pragma warning (default : 4355) 115*cdf0e10cSrcweir #endif 116*cdf0e10cSrcweir m_pData(0), 117*cdf0e10cSrcweir m_aWinOutputSize( m_aWindow.GetOutputSizePixel() ), 118*cdf0e10cSrcweir m_nLineHeight(0), 119*cdf0e10cSrcweir m_nCurrentDataSet(0), 120*cdf0e10cSrcweir m_bNoDataSet(true) 121*cdf0e10cSrcweir { 122*cdf0e10cSrcweir FreeResource(); 123*cdf0e10cSrcweir Link aScrollLink = LINK(this, SwAddressControl_Impl, ScrollHdl_Impl); 124*cdf0e10cSrcweir m_aScrollBar.SetScrollHdl(aScrollLink); 125*cdf0e10cSrcweir m_aScrollBar.SetEndScrollHdl(aScrollLink); 126*cdf0e10cSrcweir m_aScrollBar.EnableDrag(); 127*cdf0e10cSrcweir 128*cdf0e10cSrcweir } 129*cdf0e10cSrcweir /*-- 13.04.2004 10:09:43--------------------------------------------------- 130*cdf0e10cSrcweir 131*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 132*cdf0e10cSrcweir SwAddressControl_Impl::~SwAddressControl_Impl() 133*cdf0e10cSrcweir { 134*cdf0e10cSrcweir ::std::vector<FixedText*>::iterator aTextIter; 135*cdf0e10cSrcweir for(aTextIter = m_aFixedTexts.begin(); aTextIter != m_aFixedTexts.end(); ++aTextIter) 136*cdf0e10cSrcweir delete *aTextIter; 137*cdf0e10cSrcweir ::std::vector<Edit*>::iterator aEditIter; 138*cdf0e10cSrcweir for(aEditIter = m_aEdits.begin(); aEditIter != m_aEdits.end(); ++aEditIter) 139*cdf0e10cSrcweir delete *aEditIter; 140*cdf0e10cSrcweir } 141*cdf0e10cSrcweir /*-- 19.04.2004 12:22:41--------------------------------------------------- 142*cdf0e10cSrcweir 143*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 144*cdf0e10cSrcweir void SwAddressControl_Impl::SetData(SwCSVData& rDBData) 145*cdf0e10cSrcweir { 146*cdf0e10cSrcweir m_pData = &rDBData; 147*cdf0e10cSrcweir //when the address data is updated then remove the controls an build again 148*cdf0e10cSrcweir if(m_aFixedTexts.size()) 149*cdf0e10cSrcweir { 150*cdf0e10cSrcweir ::std::vector<FixedText*>::iterator aTextIter; 151*cdf0e10cSrcweir for(aTextIter = m_aFixedTexts.begin(); aTextIter != m_aFixedTexts.end(); ++aTextIter) 152*cdf0e10cSrcweir delete *aTextIter; 153*cdf0e10cSrcweir ::std::vector<Edit*>::iterator aEditIter; 154*cdf0e10cSrcweir for(aEditIter = m_aEdits.begin(); aEditIter != m_aEdits.end(); ++aEditIter) 155*cdf0e10cSrcweir delete *aEditIter; 156*cdf0e10cSrcweir m_aFixedTexts.clear(); 157*cdf0e10cSrcweir m_aEdits.clear(); 158*cdf0e10cSrcweir m_bNoDataSet = true; 159*cdf0e10cSrcweir } 160*cdf0e10cSrcweir //now create appropriate controls 161*cdf0e10cSrcweir 162*cdf0e10cSrcweir ::std::vector< OUString >::iterator aHeaderIter; 163*cdf0e10cSrcweir 164*cdf0e10cSrcweir long nFTXPos = m_aWindow.LogicToPixel(Point(RSC_SP_CTRL_X, RSC_SP_CTRL_X), MAP_APPFONT).X(); 165*cdf0e10cSrcweir long nFTHeight = m_aWindow.LogicToPixel(Size(RSC_BS_CHARHEIGHT, RSC_BS_CHARHEIGHT), MAP_APPFONT).Height(); 166*cdf0e10cSrcweir long nFTWidth = 0; 167*cdf0e10cSrcweir 168*cdf0e10cSrcweir //determine the width of the FixedTexts 169*cdf0e10cSrcweir for(aHeaderIter = m_pData->aDBColumnHeaders.begin(); 170*cdf0e10cSrcweir aHeaderIter != m_pData->aDBColumnHeaders.end(); 171*cdf0e10cSrcweir ++aHeaderIter) 172*cdf0e10cSrcweir { 173*cdf0e10cSrcweir sal_Int32 nTemp = m_aWindow.GetTextWidth(*aHeaderIter); 174*cdf0e10cSrcweir if(nTemp > nFTWidth) 175*cdf0e10cSrcweir nFTWidth = nTemp; 176*cdf0e10cSrcweir } 177*cdf0e10cSrcweir //add some pixels 178*cdf0e10cSrcweir nFTWidth += 2; 179*cdf0e10cSrcweir long nEDXPos = nFTWidth + nFTXPos + 180*cdf0e10cSrcweir m_aWindow.LogicToPixel(Size(RSC_SP_CTRL_DESC_X, RSC_SP_CTRL_DESC_X), MAP_APPFONT).Width(); 181*cdf0e10cSrcweir long nEDHeight = m_aWindow.LogicToPixel(Size(RSC_CD_TEXTBOX_HEIGHT, RSC_CD_TEXTBOX_HEIGHT), MAP_APPFONT).Height(); 182*cdf0e10cSrcweir long nEDWidth = m_aWinOutputSize.Width() - nEDXPos - nFTXPos; 183*cdf0e10cSrcweir m_nLineHeight = nEDHeight + m_aWindow.LogicToPixel(Size(RSC_SP_CTRL_GROUP_Y, RSC_SP_CTRL_GROUP_Y), MAP_APPFONT).Height(); 184*cdf0e10cSrcweir 185*cdf0e10cSrcweir long nEDYPos = m_aWindow.LogicToPixel(Size(RSC_SP_CTRL_DESC_Y, RSC_SP_CTRL_DESC_Y), MAP_APPFONT).Height(); 186*cdf0e10cSrcweir long nFTYPos = nEDYPos + nEDHeight - nFTHeight; 187*cdf0e10cSrcweir 188*cdf0e10cSrcweir Link aFocusLink = LINK(this, SwAddressControl_Impl, GotFocusHdl_Impl); 189*cdf0e10cSrcweir Link aEditModifyLink = LINK(this, SwAddressControl_Impl, EditModifyHdl_Impl); 190*cdf0e10cSrcweir Edit* pLastEdit = 0; 191*cdf0e10cSrcweir sal_Int32 nVisibleLines = 0; 192*cdf0e10cSrcweir sal_Int32 nLines = 0; 193*cdf0e10cSrcweir for(aHeaderIter = m_pData->aDBColumnHeaders.begin(); 194*cdf0e10cSrcweir aHeaderIter != m_pData->aDBColumnHeaders.end(); 195*cdf0e10cSrcweir ++aHeaderIter, nEDYPos += m_nLineHeight, nFTYPos += m_nLineHeight, nLines++) 196*cdf0e10cSrcweir { 197*cdf0e10cSrcweir FixedText* pNewFT = new FixedText(&m_aWindow, WB_RIGHT); 198*cdf0e10cSrcweir Edit* pNewED = new Edit(&m_aWindow, WB_BORDER); 199*cdf0e10cSrcweir //set nLines a position identifier - used in the ModifyHdl 200*cdf0e10cSrcweir pNewED->SetData((void*)nLines); 201*cdf0e10cSrcweir pNewED->SetGetFocusHdl(aFocusLink); 202*cdf0e10cSrcweir pNewED->SetModifyHdl(aEditModifyLink); 203*cdf0e10cSrcweir 204*cdf0e10cSrcweir pNewFT->SetPosSizePixel(Point(nFTXPos, nFTYPos), Size(nFTWidth, nFTHeight)); 205*cdf0e10cSrcweir pNewED->SetPosSizePixel(Point(nEDXPos, nEDYPos), Size(nEDWidth, nEDHeight)); 206*cdf0e10cSrcweir if(nEDYPos + nEDHeight < m_aWinOutputSize.Height()) 207*cdf0e10cSrcweir ++nVisibleLines; 208*cdf0e10cSrcweir 209*cdf0e10cSrcweir pNewFT->SetText(*aHeaderIter); 210*cdf0e10cSrcweir 211*cdf0e10cSrcweir pNewFT->Show(); 212*cdf0e10cSrcweir pNewED->Show(); 213*cdf0e10cSrcweir m_aFixedTexts.push_back(pNewFT); 214*cdf0e10cSrcweir m_aEdits.push_back(pNewED); 215*cdf0e10cSrcweir pLastEdit = pNewED; 216*cdf0e10cSrcweir } 217*cdf0e10cSrcweir //scrollbar adjustment 218*cdf0e10cSrcweir if(pLastEdit) 219*cdf0e10cSrcweir { 220*cdf0e10cSrcweir //the m_aWindow has to be at least as high as the ScrollBar and it must include the last Edit 221*cdf0e10cSrcweir sal_Int32 nContentHeight = pLastEdit->GetPosPixel().Y() + nEDHeight + 222*cdf0e10cSrcweir m_aWindow.LogicToPixel(Size(RSC_SP_CTRL_GROUP_Y, RSC_SP_CTRL_GROUP_Y), MAP_APPFONT).Height(); 223*cdf0e10cSrcweir if(nContentHeight < m_aScrollBar.GetSizePixel().Height()) 224*cdf0e10cSrcweir { 225*cdf0e10cSrcweir nContentHeight = m_aScrollBar.GetSizePixel().Height(); 226*cdf0e10cSrcweir m_aScrollBar.Enable(sal_False); 227*cdf0e10cSrcweir } 228*cdf0e10cSrcweir else 229*cdf0e10cSrcweir { 230*cdf0e10cSrcweir m_aScrollBar.Enable(sal_True); 231*cdf0e10cSrcweir m_aScrollBar.SetRange(Range(0, nLines)); 232*cdf0e10cSrcweir m_aScrollBar.SetThumbPos(0); 233*cdf0e10cSrcweir m_aScrollBar.SetVisibleSize(nVisibleLines); 234*cdf0e10cSrcweir } 235*cdf0e10cSrcweir Size aWinOutputSize(m_aWinOutputSize); 236*cdf0e10cSrcweir aWinOutputSize.Height() = nContentHeight; 237*cdf0e10cSrcweir m_aWindow.SetOutputSizePixel(aWinOutputSize); 238*cdf0e10cSrcweir 239*cdf0e10cSrcweir } 240*cdf0e10cSrcweir } 241*cdf0e10cSrcweir /*-- 21.04.2004 11:37:09--------------------------------------------------- 242*cdf0e10cSrcweir 243*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 244*cdf0e10cSrcweir void SwAddressControl_Impl::SetCurrentDataSet(sal_uInt32 nSet) 245*cdf0e10cSrcweir { 246*cdf0e10cSrcweir if(m_bNoDataSet || m_nCurrentDataSet != nSet) 247*cdf0e10cSrcweir { 248*cdf0e10cSrcweir m_bNoDataSet = false; 249*cdf0e10cSrcweir m_nCurrentDataSet = nSet; 250*cdf0e10cSrcweir DBG_ASSERT(m_pData->aDBData.size() > m_nCurrentDataSet, "wrong data set index"); 251*cdf0e10cSrcweir if(m_pData->aDBData.size() > m_nCurrentDataSet) 252*cdf0e10cSrcweir { 253*cdf0e10cSrcweir ::std::vector<Edit*>::iterator aEditIter; 254*cdf0e10cSrcweir sal_uInt32 nIndex = 0; 255*cdf0e10cSrcweir for(aEditIter = m_aEdits.begin(); aEditIter != m_aEdits.end(); ++aEditIter, ++nIndex) 256*cdf0e10cSrcweir { 257*cdf0e10cSrcweir DBG_ASSERT(nIndex < m_pData->aDBData[m_nCurrentDataSet].size(), 258*cdf0e10cSrcweir "number of colums doesn't match number of Edits"); 259*cdf0e10cSrcweir (*aEditIter)->SetText(m_pData->aDBData[m_nCurrentDataSet][nIndex]); 260*cdf0e10cSrcweir } 261*cdf0e10cSrcweir } 262*cdf0e10cSrcweir } 263*cdf0e10cSrcweir } 264*cdf0e10cSrcweir 265*cdf0e10cSrcweir /*-- 19.04.2004 14:17:50--------------------------------------------------- 266*cdf0e10cSrcweir 267*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 268*cdf0e10cSrcweir IMPL_LINK(SwAddressControl_Impl, ScrollHdl_Impl, ScrollBar*, pScroll) 269*cdf0e10cSrcweir { 270*cdf0e10cSrcweir long nThumb = pScroll->GetThumbPos(); 271*cdf0e10cSrcweir m_aWindow.SetPosPixel(Point(0, - (m_nLineHeight * nThumb))); 272*cdf0e10cSrcweir 273*cdf0e10cSrcweir return 0; 274*cdf0e10cSrcweir } 275*cdf0e10cSrcweir /*-- 19.04.2004 16:16:25--------------------------------------------------- 276*cdf0e10cSrcweir 277*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 278*cdf0e10cSrcweir IMPL_LINK(SwAddressControl_Impl, GotFocusHdl_Impl, Edit*, pEdit) 279*cdf0e10cSrcweir { 280*cdf0e10cSrcweir if(0 != (GETFOCUS_TAB & pEdit->GetGetFocusFlags())) 281*cdf0e10cSrcweir { 282*cdf0e10cSrcweir Rectangle aRect(pEdit->GetPosPixel(), pEdit->GetSizePixel()); 283*cdf0e10cSrcweir MakeVisible(aRect); 284*cdf0e10cSrcweir } 285*cdf0e10cSrcweir return 0; 286*cdf0e10cSrcweir } 287*cdf0e10cSrcweir /*-- 21.04.2004 14:56:54--------------------------------------------------- 288*cdf0e10cSrcweir 289*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 290*cdf0e10cSrcweir void SwAddressControl_Impl::MakeVisible(const Rectangle & rRect) 291*cdf0e10cSrcweir { 292*cdf0e10cSrcweir long nThumb = m_aScrollBar.GetThumbPos(); 293*cdf0e10cSrcweir //determine range of visible positions 294*cdf0e10cSrcweir long nMinVisiblePos = - m_aWindow.GetPosPixel().Y(); 295*cdf0e10cSrcweir long nMaxVisiblePos = m_aScrollBar.GetSizePixel().Height() + nMinVisiblePos; 296*cdf0e10cSrcweir if( rRect.TopLeft().Y() < nMinVisiblePos) 297*cdf0e10cSrcweir { 298*cdf0e10cSrcweir nThumb -= 1 + ((nMinVisiblePos - rRect.TopLeft().Y()) / m_nLineHeight); 299*cdf0e10cSrcweir } 300*cdf0e10cSrcweir else if(rRect.BottomLeft().Y() > nMaxVisiblePos) 301*cdf0e10cSrcweir { 302*cdf0e10cSrcweir nThumb += 1 + ((nMaxVisiblePos - rRect.BottomLeft().Y()) / m_nLineHeight); 303*cdf0e10cSrcweir } 304*cdf0e10cSrcweir if(nThumb != m_aScrollBar.GetThumbPos()) 305*cdf0e10cSrcweir { 306*cdf0e10cSrcweir m_aScrollBar.SetThumbPos(nThumb); 307*cdf0e10cSrcweir ScrollHdl_Impl(&m_aScrollBar); 308*cdf0e10cSrcweir } 309*cdf0e10cSrcweir } 310*cdf0e10cSrcweir /*-- 19.04.2004 16:16:25--------------------------------------------------- 311*cdf0e10cSrcweir copy data changes into database 312*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 313*cdf0e10cSrcweir IMPL_LINK(SwAddressControl_Impl, EditModifyHdl_Impl, Edit*, pEdit) 314*cdf0e10cSrcweir { 315*cdf0e10cSrcweir //get the data element number of the current set 316*cdf0e10cSrcweir sal_Int32 nIndex = (sal_Int32)(sal_IntPtr)pEdit->GetData(); 317*cdf0e10cSrcweir //get the index of the set 318*cdf0e10cSrcweir DBG_ASSERT(m_pData->aDBData.size() > m_nCurrentDataSet, "wrong data set index" ); 319*cdf0e10cSrcweir if(m_pData->aDBData.size() > m_nCurrentDataSet) 320*cdf0e10cSrcweir { 321*cdf0e10cSrcweir m_pData->aDBData[m_nCurrentDataSet][nIndex] = pEdit->GetText(); 322*cdf0e10cSrcweir } 323*cdf0e10cSrcweir return 0; 324*cdf0e10cSrcweir } 325*cdf0e10cSrcweir /*-- 21.04.2004 14:51:54--------------------------------------------------- 326*cdf0e10cSrcweir 327*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 328*cdf0e10cSrcweir void SwAddressControl_Impl::SetCursorTo(sal_uInt32 nElement) 329*cdf0e10cSrcweir { 330*cdf0e10cSrcweir if(nElement < m_aEdits.size()) 331*cdf0e10cSrcweir { 332*cdf0e10cSrcweir Edit* pEdit = m_aEdits[nElement]; 333*cdf0e10cSrcweir pEdit->GrabFocus(); 334*cdf0e10cSrcweir Rectangle aRect(pEdit->GetPosPixel(), pEdit->GetSizePixel()); 335*cdf0e10cSrcweir MakeVisible(aRect); 336*cdf0e10cSrcweir } 337*cdf0e10cSrcweir 338*cdf0e10cSrcweir } 339*cdf0e10cSrcweir /*-- 19.04.2004 16:16:25--------------------------------------------------- 340*cdf0e10cSrcweir 341*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 342*cdf0e10cSrcweir void SwAddressControl_Impl::Command( const CommandEvent& rCEvt ) 343*cdf0e10cSrcweir { 344*cdf0e10cSrcweir switch ( rCEvt.GetCommand() ) 345*cdf0e10cSrcweir { 346*cdf0e10cSrcweir case COMMAND_WHEEL: 347*cdf0e10cSrcweir case COMMAND_STARTAUTOSCROLL: 348*cdf0e10cSrcweir case COMMAND_AUTOSCROLL: 349*cdf0e10cSrcweir { 350*cdf0e10cSrcweir const CommandWheelData* pWheelData = rCEvt.GetWheelData(); 351*cdf0e10cSrcweir if(pWheelData && !pWheelData->IsHorz() && COMMAND_WHEEL_ZOOM != pWheelData->GetMode()) 352*cdf0e10cSrcweir { 353*cdf0e10cSrcweir HandleScrollCommand( rCEvt, 0, &m_aScrollBar ); 354*cdf0e10cSrcweir } 355*cdf0e10cSrcweir } 356*cdf0e10cSrcweir break; 357*cdf0e10cSrcweir default: 358*cdf0e10cSrcweir Control::Command(rCEvt); 359*cdf0e10cSrcweir } 360*cdf0e10cSrcweir } 361*cdf0e10cSrcweir /*-- 19.04.2004 16:16:25--------------------------------------------------- 362*cdf0e10cSrcweir 363*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 364*cdf0e10cSrcweir long SwAddressControl_Impl::PreNotify( NotifyEvent& rNEvt ) 365*cdf0e10cSrcweir { 366*cdf0e10cSrcweir if(rNEvt.GetType() == EVENT_COMMAND) 367*cdf0e10cSrcweir { 368*cdf0e10cSrcweir const CommandEvent* pCEvt = rNEvt.GetCommandEvent(); 369*cdf0e10cSrcweir sal_uInt16 nCmd = pCEvt->GetCommand(); 370*cdf0e10cSrcweir if( COMMAND_WHEEL == nCmd ) 371*cdf0e10cSrcweir { 372*cdf0e10cSrcweir Command(*pCEvt); 373*cdf0e10cSrcweir return 1; 374*cdf0e10cSrcweir } 375*cdf0e10cSrcweir } 376*cdf0e10cSrcweir return Control::PreNotify(rNEvt); 377*cdf0e10cSrcweir } 378*cdf0e10cSrcweir /*-- 13.04.2004 10:08:59--------------------------------------------------- 379*cdf0e10cSrcweir 380*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 381*cdf0e10cSrcweir SwCreateAddressListDialog::SwCreateAddressListDialog( 382*cdf0e10cSrcweir Window* pParent, const String& rURL, SwMailMergeConfigItem& rConfig) : 383*cdf0e10cSrcweir SfxModalDialog(pParent, SW_RES(DLG_MM_CREATEADDRESSLIST)), 384*cdf0e10cSrcweir #ifdef MSC 385*cdf0e10cSrcweir #pragma warning (disable : 4355) 386*cdf0e10cSrcweir #endif 387*cdf0e10cSrcweir m_aAddressInformation( this, SW_RES( FI_ADDRESSINFORMATION)), 388*cdf0e10cSrcweir m_pAddressControl(new SwAddressControl_Impl(this, SW_RES(CT_ADDRESS))), 389*cdf0e10cSrcweir m_aNewPB( this, SW_RES( PB_NEW)), 390*cdf0e10cSrcweir m_aDeletePB( this, SW_RES( PB_DELETE)), 391*cdf0e10cSrcweir m_aFindPB( this, SW_RES( PB_FIND)), 392*cdf0e10cSrcweir m_aCustomizePB( this, SW_RES( PB_CUSTOMIZE)), 393*cdf0e10cSrcweir 394*cdf0e10cSrcweir m_aViewEntriesFI( this, SW_RES( FI_VIEWENTRIES)), 395*cdf0e10cSrcweir m_aStartPB( this, SW_RES( PB_START)), 396*cdf0e10cSrcweir m_aPrevPB( this, SW_RES( PB_PREV)), 397*cdf0e10cSrcweir m_aSetNoNF( this, SW_RES( NF_SETNO)), 398*cdf0e10cSrcweir m_aNextPB( this, SW_RES( PB_NEXT )), 399*cdf0e10cSrcweir m_aEndPB( this, SW_RES( PB_END)), 400*cdf0e10cSrcweir 401*cdf0e10cSrcweir m_aSeparatorFL( this, SW_RES( FL_SEPARATOR)), 402*cdf0e10cSrcweir 403*cdf0e10cSrcweir m_aOK( this, SW_RES( PB_OK)), 404*cdf0e10cSrcweir m_aCancel( this, SW_RES( PB_CANCEL)), 405*cdf0e10cSrcweir m_aHelp( this, SW_RES( PB_HELP)), 406*cdf0e10cSrcweir #ifdef MSC 407*cdf0e10cSrcweir #pragma warning (default : 4355) 408*cdf0e10cSrcweir #endif 409*cdf0e10cSrcweir m_sAddressListFilterName( SW_RES( ST_FILTERNAME)), 410*cdf0e10cSrcweir m_sURL(rURL), 411*cdf0e10cSrcweir m_pCSVData( new SwCSVData ), 412*cdf0e10cSrcweir m_pFindDlg(0) 413*cdf0e10cSrcweir { 414*cdf0e10cSrcweir FreeResource(); 415*cdf0e10cSrcweir m_aNewPB.SetClickHdl(LINK(this, SwCreateAddressListDialog, NewHdl_Impl)); 416*cdf0e10cSrcweir m_aDeletePB.SetClickHdl(LINK(this, SwCreateAddressListDialog, DeleteHdl_Impl)); 417*cdf0e10cSrcweir m_aFindPB.SetClickHdl(LINK(this, SwCreateAddressListDialog, FindHdl_Impl)); 418*cdf0e10cSrcweir m_aCustomizePB.SetClickHdl(LINK(this, SwCreateAddressListDialog, CustomizeHdl_Impl)); 419*cdf0e10cSrcweir m_aOK.SetClickHdl(LINK(this, SwCreateAddressListDialog, OkHdl_Impl)); 420*cdf0e10cSrcweir 421*cdf0e10cSrcweir Link aLk = LINK(this, SwCreateAddressListDialog, DBCursorHdl_Impl); 422*cdf0e10cSrcweir m_aStartPB.SetClickHdl(aLk); 423*cdf0e10cSrcweir m_aPrevPB.SetClickHdl(aLk); 424*cdf0e10cSrcweir m_aSetNoNF.SetModifyHdl(LINK(this, SwCreateAddressListDialog, DBNumCursorHdl_Impl)); 425*cdf0e10cSrcweir m_aNextPB.SetClickHdl(aLk); 426*cdf0e10cSrcweir m_aEndPB.SetClickHdl(aLk); 427*cdf0e10cSrcweir 428*cdf0e10cSrcweir if(m_sURL.Len()) 429*cdf0e10cSrcweir { 430*cdf0e10cSrcweir //file exists, has to be loaded here 431*cdf0e10cSrcweir SfxMedium aMedium( m_sURL, STREAM_READ, sal_True ); 432*cdf0e10cSrcweir SvStream* pStream = aMedium.GetInStream(); 433*cdf0e10cSrcweir if(pStream) 434*cdf0e10cSrcweir { 435*cdf0e10cSrcweir pStream->SetLineDelimiter( LINEEND_LF ); 436*cdf0e10cSrcweir pStream->SetStreamCharSet(RTL_TEXTENCODING_UTF8); 437*cdf0e10cSrcweir 438*cdf0e10cSrcweir OUString sSemi(';'); 439*cdf0e10cSrcweir OUString sQuote('"'); 440*cdf0e10cSrcweir String sTempMiddle(sQuote); 441*cdf0e10cSrcweir sTempMiddle += sal_Unicode(9); 442*cdf0e10cSrcweir OUString sMiddle(sTempMiddle); 443*cdf0e10cSrcweir 444*cdf0e10cSrcweir String sLine; 445*cdf0e10cSrcweir sal_Bool bRead = pStream->ReadUniOrByteStringLine( sLine, RTL_TEXTENCODING_UTF8 ); 446*cdf0e10cSrcweir 447*cdf0e10cSrcweir if(bRead) 448*cdf0e10cSrcweir { 449*cdf0e10cSrcweir //header line 450*cdf0e10cSrcweir xub_StrLen nHeaders = sLine.GetTokenCount('\t'); 451*cdf0e10cSrcweir xub_StrLen nIndex = 0; 452*cdf0e10cSrcweir for( xub_StrLen nToken = 0; nToken < nHeaders; ++nToken) 453*cdf0e10cSrcweir { 454*cdf0e10cSrcweir String sHeader = sLine.GetToken( 0, '\t', nIndex ); 455*cdf0e10cSrcweir DBG_ASSERT(sHeader.Len() > 2 && 456*cdf0e10cSrcweir sHeader.GetChar(0) == '\"' && sHeader.GetChar(sHeader.Len() - 1) == '\"', 457*cdf0e10cSrcweir "Wrong format of header"); 458*cdf0e10cSrcweir if(sHeader.Len() > 2) 459*cdf0e10cSrcweir { 460*cdf0e10cSrcweir m_pCSVData->aDBColumnHeaders.push_back( sHeader.Copy(1, sHeader.Len() -2)); 461*cdf0e10cSrcweir } 462*cdf0e10cSrcweir } 463*cdf0e10cSrcweir } 464*cdf0e10cSrcweir while(pStream->ReadUniOrByteStringLine( sLine, RTL_TEXTENCODING_UTF8 )) 465*cdf0e10cSrcweir { 466*cdf0e10cSrcweir ::std::vector<OUString> aNewData; 467*cdf0e10cSrcweir //analyze data line 468*cdf0e10cSrcweir xub_StrLen nDataCount = sLine.GetTokenCount('\t'); 469*cdf0e10cSrcweir xub_StrLen nIndex = 0; 470*cdf0e10cSrcweir for( xub_StrLen nToken = 0; nToken < nDataCount; ++nToken) 471*cdf0e10cSrcweir { 472*cdf0e10cSrcweir String sData = sLine.GetToken( 0, '\t', nIndex ); 473*cdf0e10cSrcweir DBG_ASSERT(sData.Len() >= 2 && 474*cdf0e10cSrcweir sData.GetChar(0) == '\"' && sData.GetChar(sData.Len() - 1) == '\"', 475*cdf0e10cSrcweir "Wrong format of line"); 476*cdf0e10cSrcweir if(sData.Len() >= 2) 477*cdf0e10cSrcweir aNewData.push_back(sData.Copy(1, sData.Len() - 2)); 478*cdf0e10cSrcweir else 479*cdf0e10cSrcweir aNewData.push_back(sData); 480*cdf0e10cSrcweir } 481*cdf0e10cSrcweir m_pCSVData->aDBData.push_back( aNewData ); 482*cdf0e10cSrcweir } 483*cdf0e10cSrcweir } 484*cdf0e10cSrcweir } 485*cdf0e10cSrcweir else 486*cdf0e10cSrcweir { 487*cdf0e10cSrcweir //database has to be created 488*cdf0e10cSrcweir const ResStringArray& rAddressHeader = rConfig.GetDefaultAddressHeaders(); 489*cdf0e10cSrcweir sal_uInt32 nCount = rAddressHeader.Count(); 490*cdf0e10cSrcweir for(sal_uInt16 nHeader = 0; nHeader < nCount; ++nHeader) 491*cdf0e10cSrcweir m_pCSVData->aDBColumnHeaders.push_back( rAddressHeader.GetString(nHeader)); 492*cdf0e10cSrcweir ::std::vector<OUString> aNewData; 493*cdf0e10cSrcweir String sTemp; 494*cdf0e10cSrcweir aNewData.insert(aNewData.begin(), nCount, sTemp); 495*cdf0e10cSrcweir m_pCSVData->aDBData.push_back(aNewData); 496*cdf0e10cSrcweir } 497*cdf0e10cSrcweir //now fill the address control 498*cdf0e10cSrcweir m_pAddressControl->SetData(*m_pCSVData); 499*cdf0e10cSrcweir m_pAddressControl->SetCurrentDataSet(0); 500*cdf0e10cSrcweir m_aSetNoNF.SetMax(m_pCSVData->aDBData.size()); 501*cdf0e10cSrcweir UpdateButtons(); 502*cdf0e10cSrcweir } 503*cdf0e10cSrcweir /*-- 13.04.2004 10:08:59--------------------------------------------------- 504*cdf0e10cSrcweir 505*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 506*cdf0e10cSrcweir SwCreateAddressListDialog::~SwCreateAddressListDialog() 507*cdf0e10cSrcweir { 508*cdf0e10cSrcweir delete m_pAddressControl; 509*cdf0e10cSrcweir delete m_pCSVData; 510*cdf0e10cSrcweir delete m_pFindDlg; 511*cdf0e10cSrcweir } 512*cdf0e10cSrcweir /*-- 13.04.2004 10:08:59--------------------------------------------------- 513*cdf0e10cSrcweir add a new data set of empty strings and set the address input control 514*cdf0e10cSrcweir to that new set 515*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 516*cdf0e10cSrcweir IMPL_LINK(SwCreateAddressListDialog, NewHdl_Impl, PushButton*, EMPTYARG) 517*cdf0e10cSrcweir { 518*cdf0e10cSrcweir sal_uInt32 nCurrent = m_pAddressControl->GetCurrentDataSet(); 519*cdf0e10cSrcweir ::std::vector<OUString> aNewData; 520*cdf0e10cSrcweir String sTemp; 521*cdf0e10cSrcweir aNewData.insert(aNewData.begin(), m_pCSVData->aDBColumnHeaders.size(), sTemp); 522*cdf0e10cSrcweir m_pCSVData->aDBData.insert(m_pCSVData->aDBData.begin() + ++nCurrent, aNewData); 523*cdf0e10cSrcweir m_aSetNoNF.SetMax(m_pCSVData->aDBData.size()); 524*cdf0e10cSrcweir //the NumericField start at 1 525*cdf0e10cSrcweir m_aSetNoNF.SetValue(nCurrent + 1); 526*cdf0e10cSrcweir //the address control starts at 0 527*cdf0e10cSrcweir m_pAddressControl->SetCurrentDataSet(nCurrent); 528*cdf0e10cSrcweir UpdateButtons(); 529*cdf0e10cSrcweir return 0; 530*cdf0e10cSrcweir } 531*cdf0e10cSrcweir /*-- 13.04.2004 10:09:00--------------------------------------------------- 532*cdf0e10cSrcweir 533*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 534*cdf0e10cSrcweir IMPL_LINK(SwCreateAddressListDialog, DeleteHdl_Impl, PushButton*, EMPTYARG) 535*cdf0e10cSrcweir { 536*cdf0e10cSrcweir sal_uInt32 nCurrent = m_pAddressControl->GetCurrentDataSet(); 537*cdf0e10cSrcweir if(m_pCSVData->aDBData.size() > 1) 538*cdf0e10cSrcweir { 539*cdf0e10cSrcweir m_pCSVData->aDBData.erase(m_pCSVData->aDBData.begin() + nCurrent); 540*cdf0e10cSrcweir if(nCurrent) 541*cdf0e10cSrcweir --nCurrent; 542*cdf0e10cSrcweir } 543*cdf0e10cSrcweir else 544*cdf0e10cSrcweir { 545*cdf0e10cSrcweir // if only one set is available then clear the data 546*cdf0e10cSrcweir String sTemp; 547*cdf0e10cSrcweir m_pCSVData->aDBData[0].assign(m_pCSVData->aDBData[0].size(), sTemp); 548*cdf0e10cSrcweir m_aDeletePB.Enable(sal_False); 549*cdf0e10cSrcweir } 550*cdf0e10cSrcweir m_pAddressControl->SetCurrentDataSet(nCurrent); 551*cdf0e10cSrcweir m_aSetNoNF.SetMax(m_pCSVData->aDBData.size()); 552*cdf0e10cSrcweir UpdateButtons(); 553*cdf0e10cSrcweir return 0; 554*cdf0e10cSrcweir } 555*cdf0e10cSrcweir /*-- 13.04.2004 10:09:00--------------------------------------------------- 556*cdf0e10cSrcweir 557*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 558*cdf0e10cSrcweir IMPL_LINK(SwCreateAddressListDialog, FindHdl_Impl, PushButton*, EMPTYARG) 559*cdf0e10cSrcweir { 560*cdf0e10cSrcweir if(!m_pFindDlg) 561*cdf0e10cSrcweir { 562*cdf0e10cSrcweir m_pFindDlg = new SwFindEntryDialog(this); 563*cdf0e10cSrcweir ListBox& rColumnBox = m_pFindDlg->GetFieldsListBox(); 564*cdf0e10cSrcweir ::std::vector< OUString >::iterator aHeaderIter; 565*cdf0e10cSrcweir for(aHeaderIter = m_pCSVData->aDBColumnHeaders.begin(); 566*cdf0e10cSrcweir aHeaderIter != m_pCSVData->aDBColumnHeaders.end(); 567*cdf0e10cSrcweir ++aHeaderIter) 568*cdf0e10cSrcweir rColumnBox.InsertEntry(*aHeaderIter); 569*cdf0e10cSrcweir rColumnBox.SelectEntryPos( 0 ); 570*cdf0e10cSrcweir } 571*cdf0e10cSrcweir else 572*cdf0e10cSrcweir m_pFindDlg->Show(!m_pFindDlg->IsVisible()); 573*cdf0e10cSrcweir return 0; 574*cdf0e10cSrcweir } 575*cdf0e10cSrcweir /*-- 13.04.2004 10:09:00--------------------------------------------------- 576*cdf0e10cSrcweir 577*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 578*cdf0e10cSrcweir IMPL_LINK(SwCreateAddressListDialog, CustomizeHdl_Impl, PushButton*, pButton) 579*cdf0e10cSrcweir { 580*cdf0e10cSrcweir SwCustomizeAddressListDialog* pDlg = new SwCustomizeAddressListDialog(pButton, *m_pCSVData); 581*cdf0e10cSrcweir if(RET_OK == pDlg->Execute()) 582*cdf0e10cSrcweir { 583*cdf0e10cSrcweir delete m_pCSVData; 584*cdf0e10cSrcweir m_pCSVData = pDlg->GetNewData(); 585*cdf0e10cSrcweir m_pAddressControl->SetData(*m_pCSVData); 586*cdf0e10cSrcweir m_pAddressControl->SetCurrentDataSet(m_pAddressControl->GetCurrentDataSet()); 587*cdf0e10cSrcweir } 588*cdf0e10cSrcweir delete pDlg; 589*cdf0e10cSrcweir 590*cdf0e10cSrcweir //update find dialog 591*cdf0e10cSrcweir if(m_pFindDlg) 592*cdf0e10cSrcweir { 593*cdf0e10cSrcweir ListBox& rColumnBox = m_pFindDlg->GetFieldsListBox(); 594*cdf0e10cSrcweir rColumnBox.Clear(); 595*cdf0e10cSrcweir ::std::vector< OUString >::iterator aHeaderIter; 596*cdf0e10cSrcweir for(aHeaderIter = m_pCSVData->aDBColumnHeaders.begin(); 597*cdf0e10cSrcweir aHeaderIter != m_pCSVData->aDBColumnHeaders.end(); 598*cdf0e10cSrcweir ++aHeaderIter) 599*cdf0e10cSrcweir rColumnBox.InsertEntry(*aHeaderIter); 600*cdf0e10cSrcweir } 601*cdf0e10cSrcweir return 0; 602*cdf0e10cSrcweir } 603*cdf0e10cSrcweir /*-- 23.04.2004 09:02:51--------------------------------------------------- 604*cdf0e10cSrcweir writes the data into a .csv file 605*cdf0e10cSrcweir encoding is UTF8, separator is tab, strings are enclosed into " 606*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 607*cdf0e10cSrcweir IMPL_LINK(SwCreateAddressListDialog, OkHdl_Impl, PushButton*, EMPTYARG) 608*cdf0e10cSrcweir { 609*cdf0e10cSrcweir if(!m_sURL.Len()) 610*cdf0e10cSrcweir { 611*cdf0e10cSrcweir sfx2::FileDialogHelper aDlgHelper( TemplateDescription::FILESAVE_SIMPLE, 0 ); 612*cdf0e10cSrcweir uno::Reference < XFilePicker > xFP = aDlgHelper.GetFilePicker(); 613*cdf0e10cSrcweir 614*cdf0e10cSrcweir String sPath( SvtPathOptions().SubstituteVariable( 615*cdf0e10cSrcweir String::CreateFromAscii("$(userurl)/database") )); 616*cdf0e10cSrcweir aDlgHelper.SetDisplayDirectory( sPath ); 617*cdf0e10cSrcweir uno::Reference< XFilterManager > xFltMgr(xFP, uno::UNO_QUERY); 618*cdf0e10cSrcweir ::rtl::OUString sCSV(C2U("*.csv")); 619*cdf0e10cSrcweir xFltMgr->appendFilter( m_sAddressListFilterName, sCSV ); 620*cdf0e10cSrcweir xFltMgr->setCurrentFilter( m_sAddressListFilterName ) ; 621*cdf0e10cSrcweir 622*cdf0e10cSrcweir if( ERRCODE_NONE == aDlgHelper.Execute() ) 623*cdf0e10cSrcweir { 624*cdf0e10cSrcweir m_sURL = xFP->getFiles().getConstArray()[0]; 625*cdf0e10cSrcweir INetURLObject aResult( m_sURL ); 626*cdf0e10cSrcweir aResult.setExtension(String::CreateFromAscii("csv")); 627*cdf0e10cSrcweir m_sURL = aResult.GetMainURL(INetURLObject::NO_DECODE); 628*cdf0e10cSrcweir } 629*cdf0e10cSrcweir } 630*cdf0e10cSrcweir if(m_sURL.Len()) 631*cdf0e10cSrcweir { 632*cdf0e10cSrcweir SfxMedium aMedium( m_sURL, STREAM_READWRITE|STREAM_TRUNC, sal_True ); 633*cdf0e10cSrcweir SvStream* pStream = aMedium.GetOutStream(); 634*cdf0e10cSrcweir pStream->SetLineDelimiter( LINEEND_LF ); 635*cdf0e10cSrcweir pStream->SetStreamCharSet(RTL_TEXTENCODING_UTF8); 636*cdf0e10cSrcweir 637*cdf0e10cSrcweir OUString sSemi(';'); 638*cdf0e10cSrcweir OUString sQuote('"'); 639*cdf0e10cSrcweir String sTempMiddle(sQuote); 640*cdf0e10cSrcweir sTempMiddle += sal_Unicode(9); 641*cdf0e10cSrcweir OUString sMiddle(sTempMiddle); 642*cdf0e10cSrcweir sMiddle += sQuote; 643*cdf0e10cSrcweir 644*cdf0e10cSrcweir //create a string for the header line 645*cdf0e10cSrcweir OUString sLine(sQuote); 646*cdf0e10cSrcweir ::std::vector< OUString >::iterator aHeaderIter; 647*cdf0e10cSrcweir for(aHeaderIter = m_pCSVData->aDBColumnHeaders.begin(); 648*cdf0e10cSrcweir aHeaderIter != m_pCSVData->aDBColumnHeaders.end(); 649*cdf0e10cSrcweir ++aHeaderIter) 650*cdf0e10cSrcweir { 651*cdf0e10cSrcweir sLine += *aHeaderIter; 652*cdf0e10cSrcweir sLine += sMiddle; 653*cdf0e10cSrcweir } 654*cdf0e10cSrcweir //remove tab and quote 655*cdf0e10cSrcweir sLine = sLine.copy( 0, sLine.getLength() - 2 ); 656*cdf0e10cSrcweir pStream->WriteUnicodeOrByteText( sLine, RTL_TEXTENCODING_UTF8 ); 657*cdf0e10cSrcweir endl(*pStream); 658*cdf0e10cSrcweir 659*cdf0e10cSrcweir ::std::vector< ::std::vector< OUString > >::iterator aDataIter; 660*cdf0e10cSrcweir for( aDataIter = m_pCSVData->aDBData.begin(); aDataIter != m_pCSVData->aDBData.end(); ++aDataIter) 661*cdf0e10cSrcweir { 662*cdf0e10cSrcweir sLine = sQuote; 663*cdf0e10cSrcweir ::std::vector< OUString >::iterator aColumnIter; 664*cdf0e10cSrcweir for(aColumnIter = aDataIter->begin(); aColumnIter != aDataIter->end(); ++aColumnIter) 665*cdf0e10cSrcweir { 666*cdf0e10cSrcweir sLine += *aColumnIter; 667*cdf0e10cSrcweir sLine += sMiddle; 668*cdf0e10cSrcweir } 669*cdf0e10cSrcweir //remove tab and quote 670*cdf0e10cSrcweir sLine = sLine.copy( 0, sLine.getLength() - 2 ); 671*cdf0e10cSrcweir pStream->WriteUnicodeOrByteText( sLine, RTL_TEXTENCODING_UTF8 ); 672*cdf0e10cSrcweir endl(*pStream); 673*cdf0e10cSrcweir } 674*cdf0e10cSrcweir aMedium.Commit(); 675*cdf0e10cSrcweir EndDialog(RET_OK); 676*cdf0e10cSrcweir } 677*cdf0e10cSrcweir 678*cdf0e10cSrcweir return 0; 679*cdf0e10cSrcweir } 680*cdf0e10cSrcweir /*-- 13.04.2004 10:09:01--------------------------------------------------- 681*cdf0e10cSrcweir 682*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 683*cdf0e10cSrcweir IMPL_LINK(SwCreateAddressListDialog, DBCursorHdl_Impl, PushButton*, pButton) 684*cdf0e10cSrcweir { 685*cdf0e10cSrcweir sal_uInt32 nValue = static_cast< sal_uInt32 >(m_aSetNoNF.GetValue()); 686*cdf0e10cSrcweir 687*cdf0e10cSrcweir if(pButton == &m_aStartPB) 688*cdf0e10cSrcweir nValue = 1; 689*cdf0e10cSrcweir else if(pButton == &m_aPrevPB) 690*cdf0e10cSrcweir { 691*cdf0e10cSrcweir if(nValue > 1) 692*cdf0e10cSrcweir --nValue; 693*cdf0e10cSrcweir } 694*cdf0e10cSrcweir else if(pButton == &m_aNextPB) 695*cdf0e10cSrcweir { 696*cdf0e10cSrcweir if(nValue < (sal_uInt32)m_aSetNoNF.GetMax()) 697*cdf0e10cSrcweir ++nValue; 698*cdf0e10cSrcweir } 699*cdf0e10cSrcweir else //m_aEndPB 700*cdf0e10cSrcweir nValue = static_cast< sal_uInt32 >(m_aSetNoNF.GetMax()); 701*cdf0e10cSrcweir if(nValue != m_aSetNoNF.GetValue()) 702*cdf0e10cSrcweir { 703*cdf0e10cSrcweir m_aSetNoNF.SetValue(nValue); 704*cdf0e10cSrcweir DBNumCursorHdl_Impl(&m_aSetNoNF); 705*cdf0e10cSrcweir } 706*cdf0e10cSrcweir return 0; 707*cdf0e10cSrcweir } 708*cdf0e10cSrcweir /*-- 21.04.2004 12:06:47--------------------------------------------------- 709*cdf0e10cSrcweir 710*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 711*cdf0e10cSrcweir IMPL_LINK(SwCreateAddressListDialog, DBNumCursorHdl_Impl, NumericField*, EMPTYARG) 712*cdf0e10cSrcweir { 713*cdf0e10cSrcweir m_pAddressControl->SetCurrentDataSet( static_cast< sal_uInt32 >(m_aSetNoNF.GetValue() - 1) ); 714*cdf0e10cSrcweir UpdateButtons(); 715*cdf0e10cSrcweir return 0; 716*cdf0e10cSrcweir } 717*cdf0e10cSrcweir /*-- 21.04.2004 13:22:27--------------------------------------------------- 718*cdf0e10cSrcweir 719*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 720*cdf0e10cSrcweir void SwCreateAddressListDialog::UpdateButtons() 721*cdf0e10cSrcweir { 722*cdf0e10cSrcweir sal_uInt32 nCurrent = static_cast< sal_uInt32 >(m_aSetNoNF.GetValue() ); 723*cdf0e10cSrcweir sal_uInt32 nSize = (sal_uInt32 )m_pCSVData->aDBData.size(); 724*cdf0e10cSrcweir m_aStartPB.Enable(nCurrent != 1); 725*cdf0e10cSrcweir m_aPrevPB.Enable(nCurrent != 1); 726*cdf0e10cSrcweir m_aNextPB.Enable(nCurrent != nSize); 727*cdf0e10cSrcweir m_aEndPB.Enable(nCurrent != nSize); 728*cdf0e10cSrcweir m_aDeletePB.Enable(nSize > 0); 729*cdf0e10cSrcweir } 730*cdf0e10cSrcweir /*-- 21.04.2004 13:22:27--------------------------------------------------- 731*cdf0e10cSrcweir 732*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 733*cdf0e10cSrcweir void SwCreateAddressListDialog::Find(const String& rSearch, sal_Int32 nColumn) 734*cdf0e10cSrcweir { 735*cdf0e10cSrcweir OUString sSearch = rSearch; 736*cdf0e10cSrcweir sSearch.toAsciiLowerCase(); 737*cdf0e10cSrcweir sal_uInt32 nCurrent = m_pAddressControl->GetCurrentDataSet(); 738*cdf0e10cSrcweir //search forward 739*cdf0e10cSrcweir bool bFound = false; 740*cdf0e10cSrcweir sal_uInt32 nStart = nCurrent + 1; 741*cdf0e10cSrcweir sal_uInt32 nEnd = m_pCSVData->aDBData.size(); 742*cdf0e10cSrcweir sal_uInt32 nElement = 0; 743*cdf0e10cSrcweir sal_uInt32 nPos = 0; 744*cdf0e10cSrcweir for(short nTemp = 0; nTemp < 2 && !bFound; nTemp++) 745*cdf0e10cSrcweir { 746*cdf0e10cSrcweir for(nPos = nStart; nPos < nEnd; ++nPos) 747*cdf0e10cSrcweir { 748*cdf0e10cSrcweir ::std::vector< OUString> aData = m_pCSVData->aDBData[nPos]; 749*cdf0e10cSrcweir if(nColumn >=0) 750*cdf0e10cSrcweir bFound = -1 != aData[(sal_uInt32)nColumn].toAsciiLowerCase().indexOf(sSearch); 751*cdf0e10cSrcweir else 752*cdf0e10cSrcweir { 753*cdf0e10cSrcweir for( nElement = 0; nElement < aData.size(); ++nElement) 754*cdf0e10cSrcweir { 755*cdf0e10cSrcweir bFound = -1 != aData[nElement].toAsciiLowerCase().indexOf(sSearch); 756*cdf0e10cSrcweir if(bFound) 757*cdf0e10cSrcweir { 758*cdf0e10cSrcweir nColumn = nElement; 759*cdf0e10cSrcweir break; 760*cdf0e10cSrcweir } 761*cdf0e10cSrcweir } 762*cdf0e10cSrcweir } 763*cdf0e10cSrcweir if(bFound) 764*cdf0e10cSrcweir break; 765*cdf0e10cSrcweir } 766*cdf0e10cSrcweir nStart = 0; 767*cdf0e10cSrcweir nEnd = nCurrent + 1; 768*cdf0e10cSrcweir } 769*cdf0e10cSrcweir if(bFound) 770*cdf0e10cSrcweir { 771*cdf0e10cSrcweir m_pAddressControl->SetCurrentDataSet(nPos); 772*cdf0e10cSrcweir m_aSetNoNF.SetValue( nPos + 1 ); 773*cdf0e10cSrcweir UpdateButtons(); 774*cdf0e10cSrcweir m_pAddressControl->SetCursorTo(nElement); 775*cdf0e10cSrcweir } 776*cdf0e10cSrcweir } 777*cdf0e10cSrcweir /*-- 13.04.2004 13:48:38--------------------------------------------------- 778*cdf0e10cSrcweir 779*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 780*cdf0e10cSrcweir SwFindEntryDialog::SwFindEntryDialog(SwCreateAddressListDialog* pParent) : 781*cdf0e10cSrcweir ModelessDialog(pParent, SW_RES(DLG_MM_FIND_ENTRY)), 782*cdf0e10cSrcweir #ifdef MSC 783*cdf0e10cSrcweir #pragma warning (disable : 4355) 784*cdf0e10cSrcweir #endif 785*cdf0e10cSrcweir m_aFindFT( this, SW_RES( FT_FIND )), 786*cdf0e10cSrcweir m_aFindED( this, SW_RES( ED_FIND )), 787*cdf0e10cSrcweir m_aFindOnlyCB( this, SW_RES( CB_FINDONLY )), 788*cdf0e10cSrcweir m_aFindOnlyLB( this, SW_RES( LB_FINDONLY )), 789*cdf0e10cSrcweir m_aFindPB( this, SW_RES( PB_FIND)), 790*cdf0e10cSrcweir m_aCancel( this, SW_RES( PB_CANCEL)), 791*cdf0e10cSrcweir m_aHelp( this, SW_RES( PB_HELP)), 792*cdf0e10cSrcweir #ifdef MSC 793*cdf0e10cSrcweir #pragma warning (default : 4355) 794*cdf0e10cSrcweir #endif 795*cdf0e10cSrcweir m_pParent(pParent) 796*cdf0e10cSrcweir { 797*cdf0e10cSrcweir FreeResource(); 798*cdf0e10cSrcweir m_aFindPB.SetClickHdl(LINK(this, SwFindEntryDialog, FindHdl_Impl)); 799*cdf0e10cSrcweir m_aFindED.SetModifyHdl(LINK(this, SwFindEntryDialog, FindEnableHdl_Impl)); 800*cdf0e10cSrcweir m_aCancel.SetClickHdl(LINK(this, SwFindEntryDialog, CloseHdl_Impl)); 801*cdf0e10cSrcweir } 802*cdf0e10cSrcweir /*-- 13.04.2004 13:48:38--------------------------------------------------- 803*cdf0e10cSrcweir 804*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 805*cdf0e10cSrcweir SwFindEntryDialog::~SwFindEntryDialog() 806*cdf0e10cSrcweir { 807*cdf0e10cSrcweir } 808*cdf0e10cSrcweir /*-- 21.04.2004 13:37:46--------------------------------------------------- 809*cdf0e10cSrcweir 810*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 811*cdf0e10cSrcweir IMPL_LINK(SwFindEntryDialog, FindHdl_Impl, PushButton*, EMPTYARG) 812*cdf0e10cSrcweir { 813*cdf0e10cSrcweir sal_Int32 nColumn = -1; 814*cdf0e10cSrcweir if(m_aFindOnlyCB.IsChecked()) 815*cdf0e10cSrcweir nColumn = m_aFindOnlyLB.GetSelectEntryPos(); 816*cdf0e10cSrcweir if(nColumn != LISTBOX_ENTRY_NOTFOUND) 817*cdf0e10cSrcweir m_pParent->Find(m_aFindED.GetText(), nColumn); 818*cdf0e10cSrcweir return 0; 819*cdf0e10cSrcweir } 820*cdf0e10cSrcweir /*-- 21.04.2004 13:37:46--------------------------------------------------- 821*cdf0e10cSrcweir 822*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 823*cdf0e10cSrcweir IMPL_LINK(SwFindEntryDialog, FindEnableHdl_Impl, Edit*, EMPTYARG) 824*cdf0e10cSrcweir { 825*cdf0e10cSrcweir m_aFindPB.Enable(m_aFindED.GetText().Len() > 0); 826*cdf0e10cSrcweir return 0; 827*cdf0e10cSrcweir } 828*cdf0e10cSrcweir /*-- 21.04.2004 15:36:36--------------------------------------------------- 829*cdf0e10cSrcweir 830*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 831*cdf0e10cSrcweir IMPL_LINK(SwFindEntryDialog, CloseHdl_Impl, PushButton*, EMPTYARG) 832*cdf0e10cSrcweir { 833*cdf0e10cSrcweir Show(sal_False); 834*cdf0e10cSrcweir return 0; 835*cdf0e10cSrcweir } 836