| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_sot.hxx" |
| |
| #include<tools/list.hxx> |
| #include<tools/stream.hxx> |
| #include<tools/string.hxx> |
| #include<tools/rtti.hxx> |
| #include<sot/exchange.hxx> |
| #include<sot/filelist.hxx> |
| #include <osl/thread.h> |
| |
| TYPEINIT1_AUTOFACTORY( FileList, SvDataCopyStream ); |
| |
| // String-Liste zum Speichern der Namen deklarieren |
| DECLARE_LIST( FileStringList, String* ) |
| |
| |
| /************************************************************************* |
| |* |
| |* FileList - Ctor/Dtor |
| |* |
| \*************************************************************************/ |
| |
| FileList::FileList() |
| { |
| pStrList = new FileStringList(); |
| } |
| |
| FileList::~FileList() |
| { |
| ClearAll(); |
| } |
| |
| void FileList::ClearAll( void ) |
| { |
| // Strings in der Liste loeschen |
| sal_uLong nCount = pStrList->Count(); |
| for( sal_uLong i = 0 ; i < nCount ; i++ ) |
| delete pStrList->GetObject( i ); |
| |
| // Liste loeschen |
| delete pStrList; |
| } |
| |
| /************************************************************************* |
| |* |
| |* FileList - Zuweisungsoperator |
| |* |
| \*************************************************************************/ |
| |
| FileList& FileList::operator=( const FileList& rFileList ) |
| { |
| // Liste duplizieren |
| *pStrList = *rFileList.pStrList; |
| |
| // Strings in der Liste kopieren |
| sal_uLong nCount = pStrList->Count(); |
| for( sal_uLong i = 0 ; i < nCount ; i++ ) |
| pStrList->Replace( new String( *rFileList.pStrList->GetObject( i ) ), i ); |
| |
| return *this; |
| } |
| |
| /************************************************************************* |
| |* |
| |* FileList::GetFormatName() |
| |* |
| \*************************************************************************/ |
| |
| sal_uLong FileList::GetFormat() |
| { |
| return FORMAT_FILE_LIST; |
| } |
| |
| /****************************************************************************** |
| |* |
| |* virtuelle SvData-Methoden |
| |* |
| \******************************************************************************/ |
| |
| void FileList::Load( SvStream& rIStm ) |
| { |
| rIStm >> *this; |
| } |
| |
| void FileList::Save( SvStream& rOStm ) |
| { |
| rOStm << *this; |
| } |
| |
| void FileList::Assign( const SvDataCopyStream& rCopyStream ) |
| { |
| *this = (const FileList&)rCopyStream; |
| } |
| |
| /****************************************************************************** |
| |* |
| |* Stream-Operatoren |
| |* |
| \******************************************************************************/ |
| |
| /* |
| * NOTE: to correctly handle this Protocol with Unicode, native Win32 must be called: |
| * e.g. DropQueryFile |
| */ |
| |
| SvStream& operator<<( SvStream& rOStm, const FileList& /*rFileList*/ ) |
| { |
| OSL_ENSURE(false, "Not implemented!"); |
| return rOStm; |
| } |
| |
| /* #i28176# |
| The Windows clipboard bridge now provides a double '\0' |
| terminated list of file names for format SOT_FORMAT_FILE_LIST |
| instead of the original Windows Sv_DROPFILES structure. All strings |
| in this list are UTF16 strings. Shell link files will be already |
| resolved by the Windows clipboard bridge.*/ |
| SvStream& operator>>( SvStream& rIStm, FileList& rFileList ) |
| { |
| rFileList.ClearAll(); |
| rFileList.pStrList = new FileStringList(); |
| |
| String aStr; |
| sal_uInt16 c; |
| |
| while (!rIStm.IsEof()) |
| { |
| aStr.Erase(); |
| |
| // read first character of filepath; c==0 > reach end of stream |
| rIStm >> c; |
| if (!c) |
| break; |
| |
| // read string till c==0 |
| while (c && !rIStm.IsEof()) |
| { |
| aStr += (sal_Unicode)c; |
| rIStm >> c; |
| } |
| |
| // append the filepath |
| rFileList.AppendFile(aStr); |
| } |
| return rIStm; |
| } |
| |
| /****************************************************************************** |
| |* |
| |* Liste fuellen/abfragen |
| |* |
| \******************************************************************************/ |
| |
| void FileList::AppendFile( const String& rStr ) |
| { |
| pStrList->Insert( new String( rStr ) , pStrList->Count() ); |
| } |
| |
| String FileList::GetFile( sal_uLong i ) const |
| { |
| String aStr; |
| if( i < pStrList->Count() ) |
| aStr = *pStrList->GetObject( i ); |
| return aStr; |
| } |
| |
| sal_uLong FileList::Count( void ) const |
| { |
| return pStrList->Count(); |
| } |
| |