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
SscdSetStatus(const SdrPage * pPage,::sd::toolpanel::SlideSorterCacheDisplay::PageStatus eStatus)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
SscdSetRequestClass(const SdrPage * pPage,sal_Int32 nClass)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
SscdSetVisibility(const SdrModel * pModel,sal_Int32 nIndex,bool bVisible)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
SscdSetUpToDate(const SdrPage * pPage,bool bUpToDate)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