1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef SD_TASKPANE_SLIDE_SORTER_CACHE_DISPLAY_HXX 25 #define SD_TASKPANE_SLIDE_SORTER_CACHE_DISPLAY_HXX 26 27 // Uncomment the define below to activate the slide sorter cache display in 28 // the task pane. Visible slide previews are displayed as large rectangles, 29 // off-screen previews as smaller rectangles. The color shows the state: 30 // green for no action, different shades of yellow for a request being in 31 // the queue, pink for currently being rendered. A diagonal line indicates 32 // that the preview is not up-to-date. 33 #ifdef DEBUG 34 //#define USE_SLIDE_SORTER_CACHE_DISPLAY 35 #endif 36 37 38 #ifdef USE_SLIDE_SORTER_CACHE_DISPLAY 39 #include <taskpane/TaskPaneTreeNode.hxx> 40 41 #include <map> 42 #include <vector> 43 #include <memory> 44 45 class Window; 46 47 #include "svx/svdpage.hxx" 48 #include "drawdoc.hxx" 49 50 51 namespace sd { namespace toolpanel { 52 53 class TreeNode; 54 55 /** This panel demonstrates how to create a panel for the task pane. 56 */ 57 class SlideSorterCacheDisplay 58 : public TreeNode 59 { 60 public: 61 SlideSorterCacheDisplay (const SdDrawDocument* pDocument); 62 virtual ~SlideSorterCacheDisplay (void); 63 64 void SetParentWindow (::Window* pParentWindow); 65 66 virtual void Paint (const Rectangle& rBoundingBox); 67 virtual void Resize (void); 68 69 static SlideSorterCacheDisplay* Instance (const SdDrawDocument* pDocument); 70 71 void SetPageCount (sal_Int32 nPageCount); 72 enum PageStatus { 73 NONE, 74 IN_QUEUE_PRIORITY_0, 75 IN_QUEUE_PRIORITY_1, 76 IN_QUEUE_PRIORITY_2, 77 RENDERING 78 }; 79 void SetPageStatus (sal_Int32 nPageIndex, PageStatus eStatus); 80 void SetPageVisibility (sal_Int32 nPageIndex, bool bVisible); 81 void SetUpToDate (sal_Int32 nPageIndex, bool bUpToDate); 82 83 virtual Size GetPreferredSize (void); 84 virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeigh); 85 virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth); 86 virtual ::Window* GetWindow (void); 87 virtual bool IsResizable (void); 88 virtual bool IsExpandable (void) const; 89 virtual bool IsExpanded (void) const; 90 91 private: 92 static ::std::map<const SdDrawDocument*, SlideSorterCacheDisplay*> maDisplays; 93 static void AddInstance (const SdDrawDocument* pDocument, SlideSorterCacheDisplay* pControl); 94 static void RemoveInstance (SlideSorterCacheDisplay* pControl); 95 96 ::Window* mpWindow; 97 sal_Int32 mnPageCount; 98 sal_Int32 mnColumnCount; 99 sal_Int32 mnRowCount; 100 Size maCellSize; 101 sal_Int32 mnHorizontalBorder; 102 sal_Int32 mnVerticalBorder; 103 sal_Int32 mnHorizontalGap; 104 sal_Int32 mnVerticalGap; 105 106 class PageDescriptor 107 { 108 public: 109 PageStatus meStatus; 110 bool mbVisible; 111 bool mbUpToDate; 112 }; 113 typedef ::std::vector<PageDescriptor> PageDescriptorList; 114 PageDescriptorList maPageDescriptors; 115 116 Rectangle GetPageBox (sal_Int32 nPageIndex); 117 118 void ProvideSize (sal_Int32 nPageIndex); 119 120 void PaintPage (sal_Int32 nPageIndex); 121 }; 122 123 } } // end of namespace ::sd::toolpanel 124 125 namespace { 126 127 void SscdSetStatus (const SdrPage* pPage, 128 ::sd::toolpanel::SlideSorterCacheDisplay::PageStatus eStatus) 129 { 130 ::sd::toolpanel::SlideSorterCacheDisplay* pDisplay 131 = ::sd::toolpanel::SlideSorterCacheDisplay::Instance( 132 dynamic_cast<SdDrawDocument*>(pPage->GetModel())); 133 if (pDisplay != NULL) 134 pDisplay->SetPageStatus((pPage->GetPageNum()-1)/2, eStatus); 135 } 136 137 void SscdSetRequestClass (const SdrPage* pPage, sal_Int32 nClass) 138 { 139 sd::toolpanel::SlideSorterCacheDisplay::PageStatus eStatus; 140 switch (nClass) 141 { 142 case 0: 143 eStatus = ::sd::toolpanel::SlideSorterCacheDisplay::IN_QUEUE_PRIORITY_0; break; 144 case 1: 145 eStatus = ::sd::toolpanel::SlideSorterCacheDisplay::IN_QUEUE_PRIORITY_1; break; 146 case 2: 147 eStatus = ::sd::toolpanel::SlideSorterCacheDisplay::IN_QUEUE_PRIORITY_2; break; 148 default: 149 eStatus = ::sd::toolpanel::SlideSorterCacheDisplay::NONE; break; 150 } 151 SscdSetStatus(pPage,eStatus); 152 } 153 154 void SscdSetVisibility (const SdrModel* pModel, sal_Int32 nIndex, bool bVisible) 155 { 156 ::sd::toolpanel::SlideSorterCacheDisplay* pDisplay 157 = ::sd::toolpanel::SlideSorterCacheDisplay::Instance( 158 dynamic_cast<const SdDrawDocument*>(pModel)); 159 if (pDisplay != NULL) 160 pDisplay->SetPageVisibility(nIndex, bVisible); 161 } 162 163 164 165 void SscdSetUpToDate (const SdrPage* pPage, bool bUpToDate) 166 { 167 ::sd::toolpanel::SlideSorterCacheDisplay* pDisplay 168 = ::sd::toolpanel::SlideSorterCacheDisplay::Instance( 169 dynamic_cast<const SdDrawDocument*>(pPage->GetModel())); 170 if (pDisplay != NULL) 171 pDisplay->SetUpToDate((pPage->GetPageNum()-1)/2, bUpToDate); 172 } 173 174 175 176 #define SSCD_SET_REQUEST_CLASS(Page,RequestClass) \ 177 SscdSetRequestClass(Page,RequestClass) 178 #define SSCD_SET_STATUS(RequestData,Status) \ 179 SscdSetStatus(RequestData,::sd::toolpanel::SlideSorterCacheDisplay::Status) 180 #define SSCD_SET_VISIBILITY(Model,Index,Visible) \ 181 SscdSetVisibility(Model,Index,Visible) 182 #define SSCD_SET_UPTODATE(Page,UpToDate) \ 183 SscdSetUpToDate(Page,UpToDate) 184 185 186 } 187 188 #else 189 190 #define SSCD_SET_REQUEST_CLASS(Page,RequestClass) 191 #define SSCD_SET_STATUS(RequestData,Status) 192 #define SSCD_SET_VISIBILITY(Model,Index,Visible) 193 #define SSCD_SET_UPTODATE(Page,UpToDate) 194 195 #endif 196 197 #endif 198