1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 // MARKER(update_precomp.py): autogen include statement, do not remove 28 #include "precompiled_dbaccess.hxx" 29 #ifndef _DBAUI_MODULE_DBU_HXX_ 30 #include "moduledbu.hxx" 31 #endif 32 33 #ifndef DBAUI_TEXTCONNECTIONHELPER_HXX 34 #include "TextConnectionHelper.hxx" 35 #endif 36 37 #ifndef _DBAUI_SQLMESSAGE_HXX_ 38 #include "sqlmessage.hxx" 39 #endif 40 #ifndef _DBU_DLG_HRC_ 41 #include "dbu_dlg.hrc" 42 #endif 43 #ifndef _DBU_RESOURCE_HRC_ 44 #include "dbu_resource.hrc" 45 #endif 46 #ifndef _DBAUI_AUTOCONTROLS_HRC_ 47 #include "AutoControls.hrc" 48 #endif 49 50 #ifndef _SFXITEMSET_HXX 51 #include <svl/itemset.hxx> 52 #endif 53 #ifndef _SFXSTRITEM_HXX 54 #include <svl/stritem.hxx> 55 #endif 56 #ifndef _SFXENUMITEM_HXX 57 #include <svl/eitem.hxx> 58 #endif 59 #ifndef _SFXINTITEM_HXX 60 #include <svl/intitem.hxx> 61 #endif 62 #ifndef _DBAUI_DATASOURCEITEMS_HXX_ 63 #include "dsitems.hxx" 64 #endif 65 #ifndef _DBAUI_DBFINDEX_HXX_ 66 #include "dbfindex.hxx" 67 #endif 68 #ifndef _DBA_DBACCESS_HELPID_HRC_ 69 #include "dbaccess_helpid.hrc" 70 #endif 71 #ifndef _DBAUI_LOCALRESACCESS_HXX_ 72 #include "localresaccess.hxx" 73 #endif 74 #ifndef _SV_MSGBOX_HXX 75 #include <vcl/msgbox.hxx> 76 #endif 77 #ifndef _SV_MNEMONIC_HXX 78 #include <vcl/mnemonic.hxx> 79 #endif 80 #ifndef _SVTOOLS_CJKOPTIONS_HXX 81 #include <svl/cjkoptions.hxx> 82 #endif 83 #include <jvmaccess/virtualmachine.hxx> 84 #ifndef _DBAUI_ADASTAT_HXX_ 85 #include "AdabasStat.hxx" 86 #endif 87 #ifndef _CONNECTIVITY_COMMONTOOLS_HXX_ 88 #include <connectivity/CommonTools.hxx> 89 #endif 90 #ifndef DBAUI_DRIVERSETTINGS_HXX 91 #include "DriverSettings.hxx" 92 #endif 93 #ifndef _DBAUI_DBADMIN_HXX_ 94 #include "dbadmin.hxx" 95 #endif 96 #ifndef _COMPHELPER_TYPES_HXX_ 97 #include <comphelper/types.hxx> 98 #endif 99 100 #ifndef _COM_SUN_STAR_UI_DIALOGS_XFOLDERPICKER_HPP_ 101 #include <com/sun/star/ui/dialogs/XFolderPicker.hpp> 102 #endif 103 // #106016# ------------------------------------ 104 #ifndef _COM_SUN_STAR_TASK_XINTERACTIONHANDLER_HPP_ 105 #include <com/sun/star/task/XInteractionHandler.hpp> 106 #endif 107 108 #ifndef SVTOOLS_FILENOTATION_HXX_ 109 #include <svl/filenotation.hxx> 110 #endif 111 112 #ifndef _UNOTOOLS_LOCALFILEHELPER_HXX 113 #include <unotools/localfilehelper.hxx> 114 #endif 115 #ifndef _UNOTOOLS_UCBHELPER_HXX 116 #include <unotools/ucbhelper.hxx> 117 #endif 118 #ifndef _UCBHELPER_COMMANDENVIRONMENT_HXX 119 #include <ucbhelper/commandenvironment.hxx> 120 #endif 121 #ifndef DBAUI_FILEPICKER_INTERACTION_HXX 122 #include "finteraction.hxx" 123 #endif 124 #ifndef _CONNECTIVITY_COMMONTOOLS_HXX_ 125 #include <connectivity/CommonTools.hxx> 126 #endif 127 128 #ifndef DBAUI_DBSETUPCONNECTIONPAGES_HXX 129 #include "DBSetupConnectionPages.hxx" 130 #endif 131 132 #ifndef _DBU_DLG_HRC_ 133 #include "dbu_dlg.hrc" 134 #endif 135 136 #ifndef _DBA_DBACCESS_HELPID_HRC_ 137 #include "dbaccess_helpid.hrc" 138 #endif 139 140 #ifndef INCLUDED_SVTOOLS_PATHOPTIONS_HXX 141 #include <unotools/pathoptions.hxx> 142 #endif 143 144 #ifndef SVTOOLS_INC_ROADMAPWIZARD_HXX 145 #include <svtools/roadmapwizard.hxx> 146 #endif 147 148 149 namespace dbaui 150 { 151 152 //======================================================================== 153 //= OTextConnectionPageSetup 154 //======================================================================== 155 DBG_NAME(OTextConnectionHelper) 156 //------------------------------------------------------------------------ 157 OTextConnectionHelper::OTextConnectionHelper( Window* pParent, const short _nAvailableSections ) 158 :Control( pParent, WB_DIALOGCONTROL ) 159 ,m_aFTExtensionHeader (this, ModuleRes(FT_AUTOEXTENSIONHEADER)) 160 ,m_aRBAccessTextFiles (this, ModuleRes(RB_AUTOACCESSCTEXTFILES)) 161 ,m_aRBAccessCSVFiles (this, ModuleRes(RB_AUTOACCESSCCSVFILES)) 162 ,m_aRBAccessOtherFiles (this, ModuleRes(RB_AUTOACCESSOTHERS)) 163 ,m_aETOwnExtension (this, ModuleRes(ET_AUTOOWNEXTENSION)) 164 ,m_aFTExtensionExample (this, ModuleRes(FT_AUTOOWNEXTENSIONAPPENDIX)) 165 ,m_aLineFormat (this, ModuleRes(FL_AUTOSEPARATOR2)) 166 ,m_aFieldSeparatorLabel (this, ModuleRes(FT_AUTOFIELDSEPARATOR)) 167 ,m_aFieldSeparator (this, ModuleRes(CM_AUTOFIELDSEPARATOR)) 168 ,m_aTextSeparatorLabel (this, ModuleRes(FT_AUTOTEXTSEPARATOR)) 169 ,m_aTextSeparator (this, ModuleRes(CM_AUTOTEXTSEPARATOR)) 170 ,m_aDecimalSeparatorLabel (this, ModuleRes(FT_AUTODECIMALSEPARATOR)) 171 ,m_aDecimalSeparator (this, ModuleRes(CM_AUTODECIMALSEPARATOR)) 172 ,m_aThousandsSeparatorLabel (this, ModuleRes(FT_AUTOTHOUSANDSSEPARATOR)) 173 ,m_aThousandsSeparator (this, ModuleRes(CM_AUTOTHOUSANDSSEPARATOR)) 174 ,m_aRowHeader (this, ModuleRes(CB_AUTOHEADER)) 175 ,m_aCharSetHeader (this, ModuleRes(FL_DATACONVERT)) 176 ,m_aCharSetLabel (this, ModuleRes(FT_CHARSET)) 177 ,m_aCharSet (this, ModuleRes(LB_CHARSET)) 178 ,m_aFieldSeparatorList (ModuleRes(STR_AUTOFIELDSEPARATORLIST)) 179 ,m_aTextSeparatorList (ModuleRes(STR_AUTOTEXTSEPARATORLIST)) 180 ,m_aTextNone (ModuleRes(STR_AUTOTEXT_FIELD_SEP_NONE)) 181 ,m_nAvailableSections( _nAvailableSections ) 182 { 183 DBG_CTOR(OTextConnectionHelper,NULL); 184 185 xub_StrLen nCnt = m_aFieldSeparatorList.GetTokenCount( '\t' ); 186 xub_StrLen i; 187 188 for( i = 0 ; i < nCnt ; i += 2 ) 189 m_aFieldSeparator.InsertEntry( m_aFieldSeparatorList.GetToken( i, '\t' ) ); 190 191 nCnt = m_aTextSeparatorList.GetTokenCount( '\t' ); 192 for( i=0 ; i<nCnt ; i+=2 ) 193 m_aTextSeparator.InsertEntry( m_aTextSeparatorList.GetToken( i, '\t' ) ); 194 m_aTextSeparator.InsertEntry(m_aTextNone); 195 196 // set the modify handlers 197 m_aFieldSeparator.SetUpdateDataHdl(getControlModifiedLink()); 198 m_aFieldSeparator.SetSelectHdl(getControlModifiedLink()); 199 m_aTextSeparator.SetUpdateDataHdl(getControlModifiedLink()); 200 m_aTextSeparator.SetSelectHdl(getControlModifiedLink()); 201 m_aCharSet.SetSelectHdl(getControlModifiedLink()); 202 203 m_aFieldSeparator.SetModifyHdl(getControlModifiedLink()); 204 m_aTextSeparator.SetModifyHdl(getControlModifiedLink()); 205 m_aDecimalSeparator.SetModifyHdl(getControlModifiedLink()); 206 m_aThousandsSeparator.SetModifyHdl(getControlModifiedLink()); 207 m_aETOwnExtension.SetModifyHdl(LINK(this, OTextConnectionHelper, OnEditModified)); 208 m_aRBAccessTextFiles.SetToggleHdl(LINK(this, OTextConnectionHelper, OnSetExtensionHdl)); 209 m_aRBAccessCSVFiles.SetToggleHdl(LINK(this, OTextConnectionHelper, OnSetExtensionHdl)); 210 m_aRBAccessOtherFiles.SetToggleHdl(LINK(this, OTextConnectionHelper, OnSetExtensionHdl)); 211 m_aRBAccessCSVFiles.Check(sal_True); 212 213 struct SectionDescriptor 214 { 215 short nFlag; 216 Window* pFirstControl; 217 } aSections[] = { 218 { TC_EXTENSION, &m_aFTExtensionHeader }, 219 { TC_SEPARATORS, &m_aLineFormat }, 220 { TC_HEADER, &m_aRowHeader }, 221 { TC_CHARSET, &m_aCharSetHeader }, 222 { 0, NULL } 223 }; 224 225 for ( size_t section=0; section < sizeof( aSections ) / sizeof( aSections[0] ) - 1; ++section ) 226 { 227 if ( ( m_nAvailableSections & aSections[section].nFlag ) != 0 ) 228 { 229 // the section is visible, no need to do anything here 230 continue; 231 } 232 233 Window* pThisSection = aSections[section].pFirstControl; 234 Window* pNextSection = aSections[section+1].pFirstControl; 235 236 // hide all elements from this section 237 Window* pControl = pThisSection; 238 while ( ( pControl != pNextSection ) && pControl ) 239 { 240 Window* pRealWindow = pControl->GetWindow( WINDOW_CLIENT ); 241 #if OSL_DEBUG_LEVEL > 0 242 String sWindowText( pRealWindow->GetText() ); 243 (void)sWindowText; 244 #endif 245 pRealWindow->Hide(); 246 pControl = pControl->GetWindow( WINDOW_NEXT ); 247 } 248 249 // move all controls in following sections up 250 if ( !pNextSection ) 251 continue; 252 const long nThisSectionStart = pThisSection->GetPosPixel().Y(); 253 const long nNextSectionStart = pNextSection->GetPosPixel().Y(); 254 const long nMoveOffset( nThisSectionStart - nNextSectionStart ); 255 while ( pControl ) 256 { 257 Point aPos = pControl->GetPosPixel(); 258 aPos.Move( 0, nMoveOffset ); 259 pControl->SetPosPixel( aPos ); 260 pControl = pControl->GetWindow( WINDOW_NEXT ); 261 } 262 } 263 264 Rectangle aControlRectUnion; 265 for ( Window* pControl = aSections[0].pFirstControl; 266 pControl != NULL; 267 pControl = pControl->GetWindow( WINDOW_NEXT ) 268 ) 269 { 270 aControlRectUnion = aControlRectUnion.Union( Rectangle( pControl->GetPosPixel(), pControl->GetSizePixel() ) ); 271 } 272 273 // need some adjustments to the positions, since the resource-specified 274 // positions for the control were relative to *our* parent, while by now 275 // the controls have |this| as parent. 276 277 // first, move ourself to the upper left of the area occupied by all controls 278 SetPosPixel( aControlRectUnion.TopLeft() ); 279 280 // then, compensate in the control positions, by moving them the up/left 281 for ( Window* pControl = aSections[0].pFirstControl; 282 pControl != NULL; 283 pControl = pControl->GetWindow( WINDOW_NEXT ) 284 ) 285 { 286 Point aPos( pControl->GetPosPixel() ); 287 aPos.Move( -aControlRectUnion.Left(), -aControlRectUnion.Top() ); 288 pControl->SetPosPixel( aPos ); 289 290 // while we are here ... the controls should not have an own background 291 // (this would not be needed when our outer dialog were also the parent 292 // of the controls) 293 pControl->SetBackground(); 294 } 295 296 // now, change our own size so all controls fit 297 SetSizePixel( aControlRectUnion.GetSize() ); 298 299 SetBackground(); 300 Show(); 301 } 302 303 // ----------------------------------------------------------------------- 304 OTextConnectionHelper::~OTextConnectionHelper() 305 { 306 307 DBG_DTOR(OTextConnectionHelper,NULL); 308 } 309 310 311 // ----------------------------------------------------------------------- 312 IMPL_LINK(OTextConnectionHelper, OnControlModified, Control*, /*EMPTYARG*/) 313 { 314 callModifiedHdl(); 315 return 0L; 316 } 317 318 // ----------------------------------------------------------------------- 319 IMPL_LINK(OTextConnectionHelper, OnEditModified, Edit*, /*_pEdit*/) 320 { 321 m_aGetExtensionHandler.Call(this); 322 return 0L; 323 } 324 325 326 IMPL_LINK(OTextConnectionHelper, OnSetExtensionHdl, RadioButton*, /*_pRadioButton*/) 327 { 328 sal_Bool bDoEnable = m_aRBAccessOtherFiles.IsChecked(); 329 m_aETOwnExtension.Enable(bDoEnable); 330 m_aFTExtensionExample.Enable(bDoEnable); 331 m_aGetExtensionHandler.Call(this); 332 return 0L; 333 } 334 335 336 // ----------------------------------------------------------------------- 337 void OTextConnectionHelper::fillControls(::std::vector< ISaveValueWrapper* >& _rControlList) 338 { 339 _rControlList.push_back(new OSaveValueWrapper<ComboBox>(&m_aFieldSeparator)); 340 _rControlList.push_back(new OSaveValueWrapper<ComboBox>(&m_aTextSeparator)); 341 _rControlList.push_back(new OSaveValueWrapper<ComboBox>(&m_aDecimalSeparator)); 342 _rControlList.push_back(new OSaveValueWrapper<ComboBox>(&m_aThousandsSeparator)); 343 _rControlList.push_back(new OSaveValueWrapper<CheckBox>(&m_aRowHeader)); 344 _rControlList.push_back(new OSaveValueWrapper<ListBox>(&m_aCharSet)); 345 } 346 // ----------------------------------------------------------------------- 347 void OTextConnectionHelper::fillWindows(::std::vector< ISaveValueWrapper* >& _rControlList) 348 { 349 _rControlList.push_back(new ODisableWrapper<FixedText>(&m_aFieldSeparatorLabel)); 350 _rControlList.push_back(new ODisableWrapper<FixedText>(&m_aTextSeparatorLabel)); 351 _rControlList.push_back(new ODisableWrapper<FixedText>(&m_aDecimalSeparatorLabel)); 352 _rControlList.push_back(new ODisableWrapper<FixedText>(&m_aThousandsSeparatorLabel)); 353 _rControlList.push_back(new ODisableWrapper<FixedLine>(&m_aCharSetHeader)); 354 _rControlList.push_back(new ODisableWrapper<FixedText>(&m_aCharSetLabel)); 355 _rControlList.push_back(new ODisableWrapper<ListBox>(&m_aCharSet)); 356 } 357 358 // ----------------------------------------------------------------------- 359 void OTextConnectionHelper::implInitControls(const SfxItemSet& _rSet, sal_Bool _bValid) 360 { 361 if ( !_bValid ) 362 return; 363 364 SFX_ITEMSET_GET( _rSet, pDelItem, SfxStringItem, DSID_FIELDDELIMITER, sal_True ); 365 SFX_ITEMSET_GET( _rSet, pStrItem, SfxStringItem, DSID_TEXTDELIMITER, sal_True ); 366 SFX_ITEMSET_GET( _rSet, pDecdelItem, SfxStringItem, DSID_DECIMALDELIMITER, sal_True ); 367 SFX_ITEMSET_GET( _rSet, pThodelItem, SfxStringItem, DSID_THOUSANDSDELIMITER, sal_True ); 368 SFX_ITEMSET_GET( _rSet, pExtensionItem, SfxStringItem, DSID_TEXTFILEEXTENSION, sal_True ); 369 SFX_ITEMSET_GET( _rSet, pCharsetItem, SfxStringItem, DSID_CHARSET, sal_True ); 370 371 if ( ( m_nAvailableSections & TC_EXTENSION ) != 0 ) 372 { 373 m_aOldExtension = pExtensionItem->GetValue(); 374 SetExtension( m_aOldExtension ); 375 } 376 377 if ( ( m_nAvailableSections & TC_HEADER ) != 0 ) 378 { 379 SFX_ITEMSET_GET( _rSet, pHdrItem, SfxBoolItem, DSID_TEXTFILEHEADER, sal_True ); 380 m_aRowHeader.Check( pHdrItem->GetValue() ); 381 } 382 383 if ( ( m_nAvailableSections & TC_SEPARATORS ) != 0 ) 384 { 385 SetSeparator( m_aFieldSeparator, m_aFieldSeparatorList, pDelItem->GetValue() ); 386 SetSeparator( m_aTextSeparator, m_aTextSeparatorList, pStrItem->GetValue() ); 387 m_aDecimalSeparator.SetText( pDecdelItem->GetValue() ); 388 m_aThousandsSeparator.SetText( pThodelItem->GetValue() ); 389 } 390 391 if ( ( m_nAvailableSections & TC_CHARSET ) != 0 ) 392 { 393 m_aCharSet.SelectEntryByIanaName( pCharsetItem->GetValue() ); 394 } 395 } 396 397 398 399 // ----------------------------------------------------------------------- 400 sal_Bool OTextConnectionHelper::prepareLeave() 401 { 402 LocalResourceAccess aStringResAccess(PAGE_TEXT, RSC_TABPAGE); 403 // for accessing the strings which are local to our own resource block 404 String sExtension = GetExtension(); 405 String aErrorText; 406 Control* pErrorWin = NULL; 407 // if (!m_aFieldSeparator.GetText().Len()) 408 // bug (#42168) if this line is compiled under OS2 (in a product environent) 409 // -> use a temporary variable 410 String aDelText(m_aFieldSeparator.GetText()); 411 if(!aDelText.Len()) 412 { // Kein FeldTrenner 413 aErrorText = String(ModuleRes(STR_AUTODELIMITER_MISSING)); 414 aErrorText.SearchAndReplaceAscii("#1",m_aFieldSeparatorLabel.GetText()); 415 pErrorWin = &m_aFieldSeparator; 416 } 417 else if (!m_aDecimalSeparator.GetText().Len()) 418 { // kein Decimaltrenner 419 aErrorText = String(ModuleRes(STR_AUTODELIMITER_MISSING)); 420 aErrorText.SearchAndReplaceAscii("#1",m_aDecimalSeparatorLabel.GetText()); 421 pErrorWin = &m_aDecimalSeparator; 422 } 423 else if (m_aTextSeparator.GetText() == m_aFieldSeparator.GetText()) 424 { // Feld und TextTrenner duerfen nicht gleich sein 425 aErrorText = String(ModuleRes(STR_AUTODELIMITER_MUST_DIFFER)); 426 aErrorText.SearchAndReplaceAscii("#1",m_aTextSeparatorLabel.GetText()); 427 aErrorText.SearchAndReplaceAscii("#2",m_aFieldSeparatorLabel.GetText()); 428 pErrorWin = &m_aTextSeparator; 429 } 430 else if (m_aDecimalSeparator.GetText() == m_aThousandsSeparator.GetText()) 431 { // Tausender und DecimalTrenner duerfen nicht gleich sein 432 aErrorText = String(ModuleRes(STR_AUTODELIMITER_MUST_DIFFER)); 433 aErrorText.SearchAndReplaceAscii("#1",m_aDecimalSeparatorLabel.GetText()); 434 aErrorText.SearchAndReplaceAscii("#2",m_aThousandsSeparatorLabel.GetText()); 435 pErrorWin = &m_aDecimalSeparator; 436 } 437 else if (m_aFieldSeparator.GetText() == m_aThousandsSeparator.GetText()) 438 { // Tausender und FeldTrenner duerfen nicht gleich sein 439 aErrorText = String(ModuleRes(STR_AUTODELIMITER_MUST_DIFFER)); 440 aErrorText.SearchAndReplaceAscii("#1",m_aFieldSeparatorLabel.GetText()); 441 aErrorText.SearchAndReplaceAscii("#2",m_aThousandsSeparatorLabel.GetText()); 442 pErrorWin = &m_aFieldSeparator; 443 } 444 else if (m_aFieldSeparator.GetText() == m_aDecimalSeparator.GetText()) 445 { // Zehner und FeldTrenner duerfen nicht gleich sein 446 aErrorText = String(ModuleRes(STR_AUTODELIMITER_MUST_DIFFER)); 447 aErrorText.SearchAndReplaceAscii("#1",m_aFieldSeparatorLabel.GetText()); 448 aErrorText.SearchAndReplaceAscii("#2",m_aDecimalSeparatorLabel.GetText()); 449 pErrorWin = &m_aFieldSeparator; 450 } 451 else if (m_aTextSeparator.GetText() == m_aThousandsSeparator.GetText()) 452 { // Tausender und TextTrenner duerfen nicht gleich sein 453 aErrorText = String(ModuleRes(STR_AUTODELIMITER_MUST_DIFFER)); 454 aErrorText.SearchAndReplaceAscii("#1",m_aTextSeparatorLabel.GetText()); 455 aErrorText.SearchAndReplaceAscii("#2",m_aThousandsSeparatorLabel.GetText()); 456 pErrorWin = &m_aTextSeparator; 457 } 458 else if (m_aTextSeparator.GetText() == m_aDecimalSeparator.GetText()) 459 { // Zehner und TextTrenner duerfen nicht gleich sein 460 aErrorText = String(ModuleRes(STR_AUTODELIMITER_MUST_DIFFER)); 461 aErrorText.SearchAndReplaceAscii("#1",m_aTextSeparatorLabel.GetText()); 462 aErrorText.SearchAndReplaceAscii("#2",m_aDecimalSeparatorLabel.GetText()); 463 pErrorWin = &m_aTextSeparator; 464 } 465 else if ((sExtension.Search('*') != STRING_NOTFOUND) || (sExtension.Search('?') != STRING_NOTFOUND)) 466 { 467 aErrorText = String(ModuleRes(STR_AUTONO_WILDCARDS)); 468 aErrorText.SearchAndReplaceAscii("#1",sExtension); 469 pErrorWin = &m_aETOwnExtension; 470 } 471 else 472 return sal_True; 473 ErrorBox(NULL, WB_OK, MnemonicGenerator::EraseAllMnemonicChars( aErrorText)).Execute(); 474 pErrorWin->GrabFocus(); 475 return 0; 476 } 477 478 479 // ----------------------------------------------------------------------- 480 sal_Bool OTextConnectionHelper::FillItemSet( SfxItemSet& rSet, const sal_Bool _bChangedSomething ) 481 { 482 sal_Bool bChangedSomething = _bChangedSomething; 483 484 if ( ( m_nAvailableSections & TC_EXTENSION ) != 0 ) 485 { 486 String sExtension = GetExtension(); 487 if( !m_aOldExtension.Equals( sExtension ) ) 488 { 489 rSet.Put( SfxStringItem( DSID_TEXTFILEEXTENSION, sExtension ) ); 490 bChangedSomething = sal_True; 491 } 492 } 493 494 if ( ( m_nAvailableSections & TC_HEADER ) != 0 ) 495 { 496 if( (m_aRowHeader.GetState() != m_aRowHeader.GetSavedValue()) ) 497 { 498 rSet.Put(SfxBoolItem(DSID_TEXTFILEHEADER, m_aRowHeader.IsChecked())); 499 bChangedSomething = sal_True; 500 } 501 } 502 503 if ( ( m_nAvailableSections & TC_SEPARATORS ) != 0 ) 504 { 505 if( m_aFieldSeparator.GetText() != m_aFieldSeparator.GetSavedValue() ) 506 { 507 rSet.Put( SfxStringItem(DSID_FIELDDELIMITER, GetSeparator( m_aFieldSeparator, m_aFieldSeparatorList) ) ); 508 bChangedSomething = sal_True; 509 } 510 if( m_aTextSeparator.GetText() != m_aTextSeparator.GetSavedValue() ) 511 { 512 rSet.Put( SfxStringItem(DSID_TEXTDELIMITER, GetSeparator( m_aTextSeparator, m_aTextSeparatorList) ) ); 513 bChangedSomething = sal_True; 514 } 515 516 if( m_aDecimalSeparator.GetText() != m_aDecimalSeparator.GetSavedValue() ) 517 { 518 rSet.Put( SfxStringItem(DSID_DECIMALDELIMITER, m_aDecimalSeparator.GetText().Copy(0, 1) ) ); 519 bChangedSomething = sal_True; 520 } 521 if( m_aThousandsSeparator.GetText() != m_aThousandsSeparator.GetSavedValue() ) 522 { 523 rSet.Put( SfxStringItem(DSID_THOUSANDSDELIMITER, m_aThousandsSeparator.GetText().Copy(0,1) ) ); 524 bChangedSomething = sal_True; 525 } 526 } 527 528 if ( ( m_nAvailableSections & TC_CHARSET ) != 0 ) 529 { 530 if ( m_aCharSet.StoreSelectedCharSet( rSet, DSID_CHARSET ) ) 531 bChangedSomething = sal_True; 532 } 533 534 return bChangedSomething; 535 } 536 537 538 void OTextConnectionHelper::SetExtension(const String& _rVal) 539 { 540 if (_rVal.EqualsAscii("txt")) 541 m_aRBAccessTextFiles.Check(sal_True); 542 else if (_rVal.EqualsAscii( "csv" )) 543 m_aRBAccessCSVFiles.Check(sal_True); 544 else 545 { 546 m_aRBAccessOtherFiles.Check(sal_True); 547 m_aFTExtensionExample.SetText(_rVal); 548 } 549 } 550 551 552 String OTextConnectionHelper::GetExtension() 553 { 554 String sExtension; 555 if (m_aRBAccessTextFiles.IsChecked()) 556 sExtension = String::CreateFromAscii("txt"); 557 else if (m_aRBAccessCSVFiles.IsChecked()) 558 sExtension = String::CreateFromAscii("csv"); 559 else 560 { 561 sExtension = m_aETOwnExtension.GetText(); 562 if ( sExtension.GetToken(0,'.').Equals('*') ) 563 sExtension.Erase(0,2); 564 } 565 return sExtension; 566 } 567 568 569 //------------------------------------------------------------------------ 570 String OTextConnectionHelper::GetSeparator( const ComboBox& rBox, const String& rList ) 571 { 572 sal_Unicode nTok = '\t'; 573 xub_StrLen nPos(rBox.GetEntryPos( rBox.GetText() )); 574 575 if( nPos == COMBOBOX_ENTRY_NOTFOUND ) 576 return rBox.GetText().Copy(0); 577 578 if ( !( &m_aTextSeparator == &rBox && nPos == (rBox.GetEntryCount()-1) ) ) 579 return String( 580 static_cast< sal_Unicode >( 581 rList.GetToken(((nPos*2)+1), nTok ).ToInt32())); 582 // somewhat strange ... translates for instance an "32" into " " 583 return String(); 584 } 585 586 //------------------------------------------------------------------------ 587 void OTextConnectionHelper::SetSeparator( ComboBox& rBox, const String& rList, const String& rVal ) 588 { 589 char nTok = '\t'; 590 xub_StrLen nCnt(rList.GetTokenCount( nTok )); 591 xub_StrLen i; 592 593 for( i=0 ; i<nCnt ; i+=2 ) 594 { 595 String sTVal( 596 static_cast< sal_Unicode >( 597 rList.GetToken( (i+1), nTok ).ToInt32())); 598 599 if( sTVal == rVal ) 600 { 601 rBox.SetText( rList.GetToken( i, nTok ) ); 602 break; 603 } 604 } 605 606 if ( i >= nCnt ) 607 { 608 if ( &m_aTextSeparator == &rBox && !rVal.Len() ) 609 rBox.SetText(m_aTextNone); 610 else 611 rBox.SetText( rVal.Copy(0, 1) ); 612 } 613 } 614 615 //......................................................................... 616 } // namespace dbaui 617 //......................................................................... 618