1*96de5490SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*96de5490SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*96de5490SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*96de5490SAndrew Rist * distributed with this work for additional information 6*96de5490SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*96de5490SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*96de5490SAndrew Rist * "License"); you may not use this file except in compliance 9*96de5490SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*96de5490SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*96de5490SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*96de5490SAndrew Rist * software distributed under the License is distributed on an 15*96de5490SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*96de5490SAndrew Rist * KIND, either express or implied. See the License for the 17*96de5490SAndrew Rist * specific language governing permissions and limitations 18*96de5490SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*96de5490SAndrew Rist *************************************************************/ 21*96de5490SAndrew Rist 22*96de5490SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_dbaccess.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #ifndef _DBAUI_DBFINDEX_HXX_ 28cdf0e10cSrcweir #include "dbfindex.hxx" 29cdf0e10cSrcweir #endif 30cdf0e10cSrcweir 31cdf0e10cSrcweir #ifndef _CONFIG_HXX 32cdf0e10cSrcweir #include <tools/config.hxx> 33cdf0e10cSrcweir #endif 34cdf0e10cSrcweir #ifndef _SFXAPP_HXX //autogen 35cdf0e10cSrcweir #include <sfx2/app.hxx> 36cdf0e10cSrcweir #endif 37cdf0e10cSrcweir #ifndef _DBAUI_MODULE_DBU_HXX_ 38cdf0e10cSrcweir #include "moduledbu.hxx" 39cdf0e10cSrcweir #endif 40cdf0e10cSrcweir #ifndef _DBU_DLG_HRC_ 41cdf0e10cSrcweir #include "dbu_dlg.hrc" 42cdf0e10cSrcweir #endif 43cdf0e10cSrcweir #ifndef _DBAUI_DBF_INDEXES_HRC_ 44cdf0e10cSrcweir #include "dbfindex.hrc" 45cdf0e10cSrcweir #endif 46cdf0e10cSrcweir #ifndef _TOOLS_DEBUG_HXX 47cdf0e10cSrcweir #include <tools/debug.hxx> 48cdf0e10cSrcweir #endif 49cdf0e10cSrcweir #ifndef _UNOTOOLS_LOCALFILEHELPER_HXX 50cdf0e10cSrcweir #include <unotools/localfilehelper.hxx> 51cdf0e10cSrcweir #endif 52cdf0e10cSrcweir #ifndef _URLOBJ_HXX 53cdf0e10cSrcweir #include <tools/urlobj.hxx> 54cdf0e10cSrcweir #endif 55cdf0e10cSrcweir #ifndef INCLUDED_SVTOOLS_PATHOPTIONS_HXX 56cdf0e10cSrcweir #include <unotools/pathoptions.hxx> 57cdf0e10cSrcweir #endif 58cdf0e10cSrcweir #ifndef _UCBHELPER_CONTENT_HXX 59cdf0e10cSrcweir #include <ucbhelper/content.hxx> 60cdf0e10cSrcweir #endif 61cdf0e10cSrcweir #ifndef SVTOOLS_FILENOTATION_HXX_ 62cdf0e10cSrcweir #include <svl/filenotation.hxx> 63cdf0e10cSrcweir #endif 64cdf0e10cSrcweir 65cdf0e10cSrcweir 66cdf0e10cSrcweir //......................................................................... 67cdf0e10cSrcweir namespace dbaui 68cdf0e10cSrcweir { 69cdf0e10cSrcweir //......................................................................... 70cdf0e10cSrcweir 71cdf0e10cSrcweir using namespace ::com::sun::star::uno; 72cdf0e10cSrcweir using namespace ::com::sun::star::ucb; 73cdf0e10cSrcweir using namespace ::svt; 74cdf0e10cSrcweir 75cdf0e10cSrcweir const ByteString aGroupIdent("dBase III"); 76cdf0e10cSrcweir 77cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////// 78cdf0e10cSrcweir // Klasse ODbaseIndexDialog 79cdf0e10cSrcweir DBG_NAME(ODbaseIndexDialog) 80cdf0e10cSrcweir //------------------------------------------------------------------------- 81cdf0e10cSrcweir ODbaseIndexDialog::ODbaseIndexDialog( Window * pParent, String aDataSrcName ) 82cdf0e10cSrcweir : ModalDialog( pParent, ModuleRes(DLG_DBASE_INDEXES) ), 83cdf0e10cSrcweir aPB_OK( this, ModuleRes( PB_OK ) ), 84cdf0e10cSrcweir aPB_CANCEL( this, ModuleRes( PB_CANCEL ) ), 85cdf0e10cSrcweir aPB_HELP( this, ModuleRes( PB_HELP ) ), 86cdf0e10cSrcweir m_FT_Tables( this, ModuleRes( FT_TABLES ) ), 87cdf0e10cSrcweir aCB_Tables( this, ModuleRes( CB_TABLES ) ), 88cdf0e10cSrcweir m_FL_Indexes( this, ModuleRes( FL_INDEXES ) ), 89cdf0e10cSrcweir m_FT_TableIndexes( this, ModuleRes( FT_TABLEINDEXES ) ), 90cdf0e10cSrcweir aLB_TableIndexes( this, ModuleRes( LB_TABLEINDEXES ) ), 91cdf0e10cSrcweir m_FT_AllIndexes( this, ModuleRes( FT_ALLINDEXES ) ), 92cdf0e10cSrcweir aLB_FreeIndexes( this, ModuleRes( LB_FREEINDEXES ) ), 93cdf0e10cSrcweir aIB_Add( this, ModuleRes( IB_ADD ) ), 94cdf0e10cSrcweir aIB_Remove( this, ModuleRes( IB_REMOVE ) ), 95cdf0e10cSrcweir aIB_AddAll( this, ModuleRes( IB_ADDALL ) ), 96cdf0e10cSrcweir aIB_RemoveAll( this, ModuleRes( IB_REMOVEALL ) ), 97cdf0e10cSrcweir m_aDSN(aDataSrcName), 98cdf0e10cSrcweir m_bCaseSensitiv(sal_True) 99cdf0e10cSrcweir { 100cdf0e10cSrcweir DBG_CTOR(ODbaseIndexDialog,NULL); 101cdf0e10cSrcweir 102cdf0e10cSrcweir aCB_Tables.SetSelectHdl( LINK(this, ODbaseIndexDialog, TableSelectHdl) ); 103cdf0e10cSrcweir aIB_Add.SetClickHdl( LINK(this, ODbaseIndexDialog, AddClickHdl) ); 104cdf0e10cSrcweir aIB_Remove.SetClickHdl( LINK(this, ODbaseIndexDialog, RemoveClickHdl) ); 105cdf0e10cSrcweir aIB_AddAll.SetClickHdl( LINK(this, ODbaseIndexDialog, AddAllClickHdl) ); 106cdf0e10cSrcweir aIB_RemoveAll.SetClickHdl( LINK(this, ODbaseIndexDialog, RemoveAllClickHdl) ); 107cdf0e10cSrcweir aPB_OK.SetClickHdl( LINK(this, ODbaseIndexDialog, OKClickHdl) ); 108cdf0e10cSrcweir 109cdf0e10cSrcweir aLB_FreeIndexes.SetSelectHdl( LINK(this, ODbaseIndexDialog, OnListEntrySelected) ); 110cdf0e10cSrcweir aLB_TableIndexes.SetSelectHdl( LINK(this, ODbaseIndexDialog, OnListEntrySelected) ); 111cdf0e10cSrcweir 112cdf0e10cSrcweir aCB_Tables.SetDropDownLineCount(8); 113cdf0e10cSrcweir Init(); 114cdf0e10cSrcweir SetCtrls(); 115cdf0e10cSrcweir FreeResource(); 116cdf0e10cSrcweir 117cdf0e10cSrcweir // set Hi contrast bitmaps 118cdf0e10cSrcweir aIB_Add.SetModeImage( ModuleRes(IMG_ONE_LEFT_H),BMP_COLOR_HIGHCONTRAST); 119cdf0e10cSrcweir aIB_AddAll.SetModeImage( ModuleRes(IMG_ALL_LEFT_H),BMP_COLOR_HIGHCONTRAST); 120cdf0e10cSrcweir aIB_Remove.SetModeImage( ModuleRes(IMG_ONE_RIGHT_H),BMP_COLOR_HIGHCONTRAST); 121cdf0e10cSrcweir aIB_RemoveAll.SetModeImage( ModuleRes(IMG_ALL_RIGHT_H),BMP_COLOR_HIGHCONTRAST); 122cdf0e10cSrcweir } 123cdf0e10cSrcweir 124cdf0e10cSrcweir //------------------------------------------------------------------------- 125cdf0e10cSrcweir ODbaseIndexDialog::~ODbaseIndexDialog() 126cdf0e10cSrcweir { 127cdf0e10cSrcweir 128cdf0e10cSrcweir DBG_DTOR(ODbaseIndexDialog,NULL); 129cdf0e10cSrcweir } 130cdf0e10cSrcweir 131cdf0e10cSrcweir //------------------------------------------------------------------------- 132cdf0e10cSrcweir sal_Bool ODbaseIndexDialog::GetTable(const String& _rName, TableInfoListIterator& _rPosition) 133cdf0e10cSrcweir { 134cdf0e10cSrcweir for ( _rPosition = m_aTableInfoList.begin(); 135cdf0e10cSrcweir _rPosition != m_aTableInfoList.end(); 136cdf0e10cSrcweir ++_rPosition 137cdf0e10cSrcweir ) 138cdf0e10cSrcweir { 139cdf0e10cSrcweir if (m_bCaseSensitiv) 140cdf0e10cSrcweir { 141cdf0e10cSrcweir if (_rPosition->aTableName.Equals(_rName)) 142cdf0e10cSrcweir return sal_True; 143cdf0e10cSrcweir } 144cdf0e10cSrcweir else 145cdf0e10cSrcweir { 146cdf0e10cSrcweir if (_rPosition->aTableName.EqualsIgnoreCaseAscii(_rName)) 147cdf0e10cSrcweir return sal_True; 148cdf0e10cSrcweir } 149cdf0e10cSrcweir } 150cdf0e10cSrcweir return sal_False; 151cdf0e10cSrcweir } 152cdf0e10cSrcweir 153cdf0e10cSrcweir //------------------------------------------------------------------------- 154cdf0e10cSrcweir void ODbaseIndexDialog::checkButtons() 155cdf0e10cSrcweir { 156cdf0e10cSrcweir aIB_Add.Enable(0 != aLB_FreeIndexes.GetSelectEntryCount()); 157cdf0e10cSrcweir aIB_AddAll.Enable(0 != aLB_FreeIndexes.GetEntryCount()); 158cdf0e10cSrcweir 159cdf0e10cSrcweir aIB_Remove.Enable(0 != aLB_TableIndexes.GetSelectEntryCount()); 160cdf0e10cSrcweir aIB_RemoveAll.Enable(0 != aLB_TableIndexes.GetEntryCount()); 161cdf0e10cSrcweir } 162cdf0e10cSrcweir 163cdf0e10cSrcweir //------------------------------------------------------------------------- 164cdf0e10cSrcweir OTableIndex ODbaseIndexDialog::implRemoveIndex(const String& _rName, TableIndexList& _rList, ListBox& _rDisplay, sal_Bool _bMustExist) 165cdf0e10cSrcweir { 166cdf0e10cSrcweir OTableIndex aReturn; 167cdf0e10cSrcweir 168cdf0e10cSrcweir sal_Int32 nPos = 0; 169cdf0e10cSrcweir 170cdf0e10cSrcweir TableIndexListIterator aSearch; 171cdf0e10cSrcweir for ( aSearch = _rList.begin(); 172cdf0e10cSrcweir aSearch != _rList.end(); 173cdf0e10cSrcweir ++aSearch, ++nPos 174cdf0e10cSrcweir ) 175cdf0e10cSrcweir { 176cdf0e10cSrcweir if ( m_bCaseSensitiv ? aSearch->GetIndexFileName().Equals(_rName) : aSearch->GetIndexFileName().EqualsIgnoreCaseAscii(_rName) ) 177cdf0e10cSrcweir { 178cdf0e10cSrcweir aReturn = *aSearch; 179cdf0e10cSrcweir 180cdf0e10cSrcweir _rList.erase(aSearch); 181cdf0e10cSrcweir _rDisplay.RemoveEntry( _rName ); 182cdf0e10cSrcweir 183cdf0e10cSrcweir // adjust selection if necessary 184cdf0e10cSrcweir if ((sal_uInt32)nPos == _rList.size()) 185cdf0e10cSrcweir _rDisplay.SelectEntryPos((sal_uInt16)nPos-1); 186cdf0e10cSrcweir else 187cdf0e10cSrcweir _rDisplay.SelectEntryPos((sal_uInt16)nPos); 188cdf0e10cSrcweir 189cdf0e10cSrcweir break; 190cdf0e10cSrcweir } 191cdf0e10cSrcweir } 192cdf0e10cSrcweir 193cdf0e10cSrcweir (void)_bMustExist; 194cdf0e10cSrcweir DBG_ASSERT(!_bMustExist || (aSearch != _rList.end()), "ODbaseIndexDialog::implRemoveIndex : did not find the index!"); 195cdf0e10cSrcweir return aReturn; 196cdf0e10cSrcweir } 197cdf0e10cSrcweir 198cdf0e10cSrcweir //------------------------------------------------------------------------- 199cdf0e10cSrcweir void ODbaseIndexDialog::implInsertIndex(const OTableIndex& _rIndex, TableIndexList& _rList, ListBox& _rDisplay) 200cdf0e10cSrcweir { 201cdf0e10cSrcweir _rList.push_front( _rIndex ); 202cdf0e10cSrcweir _rDisplay.InsertEntry( _rIndex.GetIndexFileName() ); 203cdf0e10cSrcweir _rDisplay.SelectEntryPos(0); 204cdf0e10cSrcweir } 205cdf0e10cSrcweir 206cdf0e10cSrcweir //------------------------------------------------------------------------- 207cdf0e10cSrcweir OTableIndex ODbaseIndexDialog::RemoveTableIndex( const String& _rTableName, const String& _rIndexName, sal_Bool _bMustExist ) 208cdf0e10cSrcweir { 209cdf0e10cSrcweir OTableIndex aReturn; 210cdf0e10cSrcweir 211cdf0e10cSrcweir // does the table exist ? 212cdf0e10cSrcweir TableInfoListIterator aTablePos; 213cdf0e10cSrcweir if (!GetTable(_rTableName, aTablePos)) 214cdf0e10cSrcweir return aReturn; 215cdf0e10cSrcweir 216cdf0e10cSrcweir return implRemoveIndex(_rIndexName, aTablePos->aIndexList, aLB_TableIndexes, _bMustExist); 217cdf0e10cSrcweir } 218cdf0e10cSrcweir 219cdf0e10cSrcweir //------------------------------------------------------------------------- 220cdf0e10cSrcweir void ODbaseIndexDialog::InsertTableIndex( const String& _rTableName, const OTableIndex& _rIndex) 221cdf0e10cSrcweir { 222cdf0e10cSrcweir TableInfoListIterator aTablePos; 223cdf0e10cSrcweir if (!GetTable(_rTableName, aTablePos)) 224cdf0e10cSrcweir return; 225cdf0e10cSrcweir 226cdf0e10cSrcweir implInsertIndex(_rIndex, aTablePos->aIndexList, aLB_TableIndexes); 227cdf0e10cSrcweir } 228cdf0e10cSrcweir 229cdf0e10cSrcweir //------------------------------------------------------------------------- 230cdf0e10cSrcweir IMPL_LINK( ODbaseIndexDialog, OKClickHdl, PushButton*, /*pButton*/ ) 231cdf0e10cSrcweir { 232cdf0e10cSrcweir // let all tables write their INF file 233cdf0e10cSrcweir 234cdf0e10cSrcweir for ( ConstTableInfoListIterator aLoop = m_aTableInfoList.begin(); 235cdf0e10cSrcweir aLoop != m_aTableInfoList.end(); 236cdf0e10cSrcweir ++aLoop 237cdf0e10cSrcweir ) 238cdf0e10cSrcweir aLoop->WriteInfFile(m_aDSN); 239cdf0e10cSrcweir 240cdf0e10cSrcweir EndDialog(); 241cdf0e10cSrcweir return 0; 242cdf0e10cSrcweir } 243cdf0e10cSrcweir 244cdf0e10cSrcweir //------------------------------------------------------------------------- 245cdf0e10cSrcweir IMPL_LINK( ODbaseIndexDialog, AddClickHdl, PushButton*, /*pButton*/ ) 246cdf0e10cSrcweir { 247cdf0e10cSrcweir String aSelection = aLB_FreeIndexes.GetSelectEntry(); 248cdf0e10cSrcweir String aTableName = aCB_Tables.GetText(); 249cdf0e10cSrcweir OTableIndex aIndex = RemoveFreeIndex( aSelection, sal_True ); 250cdf0e10cSrcweir InsertTableIndex( aTableName, aIndex ); 251cdf0e10cSrcweir 252cdf0e10cSrcweir checkButtons(); 253cdf0e10cSrcweir return 0; 254cdf0e10cSrcweir } 255cdf0e10cSrcweir 256cdf0e10cSrcweir //------------------------------------------------------------------------- 257cdf0e10cSrcweir IMPL_LINK( ODbaseIndexDialog, RemoveClickHdl, PushButton*, /*pButton*/ ) 258cdf0e10cSrcweir { 259cdf0e10cSrcweir String aSelection = aLB_TableIndexes.GetSelectEntry(); 260cdf0e10cSrcweir String aTableName = aCB_Tables.GetText(); 261cdf0e10cSrcweir OTableIndex aIndex = RemoveTableIndex( aTableName, aSelection, sal_True ); 262cdf0e10cSrcweir InsertFreeIndex( aIndex ); 263cdf0e10cSrcweir 264cdf0e10cSrcweir checkButtons(); 265cdf0e10cSrcweir return 0; 266cdf0e10cSrcweir } 267cdf0e10cSrcweir 268cdf0e10cSrcweir //------------------------------------------------------------------------- 269cdf0e10cSrcweir IMPL_LINK( ODbaseIndexDialog, AddAllClickHdl, PushButton*, /*pButton*/ ) 270cdf0e10cSrcweir { 271cdf0e10cSrcweir sal_uInt16 nCnt = aLB_FreeIndexes.GetEntryCount(); 272cdf0e10cSrcweir String aTableName = aCB_Tables.GetText(); 273cdf0e10cSrcweir String aEntry; 274cdf0e10cSrcweir 275cdf0e10cSrcweir for( sal_uInt16 nPos = 0; nPos < nCnt; ++nPos ) 276cdf0e10cSrcweir InsertTableIndex( aTableName, RemoveFreeIndex( aLB_FreeIndexes.GetEntry(0), sal_True ) ); 277cdf0e10cSrcweir 278cdf0e10cSrcweir checkButtons(); 279cdf0e10cSrcweir return 0; 280cdf0e10cSrcweir } 281cdf0e10cSrcweir 282cdf0e10cSrcweir //------------------------------------------------------------------------- 283cdf0e10cSrcweir IMPL_LINK( ODbaseIndexDialog, RemoveAllClickHdl, PushButton*, /*pButton*/ ) 284cdf0e10cSrcweir { 285cdf0e10cSrcweir sal_uInt16 nCnt = aLB_TableIndexes.GetEntryCount(); 286cdf0e10cSrcweir String aTableName = aCB_Tables.GetText(); 287cdf0e10cSrcweir String aEntry; 288cdf0e10cSrcweir 289cdf0e10cSrcweir for( sal_uInt16 nPos = 0; nPos < nCnt; ++nPos ) 290cdf0e10cSrcweir InsertFreeIndex( RemoveTableIndex( aTableName, aLB_TableIndexes.GetEntry(0), sal_True ) ); 291cdf0e10cSrcweir 292cdf0e10cSrcweir checkButtons(); 293cdf0e10cSrcweir return 0; 294cdf0e10cSrcweir } 295cdf0e10cSrcweir 296cdf0e10cSrcweir //------------------------------------------------------------------------- 297cdf0e10cSrcweir IMPL_LINK( ODbaseIndexDialog, OnListEntrySelected, ListBox*, /*NOTINTERESTEDIN*/ ) 298cdf0e10cSrcweir { 299cdf0e10cSrcweir checkButtons(); 300cdf0e10cSrcweir return 0; 301cdf0e10cSrcweir } 302cdf0e10cSrcweir 303cdf0e10cSrcweir //------------------------------------------------------------------------- 304cdf0e10cSrcweir IMPL_LINK( ODbaseIndexDialog, TableSelectHdl, ComboBox*, pComboBox ) 305cdf0e10cSrcweir { 306cdf0e10cSrcweir // search the table 307cdf0e10cSrcweir TableInfoListIterator aTablePos; 308cdf0e10cSrcweir if (!GetTable(pComboBox->GetText(), aTablePos)) 309cdf0e10cSrcweir return 0L; 310cdf0e10cSrcweir 311cdf0e10cSrcweir // fill the listbox for the indexes 312cdf0e10cSrcweir aLB_TableIndexes.Clear(); 313cdf0e10cSrcweir for ( ConstTableIndexListIterator aLoop = aTablePos->aIndexList.begin(); 314cdf0e10cSrcweir aLoop != aTablePos->aIndexList.end(); 315cdf0e10cSrcweir ++aLoop 316cdf0e10cSrcweir ) 317cdf0e10cSrcweir aLB_TableIndexes.InsertEntry( aLoop->GetIndexFileName() ); 318cdf0e10cSrcweir 319cdf0e10cSrcweir if ( aTablePos->aIndexList.size() ) 320cdf0e10cSrcweir aLB_TableIndexes.SelectEntryPos(0); 321cdf0e10cSrcweir 322cdf0e10cSrcweir checkButtons(); 323cdf0e10cSrcweir return 0; 324cdf0e10cSrcweir } 325cdf0e10cSrcweir 326cdf0e10cSrcweir //------------------------------------------------------------------------- 327cdf0e10cSrcweir void ODbaseIndexDialog::Init() 328cdf0e10cSrcweir { 329cdf0e10cSrcweir aPB_OK.Disable(); 330cdf0e10cSrcweir m_FL_Indexes.Disable(); 331cdf0e10cSrcweir m_FT_TableIndexes.Disable(); 332cdf0e10cSrcweir aLB_TableIndexes.Disable(); 333cdf0e10cSrcweir m_FT_AllIndexes.Disable(); 334cdf0e10cSrcweir aLB_FreeIndexes.Disable(); 335cdf0e10cSrcweir aIB_Add.Disable(); 336cdf0e10cSrcweir aIB_Remove.Disable(); 337cdf0e10cSrcweir aIB_AddAll.Disable(); 338cdf0e10cSrcweir aIB_RemoveAll.Disable(); 339cdf0e10cSrcweir 340cdf0e10cSrcweir /////////////////////////////////////////////////////////////////////////// 341cdf0e10cSrcweir // Alle Indizes werden erst einmal zur Liste der freien Indizes hinzugefuegt. 342cdf0e10cSrcweir // Dann wird fuer jede Tabelle in der Inf-Datei nachgeschaut, welche Indizes sie besitzt. 343cdf0e10cSrcweir // Diese Indizes werden aus der Liste der freien Indizes entfernt 344cdf0e10cSrcweir // und in die Indexliste der Tabelle eingetragen 345cdf0e10cSrcweir 346cdf0e10cSrcweir /////////////////////////////////////////////////////////////////////////// 347cdf0e10cSrcweir // if the string does not contain a path, cut the string 348cdf0e10cSrcweir INetURLObject aURL; 349cdf0e10cSrcweir aURL.SetSmartProtocol(INET_PROT_FILE); 350cdf0e10cSrcweir { 351cdf0e10cSrcweir SvtPathOptions aPathOptions; 352cdf0e10cSrcweir m_aDSN = aPathOptions.SubstituteVariable(m_aDSN); 353cdf0e10cSrcweir } 354cdf0e10cSrcweir aURL.SetSmartURL(m_aDSN); 355cdf0e10cSrcweir 356cdf0e10cSrcweir 357cdf0e10cSrcweir // String aFileName = aURL.PathToFileName(); 358cdf0e10cSrcweir m_aDSN = aURL.GetMainURL(INetURLObject::NO_DECODE); 359cdf0e10cSrcweir ::ucbhelper::Content aFile; 360cdf0e10cSrcweir sal_Bool bFolder=sal_True; 361cdf0e10cSrcweir try 362cdf0e10cSrcweir { 363cdf0e10cSrcweir aFile = ::ucbhelper::Content(m_aDSN,Reference< ::com::sun::star::ucb::XCommandEnvironment >()); 364cdf0e10cSrcweir bFolder = aFile.isFolder(); 365cdf0e10cSrcweir } 366cdf0e10cSrcweir catch(Exception&) 367cdf0e10cSrcweir { 368cdf0e10cSrcweir return; 369cdf0e10cSrcweir } 370cdf0e10cSrcweir 371cdf0e10cSrcweir /////////////////////////////////////////////////////////////////////////// 372cdf0e10cSrcweir // first assume for all indexes they're free 373cdf0e10cSrcweir 374cdf0e10cSrcweir Sequence< ::rtl::OUString> aFolderContent( ::utl::LocalFileHelper::GetFolderContents(m_aDSN,bFolder)); 375cdf0e10cSrcweir 376cdf0e10cSrcweir ::rtl::OUString aIndexExt = ::rtl::OUString::createFromAscii("ndx"); 377cdf0e10cSrcweir ::rtl::OUString aTableExt = ::rtl::OUString::createFromAscii("dbf"); 378cdf0e10cSrcweir 379cdf0e10cSrcweir ::std::vector< String > aUsedIndexes; 380cdf0e10cSrcweir 381cdf0e10cSrcweir String aExt; 382cdf0e10cSrcweir const ::rtl::OUString *pBegin = aFolderContent.getConstArray(); 383cdf0e10cSrcweir const ::rtl::OUString *pEnd = pBegin + aFolderContent.getLength(); 384cdf0e10cSrcweir aURL.SetSmartProtocol(INET_PROT_FILE); 385cdf0e10cSrcweir for(;pBegin != pEnd;++pBegin) 386cdf0e10cSrcweir { 387cdf0e10cSrcweir String aName; 388cdf0e10cSrcweir ::utl::LocalFileHelper::ConvertURLToPhysicalName(pBegin->getStr(),aName); 389cdf0e10cSrcweir aURL.SetSmartURL(aName); 390cdf0e10cSrcweir aExt = aURL.getExtension(); 391cdf0e10cSrcweir if(aExt == aIndexExt.getStr()) 392cdf0e10cSrcweir { 393cdf0e10cSrcweir m_aFreeIndexList.push_back( OTableIndex(aURL.getName()) ); 394cdf0e10cSrcweir } 395cdf0e10cSrcweir else if(aExt == aTableExt.getStr()) 396cdf0e10cSrcweir { 397cdf0e10cSrcweir m_aTableInfoList.push_back( OTableInfo(aURL.getName()) ); 398cdf0e10cSrcweir OTableInfo& rTabInfo = m_aTableInfoList.back(); 399cdf0e10cSrcweir 400cdf0e10cSrcweir // open the INF file 401cdf0e10cSrcweir aURL.setExtension(String::CreateFromAscii("inf")); 402cdf0e10cSrcweir OFileNotation aTransformer(aURL.GetURLNoPass(), OFileNotation::N_URL); 403cdf0e10cSrcweir Config aInfFile( aTransformer.get(OFileNotation::N_SYSTEM) ); 404cdf0e10cSrcweir aInfFile.SetGroup( aGroupIdent ); 405cdf0e10cSrcweir 406cdf0e10cSrcweir /////////////////////////////////////////////////////////////////////////// 407cdf0e10cSrcweir // fill the indexes list 408cdf0e10cSrcweir ByteString aNDX; 409cdf0e10cSrcweir sal_uInt16 nKeyCnt = aInfFile.GetKeyCount(); 410cdf0e10cSrcweir ByteString aKeyName; 411cdf0e10cSrcweir String aEntry; 412cdf0e10cSrcweir 413cdf0e10cSrcweir for( sal_uInt16 nKey = 0; nKey < nKeyCnt; nKey++ ) 414cdf0e10cSrcweir { 415cdf0e10cSrcweir // does the key point to an index file ? 416cdf0e10cSrcweir aKeyName = aInfFile.GetKeyName( nKey ); 417cdf0e10cSrcweir aNDX = aKeyName.Copy(0,3); 418cdf0e10cSrcweir 419cdf0e10cSrcweir // yes -> add to the tables index list 420cdf0e10cSrcweir if (aNDX == "NDX" ) 421cdf0e10cSrcweir { 422cdf0e10cSrcweir aEntry = String(aInfFile.ReadKey(aKeyName), gsl_getSystemTextEncoding()); 423cdf0e10cSrcweir rTabInfo.aIndexList.push_back( OTableIndex( aEntry ) ); 424cdf0e10cSrcweir 425cdf0e10cSrcweir // and remove it from the free index list 426cdf0e10cSrcweir aUsedIndexes.push_back(aEntry); 427cdf0e10cSrcweir // do this later below. We may not have encountered the index file, yet, thus we may not 428cdf0e10cSrcweir // know the index as beeing free, yet 429cdf0e10cSrcweir } 430cdf0e10cSrcweir 431cdf0e10cSrcweir } 432cdf0e10cSrcweir } 433cdf0e10cSrcweir } 434cdf0e10cSrcweir 435cdf0e10cSrcweir for ( ::std::vector< String >::const_iterator aUsedIndex = aUsedIndexes.begin(); 436cdf0e10cSrcweir aUsedIndex != aUsedIndexes.end(); 437cdf0e10cSrcweir ++aUsedIndex 438cdf0e10cSrcweir ) 439cdf0e10cSrcweir RemoveFreeIndex( *aUsedIndex, sal_False ); 440cdf0e10cSrcweir 441cdf0e10cSrcweir if (m_aTableInfoList.size()) 442cdf0e10cSrcweir { 443cdf0e10cSrcweir aPB_OK.Enable(); 444cdf0e10cSrcweir m_FL_Indexes.Enable(); 445cdf0e10cSrcweir m_FT_TableIndexes.Enable(); 446cdf0e10cSrcweir aLB_TableIndexes.Enable(); 447cdf0e10cSrcweir m_FT_AllIndexes.Enable(); 448cdf0e10cSrcweir aLB_FreeIndexes.Enable(); 449cdf0e10cSrcweir } 450cdf0e10cSrcweir 451cdf0e10cSrcweir checkButtons(); 452cdf0e10cSrcweir } 453cdf0e10cSrcweir 454cdf0e10cSrcweir //------------------------------------------------------------------------- 455cdf0e10cSrcweir void ODbaseIndexDialog::SetCtrls() 456cdf0e10cSrcweir { 457cdf0e10cSrcweir // ComboBox Tabellen 458cdf0e10cSrcweir for ( ConstTableInfoListIterator aLoop = m_aTableInfoList.begin(); 459cdf0e10cSrcweir aLoop != m_aTableInfoList.end(); 460cdf0e10cSrcweir ++aLoop 461cdf0e10cSrcweir ) 462cdf0e10cSrcweir aCB_Tables.InsertEntry( aLoop->aTableName ); 463cdf0e10cSrcweir 464cdf0e10cSrcweir // Den ersten Datensatz ins Edit stellen 465cdf0e10cSrcweir if( m_aTableInfoList.size() ) 466cdf0e10cSrcweir { 467cdf0e10cSrcweir const OTableInfo& rTabInfo = m_aTableInfoList.front(); 468cdf0e10cSrcweir aCB_Tables.SetText( rTabInfo.aTableName ); 469cdf0e10cSrcweir 470cdf0e10cSrcweir // ListBox der Tabellenindizes aufbauen 471cdf0e10cSrcweir for ( ConstTableIndexListIterator aIndex = rTabInfo.aIndexList.begin(); 472cdf0e10cSrcweir aIndex != rTabInfo.aIndexList.end(); 473cdf0e10cSrcweir ++aIndex 474cdf0e10cSrcweir ) 475cdf0e10cSrcweir aLB_TableIndexes.InsertEntry( aIndex->GetIndexFileName() ); 476cdf0e10cSrcweir 477cdf0e10cSrcweir if( rTabInfo.aIndexList.size() ) 478cdf0e10cSrcweir aLB_TableIndexes.SelectEntryPos( 0 ); 479cdf0e10cSrcweir 480cdf0e10cSrcweir } 481cdf0e10cSrcweir 482cdf0e10cSrcweir // ListBox freie Indizes 483cdf0e10cSrcweir for ( ConstTableIndexListIterator aFree = m_aFreeIndexList.begin(); 484cdf0e10cSrcweir aFree != m_aFreeIndexList.end(); 485cdf0e10cSrcweir ++aFree 486cdf0e10cSrcweir ) 487cdf0e10cSrcweir aLB_FreeIndexes.InsertEntry( aFree->GetIndexFileName() ); 488cdf0e10cSrcweir 489cdf0e10cSrcweir if( m_aFreeIndexList.size() ) 490cdf0e10cSrcweir aLB_FreeIndexes.SelectEntryPos( 0 ); 491cdf0e10cSrcweir 492cdf0e10cSrcweir 493cdf0e10cSrcweir TableSelectHdl(&aCB_Tables); 494cdf0e10cSrcweir checkButtons(); 495cdf0e10cSrcweir } 496cdf0e10cSrcweir 497cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////// 498cdf0e10cSrcweir // Klasse OTableInfo 499cdf0e10cSrcweir //------------------------------------------------------------------------- 500cdf0e10cSrcweir void OTableInfo::WriteInfFile( const String& rDSN ) const 501cdf0e10cSrcweir { 502cdf0e10cSrcweir // INF-Datei oeffnen 503cdf0e10cSrcweir INetURLObject aURL; 504cdf0e10cSrcweir aURL.SetSmartProtocol(INET_PROT_FILE); 505cdf0e10cSrcweir String aDsn = rDSN; 506cdf0e10cSrcweir { 507cdf0e10cSrcweir SvtPathOptions aPathOptions; 508cdf0e10cSrcweir aDsn = aPathOptions.SubstituteVariable(aDsn); 509cdf0e10cSrcweir } 510cdf0e10cSrcweir aURL.SetSmartURL(aDsn); 511cdf0e10cSrcweir aURL.Append(aTableName); 512cdf0e10cSrcweir aURL.setExtension(String::CreateFromAscii("inf")); 513cdf0e10cSrcweir 514cdf0e10cSrcweir OFileNotation aTransformer(aURL.GetURLNoPass(), OFileNotation::N_URL); 515cdf0e10cSrcweir Config aInfFile( aTransformer.get(OFileNotation::N_SYSTEM) ); 516cdf0e10cSrcweir aInfFile.SetGroup( aGroupIdent ); 517cdf0e10cSrcweir 518cdf0e10cSrcweir // Erst einmal alle Tabellenindizes loeschen 519cdf0e10cSrcweir ByteString aNDX; 520cdf0e10cSrcweir sal_uInt16 nKeyCnt = aInfFile.GetKeyCount(); 521cdf0e10cSrcweir ByteString aKeyName; 522cdf0e10cSrcweir ByteString aEntry; 523cdf0e10cSrcweir sal_uInt16 nKey = 0; 524cdf0e10cSrcweir 525cdf0e10cSrcweir while( nKey < nKeyCnt ) 526cdf0e10cSrcweir { 527cdf0e10cSrcweir // Verweist der Key auf ein Indexfile?... 528cdf0e10cSrcweir aKeyName = aInfFile.GetKeyName( nKey ); 529cdf0e10cSrcweir aNDX = aKeyName.Copy(0,3); 530cdf0e10cSrcweir 531cdf0e10cSrcweir //...wenn ja, Indexfile loeschen, nKey steht dann auf nachfolgendem Key 532cdf0e10cSrcweir if( aNDX == "NDX" ) 533cdf0e10cSrcweir { 534cdf0e10cSrcweir aInfFile.DeleteKey(aKeyName); 535cdf0e10cSrcweir nKeyCnt--; 536cdf0e10cSrcweir } 537cdf0e10cSrcweir else 538cdf0e10cSrcweir nKey++; 539cdf0e10cSrcweir 540cdf0e10cSrcweir } 541cdf0e10cSrcweir 542cdf0e10cSrcweir // Jetzt alle gespeicherten Indizes hinzufuegen 543cdf0e10cSrcweir sal_uInt16 nPos = 0; 544cdf0e10cSrcweir for ( ConstTableIndexListIterator aIndex = aIndexList.begin(); 545cdf0e10cSrcweir aIndex != aIndexList.end(); 546cdf0e10cSrcweir ++aIndex, ++nPos 547cdf0e10cSrcweir ) 548cdf0e10cSrcweir { 549cdf0e10cSrcweir aKeyName = "NDX"; 550cdf0e10cSrcweir if( nPos > 0 ) // Erster Index erhaelt keine Ziffer 551cdf0e10cSrcweir aKeyName += ByteString::CreateFromInt32( nPos ); 552cdf0e10cSrcweir aInfFile.WriteKey( aKeyName, ByteString(aIndex->GetIndexFileName(), gsl_getSystemTextEncoding()) ); 553cdf0e10cSrcweir } 554cdf0e10cSrcweir 555cdf0e10cSrcweir aInfFile.Flush(); 556cdf0e10cSrcweir 557cdf0e10cSrcweir // Falls nur noch [dbase] in INF-File steht, Datei loeschen 558cdf0e10cSrcweir if(!nPos) 559cdf0e10cSrcweir { 560cdf0e10cSrcweir try 561cdf0e10cSrcweir { 562cdf0e10cSrcweir ::ucbhelper::Content aContent(aURL.GetURLNoPass(),Reference<XCommandEnvironment>()); 563cdf0e10cSrcweir aContent.executeCommand( rtl::OUString::createFromAscii( "delete" ),makeAny( sal_Bool( sal_True ) ) ); 564cdf0e10cSrcweir } 565cdf0e10cSrcweir catch (const Exception& e ) 566cdf0e10cSrcweir { 567cdf0e10cSrcweir (void)e; // make compiler happy 568cdf0e10cSrcweir // simply silent this. The strange algorithm here does a lot of things even if no files at all were 569cdf0e10cSrcweir // created or accessed, so it's possible that the file we're trying to delete does not even exist, 570cdf0e10cSrcweir // and this is a valid condition. 571cdf0e10cSrcweir // 2003-05-15 - #109677# - fs@openoffice.org 572cdf0e10cSrcweir } 573cdf0e10cSrcweir } 574cdf0e10cSrcweir } 575cdf0e10cSrcweir 576cdf0e10cSrcweir //......................................................................... 577cdf0e10cSrcweir } // namespace dbaui 578cdf0e10cSrcweir //......................................................................... 579cdf0e10cSrcweir 580