/************************************************************** * * 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. * *************************************************************/ #ifndef SD_TASKPANE_SLIDE_SORTER_CACHE_DISPLAY_HXX #define SD_TASKPANE_SLIDE_SORTER_CACHE_DISPLAY_HXX // Uncomment the define below to activate the slide sorter cache display in // the task pane. Visible slide previews are displayed as large rectangles, // off-screen previews as smaller rectangles. The color shows the state: // green for no action, different shades of yellow for a request being in // the queue, pink for currently being rendered. A diagonal line indicates // that the preview is not up-to-date. #ifdef DEBUG //#define USE_SLIDE_SORTER_CACHE_DISPLAY #endif #ifdef USE_SLIDE_SORTER_CACHE_DISPLAY #include #include #include #include class Window; #include "svx/svdpage.hxx" #include "drawdoc.hxx" namespace sd { namespace toolpanel { class TreeNode; /** This panel demonstrates how to create a panel for the task pane. */ class SlideSorterCacheDisplay : public TreeNode { public: SlideSorterCacheDisplay (const SdDrawDocument* pDocument); virtual ~SlideSorterCacheDisplay (void); void SetParentWindow (::Window* pParentWindow); virtual void Paint (const Rectangle& rBoundingBox); virtual void Resize (void); static SlideSorterCacheDisplay* Instance (const SdDrawDocument* pDocument); void SetPageCount (sal_Int32 nPageCount); enum PageStatus { NONE, IN_QUEUE_PRIORITY_0, IN_QUEUE_PRIORITY_1, IN_QUEUE_PRIORITY_2, RENDERING }; void SetPageStatus (sal_Int32 nPageIndex, PageStatus eStatus); void SetPageVisibility (sal_Int32 nPageIndex, bool bVisible); void SetUpToDate (sal_Int32 nPageIndex, bool bUpToDate); virtual Size GetPreferredSize (void); virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeigh); virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth); virtual ::Window* GetWindow (void); virtual bool IsResizable (void); virtual bool IsExpandable (void) const; virtual bool IsExpanded (void) const; private: static ::std::map maDisplays; static void AddInstance (const SdDrawDocument* pDocument, SlideSorterCacheDisplay* pControl); static void RemoveInstance (SlideSorterCacheDisplay* pControl); ::Window* mpWindow; sal_Int32 mnPageCount; sal_Int32 mnColumnCount; sal_Int32 mnRowCount; Size maCellSize; sal_Int32 mnHorizontalBorder; sal_Int32 mnVerticalBorder; sal_Int32 mnHorizontalGap; sal_Int32 mnVerticalGap; class PageDescriptor { public: PageStatus meStatus; bool mbVisible; bool mbUpToDate; }; typedef ::std::vector PageDescriptorList; PageDescriptorList maPageDescriptors; Rectangle GetPageBox (sal_Int32 nPageIndex); void ProvideSize (sal_Int32 nPageIndex); void PaintPage (sal_Int32 nPageIndex); }; } } // end of namespace ::sd::toolpanel namespace { void SscdSetStatus (const SdrPage* pPage, ::sd::toolpanel::SlideSorterCacheDisplay::PageStatus eStatus) { ::sd::toolpanel::SlideSorterCacheDisplay* pDisplay = ::sd::toolpanel::SlideSorterCacheDisplay::Instance( dynamic_cast(pPage->GetModel())); if (pDisplay != NULL) pDisplay->SetPageStatus((pPage->GetPageNum()-1)/2, eStatus); } void SscdSetRequestClass (const SdrPage* pPage, sal_Int32 nClass) { sd::toolpanel::SlideSorterCacheDisplay::PageStatus eStatus; switch (nClass) { case 0: eStatus = ::sd::toolpanel::SlideSorterCacheDisplay::IN_QUEUE_PRIORITY_0; break; case 1: eStatus = ::sd::toolpanel::SlideSorterCacheDisplay::IN_QUEUE_PRIORITY_1; break; case 2: eStatus = ::sd::toolpanel::SlideSorterCacheDisplay::IN_QUEUE_PRIORITY_2; break; default: eStatus = ::sd::toolpanel::SlideSorterCacheDisplay::NONE; break; } SscdSetStatus(pPage,eStatus); } void SscdSetVisibility (const SdrModel* pModel, sal_Int32 nIndex, bool bVisible) { ::sd::toolpanel::SlideSorterCacheDisplay* pDisplay = ::sd::toolpanel::SlideSorterCacheDisplay::Instance( dynamic_cast(pModel)); if (pDisplay != NULL) pDisplay->SetPageVisibility(nIndex, bVisible); } void SscdSetUpToDate (const SdrPage* pPage, bool bUpToDate) { ::sd::toolpanel::SlideSorterCacheDisplay* pDisplay = ::sd::toolpanel::SlideSorterCacheDisplay::Instance( dynamic_cast(pPage->GetModel())); if (pDisplay != NULL) pDisplay->SetUpToDate((pPage->GetPageNum()-1)/2, bUpToDate); } #define SSCD_SET_REQUEST_CLASS(Page,RequestClass) \ SscdSetRequestClass(Page,RequestClass) #define SSCD_SET_STATUS(RequestData,Status) \ SscdSetStatus(RequestData,::sd::toolpanel::SlideSorterCacheDisplay::Status) #define SSCD_SET_VISIBILITY(Model,Index,Visible) \ SscdSetVisibility(Model,Index,Visible) #define SSCD_SET_UPTODATE(Page,UpToDate) \ SscdSetUpToDate(Page,UpToDate) } #else #define SSCD_SET_REQUEST_CLASS(Page,RequestClass) #define SSCD_SET_STATUS(RequestData,Status) #define SSCD_SET_VISIBILITY(Model,Index,Visible) #define SSCD_SET_UPTODATE(Page,UpToDate) #endif #endif