blob: c859fcea3deffd011204badcd2687c702bb3c108 [file] [log] [blame]
/**************************************************************
*
* 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_sfx2.hxx"
#include <com/sun/star/embed/XStorage.hpp>
#include <com/sun/star/embed/XTransactedObject.hpp>
#include <com/sun/star/embed/ElementModes.hpp>
#ifndef _MSGBOX_HXX //autogen
#include <vcl/msgbox.hxx>
#endif
#include <tools/urlobj.hxx>
#ifndef GCC
#endif
#ifndef _UNOTOOLS_PROCESSFACTORY_HXX
#include <comphelper/processfactory.hxx>
#endif
#include <unotools/intlwrapper.hxx>
#include <comphelper/storagehelper.hxx>
#include <sfx2/app.hxx>
#include <sfx2/objsh.hxx>
#include <sfx2/docfile.hxx>
#include <sfx2/docfac.hxx>
#include <sfx2/doctempl.hxx>
#include "docvor.hxx"
#include "orgmgr.hxx"
#include "sfxtypes.hxx"
#include "sfx2/sfxresid.hxx"
#include "view.hrc"
#include <sfx2/docfilt.hxx>
#include "fltfnc.hxx"
using namespace ::com::sun::star;
//=========================================================================
/* [Beschreibung]
Implementierungsklasse; einzelner Eintrag in der Dateiansicht
*/
struct _FileListEntry
{
String aFileName; // Dateiname mit komplettem Pfad
String aBaseName; // Dateiname
const CollatorWrapper* pCollator;
SfxObjectShellLock aDocShell; // ObjectShell als Ref-Klasse
//REMOVE SvStorageRef aStor; // Referenz auf Storage, wenn wir diesen geoeffnet haben
//uno::Reference< embed::XStorage > xStorage;
sal_Bool bFile; // als Datei auf Platte
// (!= unbenannt1, nicht als Dok. geladen;
// diese werden nicht gespeichert!)
sal_Bool bOwner; // selbst erzeugt
sal_Bool bNoName;
sal_Bool bOwnFormat;
_FileListEntry( const String& rFileName,
const CollatorWrapper* pColl, const String* pTitle = NULL );
~_FileListEntry();
int operator==( const _FileListEntry &rCmp) const;
int operator< ( const _FileListEntry &rCmp) const;
sal_Bool DeleteObjectShell();
};
//-------------------------------------------------------------------------
inline int _FileListEntry::operator==(const _FileListEntry &rCmp) const
{
DBG_ASSERT( pCollator, "invalid CollatorWrapper" );
return COMPARE_EQUAL == pCollator->compareString(aBaseName, rCmp.aBaseName);
}
//-------------------------------------------------------------------------
inline int _FileListEntry::operator< (const _FileListEntry &rCmp) const
{
DBG_ASSERT( pCollator, "invalid CollatorWrapper" );
return COMPARE_LESS == pCollator->compareString(aBaseName, rCmp.aBaseName);
}
//-------------------------------------------------------------------------
_FileListEntry::_FileListEntry( const String& rFileName,
const CollatorWrapper* pColl, const String* pTitle ) :
aFileName ( rFileName ),
pCollator ( pColl ),
bFile ( sal_False ),
bOwner ( sal_False ),
bNoName ( sal_True ),
bOwnFormat ( sal_True )
{
if ( pTitle )
aBaseName = *pTitle;
else
{
INetURLObject aObj( rFileName, INET_PROT_FILE );
aBaseName = aObj.getName( INetURLObject::LAST_SEGMENT, true,
INetURLObject::DECODE_WITH_CHARSET );
}
}
//-------------------------------------------------------------------------
_FileListEntry::~_FileListEntry()
{
DeleteObjectShell();
}
//-------------------------------------------------------------------------
SV_IMPL_OP_PTRARR_SORT(_SfxObjectList, _FileListEntry*)
//=========================================================================
sal_Bool _FileListEntry::DeleteObjectShell()
/* [Beschreibung]
Freigabe der DokumentShell
[Returnwert] sal_True: alles Ok
sal_False: es ist ein Fehler aufgetreten (das
Dokument konnte nicht gesichert werden)
*/
{
sal_Bool bRet = sal_True;
//Falls wir die Shell angelegt haben und sie veraendert wurde
if(bOwner && aDocShell.Is() && aDocShell->IsModified())
{
//Mussten wir konvertieren?
if( bOwnFormat )
{
if(!aDocShell->Save() )
bRet = sal_False;
else
{
try {
uno::Reference< embed::XTransactedObject > xTransact( aDocShell->GetStorage(), uno::UNO_QUERY );
OSL_ENSURE( xTransact.is(), "Storage must implement XTransactedObject!\n" );
if ( !xTransact.is() )
throw uno::RuntimeException();
xTransact->commit();
}
catch( uno::Exception& )
{
}
// aDocShell->SfxObjectShell::DoSaveCompleted();
}
}
else
{
// Falls konvertiert im eigenen Format speichern
INetURLObject aObj( aFileName );
String aTitle = aObj.getName( INetURLObject::LAST_SEGMENT, true,
INetURLObject::DECODE_WITH_CHARSET );
bRet = aDocShell->PreDoSaveAs_Impl(
aTitle, aDocShell->GetFactory().GetFilterContainer()->GetAnyFilter( SFX_FILTER_IMPORT | SFX_FILTER_EXPORT )->GetFilterName(), 0 );
}
}
if( bOwner)
{
aDocShell.Clear();
}
return bRet;
}
//-------------------------------------------------------------------------
SfxObjectList::SfxObjectList()
{
}
//-------------------------------------------------------------------------
SfxObjectList::~SfxObjectList()
{
DeleteAndDestroy(0, Count());
}
//-------------------------------------------------------------------------
const String &SfxObjectList::GetBaseName(sal_uInt16 i) const
{
return (*this)[i]->aBaseName;
}
//-------------------------------------------------------------------------
const String& SfxObjectList::GetFileName( sal_uInt16 i ) const
{
return (*this)[i]->aFileName;
}
//-------------------------------------------------------------------------
SfxOrganizeMgr::SfxOrganizeMgr( SfxOrganizeListBox_Impl *pLeft,
SfxOrganizeListBox_Impl *pRight,
SfxDocumentTemplates *pTempl) :
pImpl(new SfxOrganizeMgr_Impl),
pTemplates(pTempl? pTempl: new SfxDocumentTemplates),
pLeftBox(pLeft),
pRightBox(pRight),
bDeleteTemplates(pTempl == 0),
bModified(0)
/* [Beschreibung]
Konstruktor
Das aktuelle Dokument wird in die Liste der Dokumente
aufgenommen.
*/
{
pImpl->pDocList = new SfxObjectList;
pImpl->pIntlWrapper = new IntlWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
const CollatorWrapper* pCollator = pImpl->pIntlWrapper->getCaseCollator();
for ( SfxObjectShell* pTmp = SfxObjectShell::GetFirst(); pTmp; pTmp = SfxObjectShell::GetNext(*pTmp) )
{
if ( pTmp->GetCreateMode() != SFX_CREATE_MODE_STANDARD ||
!( pTmp->GetFlags() & SFXOBJECTSHELL_HASOPENDOC ) || !pTmp->GetStyleSheetPool() )
continue;
_FileListEntry* pNewEntry = NULL;
String aTitle = pTmp->GetTitle( SFX_TITLE_TITLE );
pNewEntry = new _FileListEntry( pTmp->GetMedium()->GetName(), pCollator, &aTitle );
pNewEntry->aDocShell = pTmp;
pImpl->pDocList->C40_PTR_INSERT( _FileListEntry, pNewEntry );
}
}
//-------------------------------------------------------------------------
SfxOrganizeMgr::~SfxOrganizeMgr()
{
if ( bDeleteTemplates )
delete pTemplates;
delete pImpl->pDocList;
delete pImpl->pIntlWrapper;
delete pImpl;
pLeftBox = pRightBox = NULL;
}
//-------------------------------------------------------------------------
SfxObjectShellRef SfxOrganizeMgr::CreateObjectShell( sal_uInt16 nIdx )
/* [Beschreibung]
Zugriff auf die DokumentShell an der Position nIdx
[Returnwert] Referenz auf die DokumentShell
*/
{
_FileListEntry* pEntry = (*pImpl->pDocList)[nIdx];
// andernfalls Doc-Shell anlegen
if ( !pEntry->aDocShell.Is() )
{
//(mba)/task SfxWaitCursor aWaitCursor;
INetURLObject aFileObj( pEntry->aFileName );
sal_Bool bDum = sal_False;
SfxApplication* pSfxApp = SFX_APP();
String aFilePath = aFileObj.GetMainURL( INetURLObject::NO_DECODE );
pEntry->aDocShell = pSfxApp->DocAlreadyLoaded( aFilePath, sal_False, bDum );
if ( !pEntry->aDocShell.Is() )
{
pEntry->bOwner = sal_True;
SfxMedium* pMed = new SfxMedium(
aFilePath, ( STREAM_READ | STREAM_SHARE_DENYWRITE ), sal_False, 0 );
const SfxFilter* pFilter = NULL;
pMed->UseInteractionHandler(sal_True);
if (
pSfxApp->GetFilterMatcher().GuessFilter(*pMed, &pFilter, SFX_FILTER_TEMPLATE, 0) ||
(pFilter && !pFilter->IsOwnFormat()) ||
(pFilter && !pFilter->UsesStorage())
)
{
pSfxApp->LoadTemplate( pEntry->aDocShell, aFilePath );
pEntry->bOwnFormat = sal_False;
delete pMed;
if ( pEntry->aDocShell.Is() )
return (SfxObjectShellRef)(SfxObjectShell*)(pEntry->aDocShell);
}
else
{
if ( pFilter )
{
pEntry->bOwnFormat = sal_True;
pEntry->aDocShell = SfxObjectShell::CreateObject( pFilter->GetServiceName(), SFX_CREATE_MODE_ORGANIZER );
if ( pEntry->aDocShell.Is() )
{
pEntry->aDocShell->DoInitNew(0);
pEntry->aDocShell->LoadFrom( *pMed );
// Medium is now owned by DocShell
pEntry->aDocShell->DoSaveCompleted( pMed );
}
}
}
}
}
return ( SfxObjectShellRef )(SfxObjectShell*)(pEntry->aDocShell);
}
//-------------------------------------------------------------------------
sal_Bool SfxOrganizeMgr::DeleteObjectShell(sal_uInt16 nIdx)
/* [Beschreibung]
Freigabe der DokumentShell an der Position nIdx
[Returnwert] sal_True: alles Ok
sal_False: es ist ein Fehler aufgetreten (das
Dokument konnte nicht gesichert werden)
*/
{
return (*pImpl->pDocList)[nIdx]->DeleteObjectShell();
}
//-------------------------------------------------------------------------
SfxObjectShellRef SfxOrganizeMgr::CreateObjectShell(sal_uInt16 nRegion,
sal_uInt16 nIdx)
/* [Beschreibung]
Zugriff auf die DokumentShell an der Position nIdx im Bereich
nRegion (Dokumentvorlage)
[Returnwert] Referenz auf die DokumentShell
*/
{
//(mba)/task SfxWaitCursor aWaitCursor;
return pTemplates->CreateObjectShell(nRegion, nIdx);
}
//-------------------------------------------------------------------------
sal_Bool SfxOrganizeMgr::DeleteObjectShell(sal_uInt16 nRegion, sal_uInt16 nIdx)
/* [Beschreibung]
Freigabe der DokumentShell an der Position nIdx im Bereich
nRegion (Dokumentvorlage)
[Returnwert] sal_True: alles Ok
sal_False: es ist ein Fehler aufgetreten (das
Dokument konnte nicht gesichert werden)
*/
{
return pTemplates->DeleteObjectShell(nRegion, nIdx);
}
//-------------------------------------------------------------------------
sal_Bool SfxOrganizeMgr::Copy(sal_uInt16 nTargetRegion,
sal_uInt16 nTargetIdx,
sal_uInt16 nSourceRegion,
sal_uInt16 nSourceIdx)
/* [Beschreibung]
Kopieren einer Dokumentvorlage
[Parameter]
sal_uInt16 nTargetRegion Index des Zielbereiches
sal_uInt16 nTargetIdx Index Zielposition
sal_uInt16 nSourceRegion Index des Quellbereiches
sal_uInt16 nSourceIdx Index der zu kopierenden / z uverschiebenden
Dokumentvorlage
[R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
[Querverweise]
<SfxDocumentTemplates::Copy(sal_uInt16 nTargetRegion,
sal_uInt16 nTargetIdx,
sal_uInt16 nSourceRegion,
sal_uInt16 nSourceIdx)>
*/
{
if(nSourceIdx == USHRT_MAX) // keine Verzeichnisse kopieren
return sal_False ;
const sal_Bool bOk = pTemplates->Copy(nTargetRegion, nTargetIdx,
nSourceRegion, nSourceIdx);
if(bOk)
bModified = 1;
return bOk;
}
//-------------------------------------------------------------------------
sal_Bool SfxOrganizeMgr::Move(sal_uInt16 nTargetRegion,
sal_uInt16 nTargetIdx,
sal_uInt16 nSourceRegion,
sal_uInt16 nSourceIdx)
/* [Beschreibung]
Verschieben einer Dokumentvorlage
[Parameter]
sal_uInt16 nTargetRegion Index des Zielbereiches
sal_uInt16 nTargetIdx Index Zielposition
sal_uInt16 nSourceRegion Index des Quellbereiches
sal_uInt16 nSourceIdx Index der zu kopierenden / z uverschiebenden
Dokumentvorlage
[R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
[Querverweise]
<SfxDocumentTemplates::Move(sal_uInt16 nTargetRegion,
sal_uInt16 nTargetIdx,
sal_uInt16 nSourceRegion,
sal_uInt16 nSourceIdx)>
*/
{
if(nSourceIdx == USHRT_MAX) // keine Verzeichnisse verschieben
return sal_False ;
const sal_Bool bOk = pTemplates->Move(nTargetRegion, nTargetIdx,
nSourceRegion, nSourceIdx);
if(bOk)
bModified = 1;
return bOk;
}
//-------------------------------------------------------------------------
sal_Bool SfxOrganizeMgr::Delete(SfxOrganizeListBox_Impl *pCaller,
sal_uInt16 nRegion, sal_uInt16 nIdx)
/* [Beschreibung]
"oschen einer Dokumentvorlage
[Parameter]
SfxOrganizeListBox *pCaller rufende ListBox; da dieses
Event durch das Men"u oder
durch das Keyboard angetriggert wird,
mu"s das Model der ListBox anschlie"send
aktualisiert werden.
sal_uInt16 nRegion Index des Bereiches
sal_uInt16 nIdx Index der Dokumentvorlage
[R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
[Querverweise]
<SfxDocumentTemplates::Delete(sal_uInt16 nRegion, sal_uInt16 nIdx)>
*/
{
sal_Bool bOk = sal_False;
if ( USHRT_MAX == nIdx )
{
// deleting of a group
SvLBoxEntry *pGroupToDelete = pCaller->SvLBox::GetEntry(nRegion);
if ( pGroupToDelete )
{
sal_uInt16 nItemNum = (sal_uInt16)( pCaller->GetModel()->GetChildCount( pGroupToDelete ) );
sal_uInt16 nToDeleteNum = 0;
SvLBoxEntry **pEntriesToDelete = new SvLBoxEntry*[nItemNum];
sal_uInt16 nInd = 0;
for ( nInd = 0; nInd < nItemNum; nInd++ )
pEntriesToDelete[nInd] = NULL;
for ( nInd = 0; nInd < nItemNum; nInd++ )
{
// TODO/LATER: check that nInd is the same index that is used in pTemplates
if ( pTemplates->Delete( nRegion, nInd ) )
{
bModified = 1;
pEntriesToDelete[nToDeleteNum++] = pCaller->SvLBox::GetEntry( pGroupToDelete, nInd );
}
}
for ( nInd = 0; nInd < nToDeleteNum; nInd++ )
if ( pEntriesToDelete[nInd] )
pCaller->GetModel()->Remove( pEntriesToDelete[nInd] );
delete[] pEntriesToDelete;
if ( !pCaller->GetModel()->GetChildCount( pGroupToDelete ) )
{
bOk = pTemplates->Delete( nRegion, nIdx );
if ( bOk )
pCaller->GetModel()->Remove( pGroupToDelete );
}
}
}
else
{
// deleting of a template
bOk = pTemplates->Delete(nRegion, nIdx);
if(bOk)
{
bModified = 1;
// zu loeschender Eintrag
SvLBoxEntry *pEntryToDelete = pCaller->SvLBox::GetEntry(pCaller->SvLBox::GetEntry(nRegion), nIdx);
pCaller->GetModel()->Remove(pEntryToDelete);
}
}
return bOk;
}
//-------------------------------------------------------------------------
sal_Bool SfxOrganizeMgr::InsertDir
(
SfxOrganizeListBox_Impl* pCaller,/* rufende ListBox; da dieses Event
durch das Men"u oder durch das
Keyboard angetriggert wird,
mu\s das Model der ListBox
anschlie\send aktualisiert werden */
const String& rText, // logischer Name des Bereiches
sal_uInt16 nRegion // Index des Bereiches
)
/* [Beschreibung]
Einf"ugen eines Bereiches
[R"uckgabewert]
Erfolg (sal_True) oder Mi\serfolg (sal_False)
[Querverweise]
<SfxDocumentTemplates::InsertDir(const String &, sal_uInt16 nRegion)>
*/
{
const sal_Bool bOk = pTemplates->InsertDir(rText, nRegion);
if(bOk)
{
bModified = 1;
SvLBoxEntry *pEntry = pCaller->InsertEntry(rText,
pCaller->GetOpenedBmp(0),
pCaller->GetClosedBmp(0),
0, sal_True, nRegion);
pCaller->Update();
pCaller->EditEntry(pEntry);
}
return bOk;
}
//-------------------------------------------------------------------------
sal_Bool SfxOrganizeMgr::SetName(const String &rName,
sal_uInt16 nRegion, sal_uInt16 nIdx)
/* [Beschreibung]
"Andern eines (logischen) Namens
[Parameter]
const String &rName der neue Name
sal_uInt16 nRegion Index des Bereiches
sal_uInt16 nIdx Index der Dokumentvorlage
[R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
[Querverweise]
<SfxDocumentTemplates::SetName(const String &, sal_uInt16 nRegion, sal_uInt16 nIdx)>
*/
{
const sal_Bool bOk = pTemplates->SetName(rName, nRegion, nIdx);
if(bOk)
bModified = 1;
return bOk;
}
//-------------------------------------------------------------------------
sal_Bool SfxOrganizeMgr::CopyTo(sal_uInt16 nRegion, sal_uInt16 nIdx, const String &rName) const
/* [Beschreibung]
Export einer Vorlage
[Parameter]
sal_uInt16 nRegion Index des Bereiches
sal_uInt16 nIdx Index der Dokumentvorlage
const String &rName Dateiname
[R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
[Querverweise]
<SfxDocumentTemplates::CopyTo( sal_uInt16 nRegion, sal_uInt16 nIdx, const String &)>
*/
{
return pTemplates->CopyTo(nRegion, nIdx, rName);
}
//-------------------------------------------------------------------------
sal_Bool SfxOrganizeMgr::CopyFrom(SfxOrganizeListBox_Impl *pCaller,
sal_uInt16 nRegion, sal_uInt16 nIdx, String &rName)
/* [Beschreibung]
Import einer Vorlage
[Parameter]
SfxOrganizeListBox *pCaller rufende ListBox; da dieses
Event durch das Men"u angetriggert wird,
mu"s das Model der ListBox anschlie"send
aktualisiert werden.
sal_uInt16 nRegion Index des Bereiches
sal_uInt16 nIdx Index der Dokumentvorlage
String &rName Dateiname
[R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
[Querverweise]
<SfxDocumentTemplates::CopyFrom( sal_uInt16 nRegion, sal_uInt16 nIdx, const String &)>
*/
{
SvLBoxEntry *pParent = pCaller->FirstSelected();
if( nIdx!=USHRT_MAX )
pParent = pCaller->GetParent(pParent);
if( pTemplates->CopyFrom( nRegion, nIdx, rName ) )
{
// pCaller aktualisieren
if( nIdx == USHRT_MAX )
nIdx = 0;
else nIdx++;
pCaller->InsertEntry( rName,
pCaller->GetOpenedBmp(1),
pCaller->GetClosedBmp(1),
pParent,
sal_True,
nIdx);
pCaller->Update();
// pCaller->EditEntry( pEntry );
pCaller->Expand( pParent );
bModified = sal_True;
return sal_True;
}
return sal_False;
}
//-------------------------------------------------------------------------
sal_Bool SfxOrganizeMgr::InsertFile( SfxOrganizeListBox_Impl* pCaller, const String& rFileName )
/* [Beschreibung]
Eine Datei in der Dateiansicht hinzuf"ugen
[Parameter]
SfxOrganizeListBox *pCaller rufende ListBox; da dieses
Event durch das Men"u angetriggert wird,
mu"s das Model der ListBox anschlie"send
aktualisiert werden.
const String &rFileName Name der hinzuf"ugenden Datei
[R"uckgabewert] Erfolg (TRUE) oder Mi"serfolg (FALSE)
*/
{
const CollatorWrapper* pCollator = pImpl->pIntlWrapper->getCaseCollator();
_FileListEntry* pEntry = new _FileListEntry( rFileName, pCollator );
if ( pImpl->pDocList->C40_PTR_INSERT( _FileListEntry, pEntry ) )
{
sal_uInt16 nPos = 0;
pImpl->pDocList->Seek_Entry( pEntry, &nPos );
pCaller->InsertEntry( pEntry->aBaseName, pCaller->GetOpenedBmp(1),
pCaller->GetClosedBmp(1), 0, sal_True, nPos );
return sal_True;
}
return sal_False;
}
//-------------------------------------------------------------------------
sal_Bool SfxOrganizeMgr::Rescan()
/* [Beschreibung]
Aktualisieren der Datenbasis
[R"uckgabewert]
sal_True es bestanden Unterschiede
FALSE keine "Anderung
[Querverweise]
<SfxDocumentTemplates::Rescan()>
*/
{
if(pTemplates->Rescan())
{
bModified = sal_True;
return sal_True;
}
return sal_False;
}
//-------------------------------------------------------------------------
void SfxOrganizeMgr::SaveAll(Window *pParent)
/* [Beschreibung]
Schreiben aller ge"anderten Dokumente
[Parameter]
Window *pParent Parent der Boxen f"ur Fehlermeldungen
*/
{
sal_uInt16 nRangeCount = pTemplates->GetRegionCount();
sal_uInt16 i;
for(i = 0; i < nRangeCount; ++i)
{
if( pTemplates->IsRegionLoaded( i ))
{
const sal_uInt16 nCount = pTemplates->GetCount(i);
for(sal_uInt16 j = 0; j < nCount; ++j)
{
if(!pTemplates->DeleteObjectShell(i, j))
{
String aText = String(SfxResId(STR_ERROR_SAVE_TEMPLATE));
aText += pTemplates->GetName(i, j);
ErrorBox aBox(pParent,
WinBits(WB_OK_CANCEL | WB_DEF_CANCEL),
aText);
if(RET_CANCEL == aBox.Execute())
break;
}
}
}
}
nRangeCount = pImpl->pDocList->Count();
for(i = 0; i < nRangeCount; ++i)
{
_FileListEntry *pEntry = (*pImpl->pDocList)[i];
if(!pEntry->DeleteObjectShell())
{
String aText(SfxResId(STR_ERROR_SAVE_TEMPLATE));
aText += pEntry->aBaseName;
ErrorBox aBox(pParent, WinBits(WB_OK_CANCEL | WB_DEF_CANCEL), aText);
if(RET_CANCEL == aBox.Execute())
break;
}
}
}