/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * 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 .
*/
// Read the names and URLs of the master pages. const Sequence<OUString> aKeys (xSet->getElementNames());
mvMasterPages.clear();
mvMasterPages.reserve(aKeys.getLength()); for (constauto& rKey : aKeys)
{
Reference<container::XNameAccess> xSetItem (
xSet->getByName(rKey), UNO_QUERY); if (xSetItem.is())
{
Any aURL (xSetItem->getByName(sURLMemberName));
Any aName (xSetItem->getByName(sNameMemberName));
aURL >>= sURL;
aName >>= sName;
SharedMasterPageDescriptor pDescriptor = std::make_shared<MasterPageDescriptor>(
MasterPageContainer::TEMPLATE,
-1,
sURL,
OUString(),
sName, false,
std::make_shared<TemplatePageObjectProvider>(sURL),
std::make_shared<TemplatePreviewProvider>(sURL)); // For user supplied templates we use a different // preview provider: The preview in the document shows // not only shapes on the master page but also shapes on // the foreground. This is misleading and therefore // these previews are discarded and created directly // from the page objects. if (pDescriptor->GetURLClassification() == MasterPageDescriptor::URLCLASS_USER)
pDescriptor->mpPreviewProvider = std::make_shared<PagePreviewProvider>();
MasterPageContainer::Token aToken (mpContainer->PutMasterPage(pDescriptor));
mvMasterPages.emplace_back(aToken,sURL,sName);
}
}
IMPL_LINK(RecentlyUsedMasterPages, MasterPageChangeListener,
MasterPageObserverEvent&, rEvent, void)
{ switch (rEvent.meType)
{ case MasterPageObserverEvent::ET_MASTER_PAGE_ADDED: case MasterPageObserverEvent::ET_MASTER_PAGE_EXISTS:
AddMasterPage(
mpContainer->GetTokenForStyleName(rEvent.mrMasterPageName)); break;
case MasterPageObserverEvent::ET_MASTER_PAGE_REMOVED: // Do not change the list of recently master pages (the deleted // page was recently used) but tell the listeners. They may want // to update their lists.
SendEvent(); break;
}
}
IMPL_LINK(RecentlyUsedMasterPages, MasterPageContainerChangeListener,
MasterPageContainerChangeEvent&, rEvent, void)
{ switch (rEvent.meEventType)
{ case MasterPageContainerChangeEvent::EventType::CHILD_ADDED: case MasterPageContainerChangeEvent::EventType::CHILD_REMOVED: case MasterPageContainerChangeEvent::EventType::INDEX_CHANGED:
ResolveList(); break;
default: // Ignored. break;
}
}
void RecentlyUsedMasterPages::AddMasterPage (
MasterPageContainer::Token aToken)
{ // For the page to be inserted the token has to be valid and the page // has to have a valid URL. This excludes master pages that do not come // from template files. if (aToken == MasterPageContainer::NIL_TOKEN
|| mpContainer->GetURLForToken(aToken).isEmpty()) return;
MasterPageList::iterator aIterator (
::std::find_if(mvMasterPages.begin(),mvMasterPages.end(),
Descriptor::TokenComparator(aToken))); if (aIterator != mvMasterPages.end())
{ // When an entry for the given token already exists then remove // it now and insert it later at the head of the list.
mvMasterPages.erase (aIterator);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.