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
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sfx2.hxx"
26 #include <com/sun/star/embed/XStorage.hpp>
27 #include <com/sun/star/embed/XTransactedObject.hpp>
28 #include <com/sun/star/embed/ElementModes.hpp>
29
30 #ifndef _MSGBOX_HXX //autogen
31 #include <vcl/msgbox.hxx>
32 #endif
33 #include <tools/urlobj.hxx>
34 #ifndef GCC
35 #endif
36
37 #ifndef _UNOTOOLS_PROCESSFACTORY_HXX
38 #include <comphelper/processfactory.hxx>
39 #endif
40 #include <unotools/intlwrapper.hxx>
41
42 #include <comphelper/storagehelper.hxx>
43
44 #include <sfx2/app.hxx>
45 #include <sfx2/objsh.hxx>
46 #include <sfx2/docfile.hxx>
47 #include <sfx2/docfac.hxx>
48 #include <sfx2/doctempl.hxx>
49 #include "docvor.hxx"
50 #include "orgmgr.hxx"
51 #include "sfxtypes.hxx"
52 #include "sfx2/sfxresid.hxx"
53 #include "view.hrc"
54 #include <sfx2/docfilt.hxx>
55 #include "fltfnc.hxx"
56
57 using namespace ::com::sun::star;
58
59 //=========================================================================
60
61 /* [Beschreibung]
62
63 Implementierungsklasse; einzelner Eintrag in der Dateiansicht
64
65 */
66
67 struct _FileListEntry
68 {
69 String aFileName; // Dateiname mit komplettem Pfad
70 String aBaseName; // Dateiname
71 const CollatorWrapper* pCollator;
72 SfxObjectShellLock aDocShell; // ObjectShell als Ref-Klasse
73
74 //REMOVE SvStorageRef aStor; // Referenz auf Storage, wenn wir diesen geoeffnet haben
75 //uno::Reference< embed::XStorage > xStorage;
76
77 sal_Bool bFile; // als Datei auf Platte
78 // (!= unbenannt1, nicht als Dok. geladen;
79 // diese werden nicht gespeichert!)
80 sal_Bool bOwner; // selbst erzeugt
81 sal_Bool bNoName;
82 sal_Bool bOwnFormat;
83
84 _FileListEntry( const String& rFileName,
85 const CollatorWrapper* pColl, const String* pTitle = NULL );
86 ~_FileListEntry();
87
88 int operator==( const _FileListEntry &rCmp) const;
89 int operator< ( const _FileListEntry &rCmp) const;
90 sal_Bool DeleteObjectShell();
91 };
92
93 //-------------------------------------------------------------------------
94
operator ==(const _FileListEntry & rCmp) const95 inline int _FileListEntry::operator==(const _FileListEntry &rCmp) const
96 {
97 DBG_ASSERT( pCollator, "invalid CollatorWrapper" );
98 return COMPARE_EQUAL == pCollator->compareString(aBaseName, rCmp.aBaseName);
99 }
100
101 //-------------------------------------------------------------------------
102
operator <(const _FileListEntry & rCmp) const103 inline int _FileListEntry::operator< (const _FileListEntry &rCmp) const
104 {
105 DBG_ASSERT( pCollator, "invalid CollatorWrapper" );
106 return COMPARE_LESS == pCollator->compareString(aBaseName, rCmp.aBaseName);
107 }
108
109 //-------------------------------------------------------------------------
110
_FileListEntry(const String & rFileName,const CollatorWrapper * pColl,const String * pTitle)111 _FileListEntry::_FileListEntry( const String& rFileName,
112 const CollatorWrapper* pColl, const String* pTitle ) :
113
114 aFileName ( rFileName ),
115 pCollator ( pColl ),
116 bFile ( sal_False ),
117 bOwner ( sal_False ),
118 bNoName ( sal_True ),
119 bOwnFormat ( sal_True )
120 {
121 if ( pTitle )
122 aBaseName = *pTitle;
123 else
124 {
125 INetURLObject aObj( rFileName, INET_PROT_FILE );
126 aBaseName = aObj.getName( INetURLObject::LAST_SEGMENT, true,
127 INetURLObject::DECODE_WITH_CHARSET );
128 }
129 }
130
131 //-------------------------------------------------------------------------
132
~_FileListEntry()133 _FileListEntry::~_FileListEntry()
134 {
135 DeleteObjectShell();
136 }
137
138 //-------------------------------------------------------------------------
139
SV_IMPL_OP_PTRARR_SORT(_SfxObjectList,_FileListEntry *)140 SV_IMPL_OP_PTRARR_SORT(_SfxObjectList, _FileListEntry*)
141
142 //=========================================================================
143
144 sal_Bool _FileListEntry::DeleteObjectShell()
145
146 /* [Beschreibung]
147
148 Freigabe der DokumentShell
149
150 [Returnwert] sal_True: alles Ok
151 sal_False: es ist ein Fehler aufgetreten (das
152 Dokument konnte nicht gesichert werden)
153
154 */
155
156 {
157 sal_Bool bRet = sal_True;
158 //Falls wir die Shell angelegt haben und sie veraendert wurde
159 if(bOwner && aDocShell.Is() && aDocShell->IsModified())
160 {
161 //Mussten wir konvertieren?
162 if( bOwnFormat )
163 {
164 if(!aDocShell->Save() )
165 bRet = sal_False;
166 else
167 {
168 try {
169 uno::Reference< embed::XTransactedObject > xTransact( aDocShell->GetStorage(), uno::UNO_QUERY );
170 OSL_ENSURE( xTransact.is(), "Storage must implement XTransactedObject!\n" );
171 if ( !xTransact.is() )
172 throw uno::RuntimeException();
173
174 xTransact->commit();
175 }
176 catch( uno::Exception& )
177 {
178 }
179
180 // aDocShell->SfxObjectShell::DoSaveCompleted();
181 }
182 }
183 else
184 {
185 // Falls konvertiert im eigenen Format speichern
186 INetURLObject aObj( aFileName );
187 String aTitle = aObj.getName( INetURLObject::LAST_SEGMENT, true,
188 INetURLObject::DECODE_WITH_CHARSET );
189 bRet = aDocShell->PreDoSaveAs_Impl(
190 aTitle, aDocShell->GetFactory().GetFilterContainer()->GetAnyFilter( SFX_FILTER_IMPORT | SFX_FILTER_EXPORT )->GetFilterName(), 0 );
191 }
192 }
193
194 if( bOwner)
195 {
196 aDocShell.Clear();
197 }
198
199 return bRet;
200 }
201
202 //-------------------------------------------------------------------------
203
SfxObjectList()204 SfxObjectList::SfxObjectList()
205 {
206 }
207
208 //-------------------------------------------------------------------------
209
~SfxObjectList()210 SfxObjectList::~SfxObjectList()
211 {
212 DeleteAndDestroy(0, Count());
213 }
214
215 //-------------------------------------------------------------------------
216
GetBaseName(sal_uInt16 i) const217 const String &SfxObjectList::GetBaseName(sal_uInt16 i) const
218 {
219 return (*this)[i]->aBaseName;
220 }
221
222 //-------------------------------------------------------------------------
223
GetFileName(sal_uInt16 i) const224 const String& SfxObjectList::GetFileName( sal_uInt16 i ) const
225 {
226 return (*this)[i]->aFileName;
227 }
228
229 //-------------------------------------------------------------------------
230
SfxOrganizeMgr(SfxOrganizeListBox_Impl * pLeft,SfxOrganizeListBox_Impl * pRight,SfxDocumentTemplates * pTempl)231 SfxOrganizeMgr::SfxOrganizeMgr( SfxOrganizeListBox_Impl *pLeft,
232 SfxOrganizeListBox_Impl *pRight,
233 SfxDocumentTemplates *pTempl) :
234 pImpl(new SfxOrganizeMgr_Impl),
235 pTemplates(pTempl? pTempl: new SfxDocumentTemplates),
236 pLeftBox(pLeft),
237 pRightBox(pRight),
238 bDeleteTemplates(pTempl == 0),
239 bModified(0)
240
241 /* [Beschreibung]
242
243 Konstruktor
244
245 Das aktuelle Dokument wird in die Liste der Dokumente
246 aufgenommen.
247
248 */
249 {
250 pImpl->pDocList = new SfxObjectList;
251 pImpl->pIntlWrapper = new IntlWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
252 const CollatorWrapper* pCollator = pImpl->pIntlWrapper->getCaseCollator();
253 for ( SfxObjectShell* pTmp = SfxObjectShell::GetFirst(); pTmp; pTmp = SfxObjectShell::GetNext(*pTmp) )
254 {
255 if ( pTmp->GetCreateMode() != SFX_CREATE_MODE_STANDARD ||
256 !( pTmp->GetFlags() & SFXOBJECTSHELL_HASOPENDOC ) || !pTmp->GetStyleSheetPool() )
257 continue;
258 _FileListEntry* pNewEntry = NULL;
259 String aTitle = pTmp->GetTitle( SFX_TITLE_TITLE );
260 pNewEntry = new _FileListEntry( pTmp->GetMedium()->GetName(), pCollator, &aTitle );
261 pNewEntry->aDocShell = pTmp;
262 pImpl->pDocList->C40_PTR_INSERT( _FileListEntry, pNewEntry );
263 }
264 }
265
266 //-------------------------------------------------------------------------
267
~SfxOrganizeMgr()268 SfxOrganizeMgr::~SfxOrganizeMgr()
269 {
270 if ( bDeleteTemplates )
271 delete pTemplates;
272 delete pImpl->pDocList;
273 delete pImpl->pIntlWrapper;
274 delete pImpl;
275 pLeftBox = pRightBox = NULL;
276 }
277
278 //-------------------------------------------------------------------------
279
CreateObjectShell(sal_uInt16 nIdx)280 SfxObjectShellRef SfxOrganizeMgr::CreateObjectShell( sal_uInt16 nIdx )
281
282 /* [Beschreibung]
283
284 Zugriff auf die DokumentShell an der Position nIdx
285
286 [Returnwert] Referenz auf die DokumentShell
287
288 */
289
290 {
291 _FileListEntry* pEntry = (*pImpl->pDocList)[nIdx];
292 // andernfalls Doc-Shell anlegen
293 if ( !pEntry->aDocShell.Is() )
294 {
295 //(mba)/task SfxWaitCursor aWaitCursor;
296 INetURLObject aFileObj( pEntry->aFileName );
297 sal_Bool bDum = sal_False;
298 SfxApplication* pSfxApp = SFX_APP();
299 String aFilePath = aFileObj.GetMainURL( INetURLObject::NO_DECODE );
300 pEntry->aDocShell = pSfxApp->DocAlreadyLoaded( aFilePath, sal_False, bDum );
301 if ( !pEntry->aDocShell.Is() )
302 {
303 pEntry->bOwner = sal_True;
304 SfxMedium* pMed = new SfxMedium(
305 aFilePath, ( STREAM_READ | STREAM_SHARE_DENYWRITE ), sal_False, 0 );
306 const SfxFilter* pFilter = NULL;
307 pMed->UseInteractionHandler(sal_True);
308 if (
309 pSfxApp->GetFilterMatcher().GuessFilter(*pMed, &pFilter, SFX_FILTER_TEMPLATE, 0) ||
310 (pFilter && !pFilter->IsOwnFormat()) ||
311 (pFilter && !pFilter->UsesStorage())
312 )
313 {
314 pSfxApp->LoadTemplate( pEntry->aDocShell, aFilePath );
315 pEntry->bOwnFormat = sal_False;
316 delete pMed;
317 if ( pEntry->aDocShell.Is() )
318 return (SfxObjectShellRef)(SfxObjectShell*)(pEntry->aDocShell);
319 }
320 else
321 {
322 if ( pFilter )
323 {
324 pEntry->bOwnFormat = sal_True;
325 pEntry->aDocShell = SfxObjectShell::CreateObject( pFilter->GetServiceName(), SFX_CREATE_MODE_ORGANIZER );
326 if ( pEntry->aDocShell.Is() )
327 {
328 pEntry->aDocShell->DoInitNew(0);
329 pEntry->aDocShell->LoadFrom( *pMed );
330 // Medium is now owned by DocShell
331 pEntry->aDocShell->DoSaveCompleted( pMed );
332 }
333 }
334 }
335 }
336 }
337 return ( SfxObjectShellRef )(SfxObjectShell*)(pEntry->aDocShell);
338 }
339
340 //-------------------------------------------------------------------------
341
DeleteObjectShell(sal_uInt16 nIdx)342 sal_Bool SfxOrganizeMgr::DeleteObjectShell(sal_uInt16 nIdx)
343
344 /* [Beschreibung]
345
346 Freigabe der DokumentShell an der Position nIdx
347
348 [Returnwert] sal_True: alles Ok
349 sal_False: es ist ein Fehler aufgetreten (das
350 Dokument konnte nicht gesichert werden)
351
352 */
353 {
354 return (*pImpl->pDocList)[nIdx]->DeleteObjectShell();
355 }
356
357 //-------------------------------------------------------------------------
358
CreateObjectShell(sal_uInt16 nRegion,sal_uInt16 nIdx)359 SfxObjectShellRef SfxOrganizeMgr::CreateObjectShell(sal_uInt16 nRegion,
360 sal_uInt16 nIdx)
361 /* [Beschreibung]
362
363 Zugriff auf die DokumentShell an der Position nIdx im Bereich
364 nRegion (Dokumentvorlage)
365
366 [Returnwert] Referenz auf die DokumentShell
367
368 */
369 {
370 //(mba)/task SfxWaitCursor aWaitCursor;
371 return pTemplates->CreateObjectShell(nRegion, nIdx);
372 }
373
374 //-------------------------------------------------------------------------
375
DeleteObjectShell(sal_uInt16 nRegion,sal_uInt16 nIdx)376 sal_Bool SfxOrganizeMgr::DeleteObjectShell(sal_uInt16 nRegion, sal_uInt16 nIdx)
377
378 /* [Beschreibung]
379
380 Freigabe der DokumentShell an der Position nIdx im Bereich
381 nRegion (Dokumentvorlage)
382
383 [Returnwert] sal_True: alles Ok
384 sal_False: es ist ein Fehler aufgetreten (das
385 Dokument konnte nicht gesichert werden)
386
387 */
388
389 {
390 return pTemplates->DeleteObjectShell(nRegion, nIdx);
391 }
392
393 //-------------------------------------------------------------------------
394
Copy(sal_uInt16 nTargetRegion,sal_uInt16 nTargetIdx,sal_uInt16 nSourceRegion,sal_uInt16 nSourceIdx)395 sal_Bool SfxOrganizeMgr::Copy(sal_uInt16 nTargetRegion,
396 sal_uInt16 nTargetIdx,
397 sal_uInt16 nSourceRegion,
398 sal_uInt16 nSourceIdx)
399
400 /* [Beschreibung]
401
402 Kopieren einer Dokumentvorlage
403
404 [Parameter]
405
406 sal_uInt16 nTargetRegion Index des Zielbereiches
407 sal_uInt16 nTargetIdx Index Zielposition
408 sal_uInt16 nSourceRegion Index des Quellbereiches
409 sal_uInt16 nSourceIdx Index der zu kopierenden / z uverschiebenden
410 Dokumentvorlage
411
412 [R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
413
414
415 [Querverweise]
416
417 <SfxDocumentTemplates::Copy(sal_uInt16 nTargetRegion,
418 sal_uInt16 nTargetIdx,
419 sal_uInt16 nSourceRegion,
420 sal_uInt16 nSourceIdx)>
421
422 */
423
424 {
425 if(nSourceIdx == USHRT_MAX) // keine Verzeichnisse kopieren
426 return sal_False ;
427 const sal_Bool bOk = pTemplates->Copy(nTargetRegion, nTargetIdx,
428 nSourceRegion, nSourceIdx);
429 if(bOk)
430 bModified = 1;
431 return bOk;
432 }
433
434 //-------------------------------------------------------------------------
435
Move(sal_uInt16 nTargetRegion,sal_uInt16 nTargetIdx,sal_uInt16 nSourceRegion,sal_uInt16 nSourceIdx)436 sal_Bool SfxOrganizeMgr::Move(sal_uInt16 nTargetRegion,
437 sal_uInt16 nTargetIdx,
438 sal_uInt16 nSourceRegion,
439 sal_uInt16 nSourceIdx)
440
441 /* [Beschreibung]
442
443 Verschieben einer Dokumentvorlage
444
445 [Parameter]
446
447 sal_uInt16 nTargetRegion Index des Zielbereiches
448 sal_uInt16 nTargetIdx Index Zielposition
449 sal_uInt16 nSourceRegion Index des Quellbereiches
450 sal_uInt16 nSourceIdx Index der zu kopierenden / z uverschiebenden
451 Dokumentvorlage
452
453 [R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
454
455
456 [Querverweise]
457
458 <SfxDocumentTemplates::Move(sal_uInt16 nTargetRegion,
459 sal_uInt16 nTargetIdx,
460 sal_uInt16 nSourceRegion,
461 sal_uInt16 nSourceIdx)>
462
463 */
464
465 {
466 if(nSourceIdx == USHRT_MAX) // keine Verzeichnisse verschieben
467 return sal_False ;
468 const sal_Bool bOk = pTemplates->Move(nTargetRegion, nTargetIdx,
469 nSourceRegion, nSourceIdx);
470 if(bOk)
471 bModified = 1;
472 return bOk;
473 }
474
475 //-------------------------------------------------------------------------
476
Delete(SfxOrganizeListBox_Impl * pCaller,sal_uInt16 nRegion,sal_uInt16 nIdx)477 sal_Bool SfxOrganizeMgr::Delete(SfxOrganizeListBox_Impl *pCaller,
478 sal_uInt16 nRegion, sal_uInt16 nIdx)
479
480 /* [Beschreibung]
481
482 "oschen einer Dokumentvorlage
483
484 [Parameter]
485
486 SfxOrganizeListBox *pCaller rufende ListBox; da dieses
487 Event durch das Men"u oder
488 durch das Keyboard angetriggert wird,
489 mu"s das Model der ListBox anschlie"send
490 aktualisiert werden.
491 sal_uInt16 nRegion Index des Bereiches
492 sal_uInt16 nIdx Index der Dokumentvorlage
493
494 [R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
495
496
497 [Querverweise]
498
499 <SfxDocumentTemplates::Delete(sal_uInt16 nRegion, sal_uInt16 nIdx)>
500
501 */
502
503 {
504 sal_Bool bOk = sal_False;
505
506 if ( USHRT_MAX == nIdx )
507 {
508 // deleting of a group
509
510 SvLBoxEntry *pGroupToDelete = pCaller->SvLBox::GetEntry(nRegion);
511 if ( pGroupToDelete )
512 {
513 sal_uInt16 nItemNum = (sal_uInt16)( pCaller->GetModel()->GetChildCount( pGroupToDelete ) );
514 sal_uInt16 nToDeleteNum = 0;
515 SvLBoxEntry **pEntriesToDelete = new SvLBoxEntry*[nItemNum];
516
517 sal_uInt16 nInd = 0;
518 for ( nInd = 0; nInd < nItemNum; nInd++ )
519 pEntriesToDelete[nInd] = NULL;
520
521 for ( nInd = 0; nInd < nItemNum; nInd++ )
522 {
523 // TODO/LATER: check that nInd is the same index that is used in pTemplates
524 if ( pTemplates->Delete( nRegion, nInd ) )
525 {
526 bModified = 1;
527 pEntriesToDelete[nToDeleteNum++] = pCaller->SvLBox::GetEntry( pGroupToDelete, nInd );
528 }
529 }
530
531 for ( nInd = 0; nInd < nToDeleteNum; nInd++ )
532 if ( pEntriesToDelete[nInd] )
533 pCaller->GetModel()->Remove( pEntriesToDelete[nInd] );
534 delete[] pEntriesToDelete;
535
536 if ( !pCaller->GetModel()->GetChildCount( pGroupToDelete ) )
537 {
538 bOk = pTemplates->Delete( nRegion, nIdx );
539 if ( bOk )
540 pCaller->GetModel()->Remove( pGroupToDelete );
541 }
542 }
543 }
544 else
545 {
546 // deleting of a template
547 bOk = pTemplates->Delete(nRegion, nIdx);
548 if(bOk)
549 {
550 bModified = 1;
551 // zu loeschender Eintrag
552 SvLBoxEntry *pEntryToDelete = pCaller->SvLBox::GetEntry(pCaller->SvLBox::GetEntry(nRegion), nIdx);
553
554 pCaller->GetModel()->Remove(pEntryToDelete);
555 }
556 }
557
558 return bOk;
559 }
560
561 //-------------------------------------------------------------------------
562
InsertDir(SfxOrganizeListBox_Impl * pCaller,const String & rText,sal_uInt16 nRegion)563 sal_Bool SfxOrganizeMgr::InsertDir
564 (
565 SfxOrganizeListBox_Impl* pCaller,/* rufende ListBox; da dieses Event
566 durch das Men"u oder durch das
567 Keyboard angetriggert wird,
568 mu\s das Model der ListBox
569 anschlie\send aktualisiert werden */
570 const String& rText, // logischer Name des Bereiches
571 sal_uInt16 nRegion // Index des Bereiches
572 )
573
574 /* [Beschreibung]
575
576 Einf"ugen eines Bereiches
577
578
579 [R"uckgabewert]
580
581 Erfolg (sal_True) oder Mi\serfolg (sal_False)
582
583
584 [Querverweise]
585
586 <SfxDocumentTemplates::InsertDir(const String &, sal_uInt16 nRegion)>
587 */
588
589 {
590 const sal_Bool bOk = pTemplates->InsertDir(rText, nRegion);
591 if(bOk)
592 {
593 bModified = 1;
594 SvLBoxEntry *pEntry = pCaller->InsertEntry(rText,
595 pCaller->GetOpenedBmp(0),
596 pCaller->GetClosedBmp(0),
597 0, sal_True, nRegion);
598 pCaller->Update();
599 pCaller->EditEntry(pEntry);
600 }
601 return bOk;
602 }
603
604 //-------------------------------------------------------------------------
605
SetName(const String & rName,sal_uInt16 nRegion,sal_uInt16 nIdx)606 sal_Bool SfxOrganizeMgr::SetName(const String &rName,
607 sal_uInt16 nRegion, sal_uInt16 nIdx)
608
609 /* [Beschreibung]
610
611 "Andern eines (logischen) Namens
612
613 [Parameter]
614
615 const String &rName der neue Name
616 sal_uInt16 nRegion Index des Bereiches
617 sal_uInt16 nIdx Index der Dokumentvorlage
618
619 [R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
620
621
622 [Querverweise]
623
624 <SfxDocumentTemplates::SetName(const String &, sal_uInt16 nRegion, sal_uInt16 nIdx)>
625
626 */
627
628 {
629 const sal_Bool bOk = pTemplates->SetName(rName, nRegion, nIdx);
630 if(bOk)
631 bModified = 1;
632 return bOk;
633 }
634
635 //-------------------------------------------------------------------------
636
CopyTo(sal_uInt16 nRegion,sal_uInt16 nIdx,const String & rName) const637 sal_Bool SfxOrganizeMgr::CopyTo(sal_uInt16 nRegion, sal_uInt16 nIdx, const String &rName) const
638
639 /* [Beschreibung]
640
641 Export einer Vorlage
642
643 [Parameter]
644
645 sal_uInt16 nRegion Index des Bereiches
646 sal_uInt16 nIdx Index der Dokumentvorlage
647 const String &rName Dateiname
648
649 [R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
650
651
652 [Querverweise]
653
654 <SfxDocumentTemplates::CopyTo( sal_uInt16 nRegion, sal_uInt16 nIdx, const String &)>
655
656 */
657
658 {
659 return pTemplates->CopyTo(nRegion, nIdx, rName);
660 }
661
662 //-------------------------------------------------------------------------
663
CopyFrom(SfxOrganizeListBox_Impl * pCaller,sal_uInt16 nRegion,sal_uInt16 nIdx,String & rName)664 sal_Bool SfxOrganizeMgr::CopyFrom(SfxOrganizeListBox_Impl *pCaller,
665 sal_uInt16 nRegion, sal_uInt16 nIdx, String &rName)
666
667 /* [Beschreibung]
668
669 Import einer Vorlage
670
671 [Parameter]
672
673 SfxOrganizeListBox *pCaller rufende ListBox; da dieses
674 Event durch das Men"u angetriggert wird,
675 mu"s das Model der ListBox anschlie"send
676 aktualisiert werden.
677 sal_uInt16 nRegion Index des Bereiches
678 sal_uInt16 nIdx Index der Dokumentvorlage
679 String &rName Dateiname
680
681 [R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
682
683
684 [Querverweise]
685
686 <SfxDocumentTemplates::CopyFrom( sal_uInt16 nRegion, sal_uInt16 nIdx, const String &)>
687
688 */
689
690 {
691 SvLBoxEntry *pParent = pCaller->FirstSelected();
692 if( nIdx!=USHRT_MAX )
693 pParent = pCaller->GetParent(pParent);
694 if( pTemplates->CopyFrom( nRegion, nIdx, rName ) )
695 {
696 // pCaller aktualisieren
697 if( nIdx == USHRT_MAX )
698 nIdx = 0;
699 else nIdx++;
700
701 pCaller->InsertEntry( rName,
702 pCaller->GetOpenedBmp(1),
703 pCaller->GetClosedBmp(1),
704 pParent,
705 sal_True,
706 nIdx);
707 pCaller->Update();
708 // pCaller->EditEntry( pEntry );
709 pCaller->Expand( pParent );
710 bModified = sal_True;
711 return sal_True;
712 }
713 return sal_False;
714 }
715
716 //-------------------------------------------------------------------------
717
InsertFile(SfxOrganizeListBox_Impl * pCaller,const String & rFileName)718 sal_Bool SfxOrganizeMgr::InsertFile( SfxOrganizeListBox_Impl* pCaller, const String& rFileName )
719
720 /* [Beschreibung]
721
722 Eine Datei in der Dateiansicht hinzuf"ugen
723
724 [Parameter]
725
726 SfxOrganizeListBox *pCaller rufende ListBox; da dieses
727 Event durch das Men"u angetriggert wird,
728 mu"s das Model der ListBox anschlie"send
729 aktualisiert werden.
730 const String &rFileName Name der hinzuf"ugenden Datei
731
732 [R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
733
734 */
735
736 {
737 const CollatorWrapper* pCollator = pImpl->pIntlWrapper->getCaseCollator();
738 _FileListEntry* pEntry = new _FileListEntry( rFileName, pCollator );
739 if ( pImpl->pDocList->C40_PTR_INSERT( _FileListEntry, pEntry ) )
740 {
741 sal_uInt16 nPos = 0;
742 pImpl->pDocList->Seek_Entry( pEntry, &nPos );
743 pCaller->InsertEntry( pEntry->aBaseName, pCaller->GetOpenedBmp(1),
744 pCaller->GetClosedBmp(1), 0, sal_True, nPos );
745 return sal_True;
746 }
747 return sal_False;
748 }
749
750 //-------------------------------------------------------------------------
751
Rescan()752 sal_Bool SfxOrganizeMgr::Rescan()
753
754 /* [Beschreibung]
755
756 Aktualisieren der Datenbasis
757
758 [R"uckgabewert]
759
760 sal_True es bestanden Unterschiede
761 FALSE keine "Anderung
762
763 [Querverweise]
764
765 <SfxDocumentTemplates::Rescan()>
766 */
767
768 {
769 if(pTemplates->Rescan())
770 {
771 bModified = sal_True;
772 return sal_True;
773 }
774 return sal_False;
775 }
776
777 //-------------------------------------------------------------------------
778
SaveAll(Window * pParent)779 void SfxOrganizeMgr::SaveAll(Window *pParent)
780
781 /* [Beschreibung]
782
783 Schreiben aller ge"anderten Dokumente
784
785 [Parameter]
786
787 Window *pParent Parent der Boxen f"ur Fehlermeldungen
788
789 */
790
791 {
792 sal_uInt16 nRangeCount = pTemplates->GetRegionCount();
793 sal_uInt16 i;
794 for(i = 0; i < nRangeCount; ++i)
795 {
796 if( pTemplates->IsRegionLoaded( i ))
797 {
798 const sal_uInt16 nCount = pTemplates->GetCount(i);
799 for(sal_uInt16 j = 0; j < nCount; ++j)
800 {
801 if(!pTemplates->DeleteObjectShell(i, j))
802 {
803 String aText = String(SfxResId(STR_ERROR_SAVE_TEMPLATE));
804 aText += pTemplates->GetName(i, j);
805 ErrorBox aBox(pParent,
806 WinBits(WB_OK_CANCEL | WB_DEF_CANCEL),
807 aText);
808 if(RET_CANCEL == aBox.Execute())
809 break;
810 }
811 }
812 }
813 }
814 nRangeCount = pImpl->pDocList->Count();
815 for(i = 0; i < nRangeCount; ++i)
816 {
817 _FileListEntry *pEntry = (*pImpl->pDocList)[i];
818 if(!pEntry->DeleteObjectShell())
819 {
820 String aText(SfxResId(STR_ERROR_SAVE_TEMPLATE));
821 aText += pEntry->aBaseName;
822 ErrorBox aBox(pParent, WinBits(WB_OK_CANCEL | WB_DEF_CANCEL), aText);
823 if(RET_CANCEL == aBox.Execute())
824 break;
825 }
826 }
827 }
828
829
830