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 #ifndef SD_SIDEBAR_PANELS_MASTER_PAGE_CONTAINER_PROVIDERS_HXX 23*b1cdbd2cSJim Jagielski #define SD_SIDEBAR_PANELS_MASTER_PAGE_CONTAINER_PROVIDERS_HXX 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski #include <rtl/ustring.hxx> 26*b1cdbd2cSJim Jagielski #include <sfx2/objsh.hxx> 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski class Image; 29*b1cdbd2cSJim Jagielski class SdDrawDocument; 30*b1cdbd2cSJim Jagielski class SdPage; 31*b1cdbd2cSJim Jagielski namespace sd { class PreviewRenderer; } 32*b1cdbd2cSJim Jagielski namespace sd { class DrawDocShell; } 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski namespace sd { namespace sidebar { 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski /** Interface for a provider of page objects. It is used by the 39*b1cdbd2cSJim Jagielski MasterPageDescriptor to create master page objects on demand. 40*b1cdbd2cSJim Jagielski */ 41*b1cdbd2cSJim Jagielski class PageObjectProvider 42*b1cdbd2cSJim Jagielski { 43*b1cdbd2cSJim Jagielski public: 44*b1cdbd2cSJim Jagielski /** Return a master page either by returning an already existing one, by 45*b1cdbd2cSJim Jagielski creating a new page, or by loading a document. 46*b1cdbd2cSJim Jagielski @param pDocument 47*b1cdbd2cSJim Jagielski The document of the MasterPageContainer. It may be used to 48*b1cdbd2cSJim Jagielski create new pages. 49*b1cdbd2cSJim Jagielski */ 50*b1cdbd2cSJim Jagielski virtual SdPage* operator() (SdDrawDocument* pDocument) = 0; 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski /** An abstract value for the expected cost of providing a master page 53*b1cdbd2cSJim Jagielski object. 54*b1cdbd2cSJim Jagielski @return 55*b1cdbd2cSJim Jagielski A value of 0 represents for the lowest cost, i.e. an almost 56*b1cdbd2cSJim Jagielski immediate return. Positive values stand for higher costs. 57*b1cdbd2cSJim Jagielski Negative values are not supported. 58*b1cdbd2cSJim Jagielski */ 59*b1cdbd2cSJim Jagielski virtual int GetCostIndex (void) = 0; 60*b1cdbd2cSJim Jagielski 61*b1cdbd2cSJim Jagielski virtual bool operator== (const PageObjectProvider& rProvider) = 0; 62*b1cdbd2cSJim Jagielski }; 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski 67*b1cdbd2cSJim Jagielski class PreviewProvider 68*b1cdbd2cSJim Jagielski { 69*b1cdbd2cSJim Jagielski public: 70*b1cdbd2cSJim Jagielski /** Create a preview image in the specified width. 71*b1cdbd2cSJim Jagielski @param nWidth 72*b1cdbd2cSJim Jagielski Requested width of the preview. The calling method can cope 73*b1cdbd2cSJim Jagielski with other sizes as well but the resulting image quality is 74*b1cdbd2cSJim Jagielski better when the returned image has the requested size. 75*b1cdbd2cSJim Jagielski @param pPage 76*b1cdbd2cSJim Jagielski Page object for which a preview is requested. This may be NULL 77*b1cdbd2cSJim Jagielski when the page object is expensive to get and the PreviewProvider 78*b1cdbd2cSJim Jagielski does not need this object (NeedsPageObject() returns false.) 79*b1cdbd2cSJim Jagielski @param rRenderer 80*b1cdbd2cSJim Jagielski This PreviewRenderer may be used by the PreviewProvider to 81*b1cdbd2cSJim Jagielski create a preview image. 82*b1cdbd2cSJim Jagielski */ 83*b1cdbd2cSJim Jagielski virtual Image operator() (int nWidth, SdPage* pPage, ::sd::PreviewRenderer& rRenderer) = 0; 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski /** Return a value that indicates how expensive the creation of a 86*b1cdbd2cSJim Jagielski preview image is. The higher the returned value the more expensive 87*b1cdbd2cSJim Jagielski is the preview creation. Return 0 when the preview is already 88*b1cdbd2cSJim Jagielski present and can be returned immediately. 89*b1cdbd2cSJim Jagielski */ 90*b1cdbd2cSJim Jagielski virtual int GetCostIndex (void) = 0; 91*b1cdbd2cSJim Jagielski 92*b1cdbd2cSJim Jagielski /** Return whether the page object passed is necessary to create a 93*b1cdbd2cSJim Jagielski preview. 94*b1cdbd2cSJim Jagielski */ 95*b1cdbd2cSJim Jagielski virtual bool NeedsPageObject (void) = 0; 96*b1cdbd2cSJim Jagielski }; 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski /** Provide previews of existing page objects by rendering them. 102*b1cdbd2cSJim Jagielski */ 103*b1cdbd2cSJim Jagielski class PagePreviewProvider : public PreviewProvider 104*b1cdbd2cSJim Jagielski { 105*b1cdbd2cSJim Jagielski public: 106*b1cdbd2cSJim Jagielski PagePreviewProvider (void); 107*b1cdbd2cSJim Jagielski virtual Image operator () (int nWidth, SdPage* pPage, ::sd::PreviewRenderer& rRenderer); 108*b1cdbd2cSJim Jagielski virtual int GetCostIndex (void); 109*b1cdbd2cSJim Jagielski virtual bool NeedsPageObject (void); 110*b1cdbd2cSJim Jagielski private: 111*b1cdbd2cSJim Jagielski }; 112*b1cdbd2cSJim Jagielski 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski /** Provide master page objects for template documents for which only the 117*b1cdbd2cSJim Jagielski URL is given. 118*b1cdbd2cSJim Jagielski */ 119*b1cdbd2cSJim Jagielski class TemplatePageObjectProvider : public PageObjectProvider 120*b1cdbd2cSJim Jagielski { 121*b1cdbd2cSJim Jagielski public: 122*b1cdbd2cSJim Jagielski TemplatePageObjectProvider (const ::rtl::OUString& rsURL); ~TemplatePageObjectProvider(void)123*b1cdbd2cSJim Jagielski virtual ~TemplatePageObjectProvider (void) {}; 124*b1cdbd2cSJim Jagielski virtual SdPage* operator () (SdDrawDocument* pDocument); 125*b1cdbd2cSJim Jagielski virtual int GetCostIndex (void); 126*b1cdbd2cSJim Jagielski virtual bool operator== (const PageObjectProvider& rProvider); 127*b1cdbd2cSJim Jagielski private: 128*b1cdbd2cSJim Jagielski ::rtl::OUString msURL; 129*b1cdbd2cSJim Jagielski SfxObjectShellLock mxDocumentShell; 130*b1cdbd2cSJim Jagielski ::sd::DrawDocShell* LoadDocument (const ::rtl::OUString& sFileName); 131*b1cdbd2cSJim Jagielski }; 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski /** Provide previews for template documents by loading the thumbnails from 137*b1cdbd2cSJim Jagielski the documents. 138*b1cdbd2cSJim Jagielski */ 139*b1cdbd2cSJim Jagielski class TemplatePreviewProvider : public PreviewProvider 140*b1cdbd2cSJim Jagielski { 141*b1cdbd2cSJim Jagielski public: 142*b1cdbd2cSJim Jagielski TemplatePreviewProvider (const ::rtl::OUString& rsURL); ~TemplatePreviewProvider(void)143*b1cdbd2cSJim Jagielski virtual ~TemplatePreviewProvider (void) {}; 144*b1cdbd2cSJim Jagielski virtual Image operator() (int nWidth, SdPage* pPage, ::sd::PreviewRenderer& rRenderer); 145*b1cdbd2cSJim Jagielski virtual int GetCostIndex (void); 146*b1cdbd2cSJim Jagielski virtual bool NeedsPageObject (void); 147*b1cdbd2cSJim Jagielski private: 148*b1cdbd2cSJim Jagielski ::rtl::OUString msURL; 149*b1cdbd2cSJim Jagielski }; 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski /** Create an empty default master page. 155*b1cdbd2cSJim Jagielski */ 156*b1cdbd2cSJim Jagielski class DefaultPageObjectProvider : public PageObjectProvider 157*b1cdbd2cSJim Jagielski { 158*b1cdbd2cSJim Jagielski public: 159*b1cdbd2cSJim Jagielski DefaultPageObjectProvider (void); 160*b1cdbd2cSJim Jagielski virtual SdPage* operator () (SdDrawDocument* pDocument); 161*b1cdbd2cSJim Jagielski virtual int GetCostIndex (void); 162*b1cdbd2cSJim Jagielski virtual bool operator== (const PageObjectProvider& rProvider); 163*b1cdbd2cSJim Jagielski }; 164*b1cdbd2cSJim Jagielski 165*b1cdbd2cSJim Jagielski 166*b1cdbd2cSJim Jagielski 167*b1cdbd2cSJim Jagielski /** This implementation of the PageObjectProvider simply returns an already 168*b1cdbd2cSJim Jagielski existing master page object. 169*b1cdbd2cSJim Jagielski */ 170*b1cdbd2cSJim Jagielski class ExistingPageProvider : public PageObjectProvider 171*b1cdbd2cSJim Jagielski { 172*b1cdbd2cSJim Jagielski public: 173*b1cdbd2cSJim Jagielski ExistingPageProvider (SdPage* pPage); 174*b1cdbd2cSJim Jagielski virtual SdPage* operator() (SdDrawDocument* pDocument); 175*b1cdbd2cSJim Jagielski virtual int GetCostIndex (void); 176*b1cdbd2cSJim Jagielski virtual bool operator== (const PageObjectProvider& rProvider); 177*b1cdbd2cSJim Jagielski private: 178*b1cdbd2cSJim Jagielski SdPage* mpPage; 179*b1cdbd2cSJim Jagielski }; 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski } } // end of namespace sd::sidebar 182*b1cdbd2cSJim Jagielski 183*b1cdbd2cSJim Jagielski #endif 184