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