| /************************************************************** |
| * |
| * 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; |
| } |
| } |
| } |
| |
| |