Files
libreoffice/sd/source/ui/toolpanel/controls/RecentMasterPagesSelector.cxx
Kurt Zenker f0ef60f6cd INTEGRATION: CWS taskpane (1.6.116); FILE MERGED
2006/03/24 12:30:16 af 1.6.116.3: #i61115# Reorganization of acessing the valueset.
2006/02/22 09:51:30 af 1.6.116.2: #i61359# Major restructuring of MasterPageContainer and MasterPagesSelector.
2006/02/17 13:37:33 af 1.6.116.1: #i61359# Major restructuring of MasterPageContainer and MasterPagesSelector.
2006-04-26 19:52:32 +00:00

151 lines
4.7 KiB
C++

/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: RecentMasterPagesSelector.cxx,v $
*
* $Revision: 1.7 $
*
* last change: $Author: kz $ $Date: 2006-04-26 20:52:32 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
************************************************************************/
#include "RecentMasterPagesSelector.hxx"
#include "PreviewValueSet.hxx"
#include "RecentlyUsedMasterPages.hxx"
#include "MasterPageContainerProviders.hxx"
#include "MasterPageObserver.hxx"
#include "sdpage.hxx"
#include "drawdoc.hxx"
#include <vcl/bitmap.hxx>
#include <tools/color.hxx>
namespace sd { namespace toolpanel { namespace controls {
RecentMasterPagesSelector::RecentMasterPagesSelector (
TreeNode* pParent,
SdDrawDocument& rDocument,
ViewShellBase& rBase,
const ::boost::shared_ptr<MasterPageContainer>& rpContainer)
: MasterPagesSelector (pParent, rDocument, rBase, rpContainer)
{
SetName (String(RTL_CONSTASCII_USTRINGPARAM("RecentMasterPagesSelector")));
}
RecentMasterPagesSelector::~RecentMasterPagesSelector (void)
{
RecentlyUsedMasterPages::Instance().RemoveEventListener (
LINK(this,RecentMasterPagesSelector,MasterPageListListener));
}
void RecentMasterPagesSelector::LateInit (void)
{
MasterPagesSelector::LateInit();
MasterPagesSelector::Fill();
RecentlyUsedMasterPages::Instance().AddEventListener (
LINK(this,RecentMasterPagesSelector,MasterPageListListener));
}
IMPL_LINK(RecentMasterPagesSelector,MasterPageListListener, void*, pUnused)
{
MasterPagesSelector::Fill();
return 0;
}
void RecentMasterPagesSelector::Fill (ItemList& rItemList)
{
// Create a set of names of the master pages used by the document.
MasterPageObserver::MasterPageNameSet aCurrentNames;
USHORT nMasterPageCount = mrDocument.GetMasterSdPageCount(PK_STANDARD);
USHORT nIndex;
for (nIndex=0; nIndex<nMasterPageCount; nIndex++)
{
SdPage* pMasterPage = mrDocument.GetMasterSdPage (nIndex, PK_STANDARD);
if (pMasterPage != NULL)
aCurrentNames.insert (pMasterPage->GetName());
}
MasterPageObserver::MasterPageNameSet::iterator aI;
// Insert the recently used master pages that are currently not used.
RecentlyUsedMasterPages& rInstance (RecentlyUsedMasterPages::Instance());
int nPageCount = rInstance.GetMasterPageCount();
for (nIndex=0; nIndex<nPageCount; nIndex++)
{
// Add an entry when a) the page is already known to the
// MasterPageContainer, b) the style name is empty, i.e. it has not yet
// been loaded (and thus can not be in use) or otherwise c) the
// style name is not currently in use.
MasterPageContainer::Token aToken (rInstance.GetTokenForIndex(nIndex));
if (aToken != MasterPageContainer::NIL_TOKEN)
{
String sStyleName (mpContainer->GetStyleNameForToken(aToken));
if (sStyleName.Len()==0
|| aCurrentNames.find(sStyleName) == aCurrentNames.end())
{
rItemList.push_back(aToken);
}
}
}
}
void RecentMasterPagesSelector::AssignMasterPageToPageList (
SdPage* pMasterPage,
const ::std::vector<SdPage*>& rPageList)
{
USHORT nSelectedItemId = mpPageSet->GetSelectItemId();
MasterPagesSelector::AssignMasterPageToPageList(pMasterPage, rPageList);
// Restore the selection.
if (mpPageSet->GetItemCount() > 0)
{
if (mpPageSet->GetItemCount() >= nSelectedItemId)
mpPageSet->SelectItem(nSelectedItemId);
else
mpPageSet->SelectItem(mpPageSet->GetItemCount());
}
}
} } } // end of namespace ::sd::toolpanel::controls