1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski #include "precompiled_sd.hxx"
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski #include "AllMasterPagesSelector.hxx"
25*b1cdbd2cSJim Jagielski #include "PreviewValueSet.hxx"
26*b1cdbd2cSJim Jagielski #include "ViewShellBase.hxx"
27*b1cdbd2cSJim Jagielski #include "SidebarShellManager.hxx"
28*b1cdbd2cSJim Jagielski #include "MasterPageContainer.hxx"
29*b1cdbd2cSJim Jagielski #include "MasterPageDescriptor.hxx"
30*b1cdbd2cSJim Jagielski #include "app.hrc"
31*b1cdbd2cSJim Jagielski #include "helpids.h"
32*b1cdbd2cSJim Jagielski
33*b1cdbd2cSJim Jagielski #include <tools/link.hxx>
34*b1cdbd2cSJim Jagielski #include <set>
35*b1cdbd2cSJim Jagielski
36*b1cdbd2cSJim Jagielski namespace {
37*b1cdbd2cSJim Jagielski
38*b1cdbd2cSJim Jagielski using namespace sd::sidebar;
39*b1cdbd2cSJim Jagielski
GetURLPriority(const SharedMasterPageDescriptor & rpDescriptor)40*b1cdbd2cSJim Jagielski int GetURLPriority (const SharedMasterPageDescriptor& rpDescriptor)
41*b1cdbd2cSJim Jagielski {
42*b1cdbd2cSJim Jagielski int nPriority (0);
43*b1cdbd2cSJim Jagielski switch (rpDescriptor->GetURLClassification())
44*b1cdbd2cSJim Jagielski {
45*b1cdbd2cSJim Jagielski case MasterPageDescriptor::URLCLASS_USER: nPriority = 0; break;
46*b1cdbd2cSJim Jagielski case MasterPageDescriptor::URLCLASS_LAYOUT: nPriority = 1; break;
47*b1cdbd2cSJim Jagielski case MasterPageDescriptor::URLCLASS_PRESENTATION: nPriority = 2; break;
48*b1cdbd2cSJim Jagielski case MasterPageDescriptor::URLCLASS_OTHER: nPriority = 3; break;
49*b1cdbd2cSJim Jagielski case MasterPageDescriptor::URLCLASS_UNKNOWN: nPriority = 4; break;
50*b1cdbd2cSJim Jagielski default:
51*b1cdbd2cSJim Jagielski case MasterPageDescriptor::URLCLASS_UNDETERMINED: nPriority = 5; break;
52*b1cdbd2cSJim Jagielski }
53*b1cdbd2cSJim Jagielski return nPriority;
54*b1cdbd2cSJim Jagielski }
55*b1cdbd2cSJim Jagielski
56*b1cdbd2cSJim Jagielski
57*b1cdbd2cSJim Jagielski class MasterPageDescriptorOrder
58*b1cdbd2cSJim Jagielski {
59*b1cdbd2cSJim Jagielski public:
operator ()(const SharedMasterPageDescriptor & rp1,const SharedMasterPageDescriptor & rp2)60*b1cdbd2cSJim Jagielski bool operator() (
61*b1cdbd2cSJim Jagielski const SharedMasterPageDescriptor& rp1,
62*b1cdbd2cSJim Jagielski const SharedMasterPageDescriptor& rp2)
63*b1cdbd2cSJim Jagielski {
64*b1cdbd2cSJim Jagielski if (rp1->meOrigin == MasterPageContainer::DEFAULT)
65*b1cdbd2cSJim Jagielski return true;
66*b1cdbd2cSJim Jagielski else if (rp2->meOrigin == MasterPageContainer::DEFAULT)
67*b1cdbd2cSJim Jagielski return false;
68*b1cdbd2cSJim Jagielski else if (rp1->GetURLClassification() == rp2->GetURLClassification())
69*b1cdbd2cSJim Jagielski return rp1->mnTemplateIndex < rp2->mnTemplateIndex;
70*b1cdbd2cSJim Jagielski else
71*b1cdbd2cSJim Jagielski return GetURLPriority(rp1) < GetURLPriority(rp2);
72*b1cdbd2cSJim Jagielski }
73*b1cdbd2cSJim Jagielski };
74*b1cdbd2cSJim Jagielski
75*b1cdbd2cSJim Jagielski } // end of anonymous namespace
76*b1cdbd2cSJim Jagielski
77*b1cdbd2cSJim Jagielski
78*b1cdbd2cSJim Jagielski
79*b1cdbd2cSJim Jagielski namespace sd { namespace sidebar {
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski class AllMasterPagesSelector::SortedMasterPageDescriptorList
82*b1cdbd2cSJim Jagielski : public ::std::set<SharedMasterPageDescriptor,MasterPageDescriptorOrder>
83*b1cdbd2cSJim Jagielski {
84*b1cdbd2cSJim Jagielski public:
SortedMasterPageDescriptorList(void)85*b1cdbd2cSJim Jagielski SortedMasterPageDescriptorList (void) {}
86*b1cdbd2cSJim Jagielski };
87*b1cdbd2cSJim Jagielski
88*b1cdbd2cSJim Jagielski
89*b1cdbd2cSJim Jagielski
90*b1cdbd2cSJim Jagielski
Create(::Window * pParent,ViewShellBase & rViewShellBase,const cssu::Reference<css::ui::XSidebar> & rxSidebar)91*b1cdbd2cSJim Jagielski MasterPagesSelector* AllMasterPagesSelector::Create (
92*b1cdbd2cSJim Jagielski ::Window* pParent,
93*b1cdbd2cSJim Jagielski ViewShellBase& rViewShellBase,
94*b1cdbd2cSJim Jagielski const cssu::Reference<css::ui::XSidebar>& rxSidebar)
95*b1cdbd2cSJim Jagielski {
96*b1cdbd2cSJim Jagielski SdDrawDocument* pDocument = rViewShellBase.GetDocument();
97*b1cdbd2cSJim Jagielski if (pDocument == NULL)
98*b1cdbd2cSJim Jagielski return NULL;
99*b1cdbd2cSJim Jagielski
100*b1cdbd2cSJim Jagielski ::boost::shared_ptr<MasterPageContainer> pContainer (new MasterPageContainer());
101*b1cdbd2cSJim Jagielski
102*b1cdbd2cSJim Jagielski MasterPagesSelector* pSelector(
103*b1cdbd2cSJim Jagielski new AllMasterPagesSelector (
104*b1cdbd2cSJim Jagielski pParent,
105*b1cdbd2cSJim Jagielski *pDocument,
106*b1cdbd2cSJim Jagielski rViewShellBase,
107*b1cdbd2cSJim Jagielski pContainer,
108*b1cdbd2cSJim Jagielski rxSidebar));
109*b1cdbd2cSJim Jagielski pSelector->LateInit();
110*b1cdbd2cSJim Jagielski pSelector->SetHelpId(HID_SD_TASK_PANE_PREVIEW_ALL);
111*b1cdbd2cSJim Jagielski
112*b1cdbd2cSJim Jagielski return pSelector;
113*b1cdbd2cSJim Jagielski }
114*b1cdbd2cSJim Jagielski
115*b1cdbd2cSJim Jagielski
116*b1cdbd2cSJim Jagielski
117*b1cdbd2cSJim Jagielski
AllMasterPagesSelector(::Window * pParent,SdDrawDocument & rDocument,ViewShellBase & rBase,const::boost::shared_ptr<MasterPageContainer> & rpContainer,const cssu::Reference<css::ui::XSidebar> & rxSidebar)118*b1cdbd2cSJim Jagielski AllMasterPagesSelector::AllMasterPagesSelector (
119*b1cdbd2cSJim Jagielski ::Window* pParent,
120*b1cdbd2cSJim Jagielski SdDrawDocument& rDocument,
121*b1cdbd2cSJim Jagielski ViewShellBase& rBase,
122*b1cdbd2cSJim Jagielski const ::boost::shared_ptr<MasterPageContainer>& rpContainer,
123*b1cdbd2cSJim Jagielski const cssu::Reference<css::ui::XSidebar>& rxSidebar)
124*b1cdbd2cSJim Jagielski : MasterPagesSelector(pParent, rDocument, rBase, rpContainer, rxSidebar),
125*b1cdbd2cSJim Jagielski mpSortedMasterPages(new SortedMasterPageDescriptorList())
126*b1cdbd2cSJim Jagielski {
127*b1cdbd2cSJim Jagielski MasterPagesSelector::Fill();
128*b1cdbd2cSJim Jagielski }
129*b1cdbd2cSJim Jagielski
130*b1cdbd2cSJim Jagielski
131*b1cdbd2cSJim Jagielski
132*b1cdbd2cSJim Jagielski
~AllMasterPagesSelector(void)133*b1cdbd2cSJim Jagielski AllMasterPagesSelector::~AllMasterPagesSelector (void)
134*b1cdbd2cSJim Jagielski {
135*b1cdbd2cSJim Jagielski }
136*b1cdbd2cSJim Jagielski
137*b1cdbd2cSJim Jagielski
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim Jagielski
Fill(ItemList & rItemList)140*b1cdbd2cSJim Jagielski void AllMasterPagesSelector::Fill (ItemList& rItemList)
141*b1cdbd2cSJim Jagielski {
142*b1cdbd2cSJim Jagielski if (mpSortedMasterPages->empty())
143*b1cdbd2cSJim Jagielski UpdateMasterPageList();
144*b1cdbd2cSJim Jagielski UpdatePageSet(rItemList);
145*b1cdbd2cSJim Jagielski }
146*b1cdbd2cSJim Jagielski
147*b1cdbd2cSJim Jagielski
148*b1cdbd2cSJim Jagielski
149*b1cdbd2cSJim Jagielski
NotifyContainerChangeEvent(const MasterPageContainerChangeEvent & rEvent)150*b1cdbd2cSJim Jagielski void AllMasterPagesSelector::NotifyContainerChangeEvent (
151*b1cdbd2cSJim Jagielski const MasterPageContainerChangeEvent& rEvent)
152*b1cdbd2cSJim Jagielski {
153*b1cdbd2cSJim Jagielski switch (rEvent.meEventType)
154*b1cdbd2cSJim Jagielski {
155*b1cdbd2cSJim Jagielski case MasterPageContainerChangeEvent::CHILD_ADDED:
156*b1cdbd2cSJim Jagielski AddItem(rEvent.maChildToken);
157*b1cdbd2cSJim Jagielski MasterPagesSelector::Fill();
158*b1cdbd2cSJim Jagielski break;
159*b1cdbd2cSJim Jagielski
160*b1cdbd2cSJim Jagielski case MasterPageContainerChangeEvent::INDEX_CHANGED:
161*b1cdbd2cSJim Jagielski case MasterPageContainerChangeEvent::INDEXES_CHANGED:
162*b1cdbd2cSJim Jagielski mpSortedMasterPages->clear();
163*b1cdbd2cSJim Jagielski MasterPagesSelector::Fill();
164*b1cdbd2cSJim Jagielski break;
165*b1cdbd2cSJim Jagielski
166*b1cdbd2cSJim Jagielski default:
167*b1cdbd2cSJim Jagielski MasterPagesSelector::NotifyContainerChangeEvent(rEvent);
168*b1cdbd2cSJim Jagielski break;
169*b1cdbd2cSJim Jagielski }
170*b1cdbd2cSJim Jagielski }
171*b1cdbd2cSJim Jagielski
172*b1cdbd2cSJim Jagielski
173*b1cdbd2cSJim Jagielski
174*b1cdbd2cSJim Jagielski
UpdateMasterPageList(void)175*b1cdbd2cSJim Jagielski void AllMasterPagesSelector::UpdateMasterPageList (void)
176*b1cdbd2cSJim Jagielski {
177*b1cdbd2cSJim Jagielski mpSortedMasterPages->clear();
178*b1cdbd2cSJim Jagielski int nTokenCount = mpContainer->GetTokenCount();
179*b1cdbd2cSJim Jagielski for (int i=0; i<nTokenCount; i++)
180*b1cdbd2cSJim Jagielski AddItem(mpContainer->GetTokenForIndex(i));
181*b1cdbd2cSJim Jagielski }
182*b1cdbd2cSJim Jagielski
183*b1cdbd2cSJim Jagielski
184*b1cdbd2cSJim Jagielski
185*b1cdbd2cSJim Jagielski
AddItem(MasterPageContainer::Token aToken)186*b1cdbd2cSJim Jagielski void AllMasterPagesSelector::AddItem (MasterPageContainer::Token aToken)
187*b1cdbd2cSJim Jagielski {
188*b1cdbd2cSJim Jagielski switch (mpContainer->GetOriginForToken(aToken))
189*b1cdbd2cSJim Jagielski {
190*b1cdbd2cSJim Jagielski case MasterPageContainer::DEFAULT:
191*b1cdbd2cSJim Jagielski case MasterPageContainer::TEMPLATE:
192*b1cdbd2cSJim Jagielski // Templates are added only when coming from the
193*b1cdbd2cSJim Jagielski // MasterPageContainerFiller so that they have an id which
194*b1cdbd2cSJim Jagielski // defines their place in the list. Templates (pre) loaded from
195*b1cdbd2cSJim Jagielski // RecentlyUsedMasterPages are ignored (they will be loaded
196*b1cdbd2cSJim Jagielski // later by the MasterPageContainerFiller.)
197*b1cdbd2cSJim Jagielski if (mpContainer->GetTemplateIndexForToken(aToken) >= 0)
198*b1cdbd2cSJim Jagielski mpSortedMasterPages->insert(mpContainer->GetDescriptorForToken(aToken));
199*b1cdbd2cSJim Jagielski break;
200*b1cdbd2cSJim Jagielski
201*b1cdbd2cSJim Jagielski default:
202*b1cdbd2cSJim Jagielski break;
203*b1cdbd2cSJim Jagielski }
204*b1cdbd2cSJim Jagielski }
205*b1cdbd2cSJim Jagielski
206*b1cdbd2cSJim Jagielski
207*b1cdbd2cSJim Jagielski
208*b1cdbd2cSJim Jagielski
UpdatePageSet(ItemList & rItemList)209*b1cdbd2cSJim Jagielski void AllMasterPagesSelector::UpdatePageSet (ItemList& rItemList)
210*b1cdbd2cSJim Jagielski {
211*b1cdbd2cSJim Jagielski SortedMasterPageDescriptorList::const_iterator iDescriptor;
212*b1cdbd2cSJim Jagielski SortedMasterPageDescriptorList::const_iterator iEnd (mpSortedMasterPages->end());
213*b1cdbd2cSJim Jagielski for (iDescriptor=mpSortedMasterPages->begin(); iDescriptor!=iEnd; ++iDescriptor)
214*b1cdbd2cSJim Jagielski rItemList.push_back((*iDescriptor)->maToken);
215*b1cdbd2cSJim Jagielski }
216*b1cdbd2cSJim Jagielski
217*b1cdbd2cSJim Jagielski
218*b1cdbd2cSJim Jagielski
219*b1cdbd2cSJim Jagielski
GetState(SfxItemSet & rItemSet)220*b1cdbd2cSJim Jagielski void AllMasterPagesSelector::GetState (SfxItemSet& rItemSet)
221*b1cdbd2cSJim Jagielski {
222*b1cdbd2cSJim Jagielski // MasterPagesSelector::GetState(rItemSet);
223*b1cdbd2cSJim Jagielski
224*b1cdbd2cSJim Jagielski if (rItemSet.GetItemState(SID_TP_EDIT_MASTER) == SFX_ITEM_AVAILABLE)
225*b1cdbd2cSJim Jagielski rItemSet.DisableItem(SID_TP_EDIT_MASTER);
226*b1cdbd2cSJim Jagielski }
227*b1cdbd2cSJim Jagielski
228*b1cdbd2cSJim Jagielski
229*b1cdbd2cSJim Jagielski
230*b1cdbd2cSJim Jagielski
231*b1cdbd2cSJim Jagielski } } // end of namespace sd::sidebar
232