1*046d9d1fSAndrew Rist /**************************************************************
2*046d9d1fSAndrew Rist *
3*046d9d1fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*046d9d1fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*046d9d1fSAndrew Rist * distributed with this work for additional information
6*046d9d1fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*046d9d1fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*046d9d1fSAndrew Rist * "License"); you may not use this file except in compliance
9*046d9d1fSAndrew Rist * with the License. You may obtain a copy of the License at
10*046d9d1fSAndrew Rist *
11*046d9d1fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13*046d9d1fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*046d9d1fSAndrew Rist * software distributed under the License is distributed on an
15*046d9d1fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*046d9d1fSAndrew Rist * KIND, either express or implied. See the License for the
17*046d9d1fSAndrew Rist * specific language governing permissions and limitations
18*046d9d1fSAndrew Rist * under the License.
19*046d9d1fSAndrew Rist *
20*046d9d1fSAndrew Rist *************************************************************/
21*046d9d1fSAndrew Rist
22*046d9d1fSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sot.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include<tools/list.hxx>
28cdf0e10cSrcweir #include<tools/stream.hxx>
29cdf0e10cSrcweir #include<tools/string.hxx>
30cdf0e10cSrcweir #include<tools/rtti.hxx>
31cdf0e10cSrcweir #include<sot/exchange.hxx>
32cdf0e10cSrcweir #include<sot/filelist.hxx>
33cdf0e10cSrcweir #include <osl/thread.h>
34cdf0e10cSrcweir
35cdf0e10cSrcweir TYPEINIT1_AUTOFACTORY( FileList, SvDataCopyStream );
36cdf0e10cSrcweir
37cdf0e10cSrcweir // String-Liste zum Speichern der Namen deklarieren
DECLARE_LIST(FileStringList,String *)38cdf0e10cSrcweir DECLARE_LIST( FileStringList, String* )
39cdf0e10cSrcweir
40cdf0e10cSrcweir
41cdf0e10cSrcweir /*************************************************************************
42cdf0e10cSrcweir |*
43cdf0e10cSrcweir |* FileList - Ctor/Dtor
44cdf0e10cSrcweir |*
45cdf0e10cSrcweir \*************************************************************************/
46cdf0e10cSrcweir
47cdf0e10cSrcweir FileList::FileList()
48cdf0e10cSrcweir {
49cdf0e10cSrcweir pStrList = new FileStringList();
50cdf0e10cSrcweir }
51cdf0e10cSrcweir
~FileList()52cdf0e10cSrcweir FileList::~FileList()
53cdf0e10cSrcweir {
54cdf0e10cSrcweir ClearAll();
55cdf0e10cSrcweir }
56cdf0e10cSrcweir
ClearAll(void)57cdf0e10cSrcweir void FileList::ClearAll( void )
58cdf0e10cSrcweir {
59cdf0e10cSrcweir // Strings in der Liste loeschen
60cdf0e10cSrcweir sal_uLong nCount = pStrList->Count();
61cdf0e10cSrcweir for( sal_uLong i = 0 ; i < nCount ; i++ )
62cdf0e10cSrcweir delete pStrList->GetObject( i );
63cdf0e10cSrcweir
64cdf0e10cSrcweir // Liste loeschen
65cdf0e10cSrcweir delete pStrList;
66cdf0e10cSrcweir }
67cdf0e10cSrcweir
68cdf0e10cSrcweir /*************************************************************************
69cdf0e10cSrcweir |*
70cdf0e10cSrcweir |* FileList - Zuweisungsoperator
71cdf0e10cSrcweir |*
72cdf0e10cSrcweir \*************************************************************************/
73cdf0e10cSrcweir
operator =(const FileList & rFileList)74cdf0e10cSrcweir FileList& FileList::operator=( const FileList& rFileList )
75cdf0e10cSrcweir {
76cdf0e10cSrcweir // Liste duplizieren
77cdf0e10cSrcweir *pStrList = *rFileList.pStrList;
78cdf0e10cSrcweir
79cdf0e10cSrcweir // Strings in der Liste kopieren
80cdf0e10cSrcweir sal_uLong nCount = pStrList->Count();
81cdf0e10cSrcweir for( sal_uLong i = 0 ; i < nCount ; i++ )
82cdf0e10cSrcweir pStrList->Replace( new String( *rFileList.pStrList->GetObject( i ) ), i );
83cdf0e10cSrcweir
84cdf0e10cSrcweir return *this;
85cdf0e10cSrcweir }
86cdf0e10cSrcweir
87cdf0e10cSrcweir /*************************************************************************
88cdf0e10cSrcweir |*
89cdf0e10cSrcweir |* FileList::GetFormatName()
90cdf0e10cSrcweir |*
91cdf0e10cSrcweir \*************************************************************************/
92cdf0e10cSrcweir
GetFormat()93cdf0e10cSrcweir sal_uLong FileList::GetFormat()
94cdf0e10cSrcweir {
95cdf0e10cSrcweir return FORMAT_FILE_LIST;
96cdf0e10cSrcweir }
97cdf0e10cSrcweir
98cdf0e10cSrcweir /******************************************************************************
99cdf0e10cSrcweir |*
100cdf0e10cSrcweir |* virtuelle SvData-Methoden
101cdf0e10cSrcweir |*
102cdf0e10cSrcweir \******************************************************************************/
103cdf0e10cSrcweir
Load(SvStream & rIStm)104cdf0e10cSrcweir void FileList::Load( SvStream& rIStm )
105cdf0e10cSrcweir {
106cdf0e10cSrcweir rIStm >> *this;
107cdf0e10cSrcweir }
108cdf0e10cSrcweir
Save(SvStream & rOStm)109cdf0e10cSrcweir void FileList::Save( SvStream& rOStm )
110cdf0e10cSrcweir {
111cdf0e10cSrcweir rOStm << *this;
112cdf0e10cSrcweir }
113cdf0e10cSrcweir
Assign(const SvDataCopyStream & rCopyStream)114cdf0e10cSrcweir void FileList::Assign( const SvDataCopyStream& rCopyStream )
115cdf0e10cSrcweir {
116cdf0e10cSrcweir *this = (const FileList&)rCopyStream;
117cdf0e10cSrcweir }
118cdf0e10cSrcweir
119cdf0e10cSrcweir /******************************************************************************
120cdf0e10cSrcweir |*
121cdf0e10cSrcweir |* Stream-Operatoren
122cdf0e10cSrcweir |*
123cdf0e10cSrcweir \******************************************************************************/
124cdf0e10cSrcweir
125cdf0e10cSrcweir /*
126cdf0e10cSrcweir * NOTE: to correctly handle this Protocol with Unicode, native Win32 must be called:
127cdf0e10cSrcweir * e.g. DropQueryFile
128cdf0e10cSrcweir */
129cdf0e10cSrcweir
operator <<(SvStream & rOStm,const FileList &)130cdf0e10cSrcweir SvStream& operator<<( SvStream& rOStm, const FileList& /*rFileList*/ )
131cdf0e10cSrcweir {
132cdf0e10cSrcweir OSL_ENSURE(false, "Not implemented!");
133cdf0e10cSrcweir return rOStm;
134cdf0e10cSrcweir }
135cdf0e10cSrcweir
136cdf0e10cSrcweir /* #i28176#
137cdf0e10cSrcweir The Windows clipboard bridge now provides a double '\0'
138cdf0e10cSrcweir terminated list of file names for format SOT_FORMAT_FILE_LIST
139cdf0e10cSrcweir instead of the original Windows Sv_DROPFILES structure. All strings
140cdf0e10cSrcweir in this list are UTF16 strings. Shell link files will be already
141cdf0e10cSrcweir resolved by the Windows clipboard bridge.*/
operator >>(SvStream & rIStm,FileList & rFileList)142cdf0e10cSrcweir SvStream& operator>>( SvStream& rIStm, FileList& rFileList )
143cdf0e10cSrcweir {
144cdf0e10cSrcweir rFileList.ClearAll();
145cdf0e10cSrcweir rFileList.pStrList = new FileStringList();
146cdf0e10cSrcweir
147cdf0e10cSrcweir String aStr;
148cdf0e10cSrcweir sal_uInt16 c;
149cdf0e10cSrcweir
150cdf0e10cSrcweir while (!rIStm.IsEof())
151cdf0e10cSrcweir {
152cdf0e10cSrcweir aStr.Erase();
153cdf0e10cSrcweir
154cdf0e10cSrcweir // read first character of filepath; c==0 > reach end of stream
155cdf0e10cSrcweir rIStm >> c;
156cdf0e10cSrcweir if (!c)
157cdf0e10cSrcweir break;
158cdf0e10cSrcweir
159cdf0e10cSrcweir // read string till c==0
160cdf0e10cSrcweir while (c && !rIStm.IsEof())
161cdf0e10cSrcweir {
162cdf0e10cSrcweir aStr += (sal_Unicode)c;
163cdf0e10cSrcweir rIStm >> c;
164cdf0e10cSrcweir }
165cdf0e10cSrcweir
166cdf0e10cSrcweir // append the filepath
167cdf0e10cSrcweir rFileList.AppendFile(aStr);
168cdf0e10cSrcweir }
169cdf0e10cSrcweir return rIStm;
170cdf0e10cSrcweir }
171cdf0e10cSrcweir
172cdf0e10cSrcweir /******************************************************************************
173cdf0e10cSrcweir |*
174cdf0e10cSrcweir |* Liste fuellen/abfragen
175cdf0e10cSrcweir |*
176cdf0e10cSrcweir \******************************************************************************/
177cdf0e10cSrcweir
AppendFile(const String & rStr)178cdf0e10cSrcweir void FileList::AppendFile( const String& rStr )
179cdf0e10cSrcweir {
180cdf0e10cSrcweir pStrList->Insert( new String( rStr ) , pStrList->Count() );
181cdf0e10cSrcweir }
182cdf0e10cSrcweir
GetFile(sal_uLong i) const183cdf0e10cSrcweir String FileList::GetFile( sal_uLong i ) const
184cdf0e10cSrcweir {
185cdf0e10cSrcweir String aStr;
186cdf0e10cSrcweir if( i < pStrList->Count() )
187cdf0e10cSrcweir aStr = *pStrList->GetObject( i );
188cdf0e10cSrcweir return aStr;
189cdf0e10cSrcweir }
190cdf0e10cSrcweir
Count(void) const191cdf0e10cSrcweir sal_uLong FileList::Count( void ) const
192cdf0e10cSrcweir {
193cdf0e10cSrcweir return pStrList->Count();
194cdf0e10cSrcweir }
195cdf0e10cSrcweir
196