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