| /************************************************************** |
| * |
| * 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 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| #include "precompiled_sd.hxx" |
| |
| #include "MasterPageContainerFiller.hxx" |
| |
| #include "MasterPageDescriptor.hxx" |
| #include "MasterPageContainerProviders.hxx" |
| #include "TemplateScanner.hxx" |
| |
| using namespace ::com::sun::star; |
| using namespace ::com::sun::star::uno; |
| |
| |
| namespace sd { namespace sidebar { |
| |
| MasterPageContainerFiller::MasterPageContainerFiller (ContainerAdapter& rpAdapter) |
| : mrContainerAdapter(rpAdapter), |
| meState(INITIALIZE_TEMPLATE_SCANNER), |
| mpScannerTask(), |
| mpLastAddedEntry(NULL), |
| mnIndex(1) |
| { |
| // Add one entry for the default master page. We use temporarily the |
| // DefaultPagePreviewProvider to prevent the rendering (and the |
| // expensive creation) of the default page. It is replaced later on by |
| // another. |
| SharedMasterPageDescriptor pDescriptor (new MasterPageDescriptor( |
| MasterPageContainer::DEFAULT, |
| 0, |
| String(), |
| String(), |
| String(), |
| false, |
| ::boost::shared_ptr<PageObjectProvider>(new DefaultPageObjectProvider()), |
| ::boost::shared_ptr<PreviewProvider>(new PagePreviewProvider()))); |
| mrContainerAdapter.PutMasterPage(pDescriptor); |
| } |
| |
| |
| |
| |
| MasterPageContainerFiller::~MasterPageContainerFiller (void) |
| { |
| } |
| |
| |
| |
| |
| void MasterPageContainerFiller::RunNextStep (void) |
| { |
| switch (meState) |
| { |
| case INITIALIZE_TEMPLATE_SCANNER: |
| mpScannerTask.reset(new TemplateScanner()); |
| meState = SCAN_TEMPLATE; |
| break; |
| |
| case SCAN_TEMPLATE: |
| meState = ScanTemplate(); |
| break; |
| |
| case ADD_TEMPLATE: |
| meState = AddTemplate(); |
| break; |
| |
| case DONE: |
| case ERROR: |
| default: |
| break; |
| } |
| |
| // When the state has just been set to DONE or ERROR then tell the |
| // container that no more templates will be coming and stop the |
| // scanning. |
| switch (meState) |
| { |
| case DONE: |
| case ERROR: |
| if (mpScannerTask.get() != NULL) |
| { |
| mrContainerAdapter.FillingDone(); |
| mpScannerTask.reset(); |
| } |
| default: |
| break; |
| } |
| } |
| |
| |
| |
| |
| bool MasterPageContainerFiller::HasNextStep (void) |
| { |
| switch (meState) |
| { |
| case DONE: |
| case ERROR: |
| return false; |
| |
| default: |
| return true; |
| } |
| } |
| |
| |
| |
| |
| MasterPageContainerFiller::State MasterPageContainerFiller::ScanTemplate (void) |
| { |
| State eState (ERROR); |
| |
| if (mpScannerTask.get() != NULL) |
| { |
| if (mpScannerTask->HasNextStep()) |
| { |
| mpScannerTask->RunNextStep(); |
| if (mpScannerTask->GetLastAddedEntry() != mpLastAddedEntry) |
| { |
| mpLastAddedEntry = mpScannerTask->GetLastAddedEntry(); |
| if (mpLastAddedEntry != NULL) |
| eState = ADD_TEMPLATE; |
| else |
| eState = SCAN_TEMPLATE; |
| } |
| else |
| eState = SCAN_TEMPLATE; |
| } |
| else |
| eState = DONE; |
| } |
| |
| return eState; |
| } |
| |
| |
| |
| |
| MasterPageContainerFiller::State MasterPageContainerFiller::AddTemplate (void) |
| { |
| if (mpLastAddedEntry != NULL) |
| { |
| SharedMasterPageDescriptor pDescriptor (new MasterPageDescriptor( |
| MasterPageContainer::TEMPLATE, |
| mnIndex, |
| mpLastAddedEntry->msPath, |
| mpLastAddedEntry->msTitle, |
| String(), |
| false, |
| ::boost::shared_ptr<PageObjectProvider>( |
| new TemplatePageObjectProvider(mpLastAddedEntry->msPath)), |
| ::boost::shared_ptr<PreviewProvider>( |
| new TemplatePreviewProvider(mpLastAddedEntry->msPath)))); |
| // 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 = ::boost::shared_ptr<PreviewProvider>( |
| new PagePreviewProvider()); |
| |
| mrContainerAdapter.PutMasterPage(pDescriptor); |
| ++mnIndex; |
| } |
| |
| return SCAN_TEMPLATE; |
| } |
| |
| |
| |
| } } // end of namespace sd::sidebar |