xref: /AOO41X/main/sd/source/ui/sidebar/RecentMasterPagesSelector.cxx (revision 203bf764a5133516e90149b8ba21f77bd0c5f202)
102c50d82SAndre Fischer /**************************************************************
202c50d82SAndre Fischer  *
302c50d82SAndre Fischer  * Licensed to the Apache Software Foundation (ASF) under one
402c50d82SAndre Fischer  * or more contributor license agreements.  See the NOTICE file
502c50d82SAndre Fischer  * distributed with this work for additional information
602c50d82SAndre Fischer  * regarding copyright ownership.  The ASF licenses this file
702c50d82SAndre Fischer  * to you under the Apache License, Version 2.0 (the
802c50d82SAndre Fischer  * "License"); you may not use this file except in compliance
902c50d82SAndre Fischer  * with the License.  You may obtain a copy of the License at
1002c50d82SAndre Fischer  *
1102c50d82SAndre Fischer  *   http://www.apache.org/licenses/LICENSE-2.0
1202c50d82SAndre Fischer  *
1302c50d82SAndre Fischer  * Unless required by applicable law or agreed to in writing,
1402c50d82SAndre Fischer  * software distributed under the License is distributed on an
1502c50d82SAndre Fischer  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1602c50d82SAndre Fischer  * KIND, either express or implied.  See the License for the
1702c50d82SAndre Fischer  * specific language governing permissions and limitations
1802c50d82SAndre Fischer  * under the License.
1902c50d82SAndre Fischer  *
2002c50d82SAndre Fischer  *************************************************************/
2102c50d82SAndre Fischer 
2202c50d82SAndre Fischer #include "precompiled_sd.hxx"
2302c50d82SAndre Fischer 
2402c50d82SAndre Fischer #include "RecentMasterPagesSelector.hxx"
2502c50d82SAndre Fischer 
2602c50d82SAndre Fischer #include "ViewShellBase.hxx"
2702c50d82SAndre Fischer #include "RecentlyUsedMasterPages.hxx"
2802c50d82SAndre Fischer #include "MasterPageContainerProviders.hxx"
2902c50d82SAndre Fischer #include "MasterPageObserver.hxx"
3002c50d82SAndre Fischer #include "SidebarShellManager.hxx"
3102c50d82SAndre Fischer #include "sdpage.hxx"
3202c50d82SAndre Fischer #include "drawdoc.hxx"
3302c50d82SAndre Fischer #include "app.hrc"
3402c50d82SAndre Fischer #include "helpids.h"
3502c50d82SAndre Fischer 
3602c50d82SAndre Fischer #include <vcl/bitmap.hxx>
3702c50d82SAndre Fischer #include <tools/color.hxx>
3802c50d82SAndre Fischer 
3902c50d82SAndre Fischer namespace sd { namespace sidebar {
4002c50d82SAndre Fischer 
Create(::Window * pParent,ViewShellBase & rViewShellBase,const cssu::Reference<css::ui::XSidebar> & rxSidebar)4102c50d82SAndre Fischer MasterPagesSelector* RecentMasterPagesSelector::Create (
4202c50d82SAndre Fischer     ::Window* pParent,
4302c50d82SAndre Fischer     ViewShellBase& rViewShellBase,
4402c50d82SAndre Fischer     const cssu::Reference<css::ui::XSidebar>& rxSidebar)
4502c50d82SAndre Fischer {
4602c50d82SAndre Fischer     SdDrawDocument* pDocument = rViewShellBase.GetDocument();
4702c50d82SAndre Fischer     if (pDocument == NULL)
4802c50d82SAndre Fischer         return NULL;
4902c50d82SAndre Fischer 
5002c50d82SAndre Fischer     ::boost::shared_ptr<MasterPageContainer> pContainer (new MasterPageContainer());
5102c50d82SAndre Fischer 
5202c50d82SAndre Fischer     MasterPagesSelector* pSelector(
5302c50d82SAndre Fischer         new RecentMasterPagesSelector (
5402c50d82SAndre Fischer             pParent,
5502c50d82SAndre Fischer             *pDocument,
5602c50d82SAndre Fischer             rViewShellBase,
5702c50d82SAndre Fischer             pContainer,
5802c50d82SAndre Fischer             rxSidebar));
5902c50d82SAndre Fischer     pSelector->LateInit();
6002c50d82SAndre Fischer     pSelector->SetHelpId(HID_SD_TASK_PANE_PREVIEW_RECENT);
6102c50d82SAndre Fischer 
6202c50d82SAndre Fischer     return pSelector;
6302c50d82SAndre Fischer }
6402c50d82SAndre Fischer 
6502c50d82SAndre Fischer 
6602c50d82SAndre Fischer 
RecentMasterPagesSelector(::Window * pParent,SdDrawDocument & rDocument,ViewShellBase & rBase,const::boost::shared_ptr<MasterPageContainer> & rpContainer,const cssu::Reference<css::ui::XSidebar> & rxSidebar)6702c50d82SAndre Fischer RecentMasterPagesSelector::RecentMasterPagesSelector (
6802c50d82SAndre Fischer     ::Window* pParent,
6902c50d82SAndre Fischer     SdDrawDocument& rDocument,
7002c50d82SAndre Fischer     ViewShellBase& rBase,
7102c50d82SAndre Fischer     const ::boost::shared_ptr<MasterPageContainer>& rpContainer,
7202c50d82SAndre Fischer     const cssu::Reference<css::ui::XSidebar>& rxSidebar)
7302c50d82SAndre Fischer     : MasterPagesSelector (pParent, rDocument, rBase, rpContainer, rxSidebar)
7402c50d82SAndre Fischer {
7502c50d82SAndre Fischer }
7602c50d82SAndre Fischer 
7702c50d82SAndre Fischer 
7802c50d82SAndre Fischer 
~RecentMasterPagesSelector(void)7902c50d82SAndre Fischer RecentMasterPagesSelector::~RecentMasterPagesSelector (void)
8002c50d82SAndre Fischer {
8102c50d82SAndre Fischer     RecentlyUsedMasterPages::Instance().RemoveEventListener (
8202c50d82SAndre Fischer         LINK(this,RecentMasterPagesSelector,MasterPageListListener));
8302c50d82SAndre Fischer }
8402c50d82SAndre Fischer 
8502c50d82SAndre Fischer 
8602c50d82SAndre Fischer 
LateInit(void)8702c50d82SAndre Fischer void RecentMasterPagesSelector::LateInit (void)
8802c50d82SAndre Fischer {
8902c50d82SAndre Fischer     MasterPagesSelector::LateInit();
9002c50d82SAndre Fischer 
9102c50d82SAndre Fischer     MasterPagesSelector::Fill();
9202c50d82SAndre Fischer     RecentlyUsedMasterPages::Instance().AddEventListener (
9302c50d82SAndre Fischer         LINK(this,RecentMasterPagesSelector,MasterPageListListener));
9402c50d82SAndre Fischer }
9502c50d82SAndre Fischer 
9602c50d82SAndre Fischer 
9702c50d82SAndre Fischer 
IMPL_LINK(RecentMasterPagesSelector,MasterPageListListener,void *,EMPTYARG)9802c50d82SAndre Fischer IMPL_LINK(RecentMasterPagesSelector,MasterPageListListener, void*, EMPTYARG)
9902c50d82SAndre Fischer {
10002c50d82SAndre Fischer     MasterPagesSelector::Fill();
10102c50d82SAndre Fischer     return 0;
10202c50d82SAndre Fischer }
10302c50d82SAndre Fischer 
10402c50d82SAndre Fischer 
10502c50d82SAndre Fischer 
Fill(ItemList & rItemList)10602c50d82SAndre Fischer void RecentMasterPagesSelector::Fill (ItemList& rItemList)
10702c50d82SAndre Fischer {
10802c50d82SAndre Fischer     // Create a set of names of the master pages used by the document.
10902c50d82SAndre Fischer     MasterPageObserver::MasterPageNameSet aCurrentNames;
11002c50d82SAndre Fischer     sal_uInt16 nMasterPageCount = mrDocument.GetMasterSdPageCount(PK_STANDARD);
11102c50d82SAndre Fischer     sal_uInt16 nIndex;
11202c50d82SAndre Fischer     for (nIndex=0; nIndex<nMasterPageCount; nIndex++)
11302c50d82SAndre Fischer     {
11402c50d82SAndre Fischer         SdPage* pMasterPage = mrDocument.GetMasterSdPage (nIndex, PK_STANDARD);
11502c50d82SAndre Fischer         if (pMasterPage != NULL)
11602c50d82SAndre Fischer             aCurrentNames.insert (pMasterPage->GetName());
11702c50d82SAndre Fischer     }
11802c50d82SAndre Fischer     MasterPageObserver::MasterPageNameSet::iterator aI;
11902c50d82SAndre Fischer 
12002c50d82SAndre Fischer     // Insert the recently used master pages that are currently not used.
12102c50d82SAndre Fischer     RecentlyUsedMasterPages& rInstance (RecentlyUsedMasterPages::Instance());
12202c50d82SAndre Fischer     int nPageCount = rInstance.GetMasterPageCount();
12302c50d82SAndre Fischer     for (nIndex=0; nIndex<nPageCount; nIndex++)
12402c50d82SAndre Fischer     {
12502c50d82SAndre Fischer         // Add an entry when a) the page is already known to the
12602c50d82SAndre Fischer         // MasterPageContainer, b) the style name is empty, i.e. it has not yet
12702c50d82SAndre Fischer         // been loaded (and thus can not be in use) or otherwise c) the
12802c50d82SAndre Fischer         // style name is not currently in use.
12902c50d82SAndre Fischer         MasterPageContainer::Token aToken (rInstance.GetTokenForIndex(nIndex));
13002c50d82SAndre Fischer         if (aToken != MasterPageContainer::NIL_TOKEN)
13102c50d82SAndre Fischer         {
13202c50d82SAndre Fischer             String sStyleName (mpContainer->GetStyleNameForToken(aToken));
13302c50d82SAndre Fischer             if (sStyleName.Len()==0
13402c50d82SAndre Fischer                 || aCurrentNames.find(sStyleName) == aCurrentNames.end())
13502c50d82SAndre Fischer             {
13602c50d82SAndre Fischer                 rItemList.push_back(aToken);
13702c50d82SAndre Fischer             }
13802c50d82SAndre Fischer         }
13902c50d82SAndre Fischer     }
14002c50d82SAndre Fischer }
14102c50d82SAndre Fischer 
14202c50d82SAndre Fischer 
14302c50d82SAndre Fischer 
AssignMasterPageToPageList(SdPage * pMasterPage,const::boost::shared_ptr<std::vector<SdPage * >> & rpPageList)14402c50d82SAndre Fischer void RecentMasterPagesSelector::AssignMasterPageToPageList (
14502c50d82SAndre Fischer     SdPage* pMasterPage,
14602c50d82SAndre Fischer     const ::boost::shared_ptr<std::vector<SdPage*> >& rpPageList)
14702c50d82SAndre Fischer {
14802c50d82SAndre Fischer 	sal_uInt16 nSelectedItemId = PreviewValueSet::GetSelectItemId();
14902c50d82SAndre Fischer 
15002c50d82SAndre Fischer     MasterPagesSelector::AssignMasterPageToPageList(pMasterPage, rpPageList);
15102c50d82SAndre Fischer 
15202c50d82SAndre Fischer     // Restore the selection.
15302c50d82SAndre Fischer     if (PreviewValueSet::GetItemCount() > 0)
15402c50d82SAndre Fischer     {
15502c50d82SAndre Fischer         if (PreviewValueSet::GetItemCount() >= nSelectedItemId)
15602c50d82SAndre Fischer             PreviewValueSet::SelectItem(nSelectedItemId);
15702c50d82SAndre Fischer         else
15802c50d82SAndre Fischer             PreviewValueSet::SelectItem(PreviewValueSet::GetItemCount());
15902c50d82SAndre Fischer     }
16002c50d82SAndre Fischer }
16102c50d82SAndre Fischer 
16202c50d82SAndre Fischer 
16302c50d82SAndre Fischer 
ProcessPopupMenu(Menu & rMenu)16402c50d82SAndre Fischer void RecentMasterPagesSelector::ProcessPopupMenu (Menu& rMenu)
16502c50d82SAndre Fischer {
16602c50d82SAndre Fischer     if (rMenu.GetItemPos(SID_TP_EDIT_MASTER) != MENU_ITEM_NOTFOUND)
16702c50d82SAndre Fischer         rMenu.EnableItem(SID_TP_EDIT_MASTER, sal_False);
168*203bf764Smseidel     // Disable some entries
169*203bf764Smseidel     if (mpContainer->GetPreviewSize() == MasterPageContainer::SMALL)
170*203bf764Smseidel         rMenu.EnableItem(SID_TP_SHOW_SMALL_PREVIEW, sal_False);
171*203bf764Smseidel     else
172*203bf764Smseidel         rMenu.EnableItem(SID_TP_SHOW_LARGE_PREVIEW, sal_False);
17302c50d82SAndre Fischer }
17402c50d82SAndre Fischer 
17502c50d82SAndre Fischer } } // end of namespace sd::sidebar
176*203bf764Smseidel 
177*203bf764Smseidel /* vim: set noet sw=4 ts=4: */
178