// 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.