summaryrefslogtreecommitdiff
path: root/sd/source/ui/toolpanel
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/toolpanel')
-rw-r--r--sd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx444
1 files changed, 444 insertions, 0 deletions
diff --git a/sd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx b/sd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx
new file mode 100644
index 000000000000..61003f9a104a
--- /dev/null
+++ b/sd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx
@@ -0,0 +1,444 @@
+/*************************************************************************
+ *
+ * $RCSfile: SlideSorterCacheDisplay.cxx,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * last change: $Author: rt $ $Date: 2005-10-24 07:45:09 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#include "taskpane/SlideSorterCacheDisplay.hxx"
+
+#ifdef USE_SLIDE_SORTER_CACHE_DISPLAY
+
+#include "taskpane/ScrollPanel.hxx"
+#include "taskpane/TaskPaneControlFactory.hxx"
+
+#include <vcl/window.hxx>
+#include <vcl/lstbox.hxx>
+#include <vcl/button.hxx>
+
+namespace {
+
+static const Color maBackgroundColor (255,250,245);
+
+class PageCacheWindow : public ::Window
+{
+public:
+ PageCacheWindow (
+ ::Window* pParentWindow,
+ ::sd::toolpanel::SlideSorterCacheDisplay* pDisplay)
+ : ::Window(pParentWindow),
+ mpDisplay(pDisplay)
+ {
+ SetBackground(Wallpaper(maBackgroundColor));
+ }
+
+ virtual void Paint (const Rectangle& rBoundingBox)
+ { mpDisplay->Paint(rBoundingBox); ::Window::Paint(rBoundingBox); }
+ virtual void Resize (void) { mpDisplay->Resize(); ::Window::Resize(); }
+
+private:
+ ::sd::toolpanel::SlideSorterCacheDisplay* mpDisplay;
+};
+
+}
+
+
+
+namespace sd { namespace toolpanel {
+
+::std::map<const SdDrawDocument*, SlideSorterCacheDisplay*> SlideSorterCacheDisplay::maDisplays;
+
+/** This factory class is used to create instances of TestPanel. It can be
+ extended so that its constructor stores arguments that later are passed
+ to new TestPanel objects.
+*/
+class SlideSorterCacheDisplayFactory
+ : public ControlFactory
+{
+public:
+ SlideSorterCacheDisplayFactory (const SdDrawDocument* pDocument)
+ : mpDocument(pDocument)
+ {
+ }
+
+protected:
+ virtual TreeNode* InternalCreateControl (TreeNode* pTreeNode)
+ {
+ SlideSorterCacheDisplay* pDisplay = SlideSorterCacheDisplay::Instance(mpDocument);
+ pDisplay->SetParentWindow(pTreeNode->GetWindow());
+ pDisplay->SetParentNode(pTreeNode);
+ return pDisplay;
+ }
+
+private:
+ const SdDrawDocument* mpDocument;
+};
+
+
+
+
+
+
+
+SlideSorterCacheDisplay::SlideSorterCacheDisplay (const SdDrawDocument* pDocument)
+ : TreeNode(NULL),
+ mpWindow(NULL),
+ mnPageCount(0),
+ mnColumnCount(0),
+ mnRowCount(0),
+ maCellSize(0,0),
+ mnHorizontalBorder(0),
+ mnVerticalBorder(0)
+{
+ SlideSorterCacheDisplay::AddInstance(pDocument,this);
+}
+
+
+
+
+SlideSorterCacheDisplay::~SlideSorterCacheDisplay (void)
+{
+ if (mpWindow != NULL)
+ delete mpWindow;
+ SlideSorterCacheDisplay::RemoveInstance(this);
+}
+
+
+
+
+void SlideSorterCacheDisplay::SetParentWindow (::Window* pParentWindow)
+{
+ mpWindow = new PageCacheWindow(pParentWindow, this);
+}
+
+
+
+
+std::auto_ptr<ControlFactory> SlideSorterCacheDisplay::CreateControlFactory (
+ const SdDrawDocument* pDocument)
+{
+ return std::auto_ptr<ControlFactory>(new SlideSorterCacheDisplayFactory(pDocument));
+}
+
+
+
+
+void SlideSorterCacheDisplay::Paint (const Rectangle& rBoundingBox)
+{
+ if (maCellSize.Width()>0 && maCellSize.Height()>0 && mpWindow!=NULL)
+ {
+ Color maSavedFillColor (mpWindow->GetFillColor());
+ Color maSavedLineColor (mpWindow->GetLineColor());
+ sal_Int32 nC0 = (rBoundingBox.Left() - mnHorizontalBorder) / maCellSize.Width();
+ sal_Int32 nC1 = (rBoundingBox.Right() - mnHorizontalBorder) / maCellSize.Width();
+ sal_Int32 nR0 = (rBoundingBox.Top() - mnVerticalBorder) / maCellSize.Height();
+ sal_Int32 nR1 = (rBoundingBox.Bottom() - mnVerticalBorder) / maCellSize.Height();
+ for (sal_Int32 nC=nC0; nC<=nC1; ++nC)
+ for (sal_Int32 nR=nR0; nR<=nR1; ++nR)
+ {
+ sal_Int32 nPageIndex (nC + nR*mnColumnCount);
+ if (nPageIndex < mnPageCount)
+ {
+ Rectangle aBox (GetPageBox(nPageIndex));
+ if ( ! maPageDescriptors[nPageIndex].mbVisible)
+ {
+ mpWindow->SetLineColor();
+ mpWindow->SetFillColor(maBackgroundColor);
+ mpWindow->DrawRect(aBox);
+
+ aBox.Left() += maCellSize.Width()/4;
+ aBox.Right() -= maCellSize.Width()/4;
+ aBox.Top() += maCellSize.Height()/4;
+ aBox.Bottom() -= maCellSize.Height()/4;
+ }
+
+ switch (maPageDescriptors[nPageIndex].meStatus)
+ {
+ case NONE : mpWindow->SetFillColor (Color(95,255,128)); break;
+ case RENDERING : mpWindow->SetFillColor (Color(236,125,128)); break;
+ case IN_QUEUE_PRIORITY_0 : mpWindow->SetFillColor (Color(255,243,0)); break;
+ case IN_QUEUE_PRIORITY_1 : mpWindow->SetFillColor (Color(255,199,0)); break;
+ case IN_QUEUE_PRIORITY_2 : mpWindow->SetFillColor (Color(20,255,128)); break;
+ default : mpWindow->SetFillColor (COL_BLACK); break;
+ }
+ mpWindow->SetLineColor(COL_BLACK);
+ mpWindow->DrawRect(aBox);
+
+ if ( ! maPageDescriptors[nPageIndex].mbUpToDate)
+ mpWindow->DrawLine(aBox.TopLeft(), aBox.BottomRight());
+ }
+ }
+ mpWindow->SetLineColor(maSavedLineColor);
+ mpWindow->SetFillColor(maSavedFillColor);
+ }
+}
+
+
+
+
+void SlideSorterCacheDisplay::Resize (void)
+{
+ if (mpWindow != NULL)
+ {
+ double nW = mpWindow->GetSizePixel().Width();
+ double nH = mpWindow->GetSizePixel().Height();
+ if (nH > 0)
+ {
+ double nAspect = nW / nH;
+ sal_Int32 nR = 1;
+ sal_Int32 nC = 1;
+ while (nR * nC < mnPageCount)
+ {
+ if (double(nC) / double(nR) > nAspect)
+ ++nR;
+ else
+ ++nC;
+ }
+ double nAspect2 = double(nC) / double(nR);
+
+ mnRowCount = nR;
+ mnColumnCount = nC;
+ mnHorizontalGap = 2;
+ mnVerticalGap = 2;
+ maCellSize = Size(
+ (int)((nW-(nC-1)*mnHorizontalGap) / nC),
+ (int)((nH-(nR-1)*mnVerticalGap) / nR));
+ mnHorizontalBorder = (int)(nW - nC*maCellSize.Width() - ((nC-1)*mnHorizontalGap))/2;
+ mnVerticalBorder = (int)(nH - nR*maCellSize.Height() - ((nR-1)*mnVerticalGap))/2;
+ }
+ }
+}
+
+
+
+
+SlideSorterCacheDisplay* SlideSorterCacheDisplay::Instance (const SdDrawDocument* pDocument)
+{
+ SlideSorterCacheDisplay* pDisplay = NULL;
+ ::std::map<const SdDrawDocument*, SlideSorterCacheDisplay*>::iterator iDisplay;
+ for (iDisplay=maDisplays.begin(); iDisplay!=maDisplays.end(); ++iDisplay)
+ if (iDisplay->first == pDocument)
+ pDisplay = iDisplay->second;
+
+ if (pDisplay == NULL)
+ {
+ pDisplay = new SlideSorterCacheDisplay(pDocument);
+ }
+
+ return pDisplay;
+}
+
+
+
+
+void SlideSorterCacheDisplay::SetPageCount (sal_Int32 nPageCount)
+{
+ mnPageCount = nPageCount;
+ maPageDescriptors.resize(nPageCount);
+ Resize();
+ if (mpWindow != NULL)
+ mpWindow->Invalidate();
+}
+
+
+
+
+void SlideSorterCacheDisplay::SetPageStatus (sal_Int32 nPageIndex, PageStatus eStatus)
+{
+ ProvideSize(nPageIndex);
+ maPageDescriptors[nPageIndex].meStatus = eStatus;
+ PaintPage(nPageIndex);
+}
+
+
+
+
+void SlideSorterCacheDisplay::SetPageVisibility (sal_Int32 nPageIndex, bool bVisible)
+{
+ ProvideSize(nPageIndex);
+ maPageDescriptors[nPageIndex].mbVisible = bVisible;
+ PaintPage(nPageIndex);
+}
+
+
+
+
+void SlideSorterCacheDisplay::SetUpToDate (sal_Int32 nPageIndex, bool bUpToDate)
+{
+ ProvideSize(nPageIndex);
+ maPageDescriptors[nPageIndex].mbUpToDate = bUpToDate;
+ PaintPage(nPageIndex);
+}
+
+
+
+
+Rectangle SlideSorterCacheDisplay::GetPageBox (sal_Int32 nPageIndex)
+{
+ sal_Int32 nRow = nPageIndex / mnColumnCount;
+ sal_Int32 nColumn = nPageIndex % mnColumnCount;
+ return Rectangle(
+ Point(mnHorizontalBorder + nColumn * maCellSize.Width() + nColumn*mnHorizontalGap,
+ mnVerticalBorder + nRow * maCellSize.Height() + nRow*mnVerticalGap),
+ maCellSize);
+}
+
+
+
+
+void SlideSorterCacheDisplay::AddInstance (
+ const SdDrawDocument* pDocument,
+ SlideSorterCacheDisplay* pControl)
+{
+ maDisplays[pDocument] = pControl;
+}
+
+
+
+
+void SlideSorterCacheDisplay::RemoveInstance (SlideSorterCacheDisplay* pControl)
+{
+ ::std::map<const SdDrawDocument*, SlideSorterCacheDisplay*>::iterator iDisplay;
+ for (iDisplay=maDisplays.begin(); iDisplay!=maDisplays.end(); ++iDisplay)
+ if (iDisplay->second == pControl)
+ {
+ maDisplays.erase(iDisplay);
+ break;
+ }
+}
+
+
+
+
+void SlideSorterCacheDisplay::ProvideSize (sal_Int32 nPageIndex)
+{
+ if (maPageDescriptors.size() <= (sal_uInt32)nPageIndex)
+ maPageDescriptors.resize(nPageIndex+1);
+ if (mnPageCount <= nPageIndex)
+ mnPageCount = nPageIndex;
+}
+
+
+
+
+Size SlideSorterCacheDisplay::GetPreferredSize (void)
+{
+ return Size(100,100);
+}
+
+
+
+
+sal_Int32 SlideSorterCacheDisplay::GetPreferredWidth (sal_Int32 nHeigh)
+{
+ return GetPreferredSize().Width();
+}
+
+
+
+
+sal_Int32 SlideSorterCacheDisplay::GetPreferredHeight (sal_Int32 nWidth)
+{
+ return GetPreferredSize().Height();
+}
+
+
+
+::Window* SlideSorterCacheDisplay::GetWindow (void)
+{
+ return mpWindow;
+}
+
+
+
+
+bool SlideSorterCacheDisplay::IsResizable (void)
+{
+ return true;
+}
+
+
+
+
+bool SlideSorterCacheDisplay::IsExpandable (void) const
+{
+ return true;
+}
+
+
+
+
+bool SlideSorterCacheDisplay::IsExpanded (void) const
+{
+ return true;
+}
+
+
+
+
+void SlideSorterCacheDisplay::PaintPage (sal_Int32 nPageIndex)
+{
+ if (mpWindow != NULL)
+ {
+ Paint(GetPageBox(nPageIndex));
+ }
+}
+
+
+} } // end of namespace ::sd::toolpanel
+
+#endif