Update ooo320-m1
[ooovba.git] / sfx2 / source / view / orgmgr.cxx
blobede50724b45209b65f38454851f61ff17619db7b
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: orgmgr.cxx,v $
10 * $Revision: 1.26 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_sfx2.hxx"
33 #include <com/sun/star/embed/XStorage.hpp>
34 #include <com/sun/star/embed/XTransactedObject.hpp>
35 #include <com/sun/star/embed/ElementModes.hpp>
37 #ifndef _MSGBOX_HXX //autogen
38 #include <vcl/msgbox.hxx>
39 #endif
40 #include <tools/urlobj.hxx>
41 #ifndef GCC
42 #endif
44 #ifndef _UNOTOOLS_PROCESSFACTORY_HXX
45 #include <comphelper/processfactory.hxx>
46 #endif
47 #include <unotools/intlwrapper.hxx>
49 #include <comphelper/storagehelper.hxx>
51 #include <sfx2/app.hxx>
52 #include <sfx2/objsh.hxx>
53 #include <sfx2/docfile.hxx>
54 #include <sfx2/docfac.hxx>
55 #include <sfx2/doctempl.hxx>
56 #include "docvor.hxx"
57 #include "orgmgr.hxx"
58 #include "sfxtypes.hxx"
59 #include "sfxresid.hxx"
60 #include "view.hrc"
61 #include <sfx2/docfilt.hxx>
62 #include "fltfnc.hxx"
64 using namespace ::com::sun::star;
66 //=========================================================================
68 /* [Beschreibung]
70 Implementierungsklasse; einzelner Eintrag in der Dateiansicht
74 struct _FileListEntry
76 String aFileName; // Dateiname mit komplettem Pfad
77 String aBaseName; // Dateiname
78 const CollatorWrapper* pCollator;
79 SfxObjectShellLock aDocShell; // ObjectShell als Ref-Klasse
81 //REMOVE SvStorageRef aStor; // Referenz auf Storage, wenn wir diesen geoeffnet haben
82 //uno::Reference< embed::XStorage > xStorage;
84 BOOL bFile; // als Datei auf Platte
85 // (!= unbenannt1, nicht als Dok. geladen;
86 // diese werden nicht gespeichert!)
87 BOOL bOwner; // selbst erzeugt
88 BOOL bNoName;
89 BOOL bOwnFormat;
91 _FileListEntry( const String& rFileName,
92 const CollatorWrapper* pColl, const String* pTitle = NULL );
93 ~_FileListEntry();
95 int operator==( const _FileListEntry &rCmp) const;
96 int operator< ( const _FileListEntry &rCmp) const;
97 BOOL DeleteObjectShell();
100 //-------------------------------------------------------------------------
102 inline int _FileListEntry::operator==(const _FileListEntry &rCmp) const
104 DBG_ASSERT( pCollator, "invalid CollatorWrapper" );
105 return COMPARE_EQUAL == pCollator->compareString(aBaseName, rCmp.aBaseName);
108 //-------------------------------------------------------------------------
110 inline int _FileListEntry::operator< (const _FileListEntry &rCmp) const
112 DBG_ASSERT( pCollator, "invalid CollatorWrapper" );
113 return COMPARE_LESS == pCollator->compareString(aBaseName, rCmp.aBaseName);
116 //-------------------------------------------------------------------------
118 _FileListEntry::_FileListEntry( const String& rFileName,
119 const CollatorWrapper* pColl, const String* pTitle ) :
121 aFileName ( rFileName ),
122 pCollator ( pColl ),
123 bFile ( FALSE ),
124 bOwner ( FALSE ),
125 bNoName ( TRUE ),
126 bOwnFormat ( TRUE )
128 if ( pTitle )
129 aBaseName = *pTitle;
130 else
132 INetURLObject aObj( rFileName, INET_PROT_FILE );
133 aBaseName = aObj.getName( INetURLObject::LAST_SEGMENT, true,
134 INetURLObject::DECODE_WITH_CHARSET );
138 //-------------------------------------------------------------------------
140 _FileListEntry::~_FileListEntry()
142 DeleteObjectShell();
145 //-------------------------------------------------------------------------
147 SV_IMPL_OP_PTRARR_SORT(_SfxObjectList, _FileListEntry*)
149 //=========================================================================
151 BOOL _FileListEntry::DeleteObjectShell()
153 /* [Beschreibung]
155 Freigabe der DokumentShell
157 [Returnwert] TRUE: alles Ok
158 FALSE: es ist ein Fehler aufgetreten (das
159 Dokument konnte nicht gesichert werden)
164 BOOL bRet = TRUE;
165 //Falls wir die Shell angelegt haben und sie veraendert wurde
166 if(bOwner && aDocShell.Is() && aDocShell->IsModified())
168 //Mussten wir konvertieren?
169 if( bOwnFormat )
171 if(!aDocShell->Save() )
172 bRet = FALSE;
173 else
175 try {
176 uno::Reference< embed::XTransactedObject > xTransact( aDocShell->GetStorage(), uno::UNO_QUERY );
177 OSL_ENSURE( xTransact.is(), "Storage must implement XTransactedObject!\n" );
178 if ( !xTransact.is() )
179 throw uno::RuntimeException();
181 xTransact->commit();
183 catch( uno::Exception& )
187 // aDocShell->SfxObjectShell::DoSaveCompleted();
190 else
192 // Falls konvertiert im eigenen Format speichern
193 INetURLObject aObj( aFileName );
194 String aTitle = aObj.getName( INetURLObject::LAST_SEGMENT, true,
195 INetURLObject::DECODE_WITH_CHARSET );
196 bRet = aDocShell->PreDoSaveAs_Impl(
197 aTitle, aDocShell->GetFactory().GetFilterContainer()->GetAnyFilter( SFX_FILTER_IMPORT | SFX_FILTER_EXPORT )->GetFilterName(), 0 );
201 if( bOwner)
203 aDocShell.Clear();
206 return bRet;
209 //-------------------------------------------------------------------------
211 SfxObjectList::SfxObjectList()
215 //-------------------------------------------------------------------------
217 SfxObjectList::~SfxObjectList()
219 DeleteAndDestroy(0, Count());
222 //-------------------------------------------------------------------------
224 const String &SfxObjectList::GetBaseName(USHORT i) const
226 return (*this)[i]->aBaseName;
229 //-------------------------------------------------------------------------
231 const String& SfxObjectList::GetFileName( USHORT i ) const
233 return (*this)[i]->aFileName;
236 //-------------------------------------------------------------------------
238 SfxOrganizeMgr::SfxOrganizeMgr( SfxOrganizeListBox_Impl *pLeft,
239 SfxOrganizeListBox_Impl *pRight,
240 SfxDocumentTemplates *pTempl) :
241 pImpl(new SfxOrganizeMgr_Impl),
242 pTemplates(pTempl? pTempl: new SfxDocumentTemplates),
243 pLeftBox(pLeft),
244 pRightBox(pRight),
245 bDeleteTemplates(pTempl == 0),
246 bModified(0)
248 /* [Beschreibung]
250 Konstruktor
252 Das aktuelle Dokument wird in die Liste der Dokumente
253 aufgenommen.
257 pImpl->pDocList = new SfxObjectList;
258 pImpl->pIntlWrapper = new IntlWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
259 const CollatorWrapper* pCollator = pImpl->pIntlWrapper->getCaseCollator();
260 for ( SfxObjectShell* pTmp = SfxObjectShell::GetFirst(); pTmp; pTmp = SfxObjectShell::GetNext(*pTmp) )
262 if ( pTmp->GetCreateMode() != SFX_CREATE_MODE_STANDARD ||
263 !( pTmp->GetFlags() & SFXOBJECTSHELL_HASOPENDOC ) || !pTmp->GetStyleSheetPool() )
264 continue;
265 _FileListEntry* pNewEntry = NULL;
266 String aTitle = pTmp->GetTitle( SFX_TITLE_TITLE );
267 pNewEntry = new _FileListEntry( pTmp->GetMedium()->GetName(), pCollator, &aTitle );
268 pNewEntry->aDocShell = pTmp;
269 pImpl->pDocList->C40_PTR_INSERT( _FileListEntry, pNewEntry );
273 //-------------------------------------------------------------------------
275 SfxOrganizeMgr::~SfxOrganizeMgr()
277 if ( bDeleteTemplates )
278 delete pTemplates;
279 delete pImpl->pDocList;
280 delete pImpl->pIntlWrapper;
281 delete pImpl;
282 pLeftBox = pRightBox = NULL;
285 //-------------------------------------------------------------------------
287 SfxObjectShellRef SfxOrganizeMgr::CreateObjectShell( USHORT nIdx )
289 /* [Beschreibung]
291 Zugriff auf die DokumentShell an der Position nIdx
293 [Returnwert] Referenz auf die DokumentShell
298 _FileListEntry* pEntry = (*pImpl->pDocList)[nIdx];
299 // andernfalls Doc-Shell anlegen
300 if ( !pEntry->aDocShell.Is() )
302 //(mba)/task SfxWaitCursor aWaitCursor;
303 INetURLObject aFileObj( pEntry->aFileName );
304 BOOL bDum = FALSE;
305 SfxApplication* pSfxApp = SFX_APP();
306 String aFilePath = aFileObj.GetMainURL( INetURLObject::NO_DECODE );
307 pEntry->aDocShell = pSfxApp->DocAlreadyLoaded( aFilePath, FALSE, bDum );
308 if ( !pEntry->aDocShell.Is() )
310 pEntry->bOwner = TRUE;
311 SfxMedium* pMed = new SfxMedium(
312 aFilePath, ( STREAM_READ | STREAM_SHARE_DENYWRITE ), FALSE, 0 );
313 const SfxFilter* pFilter = NULL;
314 pMed->UseInteractionHandler(TRUE);
315 if (
316 pSfxApp->GetFilterMatcher().GuessFilter(*pMed, &pFilter, SFX_FILTER_TEMPLATE, 0) ||
317 (pFilter && !pFilter->IsOwnFormat()) ||
318 (pFilter && !pFilter->UsesStorage())
321 pSfxApp->LoadTemplate( pEntry->aDocShell, aFilePath );
322 pEntry->bOwnFormat = FALSE;
323 delete pMed;
324 if ( pEntry->aDocShell.Is() )
325 return (SfxObjectShellRef)(SfxObjectShell*)(pEntry->aDocShell);
327 else
329 if ( pFilter )
331 pEntry->bOwnFormat = TRUE;
332 pEntry->aDocShell = SfxObjectShell::CreateObject( pFilter->GetServiceName(), SFX_CREATE_MODE_ORGANIZER );
333 if ( pEntry->aDocShell.Is() )
335 pEntry->aDocShell->DoInitNew(0);
336 pEntry->aDocShell->LoadFrom( *pMed );
337 // Medium is now owned by DocShell
338 pEntry->aDocShell->DoSaveCompleted( pMed );
344 return ( SfxObjectShellRef )(SfxObjectShell*)(pEntry->aDocShell);
347 //-------------------------------------------------------------------------
349 BOOL SfxOrganizeMgr::DeleteObjectShell(USHORT nIdx)
351 /* [Beschreibung]
353 Freigabe der DokumentShell an der Position nIdx
355 [Returnwert] TRUE: alles Ok
356 FALSE: es ist ein Fehler aufgetreten (das
357 Dokument konnte nicht gesichert werden)
361 return (*pImpl->pDocList)[nIdx]->DeleteObjectShell();
364 //-------------------------------------------------------------------------
366 SfxObjectShellRef SfxOrganizeMgr::CreateObjectShell(USHORT nRegion,
367 USHORT nIdx)
368 /* [Beschreibung]
370 Zugriff auf die DokumentShell an der Position nIdx im Bereich
371 nRegion (Dokumentvorlage)
373 [Returnwert] Referenz auf die DokumentShell
377 //(mba)/task SfxWaitCursor aWaitCursor;
378 return pTemplates->CreateObjectShell(nRegion, nIdx);
381 //-------------------------------------------------------------------------
383 BOOL SfxOrganizeMgr::DeleteObjectShell(USHORT nRegion, USHORT nIdx)
385 /* [Beschreibung]
387 Freigabe der DokumentShell an der Position nIdx im Bereich
388 nRegion (Dokumentvorlage)
390 [Returnwert] TRUE: alles Ok
391 FALSE: es ist ein Fehler aufgetreten (das
392 Dokument konnte nicht gesichert werden)
397 return pTemplates->DeleteObjectShell(nRegion, nIdx);
400 //-------------------------------------------------------------------------
402 BOOL SfxOrganizeMgr::Copy(USHORT nTargetRegion,
403 USHORT nTargetIdx,
404 USHORT nSourceRegion,
405 USHORT nSourceIdx)
407 /* [Beschreibung]
409 Kopieren einer Dokumentvorlage
411 [Parameter]
413 USHORT nTargetRegion Index des Zielbereiches
414 USHORT nTargetIdx Index Zielposition
415 USHORT nSourceRegion Index des Quellbereiches
416 USHORT nSourceIdx Index der zu kopierenden / z uverschiebenden
417 Dokumentvorlage
419 [R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
422 [Querverweise]
424 <SfxDocumentTemplates::Copy(USHORT nTargetRegion,
425 USHORT nTargetIdx,
426 USHORT nSourceRegion,
427 USHORT nSourceIdx)>
432 if(nSourceIdx == USHRT_MAX) // keine Verzeichnisse kopieren
433 return FALSE ;
434 const BOOL bOk = pTemplates->Copy(nTargetRegion, nTargetIdx,
435 nSourceRegion, nSourceIdx);
436 if(bOk)
437 bModified = 1;
438 return bOk;
441 //-------------------------------------------------------------------------
443 BOOL SfxOrganizeMgr::Move(USHORT nTargetRegion,
444 USHORT nTargetIdx,
445 USHORT nSourceRegion,
446 USHORT nSourceIdx)
448 /* [Beschreibung]
450 Verschieben einer Dokumentvorlage
452 [Parameter]
454 USHORT nTargetRegion Index des Zielbereiches
455 USHORT nTargetIdx Index Zielposition
456 USHORT nSourceRegion Index des Quellbereiches
457 USHORT nSourceIdx Index der zu kopierenden / z uverschiebenden
458 Dokumentvorlage
460 [R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
463 [Querverweise]
465 <SfxDocumentTemplates::Move(USHORT nTargetRegion,
466 USHORT nTargetIdx,
467 USHORT nSourceRegion,
468 USHORT nSourceIdx)>
473 if(nSourceIdx == USHRT_MAX) // keine Verzeichnisse verschieben
474 return FALSE ;
475 const BOOL bOk = pTemplates->Move(nTargetRegion, nTargetIdx,
476 nSourceRegion, nSourceIdx);
477 if(bOk)
478 bModified = 1;
479 return bOk;
482 //-------------------------------------------------------------------------
484 BOOL SfxOrganizeMgr::Delete(SfxOrganizeListBox_Impl *pCaller,
485 USHORT nRegion, USHORT nIdx)
487 /* [Beschreibung]
489 "oschen einer Dokumentvorlage
491 [Parameter]
493 SfxOrganizeListBox *pCaller rufende ListBox; da dieses
494 Event durch das Men"u oder
495 durch das Keyboard angetriggert wird,
496 mu"s das Model der ListBox anschlie"send
497 aktualisiert werden.
498 USHORT nRegion Index des Bereiches
499 USHORT nIdx Index der Dokumentvorlage
501 [R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
504 [Querverweise]
506 <SfxDocumentTemplates::Delete(USHORT nRegion, USHORT nIdx)>
511 BOOL bOk = FALSE;
513 if ( USHRT_MAX == nIdx )
515 // deleting of a group
517 SvLBoxEntry *pGroupToDelete = pCaller->SvLBox::GetEntry(nRegion);
518 if ( pGroupToDelete )
520 USHORT nItemNum = (USHORT)( pCaller->GetModel()->GetChildCount( pGroupToDelete ) );
521 USHORT nToDeleteNum = 0;
522 SvLBoxEntry **pEntriesToDelete = new SvLBoxEntry*[nItemNum];
524 USHORT nInd = 0;
525 for ( nInd = 0; nInd < nItemNum; nInd++ )
526 pEntriesToDelete[nInd] = NULL;
528 for ( nInd = 0; nInd < nItemNum; nInd++ )
530 // TODO/LATER: check that nInd is the same index that is used in pTemplates
531 if ( pTemplates->Delete( nRegion, nInd ) )
533 bModified = 1;
534 pEntriesToDelete[nToDeleteNum++] = pCaller->SvLBox::GetEntry( pGroupToDelete, nInd );
538 for ( nInd = 0; nInd < nToDeleteNum; nInd++ )
539 if ( pEntriesToDelete[nInd] )
540 pCaller->GetModel()->Remove( pEntriesToDelete[nInd] );
542 if ( !pCaller->GetModel()->GetChildCount( pGroupToDelete ) )
544 bOk = pTemplates->Delete( nRegion, nIdx );
545 if ( bOk )
546 pCaller->GetModel()->Remove( pGroupToDelete );
550 else
552 // deleting of a template
553 bOk = pTemplates->Delete(nRegion, nIdx);
554 if(bOk)
556 bModified = 1;
557 // zu loeschender Eintrag
558 SvLBoxEntry *pEntryToDelete = pCaller->SvLBox::GetEntry(pCaller->SvLBox::GetEntry(nRegion), nIdx);
560 pCaller->GetModel()->Remove(pEntryToDelete);
564 return bOk;
567 //-------------------------------------------------------------------------
569 BOOL SfxOrganizeMgr::InsertDir
571 SfxOrganizeListBox_Impl* pCaller,/* rufende ListBox; da dieses Event
572 durch das Men"u oder durch das
573 Keyboard angetriggert wird,
574 mu\s das Model der ListBox
575 anschlie\send aktualisiert werden */
576 const String& rText, // logischer Name des Bereiches
577 USHORT nRegion // Index des Bereiches
580 /* [Beschreibung]
582 Einf"ugen eines Bereiches
585 [R"uckgabewert]
587 Erfolg (TRUE) oder Mi\serfolg (FALSE)
590 [Querverweise]
592 <SfxDocumentTemplates::InsertDir(const String &, USHORT nRegion)>
596 const BOOL bOk = pTemplates->InsertDir(rText, nRegion);
597 if(bOk)
599 bModified = 1;
600 SvLBoxEntry *pEntry = pCaller->InsertEntry(rText,
601 pCaller->GetOpenedBmp(0),
602 pCaller->GetClosedBmp(0),
603 0, TRUE, nRegion);
604 pCaller->Update();
605 pCaller->EditEntry(pEntry);
607 return bOk;
610 //-------------------------------------------------------------------------
612 BOOL SfxOrganizeMgr::SetName(const String &rName,
613 USHORT nRegion, USHORT nIdx)
615 /* [Beschreibung]
617 "Andern eines (logischen) Namens
619 [Parameter]
621 const String &rName der neue Name
622 USHORT nRegion Index des Bereiches
623 USHORT nIdx Index der Dokumentvorlage
625 [R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
628 [Querverweise]
630 <SfxDocumentTemplates::SetName(const String &, USHORT nRegion, USHORT nIdx)>
635 const BOOL bOk = pTemplates->SetName(rName, nRegion, nIdx);
636 if(bOk)
637 bModified = 1;
638 return bOk;
641 //-------------------------------------------------------------------------
643 BOOL SfxOrganizeMgr::CopyTo(USHORT nRegion, USHORT nIdx, const String &rName) const
645 /* [Beschreibung]
647 Export einer Vorlage
649 [Parameter]
651 USHORT nRegion Index des Bereiches
652 USHORT nIdx Index der Dokumentvorlage
653 const String &rName Dateiname
655 [R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
658 [Querverweise]
660 <SfxDocumentTemplates::CopyTo( USHORT nRegion, USHORT nIdx, const String &)>
665 return pTemplates->CopyTo(nRegion, nIdx, rName);
668 //-------------------------------------------------------------------------
670 BOOL SfxOrganizeMgr::CopyFrom(SfxOrganizeListBox_Impl *pCaller,
671 USHORT nRegion, USHORT nIdx, String &rName)
673 /* [Beschreibung]
675 Import einer Vorlage
677 [Parameter]
679 SfxOrganizeListBox *pCaller rufende ListBox; da dieses
680 Event durch das Men"u angetriggert wird,
681 mu"s das Model der ListBox anschlie"send
682 aktualisiert werden.
683 USHORT nRegion Index des Bereiches
684 USHORT nIdx Index der Dokumentvorlage
685 String &rName Dateiname
687 [R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
690 [Querverweise]
692 <SfxDocumentTemplates::CopyFrom( USHORT nRegion, USHORT nIdx, const String &)>
697 SvLBoxEntry *pParent = pCaller->FirstSelected();
698 if( nIdx!=USHRT_MAX )
699 pParent = pCaller->GetParent(pParent);
700 if( pTemplates->CopyFrom( nRegion, nIdx, rName ) )
702 // pCaller aktualisieren
703 if( nIdx == USHRT_MAX )
704 nIdx = 0;
705 else nIdx++;
707 pCaller->InsertEntry( rName,
708 pCaller->GetOpenedBmp(1),
709 pCaller->GetClosedBmp(1),
710 pParent,
711 TRUE,
712 nIdx);
713 pCaller->Update();
714 // pCaller->EditEntry( pEntry );
715 pCaller->Expand( pParent );
716 bModified = TRUE;
717 return TRUE;
719 return FALSE;
722 //-------------------------------------------------------------------------
724 BOOL SfxOrganizeMgr::InsertFile( SfxOrganizeListBox_Impl* pCaller, const String& rFileName )
726 /* [Beschreibung]
728 Eine Datei in der Dateiansicht hinzuf"ugen
730 [Parameter]
732 SfxOrganizeListBox *pCaller rufende ListBox; da dieses
733 Event durch das Men"u angetriggert wird,
734 mu"s das Model der ListBox anschlie"send
735 aktualisiert werden.
736 const String &rFileName Name der hinzuf"ugenden Datei
738 [R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
743 const CollatorWrapper* pCollator = pImpl->pIntlWrapper->getCaseCollator();
744 _FileListEntry* pEntry = new _FileListEntry( rFileName, pCollator );
745 if ( pImpl->pDocList->C40_PTR_INSERT( _FileListEntry, pEntry ) )
747 USHORT nPos = 0;
748 pImpl->pDocList->Seek_Entry( pEntry, &nPos );
749 pCaller->InsertEntry( pEntry->aBaseName, pCaller->GetOpenedBmp(1),
750 pCaller->GetClosedBmp(1), 0, TRUE, nPos );
751 return TRUE;
753 return FALSE;
756 //-------------------------------------------------------------------------
758 BOOL SfxOrganizeMgr::Rescan()
760 /* [Beschreibung]
762 Aktualisieren der Datenbasis
764 [R"uckgabewert]
766 TRUE es bestanden Unterschiede
767 FALSE keine "Anderung
769 [Querverweise]
771 <SfxDocumentTemplates::Rescan()>
775 if(pTemplates->Rescan())
777 bModified = TRUE;
778 return TRUE;
780 return FALSE;
783 //-------------------------------------------------------------------------
785 void SfxOrganizeMgr::SaveAll(Window *pParent)
787 /* [Beschreibung]
789 Schreiben aller ge"anderten Dokumente
791 [Parameter]
793 Window *pParent Parent der Boxen f"ur Fehlermeldungen
798 USHORT nRangeCount = pTemplates->GetRegionCount();
799 USHORT i;
800 for(i = 0; i < nRangeCount; ++i)
802 if( pTemplates->IsRegionLoaded( i ))
804 const USHORT nCount = pTemplates->GetCount(i);
805 for(USHORT j = 0; j < nCount; ++j)
807 if(!pTemplates->DeleteObjectShell(i, j))
809 String aText = String(SfxResId(STR_ERROR_SAVE_TEMPLATE));
810 aText += pTemplates->GetName(i, j);
811 ErrorBox aBox(pParent,
812 WinBits(WB_OK_CANCEL | WB_DEF_CANCEL),
813 aText);
814 if(RET_CANCEL == aBox.Execute())
815 break;
820 nRangeCount = pImpl->pDocList->Count();
821 for(i = 0; i < nRangeCount; ++i)
823 _FileListEntry *pEntry = (*pImpl->pDocList)[i];
824 if(!pEntry->DeleteObjectShell())
826 String aText(SfxResId(STR_ERROR_SAVE_TEMPLATE));
827 aText += pEntry->aBaseName;
828 ErrorBox aBox(pParent, WinBits(WB_OK_CANCEL | WB_DEF_CANCEL), aText);
829 if(RET_CANCEL == aBox.Execute())
830 break;