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