xref: /aoo41x/main/sot/source/base/filelist.cxx (revision 046d9d1f)
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