summaryrefslogtreecommitdiff
path: root/sd/source/ui/slidesorter
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/slidesorter')
-rw-r--r--sd/source/ui/slidesorter/cache/SlsBitmapCache.cxx706
-rw-r--r--sd/source/ui/slidesorter/cache/SlsBitmapCache.hxx238
-rw-r--r--sd/source/ui/slidesorter/cache/SlsBitmapCompressor.cxx253
-rw-r--r--sd/source/ui/slidesorter/cache/SlsBitmapCompressor.hxx159
-rw-r--r--sd/source/ui/slidesorter/cache/SlsBitmapFactory.cxx102
-rw-r--r--sd/source/ui/slidesorter/cache/SlsBitmapFactory.hxx68
-rw-r--r--sd/source/ui/slidesorter/cache/SlsCacheCompactor.cxx243
-rw-r--r--sd/source/ui/slidesorter/cache/SlsCacheCompactor.hxx103
-rw-r--r--sd/source/ui/slidesorter/cache/SlsCacheConfiguration.cxx185
-rw-r--r--sd/source/ui/slidesorter/cache/SlsCacheConfiguration.hxx76
-rw-r--r--sd/source/ui/slidesorter/cache/SlsGenericPageCache.cxx381
-rw-r--r--sd/source/ui/slidesorter/cache/SlsGenericPageCache.hxx171
-rw-r--r--sd/source/ui/slidesorter/cache/SlsPageCache.cxx169
-rw-r--r--sd/source/ui/slidesorter/cache/SlsPageCacheManager.cxx492
-rw-r--r--sd/source/ui/slidesorter/cache/SlsQueueProcessor.cxx259
-rw-r--r--sd/source/ui/slidesorter/cache/SlsQueueProcessor.hxx143
-rw-r--r--sd/source/ui/slidesorter/cache/SlsQueueProcessorThread.hxx322
-rw-r--r--sd/source/ui/slidesorter/cache/SlsRequestFactory.cxx78
-rw-r--r--sd/source/ui/slidesorter/cache/SlsRequestFactory.hxx51
-rw-r--r--sd/source/ui/slidesorter/cache/SlsRequestPriorityClass.hxx58
-rw-r--r--sd/source/ui/slidesorter/cache/SlsRequestQueue.cxx291
-rw-r--r--sd/source/ui/slidesorter/cache/SlsRequestQueue.hxx136
-rw-r--r--sd/source/ui/slidesorter/controller/SlideSorterController.cxx1134
-rw-r--r--sd/source/ui/slidesorter/controller/SlsAnimationFunction.cxx294
-rw-r--r--sd/source/ui/slidesorter/controller/SlsAnimator.cxx398
-rw-r--r--sd/source/ui/slidesorter/controller/SlsClipboard.cxx892
-rw-r--r--sd/source/ui/slidesorter/controller/SlsCommand.hxx48
-rw-r--r--sd/source/ui/slidesorter/controller/SlsCurrentSlideManager.cxx322
-rw-r--r--sd/source/ui/slidesorter/controller/SlsDragAndDropContext.cxx199
-rw-r--r--sd/source/ui/slidesorter/controller/SlsDragAndDropContext.hxx100
-rw-r--r--sd/source/ui/slidesorter/controller/SlsFocusManager.cxx384
-rw-r--r--sd/source/ui/slidesorter/controller/SlsHideSlideFunction.cxx174
-rw-r--r--sd/source/ui/slidesorter/controller/SlsHideSlideFunction.hxx75
-rw-r--r--sd/source/ui/slidesorter/controller/SlsInsertionIndicatorHandler.cxx327
-rw-r--r--sd/source/ui/slidesorter/controller/SlsListener.cxx701
-rw-r--r--sd/source/ui/slidesorter/controller/SlsListener.hxx197
-rw-r--r--sd/source/ui/slidesorter/controller/SlsPageObjectFactory.cxx103
-rw-r--r--sd/source/ui/slidesorter/controller/SlsPageSelector.cxx491
-rw-r--r--sd/source/ui/slidesorter/controller/SlsProperties.cxx276
-rw-r--r--sd/source/ui/slidesorter/controller/SlsScrollBarManager.cxx740
-rw-r--r--sd/source/ui/slidesorter/controller/SlsSelectionCommand.cxx88
-rw-r--r--sd/source/ui/slidesorter/controller/SlsSelectionCommand.hxx98
-rw-r--r--sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx2027
-rw-r--r--sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx362
-rw-r--r--sd/source/ui/slidesorter/controller/SlsSelectionObserver.cxx173
-rw-r--r--sd/source/ui/slidesorter/controller/SlsSlideFunction.cxx83
-rw-r--r--sd/source/ui/slidesorter/controller/SlsSlotManager.cxx1341
-rw-r--r--sd/source/ui/slidesorter/controller/SlsTransferable.cxx104
-rw-r--r--sd/source/ui/slidesorter/controller/SlsVisibleAreaManager.cxx305
-rw-r--r--sd/source/ui/slidesorter/inc/cache/SlsCacheContext.hxx108
-rw-r--r--sd/source/ui/slidesorter/inc/cache/SlsPageCache.hxx182
-rw-r--r--sd/source/ui/slidesorter/inc/cache/SlsPageCacheManager.hxx191
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlideSorterController.hxx346
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsAnimationFunction.hxx180
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsAnimator.hxx144
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsClipboard.hxx235
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsCurrentSlideManager.hxx131
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsFocusManager.hxx236
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsInsertionIndicatorHandler.hxx153
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsPageObjectFactory.hxx99
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsPageSelector.hxx232
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsProperties.hxx146
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsScrollBarManager.hxx286
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsSelectionFunction.hxx206
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsSelectionManager.hxx170
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsSelectionObserver.hxx85
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsSlideFunction.hxx76
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsSlotManager.hxx127
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsTransferable.hxx87
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsVisibleAreaManager.hxx100
-rw-r--r--sd/source/ui/slidesorter/inc/model/SlideSorterModel.hxx254
-rw-r--r--sd/source/ui/slidesorter/inc/model/SlsEnumeration.hxx56
-rw-r--r--sd/source/ui/slidesorter/inc/model/SlsPageDescriptor.hxx166
-rw-r--r--sd/source/ui/slidesorter/inc/model/SlsPageEnumeration.hxx130
-rw-r--r--sd/source/ui/slidesorter/inc/model/SlsPageEnumerationProvider.hxx63
-rw-r--r--sd/source/ui/slidesorter/inc/model/SlsSharedPageDescriptor.hxx44
-rw-r--r--sd/source/ui/slidesorter/inc/model/SlsVisualState.hxx101
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx304
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsButtonBar.hxx362
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsFontProvider.hxx97
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsILayerPainter.hxx60
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsInsertAnimator.hxx71
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsInsertionIndicatorOverlay.hxx131
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsLayouter.hxx299
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsPageObject.hxx68
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx145
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsPageObjectPainter.hxx138
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsPageObjectViewContact.hxx92
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsPageObjectViewObjectContact.hxx228
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsResource.hrc111
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsTheme.hxx236
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsToolTip.hxx97
-rw-r--r--sd/source/ui/slidesorter/model/SlideSorterModel.cxx740
-rw-r--r--sd/source/ui/slidesorter/model/SlsPageDescriptor.cxx292
-rw-r--r--sd/source/ui/slidesorter/model/SlsPageEnumeration.cxx286
-rw-r--r--sd/source/ui/slidesorter/model/SlsPageEnumerationProvider.cxx112
-rw-r--r--sd/source/ui/slidesorter/model/SlsVisualState.cxx236
-rw-r--r--sd/source/ui/slidesorter/shell/SlideSorter.cxx703
-rw-r--r--sd/source/ui/slidesorter/shell/SlideSorterChildWindow.cxx69
-rw-r--r--sd/source/ui/slidesorter/shell/SlideSorterChildWindow.src52
-rw-r--r--sd/source/ui/slidesorter/shell/SlideSorterService.cxx646
-rw-r--r--sd/source/ui/slidesorter/shell/SlideSorterService.hxx219
-rw-r--r--sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx826
-rw-r--r--sd/source/ui/slidesorter/view/SlideSorterView.cxx1135
-rw-r--r--sd/source/ui/slidesorter/view/SlsButtonBar.cxx1558
-rw-r--r--sd/source/ui/slidesorter/view/SlsFontProvider.cxx135
-rw-r--r--sd/source/ui/slidesorter/view/SlsFramePainter.cxx265
-rw-r--r--sd/source/ui/slidesorter/view/SlsFramePainter.hxx121
-rw-r--r--sd/source/ui/slidesorter/view/SlsInsertAnimator.cxx537
-rw-r--r--sd/source/ui/slidesorter/view/SlsInsertionIndicatorOverlay.cxx448
-rw-r--r--sd/source/ui/slidesorter/view/SlsLayeredDevice.cxx565
-rw-r--r--sd/source/ui/slidesorter/view/SlsLayeredDevice.hxx99
-rw-r--r--sd/source/ui/slidesorter/view/SlsLayouter.cxx1555
-rw-r--r--sd/source/ui/slidesorter/view/SlsPageObject.cxx83
-rw-r--r--sd/source/ui/slidesorter/view/SlsPageObjectLayouter.cxx287
-rw-r--r--sd/source/ui/slidesorter/view/SlsPageObjectPainter.cxx584
-rw-r--r--sd/source/ui/slidesorter/view/SlsResource.hxx50
-rw-r--r--sd/source/ui/slidesorter/view/SlsResource.src314
-rw-r--r--sd/source/ui/slidesorter/view/SlsTheme.cxx536
-rw-r--r--sd/source/ui/slidesorter/view/SlsToolTip.cxx230
-rw-r--r--sd/source/ui/slidesorter/view/SlsViewCacheContext.cxx162
-rw-r--r--sd/source/ui/slidesorter/view/SlsViewCacheContext.hxx73
122 files changed, 0 insertions, 35811 deletions
diff --git a/sd/source/ui/slidesorter/cache/SlsBitmapCache.cxx b/sd/source/ui/slidesorter/cache/SlsBitmapCache.cxx
deleted file mode 100644
index 721b424a6..000000000
--- a/sd/source/ui/slidesorter/cache/SlsBitmapCache.cxx
+++ /dev/null
@@ -1,706 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include "SlsBitmapCache.hxx"
-#include "SlsCacheCompactor.hxx"
-#include "SlsBitmapCompressor.hxx"
-#include "SlsCacheConfiguration.hxx"
-
-#include "sdpage.hxx"
-#include "drawdoc.hxx"
-
-// Uncomment the following define for some more OSL_TRACE messages.
-#ifdef DEBUG
-//#define VERBOSE
-#endif
-
-// Define the default value for the maximal cache size that is used for
-// previews that are currently not visible. The visible previews are all
-// held in memory at all times. This default is used only when the
-// configuration does not have a value.
-static const sal_Int32 MAXIMAL_CACHE_SIZE = 4L*1024L*1024L;
-
-using namespace ::com::sun::star::uno;
-
-namespace sd { namespace slidesorter { namespace cache {
-
-class BitmapCache::CacheEntry
-{
-public:
- CacheEntry(const Bitmap& rBitmap, sal_Int32 nLastAccessTime, bool bIsPrecious);
- CacheEntry(sal_Int32 nLastAccessTime, bool bIsPrecious);
- ~CacheEntry (void) {};
- inline void Recycle (const CacheEntry& rEntry);
- inline sal_Int32 GetMemorySize (void) const;
- void Compress (const ::boost::shared_ptr<BitmapCompressor>& rpCompressor);
- inline void Decompress (void);
-
- bool IsUpToDate (void) const { return mbIsUpToDate; }
- void SetUpToDate (bool bIsUpToDate) { mbIsUpToDate = bIsUpToDate; }
- sal_Int32 GetAccessTime (void) const { return mnLastAccessTime; }
- void SetAccessTime (sal_Int32 nAccessTime) { mnLastAccessTime = nAccessTime; }
-
- Bitmap GetPreview (void) const { return maPreview; }
- inline void SetPreview (const Bitmap& rPreview);
- bool HasPreview (void) const;
-
- Bitmap GetMarkedPreview (void) const { return maMarkedPreview; }
- inline void SetMarkedPreview (const Bitmap& rMarkePreview);
- bool HasMarkedPreview (void) const;
-
- bool HasReplacement (void) const { return (mpReplacement.get() != NULL); }
- inline bool HasLosslessReplacement (void) const;
- void Clear (void) { maPreview.SetEmpty(); maMarkedPreview.SetEmpty();
- mpReplacement.reset(); mpCompressor.reset(); }
- void Invalidate (void) { mpReplacement.reset(); mpCompressor.reset(); mbIsUpToDate = false; }
- bool IsPrecious (void) const { return mbIsPrecious; }
- void SetPrecious (bool bIsPrecious) { mbIsPrecious = bIsPrecious; }
-
-private:
- Bitmap maPreview;
- Bitmap maMarkedPreview;
- ::boost::shared_ptr<BitmapReplacement> mpReplacement;
- ::boost::shared_ptr<BitmapCompressor> mpCompressor;
- Size maBitmapSize;
- bool mbIsUpToDate;
- sal_Int32 mnLastAccessTime;
- // When this flag is set then the bitmap is not modified by a cache
- // compactor.
- bool mbIsPrecious;
-};
-class CacheEntry;
-
-class CacheHash {
-public:
- size_t operator()(const BitmapCache::CacheKey& p) const
- { return (size_t)p; }
-};
-
-class BitmapCache::CacheBitmapContainer
- : public ::boost::unordered_map<CacheKey, CacheEntry, CacheHash>
-{
-public:
- CacheBitmapContainer (void) {}
-};
-
-namespace {
-
-typedef ::std::vector<
- ::std::pair< ::sd::slidesorter::cache::BitmapCache::CacheKey,
- ::sd::slidesorter::cache::BitmapCache::CacheEntry>
- > SortableBitmapContainer;
-
- /** Compare elements of the bitmap cache according to their last access
- time.
- */
- class AccessTimeComparator
- {
- public:
- bool operator () (
- const SortableBitmapContainer::value_type& e1,
- const SortableBitmapContainer::value_type& e2)
- {
- return e1.second.GetAccessTime() < e2.second.GetAccessTime();
- }
- };
-
-
-} // end of anonymous namespace
-
-
-//===== BitmapCache =========================================================
-
-BitmapCache::BitmapCache (const sal_Int32 nMaximalNormalCacheSize)
- : maMutex(),
- mpBitmapContainer(new CacheBitmapContainer()),
- mnNormalCacheSize(0),
- mnPreciousCacheSize(0),
- mnCurrentAccessTime(0),
- mnMaximalNormalCacheSize(MAXIMAL_CACHE_SIZE),
- mpCacheCompactor(),
- mbIsFull(false)
-{
- if (nMaximalNormalCacheSize > 0)
- mnMaximalNormalCacheSize = nMaximalNormalCacheSize;
- else
- {
- Any aCacheSize (CacheConfiguration::Instance()->GetValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CacheSize"))));
- if (aCacheSize.has<sal_Int32>())
- aCacheSize >>= mnMaximalNormalCacheSize;
- }
-
- mpCacheCompactor = CacheCompactor::Create(*this,mnMaximalNormalCacheSize);
-}
-
-
-
-
-BitmapCache::~BitmapCache (void)
-{
- Clear();
-}
-
-
-
-
-void BitmapCache::Clear (void)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- mpBitmapContainer->clear();
- mnNormalCacheSize = 0;
- mnPreciousCacheSize = 0;
- mnCurrentAccessTime = 0;
-}
-
-
-
-
-bool BitmapCache::IsFull (void) const
-{
- return mbIsFull;
-}
-
-
-
-
-sal_Int32 BitmapCache::GetSize (void)
-{
- return mnNormalCacheSize;
-}
-
-
-
-
-bool BitmapCache::HasBitmap (const CacheKey& rKey)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- CacheBitmapContainer::iterator iEntry (mpBitmapContainer->find(rKey));
- return (iEntry != mpBitmapContainer->end()
- && (iEntry->second.HasPreview() || iEntry->second.HasReplacement()));
-}
-
-
-
-
-bool BitmapCache::BitmapIsUpToDate (const CacheKey& rKey)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- bool bIsUpToDate = false;
- CacheBitmapContainer::iterator aIterator (mpBitmapContainer->find(rKey));
- if (aIterator != mpBitmapContainer->end())
- bIsUpToDate = aIterator->second.IsUpToDate();
-
- return bIsUpToDate;
-}
-
-
-
-
-Bitmap BitmapCache::GetBitmap (const CacheKey& rKey)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- CacheBitmapContainer::iterator iEntry (mpBitmapContainer->find(rKey));
- if (iEntry == mpBitmapContainer->end())
- {
- // Create an empty bitmap for the given key that acts as placeholder
- // until we are given the real one. Mark it as not being up to date.
- SetBitmap(rKey, Bitmap(), false);
- iEntry = mpBitmapContainer->find(rKey);
- iEntry->second.SetUpToDate(false);
- }
- else
- {
- iEntry->second.SetAccessTime(mnCurrentAccessTime++);
-
- // Maybe we have to decompress the preview.
- if ( ! iEntry->second.HasPreview() && iEntry->second.HasReplacement())
- {
- UpdateCacheSize(iEntry->second, REMOVE);
- iEntry->second.Decompress();
- UpdateCacheSize(iEntry->second, ADD);
- }
- }
- return iEntry->second.GetPreview();
-}
-
-
-
-
-Bitmap BitmapCache::GetMarkedBitmap (const CacheKey& rKey)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- CacheBitmapContainer::iterator iEntry (mpBitmapContainer->find(rKey));
- if (iEntry != mpBitmapContainer->end())
- {
- iEntry->second.SetAccessTime(mnCurrentAccessTime++);
- return iEntry->second.GetMarkedPreview();
- }
- else
- return Bitmap();
-}
-
-
-
-
-void BitmapCache::ReleaseBitmap (const CacheKey& rKey)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- CacheBitmapContainer::iterator aIterator (mpBitmapContainer->find(rKey));
- if (aIterator != mpBitmapContainer->end())
- {
- UpdateCacheSize(aIterator->second, REMOVE);
- mpBitmapContainer->erase(aIterator);
- }
-}
-
-
-
-
-bool BitmapCache::InvalidateBitmap (const CacheKey& rKey)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- CacheBitmapContainer::iterator iEntry (mpBitmapContainer->find(rKey));
- if (iEntry != mpBitmapContainer->end())
- {
- iEntry->second.SetUpToDate(false);
-
- // When there is a preview then we release the replacement. The
- // preview itself is kept until a new one is created.
- if (iEntry->second.HasPreview())
- {
- UpdateCacheSize(iEntry->second, REMOVE);
- iEntry->second.Invalidate();
- UpdateCacheSize(iEntry->second, ADD);
- }
- return true;
- }
- else
- return false;
-}
-
-
-
-
-void BitmapCache::InvalidateCache (void)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- CacheBitmapContainer::iterator iEntry;
- for (iEntry=mpBitmapContainer->begin(); iEntry!=mpBitmapContainer->end(); ++iEntry)
- {
- iEntry->second.Invalidate();
- }
- ReCalculateTotalCacheSize();
-}
-
-
-
-
-void BitmapCache::SetBitmap (
- const CacheKey& rKey,
- const Bitmap& rPreview,
- bool bIsPrecious)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- CacheBitmapContainer::iterator iEntry (mpBitmapContainer->find(rKey));
- if (iEntry != mpBitmapContainer->end())
- {
- UpdateCacheSize(iEntry->second, REMOVE);
- iEntry->second.SetPreview(rPreview);
- iEntry->second.SetUpToDate(true);
- iEntry->second.SetAccessTime(mnCurrentAccessTime++);
- }
- else
- {
- iEntry = mpBitmapContainer->insert(CacheBitmapContainer::value_type (
- rKey,
- CacheEntry(rPreview, mnCurrentAccessTime++, bIsPrecious))
- ).first;
- }
-
- if (iEntry != mpBitmapContainer->end())
- UpdateCacheSize(iEntry->second, ADD);
-}
-
-
-
-
-void BitmapCache::SetMarkedBitmap (
- const CacheKey& rKey,
- const Bitmap& rPreview)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- CacheBitmapContainer::iterator iEntry (mpBitmapContainer->find(rKey));
- if (iEntry != mpBitmapContainer->end())
- {
- UpdateCacheSize(iEntry->second, REMOVE);
- iEntry->second.SetMarkedPreview(rPreview);
- iEntry->second.SetAccessTime(mnCurrentAccessTime++);
- UpdateCacheSize(iEntry->second, ADD);
- }
-}
-
-
-
-
-void BitmapCache::SetPrecious (const CacheKey& rKey, bool bIsPrecious)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- CacheBitmapContainer::iterator iEntry (mpBitmapContainer->find(rKey));
- if (iEntry != mpBitmapContainer->end())
- {
- if (iEntry->second.IsPrecious() != bIsPrecious)
- {
- UpdateCacheSize(iEntry->second, REMOVE);
- iEntry->second.SetPrecious(bIsPrecious);
- UpdateCacheSize(iEntry->second, ADD);
- }
- }
- else if (bIsPrecious)
- {
- iEntry = mpBitmapContainer->insert(CacheBitmapContainer::value_type (
- rKey,
- CacheEntry(Bitmap(), mnCurrentAccessTime++, bIsPrecious))
- ).first;
- UpdateCacheSize(iEntry->second, ADD);
- }
-}
-
-
-
-
-void BitmapCache::ReCalculateTotalCacheSize (void)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- mnNormalCacheSize = 0;
- mnPreciousCacheSize = 0;
- CacheBitmapContainer::iterator iEntry;
- for (iEntry=mpBitmapContainer->begin(); iEntry!=mpBitmapContainer->end(); ++iEntry)
- {
- if (iEntry->second.IsPrecious())
- mnPreciousCacheSize += iEntry->second.GetMemorySize();
- else
- mnNormalCacheSize += iEntry->second.GetMemorySize();
- }
- mbIsFull = (mnNormalCacheSize >= mnMaximalNormalCacheSize);
-
-#ifdef VERBOSE
- OSL_TRACE("cache size is %d/%d", mnNormalCacheSize, mnPreciousCacheSize);
-#endif
-}
-
-
-
-
-void BitmapCache::Recycle (const BitmapCache& rCache)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- CacheBitmapContainer::const_iterator iOtherEntry;
- for (iOtherEntry=rCache.mpBitmapContainer->begin();
- iOtherEntry!=rCache.mpBitmapContainer->end();
- ++iOtherEntry)
- {
- CacheBitmapContainer::iterator iEntry (mpBitmapContainer->find(iOtherEntry->first));
- if (iEntry == mpBitmapContainer->end())
- {
- iEntry = mpBitmapContainer->insert(CacheBitmapContainer::value_type (
- iOtherEntry->first,
- CacheEntry(mnCurrentAccessTime++, true))
- ).first;
- UpdateCacheSize(iEntry->second, ADD);
- }
- if (iEntry != mpBitmapContainer->end())
- {
- UpdateCacheSize(iEntry->second, REMOVE);
- iEntry->second.Recycle(iOtherEntry->second);
- UpdateCacheSize(iEntry->second, ADD);
- }
- }
-}
-
-
-
-
-::std::auto_ptr<BitmapCache::CacheIndex> BitmapCache::GetCacheIndex (
- bool bIncludePrecious,
- bool bIncludeNoPreview) const
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- // Create a copy of the bitmap container.
- SortableBitmapContainer aSortedContainer;
- aSortedContainer.reserve(mpBitmapContainer->size());
-
- // Copy the relevant entries.
- CacheBitmapContainer::iterator iEntry;
- for (iEntry=mpBitmapContainer->begin(); iEntry!=mpBitmapContainer->end(); ++iEntry)
- {
- if ( ! bIncludePrecious && iEntry->second.IsPrecious())
- continue;
-
- if ( ! bIncludeNoPreview && ! iEntry->second.HasPreview())
- continue;
-
- aSortedContainer.push_back(SortableBitmapContainer::value_type(
- iEntry->first,iEntry->second));
- }
-
- // Sort the remaining entries.
- ::std::sort(aSortedContainer.begin(), aSortedContainer.end(), AccessTimeComparator());
-
- // Return a list with the keys of the sorted entries.
- ::std::auto_ptr<CacheIndex> pIndex(new CacheIndex());
- SortableBitmapContainer::iterator iIndexEntry;
- pIndex->reserve(aSortedContainer.size());
- for (iIndexEntry=aSortedContainer.begin(); iIndexEntry!=aSortedContainer.end(); ++iIndexEntry)
- pIndex->push_back(iIndexEntry->first);
- return pIndex;
-}
-
-
-
-
-void BitmapCache::Compress (
- const CacheKey& rKey,
- const ::boost::shared_ptr<BitmapCompressor>& rpCompressor)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- CacheBitmapContainer::iterator iEntry (mpBitmapContainer->find(rKey));
- if (iEntry != mpBitmapContainer->end() && iEntry->second.HasPreview())
- {
- UpdateCacheSize(iEntry->second, REMOVE);
- iEntry->second.Compress(rpCompressor);
- UpdateCacheSize(iEntry->second, ADD);
- }
-}
-
-
-
-
-void BitmapCache::UpdateCacheSize (const CacheEntry& rEntry, CacheOperation eOperation)
-{
- sal_Int32 nEntrySize (rEntry.GetMemorySize());
- sal_Int32& rCacheSize (rEntry.IsPrecious() ? mnPreciousCacheSize : mnNormalCacheSize);
- switch (eOperation)
- {
- case ADD:
- rCacheSize += nEntrySize;
- if ( ! rEntry.IsPrecious() && mnNormalCacheSize>mnMaximalNormalCacheSize)
- {
- mbIsFull = true;
-#ifdef VERBOSE
- OSL_TRACE("cache size is %d > %d", mnNormalCacheSize,mnMaximalNormalCacheSize);
-#endif
- mpCacheCompactor->RequestCompaction();
- }
- break;
-
- case REMOVE:
- rCacheSize -= nEntrySize;
- if (mnNormalCacheSize < mnMaximalNormalCacheSize)
- mbIsFull = false;
- break;
-
- default:
- OSL_ASSERT(false);
- break;
- }
-}
-
-
-
-
-//===== CacheEntry ============================================================
-
-BitmapCache::CacheEntry::CacheEntry(
- sal_Int32 nLastAccessTime,
- bool bIsPrecious)
- : maPreview(),
- maMarkedPreview(),
- mbIsUpToDate(true),
- mnLastAccessTime(nLastAccessTime),
- mbIsPrecious(bIsPrecious)
-{
-}
-
-
-
-
-BitmapCache::CacheEntry::CacheEntry(
- const Bitmap& rPreview,
- sal_Int32 nLastAccessTime,
- bool bIsPrecious)
- : maPreview(rPreview),
- maMarkedPreview(),
- mbIsUpToDate(true),
- mnLastAccessTime(nLastAccessTime),
- mbIsPrecious(bIsPrecious)
-{
-}
-
-
-
-
-inline void BitmapCache::CacheEntry::Recycle (const CacheEntry& rEntry)
-{
- if ((rEntry.HasPreview() || rEntry.HasLosslessReplacement())
- && ! (HasPreview() || HasLosslessReplacement()))
- {
- maPreview = rEntry.maPreview;
- maMarkedPreview = rEntry.maMarkedPreview;
- mpReplacement = rEntry.mpReplacement;
- mpCompressor = rEntry.mpCompressor;
- mnLastAccessTime = rEntry.mnLastAccessTime;
- mbIsUpToDate = rEntry.mbIsUpToDate;
- }
-}
-
-
-
-
-inline sal_Int32 BitmapCache::CacheEntry::GetMemorySize (void) const
-{
- sal_Int32 nSize (0);
- nSize += maPreview.GetSizeBytes();
- nSize += maMarkedPreview.GetSizeBytes();
- if (mpReplacement.get() != NULL)
- nSize += mpReplacement->GetMemorySize();
- return nSize;
-}
-
-
-
-
-void BitmapCache::CacheEntry::Compress (const ::boost::shared_ptr<BitmapCompressor>& rpCompressor)
-{
- if ( ! maPreview.IsEmpty())
- {
- if (mpReplacement.get() == NULL)
- {
- mpReplacement = rpCompressor->Compress(maPreview);
-
-#ifdef VERBOSE
- sal_uInt32 nOldSize (maPreview.GetSizeBytes());
- sal_uInt32 nNewSize (mpReplacement.get()!=NULL ? mpReplacement->GetMemorySize() : 0);
- if (nOldSize == 0)
- nOldSize = 1;
- sal_Int32 nRatio (100L * nNewSize / nOldSize);
- OSL_TRACE("compressing bitmap for %x from %d to %d bytes (%d%%)",
- this,
- nOldSize,
- nNewSize,
- nRatio);
-#endif
-
- mpCompressor = rpCompressor;
- }
-
- maPreview.SetEmpty();
- maMarkedPreview.SetEmpty();
- }
-}
-
-
-
-
-inline void BitmapCache::CacheEntry::Decompress (void)
-{
- if (mpReplacement.get()!=NULL && mpCompressor.get()!=NULL && maPreview.IsEmpty())
- {
- maPreview = mpCompressor->Decompress(*mpReplacement);
- maMarkedPreview.SetEmpty();
- if ( ! mpCompressor->IsLossless())
- mbIsUpToDate = false;
- }
-}
-
-
-
-inline void BitmapCache::CacheEntry::SetPreview (const Bitmap& rPreview)
-{
- maPreview = rPreview;
- maMarkedPreview.SetEmpty();
- mpReplacement.reset();
- mpCompressor.reset();
-}
-
-
-
-
-bool BitmapCache::CacheEntry::HasPreview (void) const
-{
- return ! maPreview.IsEmpty();
-}
-
-
-
-
-inline void BitmapCache::CacheEntry::SetMarkedPreview (const Bitmap& rMarkedPreview)
-{
- maMarkedPreview = rMarkedPreview;
-}
-
-
-
-
-bool BitmapCache::CacheEntry::HasMarkedPreview (void) const
-{
- return ! maMarkedPreview.IsEmpty();
-}
-
-
-
-
-inline bool BitmapCache::CacheEntry::HasLosslessReplacement (void) const
-{
- return mpReplacement.get()!=NULL
- && mpCompressor.get()!=NULL
- && mpCompressor->IsLossless();
-}
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsBitmapCache.hxx b/sd/source/ui/slidesorter/cache/SlsBitmapCache.hxx
deleted file mode 100644
index f1ae4bfe9..000000000
--- a/sd/source/ui/slidesorter/cache/SlsBitmapCache.hxx
+++ /dev/null
@@ -1,238 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_BITMAP_CACHE_HXX
-#define SD_SLIDESORTER_BITMAP_CACHE_HXX
-
-class SdrPage;
-
-#include <vcl/bitmapex.hxx>
-#include <osl/mutex.hxx>
-#include <boost/shared_ptr.hpp>
-#include <boost/unordered_map.hpp>
-#include <boost/scoped_ptr.hpp>
-
-namespace sd { namespace slidesorter { namespace cache {
-
-class BitmapReplacement;
-class CacheCompactor;
-class BitmapCompressor;
-
-/** This low level cache is the actual bitmap container. It supports a
- precious flag for every preview bitmap and keeps track of total sizes
- for all previews with/without this flag. The precious flag is used by
- compaction algorithms to determine which previews may be compressed or
- even discarded and which have to remain in their original form. The
- precious flag is usually set for the visible previews.
-
- Additionally to the actual preview there is an optional marked preview.
- This is used for slides excluded from the slide show which have a preview
- that shows a mark (some sort of bitmap overlay) to that effect.
-*/
-class BitmapCache
-{
-public:
- /** The key for looking up preview bitmaps is a pointer to an SdrPage
- object. The prior use of PageObjectViewObjectContact objects (which
- ultimatly use them) turned out to be less suitable because their
- life time is shorter then that of the page objects. Frequent
- destruction and re-creation of the preview bitmaps was the result.
- */
- typedef const SdrPage* CacheKey;
- class CacheEntry;
- class CacheBitmapContainer;
- typedef ::std::vector<CacheKey> CacheIndex;
-
- /** Create a new cache for bitmap objects.
- @param nMaximalNormalCacheSize
- When a size larger then zero is given then that size is used.
- Otherwise the default value from the configuration is used.
- When that does not exist either then a internal default value is
- used.
- */
- BitmapCache (const sal_Int32 nMaximalNormalCacheSize = 0);
-
- /** The destructor clears the cache and relases all bitmaps still in it.
- */
- ~BitmapCache (void);
-
- /** Remove all preview bitmaps from the cache. After this call the
- cache is empty.
- */
- void Clear (void);
-
- /** Return <TRUE/> when the cache is full, i.e. the cache compactor had
- to be run.
- */
- bool IsFull (void) const;
-
- /** Return the memory size that is occupied by all non-precious bitmaps
- in the cache.
- */
- sal_Int32 GetSize (void);
-
- /** Return <TRUE/> when a preview bitmap exists for the given key.
- */
- bool HasBitmap (const CacheKey& rKey);
-
- /** Return <TRUE/> when a preview bitmap exists for the given key and
- when it is up-to-date.
- */
- bool BitmapIsUpToDate (const CacheKey& rKey);
-
- /** Return the preview bitmap for the given contact object.
- */
- Bitmap GetBitmap (const CacheKey& rKey);
-
- /** Return the marked preview bitmap for the given contact object.
- */
- Bitmap GetMarkedBitmap (const CacheKey& rKey);
-
- /** Release the reference to the preview bitmap that is associated with
- the given key.
- */
- void ReleaseBitmap (const CacheKey& rKey);
-
- /** Mark the specified preview bitmap as not being up-to-date
- anymore.
- @return
- When the key references a page in the cache then
- return <TRUE/>. When the key is not known then <FALSE/>
- is returned.
- */
- bool InvalidateBitmap (const CacheKey& rKey);
-
- /** Mark all preview bitmaps as not being up-to-date anymore.
- */
- void InvalidateCache (void);
-
- /** Add or replace a bitmap for the given key.
- */
- void SetBitmap (
- const CacheKey& rKey,
- const Bitmap& rPreview,
- bool bIsPrecious);
-
- /** Add or replace a marked bitmap for the given key.
- */
- void SetMarkedBitmap (
- const CacheKey& rKey,
- const Bitmap& rPreview);
-
- /** Mark the specified preview bitmap as precious, i.e. that it must not
- be compressed or otherwise removed from the cache.
- */
- void SetPrecious (const CacheKey& rKey, bool bIsPrecious);
-
- /** Calculate the cache size. This should rarely be necessary because
- the cache size is tracked with each modification of preview
- bitmaps.
- */
- void ReCalculateTotalCacheSize (void);
-
- /** Use the previews in the given cache to initialize missing previews.
- */
- void Recycle (const BitmapCache& rCache);
-
- /** Return a list of sorted cache keys that represent an index into (a
- part of) the cache. The entries of the index are sorted according
- to last access times with the least recently access time first.
- @param bIncludePrecious
- When this flag is <TRUE/> entries with the precious flag set are
- included in the index. When the flag is <FALSE/> these entries
- are ommited.
- @param bIncludeNoPreview
- When this flag is <TRUE/> entries with that have no preview
- bitmaps are included in the index. When the flag is <FALSE/> these entries
- are ommited.
- */
- ::std::auto_ptr<CacheIndex> GetCacheIndex (
- bool bIncludePrecious,
- bool bIncludeNoPreview) const;
-
- /** Compress the specified preview bitmap with the given bitmap
- compressor. A reference to the compressor is stored for later
- decompression.
- */
- void Compress (
- const CacheKey& rKey,
- const ::boost::shared_ptr<BitmapCompressor>& rpCompressor);
-
-private:
- mutable ::osl::Mutex maMutex;
-
- ::boost::scoped_ptr<CacheBitmapContainer> mpBitmapContainer;
-
- /** Total size of bytes that are occupied by bitmaps in the cache for
- whom the slides are currently not inside the visible area.
- */
- sal_Int32 mnNormalCacheSize;
-
- /** Total size of bytes that are occupied by bitmaps in the cache for
- whom the slides are currently visible.
- */
- sal_Int32 mnPreciousCacheSize;
-
- /** At the moment the access time is not an actual time or date value
- but a counter that is increased with every access. It thus defines
- the same ordering as a true time.
- */
- sal_Int32 mnCurrentAccessTime;
-
- /** The maximal cache size for the off-screen preview bitmaps. When
- mnNormalCacheSize grows larger than this value then the
- mpCacheCompactor member is used to reduce the cache size.
- */
- sal_Int32 mnMaximalNormalCacheSize;
-
- /** The cache compactor is used to reduce the number of bytes used by
- off-screen preview bitmaps.
- */
- ::std::auto_ptr<CacheCompactor> mpCacheCompactor;
-
- /** This flag stores if the cache is or recently was full, i.e. the
- cache compactor has or had to be run in order to reduce the cache
- size to the allowed value.
- */
- bool mbIsFull;
-
- /** Update mnNormalCacheSize or mnPreciousCacheSize according to the
- precious flag of the specified preview bitmap and the specified
- operation.
- */
- enum CacheOperation { ADD, REMOVE };
- void UpdateCacheSize (const CacheEntry& rKey, CacheOperation eOperation);
-};
-
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsBitmapCompressor.cxx b/sd/source/ui/slidesorter/cache/SlsBitmapCompressor.cxx
deleted file mode 100644
index 73dfe0ba0..000000000
--- a/sd/source/ui/slidesorter/cache/SlsBitmapCompressor.cxx
+++ /dev/null
@@ -1,253 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include "SlsBitmapCompressor.hxx"
-
-#include <tools/stream.hxx>
-#include <vcl/bitmapex.hxx>
-#include <vcl/pngread.hxx>
-#include <vcl/pngwrite.hxx>
-
-namespace sd { namespace slidesorter { namespace cache {
-
-
-//===== NoBitmapCompression ===================================================
-
-/** This dummy replacement simply stores a shared pointer to the original
- preview bitmap.
-*/
-class NoBitmapCompression::DummyReplacement
- : public BitmapReplacement
-{
-public:
- Bitmap maPreview;
- Size maOriginalSize;
-
- DummyReplacement (const Bitmap& rPreview) : maPreview(rPreview) { }
- virtual ~DummyReplacement(void) {}
- virtual sal_Int32 GetMemorySize (void) const { return maPreview.GetSizeBytes(); }
-};
-
-
-
-::boost::shared_ptr<BitmapReplacement> NoBitmapCompression::Compress (const Bitmap& rBitmap) const
-{
- return ::boost::shared_ptr<BitmapReplacement>(new DummyReplacement(rBitmap));
-}
-
-Bitmap NoBitmapCompression::Decompress (const BitmapReplacement& rBitmapData) const
-{
- return dynamic_cast<const DummyReplacement&>(rBitmapData).maPreview;
-}
-
-
-
-
-bool NoBitmapCompression::IsLossless (void) const
-{
- return true;
-}
-
-
-
-
-//===== CompressionByDeletion =================================================
-
-::boost::shared_ptr<BitmapReplacement> CompressionByDeletion::Compress (const Bitmap& ) const
-{
- return ::boost::shared_ptr<BitmapReplacement>();
-}
-
-
-
-
-Bitmap CompressionByDeletion::Decompress (const BitmapReplacement& ) const
-{
- // Return a NULL pointer. This will eventually lead to a request for
- // the creation of a new one.
- return Bitmap();
-}
-
-
-
-
-bool CompressionByDeletion::IsLossless (void) const
-{
- return false;
-}
-
-
-
-
-//===== ResolutionReduction ===================================================
-
-/** Store a scaled down bitmap together with the original size.
-*/
-class ResolutionReduction::ResolutionReducedReplacement : public BitmapReplacement
-{
-public:
- Bitmap maPreview;
- Size maOriginalSize;
-
- virtual ~ResolutionReducedReplacement();
- virtual sal_Int32 GetMemorySize (void) const;
-};
-
-ResolutionReduction::ResolutionReducedReplacement::~ResolutionReducedReplacement()
-{
-}
-
-sal_Int32 ResolutionReduction::ResolutionReducedReplacement::GetMemorySize (void) const
-{
- return maPreview.GetSizeBytes();
-}
-
-::boost::shared_ptr<BitmapReplacement> ResolutionReduction::Compress (
- const Bitmap& rBitmap) const
-{
- ResolutionReducedReplacement* pResult = new ResolutionReducedReplacement();
- pResult->maPreview = rBitmap;
- Size aSize (rBitmap.GetSizePixel());
- pResult->maOriginalSize = aSize;
- if (aSize.Width()>0 && aSize.Width()<mnWidth)
- {
- int nHeight = aSize.Height() * mnWidth / aSize.Width() ;
- pResult->maPreview.Scale(Size(mnWidth,nHeight));
- }
-
- return ::boost::shared_ptr<BitmapReplacement>(pResult);
-}
-
-
-
-
-Bitmap ResolutionReduction::Decompress (const BitmapReplacement& rBitmapData) const
-{
- Bitmap aResult;
-
- const ResolutionReducedReplacement* pData (
- dynamic_cast<const ResolutionReducedReplacement*>(&rBitmapData));
-
- if ( ! pData->maPreview.IsEmpty())
- {
- aResult = pData->maPreview;
- if (pData->maOriginalSize.Width() > mnWidth)
- aResult.Scale(pData->maOriginalSize);
- }
-
- return aResult;
-}
-
-
-
-
-bool ResolutionReduction::IsLossless (void) const
-{
- return false;
-}
-
-
-
-
-//===== PNGCompression ========================================================
-
-
-class PngCompression::PngReplacement : public BitmapReplacement
-{
-public:
- void* mpData;
- sal_Int32 mnDataSize;
- Size maImageSize;
- PngReplacement (void)
- : mpData(NULL),
- mnDataSize(0),
- maImageSize(0,0)
- {}
- virtual ~PngReplacement (void)
- {
- delete [] (char*)mpData;
- }
- virtual sal_Int32 GetMemorySize (void) const
- {
- return mnDataSize;
- }
-};
-
-
-
-
-::boost::shared_ptr<BitmapReplacement> PngCompression::Compress (const Bitmap& rBitmap) const
-{
- ::vcl::PNGWriter aWriter (rBitmap);
- SvMemoryStream aStream (32768, 32768);
- aWriter.Write(aStream);
-
- PngReplacement* pResult = new PngReplacement();
- pResult->maImageSize = rBitmap.GetSizePixel();
- pResult->mnDataSize = aStream.Tell();
- pResult->mpData = new char[pResult->mnDataSize];
- memcpy(pResult->mpData, aStream.GetData(), pResult->mnDataSize);
-
- return ::boost::shared_ptr<BitmapReplacement>(pResult);
-}
-
-
-
-
-Bitmap PngCompression::Decompress (
- const BitmapReplacement& rBitmapData) const
-{
- Bitmap aResult;
- const PngReplacement* pData (dynamic_cast<const PngReplacement*>(&rBitmapData));
- if (pData != NULL)
- {
- SvMemoryStream aStream (pData->mpData, pData->mnDataSize, STREAM_READ);
- ::vcl::PNGReader aReader (aStream);
- aResult = aReader.Read().GetBitmap();
- }
-
- return aResult;
-}
-
-
-
-
-bool PngCompression::IsLossless (void) const
-{
- return true;
-}
-
-
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsBitmapCompressor.hxx b/sd/source/ui/slidesorter/cache/SlsBitmapCompressor.hxx
deleted file mode 100644
index 213ac6151..000000000
--- a/sd/source/ui/slidesorter/cache/SlsBitmapCompressor.hxx
+++ /dev/null
@@ -1,159 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_BITMAP_COMPRESSOR_HXX
-#define SD_SLIDESORTER_BITMAP_COMPRESSOR_HXX
-
-#include <sal/types.h>
-#include <tools/gen.hxx>
-#include <boost/shared_ptr.hpp>
-
-
-class Bitmap;
-
-namespace sd { namespace slidesorter { namespace cache {
-
-class BitmapReplacement;
-
-
-/** This interface class provides the minimal method set for classes that
- implement the compression and decompression of preview bitmaps.
-*/
-class BitmapCompressor
-{
-public:
- /** Compress the given bitmap into a replacement format that is specific
- to the compressor class.
- */
- virtual ::boost::shared_ptr<BitmapReplacement> Compress (const Bitmap& rBitmap) const = 0;
-
- /** Decompress the given replacement data into a preview bitmap.
- Depending on the compression technique the returned bitmap may
- differ from the original bitmap given to the Compress() method. It
- may even of the wrong size or empty or the NULL pointer. It is the
- task of the caller to create a new preview bitmap if the returned
- one is not as desired.
- */
- virtual Bitmap Decompress (const BitmapReplacement& rBitmapData)const=0;
-
- /** Return whether the compression and decompression is lossless. This
- value is used by the caller of Decompress() to decide whether to use
- the returned bitmap as is or if a new preview has to be created.
- */
- virtual bool IsLossless (void) const = 0;
-};
-
-
-
-/** Interface for preview bitmap replacements. Each bitmap
- compressor/decompressor has to provide an implementation that is
- suitable to store the compressed bitmaps.
-*/
-class BitmapReplacement
-{
-public:
- virtual sal_Int32 GetMemorySize (void) const { return 0; }
-};
-
-
-
-
-/** This is one trivial bitmap compressor. It stores bitmaps unmodified
- instead of compressing them.
- This compressor is lossless.
-*/
-class NoBitmapCompression
- : public BitmapCompressor
-{
- class DummyReplacement;
-public:
- virtual ::boost::shared_ptr<BitmapReplacement> Compress (const Bitmap& rpBitmap) const;
- virtual Bitmap Decompress (const BitmapReplacement& rBitmapData) const;
- virtual bool IsLossless (void) const;
-};
-
-
-
-
-/** This is another trivial bitmap compressor. Instead of compressing a
- bitmap, it throws the bitmap away. Its Decompress() method returns a
- NULL pointer. The caller has to create a new preview bitmap instead.
- This compressor clearly is not lossless.
-*/
-class CompressionByDeletion
- : public BitmapCompressor
-{
-public:
- virtual ::boost::shared_ptr<BitmapReplacement> Compress (const Bitmap& rBitmap) const;
- virtual Bitmap Decompress (const BitmapReplacement& rBitmapData) const;
- virtual bool IsLossless (void) const;
-};
-
-
-
-
-/** Compress a preview bitmap by reducing its resolution. While the aspect
- ratio is maintained the horizontal resolution is scaled down to 100
- pixels.
- This compressor is not lossless.
-*/
-class ResolutionReduction
- : public BitmapCompressor
-{
- class ResolutionReducedReplacement;
- static const sal_Int32 mnWidth = 100;
-public:
- virtual ::boost::shared_ptr<BitmapReplacement> Compress (const Bitmap& rpBitmap) const;
- /** Scale the replacement bitmap up to the original size.
- */
- virtual Bitmap Decompress (const BitmapReplacement& rBitmapData) const;
- virtual bool IsLossless (void) const;
-};
-
-
-
-
-/** Compress preview bitmaps using the PNG format.
- This compressor is lossless.
-*/
-class PngCompression
- : public BitmapCompressor
-{
- class PngReplacement;
-public:
- virtual ::boost::shared_ptr<BitmapReplacement> Compress (const Bitmap& rBitmap) const;
- virtual Bitmap Decompress (const BitmapReplacement& rBitmapData) const;
- virtual bool IsLossless (void) const;
-};
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsBitmapFactory.cxx b/sd/source/ui/slidesorter/cache/SlsBitmapFactory.cxx
deleted file mode 100644
index 13f447700..000000000
--- a/sd/source/ui/slidesorter/cache/SlsBitmapFactory.cxx
+++ /dev/null
@@ -1,102 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlsBitmapFactory.hxx"
-
-#include "PreviewRenderer.hxx"
-#include "view/SlideSorterView.hxx"
-#include "sdpage.hxx"
-#include "Window.hxx"
-#include <drawdoc.hxx>
-#include "DrawDocShell.hxx"
-#include <svx/svdtypes.hxx>
-#include <svx/svdpage.hxx>
-#include <vcl/bitmapex.hxx>
-#include <vcl/bmpacc.hxx>
-#include <vcl/pngwrite.hxx>
-
-const static sal_Int32 gnSuperSampleFactor (2);
-const static bool gbAllowSuperSampling (false);
-
-
-namespace sd { namespace slidesorter { namespace view {
-class SlideSorterView;
-class PageObjectViewObjectContact;
-} } }
-
-namespace sd { namespace slidesorter { namespace cache {
-
-BitmapFactory::BitmapFactory (void)
- : maRenderer(NULL, false)
-{
-}
-
-
-
-
-BitmapFactory::~BitmapFactory (void)
-{
-}
-
-
-
-
-Bitmap BitmapFactory::CreateBitmap (
- const SdPage& rPage,
- const Size& rPixelSize,
- const bool bDoSuperSampling)
-{
- Size aSize (rPixelSize);
- if (bDoSuperSampling && gbAllowSuperSampling)
- {
- aSize.Width() *= gnSuperSampleFactor;
- aSize.Height() *= gnSuperSampleFactor;
- }
-
- Bitmap aPreview (maRenderer.RenderPage (
- &rPage,
- aSize,
- String(),
- true,
- false).GetBitmapEx().GetBitmap());
- if (bDoSuperSampling && gbAllowSuperSampling)
- {
- aPreview.Scale(rPixelSize, BMP_SCALE_INTERPOLATE);
- }
-
- return aPreview;
-}
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsBitmapFactory.hxx b/sd/source/ui/slidesorter/cache/SlsBitmapFactory.hxx
deleted file mode 100644
index 83d83c71a..000000000
--- a/sd/source/ui/slidesorter/cache/SlsBitmapFactory.hxx
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_PREVIEW_BITMAP_FACTORY_HXX
-#define SD_SLIDESORTER_PREVIEW_BITMAP_FACTORY_HXX
-
-#include "PreviewRenderer.hxx"
-#include <boost/shared_ptr.hpp>
-
-class SdPage;
-class Size;
-
-namespace sd { namespace slidesorter { namespace view {
-class SlideSorterView;
-} } }
-
-namespace sd { namespace slidesorter { namespace cache {
-
-/** This factory class creates preview bitmaps for page objects. It is
- merely an adapter for the PreviewRenderer.
-*/
-class BitmapFactory
-{
-public:
- BitmapFactory (void);
- ~BitmapFactory (void);
-
- Bitmap CreateBitmap (
- const SdPage& rPage,
- const Size& rPixelSize,
- const bool bDoSuperSampling);
-
-private:
- PreviewRenderer maRenderer;
-};
-
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsCacheCompactor.cxx b/sd/source/ui/slidesorter/cache/SlsCacheCompactor.cxx
deleted file mode 100644
index 6036f2173..000000000
--- a/sd/source/ui/slidesorter/cache/SlsCacheCompactor.cxx
+++ /dev/null
@@ -1,243 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include "SlsCacheCompactor.hxx"
-
-#include "SlsBitmapCompressor.hxx"
-#include "SlsBitmapCache.hxx"
-#include "SlsCacheCompactor.hxx"
-#include "SlsCacheConfiguration.hxx"
-
-#include <rtl/ustring.hxx>
-#include <com/sun/star/uno/Any.hxx>
-#include <set>
-
-using namespace ::com::sun::star::uno;
-
-// Uncomment the definition of VERBOSE to get some more OSL_TRACE messages.
-#ifdef DEBUG
-//#define VERBOSE
-#endif
-
-namespace {
-
-/** This is a trivial implementation of the CacheCompactor interface class.
- It ignores calls to RequestCompaction() and thus will never decrease the
- total size of off-screen preview bitmaps.
-*/
-class NoCacheCompaction
- : public ::sd::slidesorter::cache::CacheCompactor
-{
-public:
- NoCacheCompaction (
- ::sd::slidesorter::cache::BitmapCache& rCache,
- sal_Int32 nMaximalCacheSize)
- : CacheCompactor(rCache, nMaximalCacheSize)
- {}
-
- virtual void RequestCompaction (void) { /* Ignored */ };
-
-protected:
- virtual void Run (void) { /* Do nothing */ };
-};
-
-
-
-
-/** This implementation of the CacheCompactor interface class uses one of
- several bitmap compression algorithms to reduce the number of the bytes
- of the off-screen previews in the bitmap cache. See the documentation
- of CacheCompactor::Create() for more details on configuration properties
- that control the choice of compression algorithm.
-*/
-class CacheCompactionByCompression
- : public ::sd::slidesorter::cache::CacheCompactor
-{
-public:
- CacheCompactionByCompression (
- ::sd::slidesorter::cache::BitmapCache& rCache,
- sal_Int32 nMaximalCacheSize,
- const ::boost::shared_ptr< ::sd::slidesorter::cache::BitmapCompressor>& rpCompressor);
-
-protected:
- virtual void Run (void);
-
-private:
- ::boost::shared_ptr< ::sd::slidesorter::cache::BitmapCompressor> mpCompressor;
-};
-
-
-} // end of anonymous namespace
-
-namespace sd { namespace slidesorter { namespace cache {
-
-
-::std::auto_ptr<CacheCompactor> CacheCompactor::Create (
- BitmapCache& rCache,
- sal_Int32 nMaximalCacheSize)
-{
- static const ::rtl::OUString sNone (RTL_CONSTASCII_USTRINGPARAM("None"));
- static const ::rtl::OUString sCompress (RTL_CONSTASCII_USTRINGPARAM("Compress"));
- static const ::rtl::OUString sErase (RTL_CONSTASCII_USTRINGPARAM("Erase"));
- static const ::rtl::OUString sResolution (RTL_CONSTASCII_USTRINGPARAM("ResolutionReduction"));
- static const ::rtl::OUString sPNGCompression (RTL_CONSTASCII_USTRINGPARAM("PNGCompression"));
-
- ::boost::shared_ptr<BitmapCompressor> pCompressor;
- ::rtl::OUString sCompressionPolicy(sPNGCompression);
- Any aCompressionPolicy (CacheConfiguration::Instance()->GetValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CompressionPolicy"))));
- if (aCompressionPolicy.has<rtl::OUString>())
- aCompressionPolicy >>= sCompressionPolicy;
- if (sCompressionPolicy == sNone)
- pCompressor.reset(new NoBitmapCompression());
- else if (sCompressionPolicy == sErase)
- pCompressor.reset(new CompressionByDeletion());
- else if (sCompressionPolicy == sResolution)
- pCompressor.reset(new ResolutionReduction());
- else
- pCompressor.reset(new PngCompression());
-
- ::std::auto_ptr<CacheCompactor> pCompactor (NULL);
- ::rtl::OUString sCompactionPolicy(sCompress);
- Any aCompactionPolicy (CacheConfiguration::Instance()->GetValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CompactionPolicy"))));
- if (aCompactionPolicy.has<rtl::OUString>())
- aCompactionPolicy >>= sCompactionPolicy;
- if (sCompactionPolicy == sNone)
- pCompactor.reset(new NoCacheCompaction(rCache,nMaximalCacheSize));
- else
- pCompactor.reset(new CacheCompactionByCompression(rCache,nMaximalCacheSize,pCompressor));
-
- return pCompactor;
-}
-
-
-
-
-void CacheCompactor::RequestCompaction (void)
-{
- if ( ! mbIsCompactionRunning && ! maCompactionTimer.IsActive())
- maCompactionTimer.Start();
-}
-
-
-
-
-CacheCompactor::CacheCompactor(
- BitmapCache& rCache,
- sal_Int32 nMaximalCacheSize)
- : mrCache(rCache),
- mnMaximalCacheSize(nMaximalCacheSize),
- mbIsCompactionRunning(false)
-{
- maCompactionTimer.SetTimeout(100 /*ms*/);
- maCompactionTimer.SetTimeoutHdl(LINK(this,CacheCompactor,CompactionCallback));
-
-}
-
-
-
-
-IMPL_LINK(CacheCompactor, CompactionCallback, Timer*, EMPTYARG)
-{
- mbIsCompactionRunning = true;
-
- try
- {
- Run();
- }
- catch (const ::com::sun::star::uno::RuntimeException&)
- {
- }
- catch (const ::com::sun::star::uno::Exception&)
- {
- }
-
- mbIsCompactionRunning = false;
- return 1;
-}
-
-
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-
-
-
-namespace {
-
-//===== CacheCompactionByCompression ==========================================
-
-CacheCompactionByCompression::CacheCompactionByCompression (
- ::sd::slidesorter::cache::BitmapCache& rCache,
- sal_Int32 nMaximalCacheSize,
- const ::boost::shared_ptr< ::sd::slidesorter::cache::BitmapCompressor>& rpCompressor)
- : CacheCompactor(rCache,nMaximalCacheSize),
- mpCompressor(rpCompressor)
-{
-}
-
-
-
-
-void CacheCompactionByCompression::Run (void)
-{
- if (mrCache.GetSize() > mnMaximalCacheSize)
- {
-#ifdef VERBOSE
- OSL_TRACE ("bitmap cache uses to much space: %d > %d",
- mrCache.GetSize(), mnMaximalCacheSize);
-#endif
-
- ::std::auto_ptr< ::sd::slidesorter::cache::BitmapCache::CacheIndex> pIndex (
- mrCache.GetCacheIndex(false,false));
- ::sd::slidesorter::cache::BitmapCache::CacheIndex::iterator iIndex;
- for (iIndex=pIndex->begin(); iIndex!=pIndex->end(); ++iIndex)
- {
- if (*iIndex == NULL)
- continue;
-
- mrCache.Compress(*iIndex, mpCompressor);
- if (mrCache.GetSize() < mnMaximalCacheSize)
- break;
- }
- mrCache.ReCalculateTotalCacheSize();
-#ifdef VERBOSE
- OSL_TRACE (" there are now %d bytes occupied", mrCache.GetSize());
-#endif
- }
-}
-
-
-} // end of anonymous namespace
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsCacheCompactor.hxx b/sd/source/ui/slidesorter/cache/SlsCacheCompactor.hxx
deleted file mode 100644
index cd8067056..000000000
--- a/sd/source/ui/slidesorter/cache/SlsCacheCompactor.hxx
+++ /dev/null
@@ -1,103 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_CACHE_COMPACTOR_HXX
-#define SD_SLIDESORTER_CACHE_COMPACTOR_HXX
-
-#include <sal/types.h>
-#include <vcl/timer.hxx>
-#include <memory>
-
-namespace sd { namespace slidesorter { namespace cache {
-
-class BitmapCache;
-class BitmapCompressor;
-
-/** This is an interface class whose implementations are created via the
- Create() factory method.
-*/
-class CacheCompactor
-{
-public:
- virtual ~CacheCompactor (void) {};
-
- /** Create a new instance of the CacheCompactor interface class. The
- type of compaction algorithm used depends on values from the
- configuration: the SlideSorter/PreviewCache/CompactionPolicy
- property of the Impress.xcs file currently supports the values
- "None" and "Compress". With the later the CompressionPolicy
- property is evaluated which implementation of the BitmapCompress
- interface class to use as bitmap compressor.
- @param rCache
- The bitmap cache on which to operate.
- @param nMaximalCacheSize
- The total number of bytes the off-screen bitmaps in the cache
- may have. When the Run() method is (indirectly) called the
- compactor tries to reduce that summed size of off-screen bitmaps
- under this number. However, it is not guaranteed that this
- works in all cases.
- */
- static ::std::auto_ptr<CacheCompactor> Create (
- BitmapCache& rCache,
- sal_Int32 nMaximalCacheSize);
-
- /** Request a compaction of the off-screen previews in the bitmap
- cache. This calls via a timer the Run() method.
- */
- virtual void RequestCompaction (void);
-
-protected:
- BitmapCache& mrCache;
- sal_Int32 mnMaximalCacheSize;
-
- CacheCompactor(
- BitmapCache& rCache,
- sal_Int32 nMaximalCacheSize);
-
- /** This method actually tries to reduce the total number of bytes used
- by the off-screen preview bitmaps.
- */
- virtual void Run (void) = 0;
-
-private:
- /** This timer is used to collect calles to RequestCompaction() and
- eventually call Run().
- */
- Timer maCompactionTimer;
- bool mbIsCompactionRunning;
- DECL_LINK(CompactionCallback, Timer*);
-};
-
-
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsCacheConfiguration.cxx b/sd/source/ui/slidesorter/cache/SlsCacheConfiguration.cxx
deleted file mode 100644
index 89f0b7c95..000000000
--- a/sd/source/ui/slidesorter/cache/SlsCacheConfiguration.cxx
+++ /dev/null
@@ -1,185 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include "SlsCacheConfiguration.hxx"
-#include <osl/mutex.hxx>
-#include <rtl/instance.hxx>
-#include <vcl/svapp.hxx>
-
-#include <comphelper/processfactory.hxx>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
-#include <com/sun/star/beans/PropertyValue.hpp>
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-
-namespace sd { namespace slidesorter { namespace cache {
-
-namespace
-{
- typedef ::boost::shared_ptr<CacheConfiguration> CacheConfigSharedPtr;
- class theInstance :
- public rtl::Static<CacheConfigSharedPtr, theInstance> {};
-}
-
-::boost::weak_ptr<CacheConfiguration> CacheConfiguration::mpWeakInstance;
-Timer CacheConfiguration::maReleaseTimer;
-
-::boost::shared_ptr<CacheConfiguration> CacheConfiguration::Instance (void)
-{
- SolarMutexGuard aSolarGuard;
- CacheConfigSharedPtr &rInstancePtr = theInstance::get();
- if (rInstancePtr.get() == NULL)
- {
- // Maybe somebody else kept a previously created instance alive.
- if ( ! mpWeakInstance.expired())
- rInstancePtr = ::boost::shared_ptr<CacheConfiguration>(mpWeakInstance);
- if (rInstancePtr.get() == NULL)
- {
- // We have to create a new instance.
- rInstancePtr.reset(new CacheConfiguration());
- mpWeakInstance = rInstancePtr;
- // Prepare to release this instance in the near future.
- maReleaseTimer.SetTimeoutHdl(
- LINK(rInstancePtr.get(),CacheConfiguration,TimerCallback));
- maReleaseTimer.SetTimeout(5000 /* 5s */);
- maReleaseTimer.Start();
- }
- }
- return rInstancePtr;
-}
-
-
-
-
-CacheConfiguration::CacheConfiguration (void)
-{
- // Get the cache size from configuration.
- const ::rtl::OUString sConfigurationProviderServiceName(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.configuration.ConfigurationProvider"));
- const ::rtl::OUString sPathToImpressConfigurationRoot(
- RTL_CONSTASCII_USTRINGPARAM("/org.openoffice.Office.Impress/"));
- const ::rtl::OUString sPathToNode(
- RTL_CONSTASCII_USTRINGPARAM(
- "MultiPaneGUI/SlideSorter/PreviewCache"));
-
- try
- {
- // Obtain access to the configuration.
- Reference<lang::XMultiServiceFactory> xProvider (
- ::comphelper::getProcessServiceFactory()->createInstance(
- sConfigurationProviderServiceName),
- UNO_QUERY);
- if ( ! xProvider.is())
- return;
-
- // Obtain access to Impress configuration.
- Sequence<Any> aCreationArguments(3);
- aCreationArguments[0] = makeAny(beans::PropertyValue(
- ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("nodepath")),
- 0,
- makeAny(sPathToImpressConfigurationRoot),
- beans::PropertyState_DIRECT_VALUE));
- aCreationArguments[1] = makeAny(beans::PropertyValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("depth")),
- 0,
- makeAny((sal_Int32)-1),
- beans::PropertyState_DIRECT_VALUE));
- aCreationArguments[2] = makeAny(beans::PropertyValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("lazywrite")),
- 0,
- makeAny(true),
- beans::PropertyState_DIRECT_VALUE));
- ::rtl::OUString sAccessService (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.configuration.ConfigurationAccess")));
- Reference<XInterface> xRoot (xProvider->createInstanceWithArguments(
- sAccessService, aCreationArguments));
- if ( ! xRoot.is())
- return;
- Reference<container::XHierarchicalNameAccess> xHierarchy (xRoot, UNO_QUERY);
- if ( ! xHierarchy.is())
- return;
-
- // Get the node for the slide sorter preview cache.
- mxCacheNode = Reference<container::XNameAccess>(
- xHierarchy->getByHierarchicalName(sPathToNode),
- UNO_QUERY);
- }
- catch (RuntimeException &aException)
- {
- (void)aException;
- }
- catch (Exception &aException)
- {
- (void)aException;
- }
-}
-
-
-
-
-Any CacheConfiguration::GetValue (const ::rtl::OUString& rName)
-{
- Any aResult;
-
- if (mxCacheNode != NULL)
- {
- try
- {
- aResult = mxCacheNode->getByName(rName);
- }
- catch (Exception &aException)
- {
- (void)aException;
- }
- }
-
- return aResult;
-}
-
-
-
-
-IMPL_LINK(CacheConfiguration,TimerCallback, Timer*,EMPTYARG)
-{
- CacheConfigSharedPtr &rInstancePtr = theInstance::get();
- // Release out reference to the instance.
- rInstancePtr.reset();
- return 0;
-}
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsCacheConfiguration.hxx b/sd/source/ui/slidesorter/cache/SlsCacheConfiguration.hxx
deleted file mode 100644
index 6e7174bad..000000000
--- a/sd/source/ui/slidesorter/cache/SlsCacheConfiguration.hxx
+++ /dev/null
@@ -1,76 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_CACHE_CONFIGURATION_HXX
-#define SD_SLIDESORTER_CACHE_CONFIGURATION_HXX
-
-#include <com/sun/star/uno/Any.hxx>
-#include <vcl/timer.hxx>
-#include <com/sun/star/container/XNameAccess.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/weak_ptr.hpp>
-
-namespace sd { namespace slidesorter { namespace cache {
-
-/** A very simple and easy-to-use access to configuration entries regarding
- the slide sorter cache.
-*/
-class CacheConfiguration
-{
-public:
- /** Return an instance to this class. The reference is released after 5
- seconds. Subsequent calls to this function will create a new
- instance.
- */
- static ::boost::shared_ptr<CacheConfiguration> Instance (void);
-
- /** Look up the specified value in
- MultiPaneGUI/SlideSorter/PreviewCache. When the specified value
- does not exist then an empty Any is returned.
- */
- ::com::sun::star::uno::Any GetValue (const ::rtl::OUString& rName);
-
-private:
- /** When a caller holds a reference after we have released ours we use
- this weak pointer to avoid creating a new instance.
- */
- static ::boost::weak_ptr<CacheConfiguration> mpWeakInstance;
- static Timer maReleaseTimer;
- ::com::sun::star::uno::Reference<
- ::com::sun::star::container::XNameAccess> mxCacheNode;
-
- CacheConfiguration (void);
-
- DECL_LINK(TimerCallback, Timer*);
-};
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsGenericPageCache.cxx b/sd/source/ui/slidesorter/cache/SlsGenericPageCache.cxx
deleted file mode 100644
index ea35320a1..000000000
--- a/sd/source/ui/slidesorter/cache/SlsGenericPageCache.cxx
+++ /dev/null
@@ -1,381 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlsGenericPageCache.hxx"
-
-#include "SlsQueueProcessor.hxx"
-#include "SlsRequestPriorityClass.hxx"
-#include "SlsRequestFactory.hxx"
-#include "cache/SlsPageCacheManager.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "controller/SlideSorterController.hxx"
-
-
-namespace sd { namespace slidesorter { namespace cache {
-
-GenericPageCache::GenericPageCache (
- const Size& rPreviewSize,
- const bool bDoSuperSampling,
- const SharedCacheContext& rpCacheContext)
- : mpBitmapCache(),
- maRequestQueue(rpCacheContext),
- mpQueueProcessor(),
- mpCacheContext(rpCacheContext),
- maPreviewSize(rPreviewSize),
- mbDoSuperSampling(bDoSuperSampling)
-{
- // A large size may indicate an error of the caller. After all we
- // are creating previews.
- DBG_ASSERT (maPreviewSize.Width()<1000 && maPreviewSize.Height()<1000,
- "GenericPageCache<>::GetPreviewBitmap(): bitmap requested with large width. "
- "This may indicate an error.");
-}
-
-
-
-
-GenericPageCache::~GenericPageCache (void)
-{
- if (mpQueueProcessor.get() != NULL)
- mpQueueProcessor->Stop();
- maRequestQueue.Clear();
- if (mpQueueProcessor.get() != NULL)
- mpQueueProcessor->Terminate();
- mpQueueProcessor.reset();
-
- if (mpBitmapCache.get() != NULL)
- PageCacheManager::Instance()->ReleaseCache(mpBitmapCache);
- mpBitmapCache.reset();
-}
-
-
-
-
-void GenericPageCache::ProvideCacheAndProcessor (void)
-{
- if (mpBitmapCache.get() == NULL)
- mpBitmapCache = PageCacheManager::Instance()->GetCache(
- mpCacheContext->GetModel(),
- maPreviewSize);
-
- if (mpQueueProcessor.get() == NULL)
- mpQueueProcessor.reset(new QueueProcessor(
- maRequestQueue,
- mpBitmapCache,
- maPreviewSize,
- mbDoSuperSampling,
- mpCacheContext));
-}
-
-
-
-
-void GenericPageCache::ChangePreviewSize (
- const Size& rPreviewSize,
- const bool bDoSuperSampling)
-{
- if (rPreviewSize!=maPreviewSize || bDoSuperSampling!=mbDoSuperSampling)
- {
- // A large size may indicate an error of the caller. After all we
- // are creating previews.
- DBG_ASSERT (maPreviewSize.Width()<1000 && maPreviewSize.Height()<1000,
- "GenericPageCache<>::GetPreviewBitmap(): bitmap requested with large width. "
- "This may indicate an error.");
-
- if (mpBitmapCache.get() != NULL)
- {
- mpBitmapCache = PageCacheManager::Instance()->ChangeSize(
- mpBitmapCache, maPreviewSize, rPreviewSize);
- if (mpQueueProcessor.get() != NULL)
- {
- mpQueueProcessor->SetPreviewSize(rPreviewSize, bDoSuperSampling);
- mpQueueProcessor->SetBitmapCache(mpBitmapCache);
- }
- }
- maPreviewSize = rPreviewSize;
- mbDoSuperSampling = bDoSuperSampling;
- }
-}
-
-
-
-
-Bitmap GenericPageCache::GetPreviewBitmap (
- const CacheKey aKey,
- const bool bResize)
-{
- OSL_ASSERT(aKey != NULL);
-
- Bitmap aPreview;
- bool bMayBeUpToDate = true;
- ProvideCacheAndProcessor();
- const SdrPage* pPage = mpCacheContext->GetPage(aKey);
- if (mpBitmapCache->HasBitmap(pPage))
- {
- aPreview = mpBitmapCache->GetBitmap(pPage);
- const Size aBitmapSize (aPreview.GetSizePixel());
- if (aBitmapSize != maPreviewSize)
- {
- // Scale the bitmap to the desired size when that is possible,
- // i.e. the bitmap is not empty.
- if (bResize && aBitmapSize.Width()>0 && aBitmapSize.Height()>0)
- {
- aPreview.Scale(maPreviewSize, BMP_SCALE_FAST);
- }
- bMayBeUpToDate = false;
- }
- else
- bMayBeUpToDate = true;
- }
- else
- bMayBeUpToDate = false;
-
- // Request the creation of a correctly sized preview bitmap. We do this
- // even when the size of the bitmap in the cache is correct because its
- // content may be not up-to-date anymore.
- RequestPreviewBitmap(aKey, bMayBeUpToDate);
-
- return aPreview;
-}
-
-
-
-
-Bitmap GenericPageCache::GetMarkedPreviewBitmap (
- const CacheKey aKey,
- const bool bResize)
-{
- OSL_ASSERT(aKey != NULL);
-
- ProvideCacheAndProcessor();
- const SdrPage* pPage = mpCacheContext->GetPage(aKey);
- Bitmap aMarkedPreview (mpBitmapCache->GetMarkedBitmap(pPage));
- const Size aBitmapSize (aMarkedPreview.GetSizePixel());
- if (bResize && aBitmapSize != maPreviewSize)
- {
- // Scale the bitmap to the desired size when that is possible,
- // i.e. the bitmap is not empty.
- if (aBitmapSize.Width()>0 && aBitmapSize.Height()>0)
- {
- aMarkedPreview.Scale(maPreviewSize, BMP_SCALE_FAST);
- }
- }
-
- return aMarkedPreview;
-}
-
-
-
-
-void GenericPageCache::SetMarkedPreviewBitmap (
- const CacheKey aKey,
- const Bitmap& rMarkedBitmap)
-{
- OSL_ASSERT(aKey != NULL);
-
- ProvideCacheAndProcessor();
- const SdrPage* pPage = mpCacheContext->GetPage(aKey);
- mpBitmapCache->SetMarkedBitmap(pPage, rMarkedBitmap);
-}
-
-
-
-
-void GenericPageCache::RequestPreviewBitmap (
- const CacheKey aKey,
- const bool bMayBeUpToDate)
-{
- OSL_ASSERT(aKey != NULL);
-
- const SdrPage* pPage = mpCacheContext->GetPage(aKey);
-
- ProvideCacheAndProcessor();
-
- // Determine if the available bitmap is up to date.
- bool bIsUpToDate = false;
- if (bMayBeUpToDate)
- bIsUpToDate = mpBitmapCache->BitmapIsUpToDate (pPage);
- if (bIsUpToDate)
- {
- const Bitmap aPreview (mpBitmapCache->GetBitmap(pPage));
- if (aPreview.IsEmpty() || aPreview.GetSizePixel()!=maPreviewSize)
- bIsUpToDate = false;
- }
-
- if ( ! bIsUpToDate)
- {
- // No, the bitmap is not up-to-date. Request a new one.
- RequestPriorityClass ePriorityClass (NOT_VISIBLE);
- if (mpCacheContext->IsVisible(aKey))
- {
- if (mpBitmapCache->HasBitmap(pPage))
- ePriorityClass = VISIBLE_OUTDATED_PREVIEW;
- else
- ePriorityClass = VISIBLE_NO_PREVIEW;
- }
- maRequestQueue.AddRequest(aKey, ePriorityClass);
- mpQueueProcessor->Start(ePriorityClass);
- }
-}
-
-
-
-
-bool GenericPageCache::InvalidatePreviewBitmap (const CacheKey aKey)
-{
- // Invalidate the page in all caches that reference it, not just this one.
- ::boost::shared_ptr<cache::PageCacheManager> pCacheManager (
- cache::PageCacheManager::Instance());
- if (pCacheManager)
- return pCacheManager->InvalidatePreviewBitmap(
- mpCacheContext->GetModel(),
- aKey);
- else if (mpBitmapCache.get() != NULL)
- return mpBitmapCache->InvalidateBitmap(mpCacheContext->GetPage(aKey));
- else
- return false;
-}
-
-
-
-
-void GenericPageCache::ReleasePreviewBitmap (const CacheKey aKey)
-{
- if (mpBitmapCache.get() != NULL)
- {
- // Suspend the queue processing temporarily to avoid the reinsertion
- // of the request that is to be deleted.
- mpQueueProcessor->Stop();
-
- maRequestQueue.RemoveRequest(aKey);
- mpQueueProcessor->RemoveRequest(aKey);
-
- // Resume the queue processing.
- if ( ! maRequestQueue.IsEmpty())
- {
- try
- {
- mpQueueProcessor->Start(maRequestQueue.GetFrontPriorityClass());
- }
- catch (const ::com::sun::star::uno::RuntimeException&)
- {
- }
- }
- }
-
- // We do not relase the preview bitmap that is associated with the page
- // of the given request data because this method is called when the
- // request data, typically a view-object-contact object, is destroyed.
- // The page object usually lives longer than that and thus the preview
- // bitmap may be used later on.
-}
-
-
-
-
-void GenericPageCache::InvalidateCache (const bool bUpdateCache)
-{
- if (mpBitmapCache)
- {
- // When the cache is being invalidated then it makes no sense to
- // continue creating preview bitmaps. However, this may be
- // re-started below.
- mpQueueProcessor->Stop();
- maRequestQueue.Clear();
-
- // Mark the previews in the cache as not being up-to-date anymore.
- // Depending on the given bUpdateCache flag we start to create new
- // preview bitmaps.
- mpBitmapCache->InvalidateCache();
- if (bUpdateCache)
- RequestFactory()(maRequestQueue, mpCacheContext);
- }
-}
-
-
-
-
-void GenericPageCache::SetPreciousFlag (
- const CacheKey aKey,
- const bool bIsPrecious)
-{
- ProvideCacheAndProcessor();
-
- // Change the request priority class according to the new precious flag.
- if (bIsPrecious)
- {
- if (mpBitmapCache->HasBitmap(mpCacheContext->GetPage(aKey)))
- maRequestQueue.ChangeClass(aKey,VISIBLE_OUTDATED_PREVIEW);
- else
- maRequestQueue.ChangeClass(aKey,VISIBLE_NO_PREVIEW);
- }
- else
- {
- if (mpBitmapCache->IsFull())
- {
- // When the bitmap cache is full then requests for slides that
- // are not visible are removed.
- maRequestQueue.RemoveRequest(aKey);
- }
- else
- maRequestQueue.ChangeClass(aKey,NOT_VISIBLE);
- }
-
- mpBitmapCache->SetPrecious(mpCacheContext->GetPage(aKey), bIsPrecious);
-}
-
-
-
-
-void GenericPageCache::Pause (void)
-{
- ProvideCacheAndProcessor();
- if (mpQueueProcessor.get() != NULL)
- mpQueueProcessor->Pause();
-}
-
-
-
-
-void GenericPageCache::Resume (void)
-{
- ProvideCacheAndProcessor();
- if (mpQueueProcessor.get() != NULL)
- mpQueueProcessor->Resume();
-}
-
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsGenericPageCache.hxx b/sd/source/ui/slidesorter/cache/SlsGenericPageCache.hxx
deleted file mode 100644
index ba73f2e49..000000000
--- a/sd/source/ui/slidesorter/cache/SlsGenericPageCache.hxx
+++ /dev/null
@@ -1,171 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_GENERIC_PAGE_CACHE_HXX
-#define SD_SLIDESORTER_GENERIC_PAGE_CACHE_HXX
-
-#include "SlideSorter.hxx"
-#include "SlsRequestQueue.hxx"
-#include <boost/scoped_ptr.hpp>
-
-namespace sd { namespace slidesorter { namespace cache {
-
-class BitmapCache;
-class QueueProcessor;
-
-/** This basically is the implementation class for the PageCache class.
-*/
-class GenericPageCache
-{
-public:
- /** The page chache is created with a reference to the SlideSorter and
- thus has access to both view and model. This allows the cache to
- fill itself with requests for all pages or just the visible ones.
- @param rPreviewSize
- The size of the previews is expected in pixel values.
- @param bDoSuperSampling
- When <TRUE/> the previews are rendered larger and then scaled
- down to the requested size to improve image quality.
- */
- GenericPageCache (
- const Size& rPreviewSize,
- const bool bDoSuperSampling,
- const SharedCacheContext& rpCacheContext);
-
- ~GenericPageCache (void);
-
- /** Change the size of the preview bitmaps. This may be caused by a
- resize of the slide sorter window or a change of the number of
- columns.
- */
- void ChangePreviewSize (
- const Size& rPreviewSize,
- const bool bDoSuperSampling);
-
- /** Request a preview bitmap for the specified page object in the
- specified size. The returned bitmap may be a preview of the preview,
- i.e. either a scaled (up or down) version of a previous preview (of
- the wrong size) or an empty bitmap. In this case a request for the
- generation of a new preview is created and inserted into the request
- queue. When the preview is available the page shape will be told to
- paint itself again. When it then calls this method again if
- receives the correctly sized preview bitmap.
- @param rRequestData
- This data is used to determine the preview.
- @param bResize
- When <TRUE/> then when the available bitmap has not the
- requested size, it is scaled before it is returned. When
- <FALSE/> then the bitmap is returned in the wrong size and it is
- the task of the caller to scale it.
- @return
- Returns a bitmap that is either empty, contains a scaled (up or
- down) version or is the requested bitmap.
- */
- Bitmap GetPreviewBitmap (
- const CacheKey aKey,
- const bool bResize);
- Bitmap GetMarkedPreviewBitmap (
- const CacheKey aKey,
- const bool bResize);
- void SetMarkedPreviewBitmap (
- const CacheKey aKey,
- const Bitmap& rMarkedBitmap);
-
- /** When the requested preview bitmap does not yet exist or is not
- up-to-date then the rendering of one is scheduled. Otherwise this
- method does nothing.
- @param rRequestData
- This data is used to determine the preview.
- @param bMayBeUpToDate
- This flag helps the method to determine whether an existing
- preview that matches the request is up to date. If the caller
- knows that it is not then by passing <FALSE/> he tells us that we
- do not have to check the up-to-date flag a second time. If
- unsure use <TRUE/>.
- */
- void RequestPreviewBitmap (
- const CacheKey aKey,
- const bool bMayBeUpToDate = true);
-
- /** Tell the cache to replace the bitmap associated with the given
- request data with a new one that reflects recent changes in the
- content of the page object.
- @return
- When the key is kown then return <TRUE/>.
- */
- bool InvalidatePreviewBitmap (const CacheKey aKey);
-
- /** Call this method when a view-object-contact object is being deleted
- and does not need (a) its current bitmap in the cache and (b) a
- requested a new bitmap.
- */
- void ReleasePreviewBitmap (const CacheKey aKey);
-
- /** Call this method when all preview bitmaps have to be generated anew.
- This is the case when the size of the page objects on the screen has
- changed or when the model has changed.
- */
- void InvalidateCache (const bool bUpdateCache);
-
- /** With the precious flag you can control whether a bitmap can be
- removed from the cache or reduced in size to make room for other
- bitmaps or is so precious that it will not be touched. A typical
- use is to set the precious flag for the visible pages.
- */
- void SetPreciousFlag (const CacheKey aKey, const bool bIsPrecious);
-
- void Pause (void);
- void Resume (void);
-
-private:
- ::boost::shared_ptr<BitmapCache> mpBitmapCache;
-
- RequestQueue maRequestQueue;
-
- ::boost::scoped_ptr<QueueProcessor> mpQueueProcessor;
-
- SharedCacheContext mpCacheContext;
-
- /** The current size of preview bitmaps.
- */
- Size maPreviewSize;
-
- bool mbDoSuperSampling;
-
- /** Both bitmap cache and queue processor are created on demand by this
- method.
- */
- void ProvideCacheAndProcessor (void);
-};
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsPageCache.cxx b/sd/source/ui/slidesorter/cache/SlsPageCache.cxx
deleted file mode 100644
index 9242aa3fd..000000000
--- a/sd/source/ui/slidesorter/cache/SlsPageCache.cxx
+++ /dev/null
@@ -1,169 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlsGenericPageCache.hxx"
-#include "SlsRequestFactory.hxx"
-#include "cache/SlsPageCache.hxx"
-#include "model/SlideSorterModel.hxx"
-#include <boost/bind.hpp>
-#include <boost/bind/protect.hpp>
-
-using namespace ::com::sun::star;
-
-
-namespace sd { namespace slidesorter { namespace cache {
-
-
-//===== PageCache =============================================================
-
-PageCache::PageCache (
- const Size& rPreviewSize,
- const bool bDoSuperSampling,
- const SharedCacheContext& rpCacheContext)
- : mpImplementation(
- new GenericPageCache(
- rPreviewSize,
- bDoSuperSampling,
- rpCacheContext))
-{
-}
-
-
-
-
-PageCache::~PageCache (void)
-{
-}
-
-
-
-
-void PageCache::ChangeSize (
- const Size& rPreviewSize,
- const bool bDoSuperSampling)
-{
- mpImplementation->ChangePreviewSize(rPreviewSize, bDoSuperSampling);
-}
-
-
-
-
-Bitmap PageCache::GetPreviewBitmap (
- const CacheKey aKey,
- const bool bResize)
-{
- return mpImplementation->GetPreviewBitmap(aKey, bResize);
-}
-
-
-
-
-Bitmap PageCache::GetMarkedPreviewBitmap (
- const CacheKey aKey,
- const bool bResize)
-{
- return mpImplementation->GetMarkedPreviewBitmap(aKey, bResize);
-}
-
-
-
-
-void PageCache::SetMarkedPreviewBitmap (
- const CacheKey aKey,
- const Bitmap& rMarkedBitmap)
-{
- mpImplementation->SetMarkedPreviewBitmap(aKey, rMarkedBitmap);
-}
-
-
-
-
-void PageCache::RequestPreviewBitmap (const CacheKey aKey)
-{
- return mpImplementation->RequestPreviewBitmap(aKey);
-}
-
-
-
-
-void PageCache::InvalidatePreviewBitmap (
- const CacheKey aKey,
- const bool bRequestPreview)
-{
- if (mpImplementation->InvalidatePreviewBitmap(aKey) && bRequestPreview)
- RequestPreviewBitmap(aKey);
-}
-
-
-
-
-void PageCache::ReleasePreviewBitmap (const CacheKey aKey)
-{
- mpImplementation->ReleasePreviewBitmap(aKey);
-}
-
-
-
-
-void PageCache::InvalidateCache (const bool bUpdateCache)
-{
- mpImplementation->InvalidateCache(bUpdateCache);
-}
-
-
-
-
-void PageCache::SetPreciousFlag (
- const CacheKey aKey,
- const bool bIsPrecious)
-{
- mpImplementation->SetPreciousFlag(aKey, bIsPrecious);
-}
-
-
-
-
-void PageCache::Pause (void)
-{
- mpImplementation->Pause();
-}
-
-
-
-
-void PageCache::Resume (void)
-{
- mpImplementation->Resume();
-}
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsPageCacheManager.cxx b/sd/source/ui/slidesorter/cache/SlsPageCacheManager.cxx
deleted file mode 100644
index 855810739..000000000
--- a/sd/source/ui/slidesorter/cache/SlsPageCacheManager.cxx
+++ /dev/null
@@ -1,492 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include "cache/SlsPageCacheManager.hxx"
-
-#include "SlsBitmapCache.hxx"
-#include "view/SlideSorterView.hxx"
-#include "model/SlideSorterModel.hxx"
-
-#include <deque>
-#include <map>
-#include <boost/weak_ptr.hpp>
-
-namespace {
-
-/** Collection of data that is stored for all active preview caches.
-*/
-class CacheDescriptor
-{
-public:
- ::sd::slidesorter::cache::PageCacheManager::DocumentKey mpDocument;
- Size maPreviewSize;
-
- CacheDescriptor(
- ::sd::slidesorter::cache::PageCacheManager::DocumentKey pDocument,
- const Size& rPreviewSize)
- :mpDocument(pDocument),maPreviewSize(rPreviewSize)
- {}
- /// Test for equality with respect to all members.
- class Equal {public: bool operator() (
- const CacheDescriptor& rDescriptor1, const CacheDescriptor& rDescriptor2) const {
- return rDescriptor1.mpDocument==rDescriptor2.mpDocument
- && rDescriptor1.maPreviewSize==rDescriptor2.maPreviewSize;
- } };
- /// Hash function that takes all members into account.
- class Hash {public: size_t operator() (const CacheDescriptor& rDescriptor) const {
- return (size_t)rDescriptor.mpDocument.get() + rDescriptor.maPreviewSize.Width();
- } };
-};
-
-
-
-
-/** Collection of data that is stored for the inactive, recently used
- caches.
-*/
-class RecentlyUsedCacheDescriptor
-{
-public:
- ::sd::slidesorter::cache::PageCacheManager::DocumentKey mpDocument;
- Size maPreviewSize;
- ::boost::shared_ptr< ::sd::slidesorter::cache::PageCacheManager::Cache> mpCache;
-
- RecentlyUsedCacheDescriptor(
- ::sd::slidesorter::cache::PageCacheManager::DocumentKey pDocument,
- const Size& rPreviewSize,
- const ::boost::shared_ptr< ::sd::slidesorter::cache::PageCacheManager::Cache>& rpCache)
- :mpDocument(pDocument),maPreviewSize(rPreviewSize),mpCache(rpCache)
- {}
-};
-
-
-
-
-/** The list of recently used caches is organized as queue. When elements
- are added the list is shortened to the maximally allowed number of
- elements by removing the least recently used elements.
-*/
-typedef ::std::deque<RecentlyUsedCacheDescriptor> RecentlyUsedQueue;
-
-
-
-
-/** Compare the caches by preview size. Those that match the given size
- come first, then, regardless of the given size, the largest ones before
- the smaller ones.
-*/
-class BestFittingCacheComparer
-{
-public:
- BestFittingCacheComparer (const Size& rPreferredSize)
- : maPreferredSize(rPreferredSize)
- {}
- bool operator()(const ::sd::slidesorter::cache::PageCacheManager::BestFittingPageCaches::value_type& rElement1,
- const ::sd::slidesorter::cache::PageCacheManager::BestFittingPageCaches::value_type& rElement2)
- {
- if (rElement1.first == maPreferredSize)
- return true;
- else if (rElement2.first == maPreferredSize)
- return false;
- else
- return (rElement1.first.Width()*rElement1.first.Height()
- > rElement2.first.Width()*rElement2.first.Height());
- }
-
-private:
- Size maPreferredSize;
-};
-
-} // end of anonymous namespace
-
-
-namespace sd { namespace slidesorter { namespace cache {
-
-/** Container for the active caches.
-*/
-class PageCacheManager::PageCacheContainer
- : public ::boost::unordered_map<CacheDescriptor,
- ::boost::shared_ptr<PageCacheManager::Cache>,
- CacheDescriptor::Hash,
- CacheDescriptor::Equal>
-{
-public:
- PageCacheContainer (void) {}
-
- /** Compare entries in the cache container with respect to the cache
- address only.
- */
- class CompareWithCache { public:
- CompareWithCache(const ::boost::shared_ptr<PageCacheManager::Cache>& rpCache)
- : mpCache(rpCache) {}
- bool operator () (const PageCacheContainer::value_type& rValue) const
- { return rValue.second == mpCache; }
- private:
- ::boost::shared_ptr<PageCacheManager::Cache> mpCache;
- };
-};
-
-
-/** The recently used caches are stored in one queue for each document.
-*/
-class PageCacheManager::RecentlyUsedPageCaches
- : public ::std::map<DocumentKey,RecentlyUsedQueue>
-{
-public:
- RecentlyUsedPageCaches (void) {};
-};
-
-
-
-
-class PageCacheManager::Deleter
-{
-public:
- void operator() (PageCacheManager* pObject) { delete pObject; }
-};
-
-
-
-//===== PageCacheManager ====================================================
-
-::boost::weak_ptr<PageCacheManager> PageCacheManager::mpInstance;
-
-::boost::shared_ptr<PageCacheManager> PageCacheManager::Instance (void)
-{
- ::boost::shared_ptr<PageCacheManager> pInstance;
-
- ::osl::MutexGuard aGuard (::osl::Mutex::getGlobalMutex());
-
- pInstance = mpInstance.lock();
- if (pInstance.get() == NULL)
- {
- pInstance = ::boost::shared_ptr<PageCacheManager>(
- new PageCacheManager(),
- PageCacheManager::Deleter());
- mpInstance = pInstance;
- }
-
- return pInstance;
-}
-
-
-
-
-PageCacheManager::PageCacheManager (void)
- : mpPageCaches(new PageCacheContainer()),
- mpRecentlyUsedPageCaches(new RecentlyUsedPageCaches()),
- mnMaximalRecentlyCacheCount(2)
-{
-}
-
-
-
-
-PageCacheManager::~PageCacheManager (void)
-{
-}
-
-
-
-
-::boost::shared_ptr<PageCacheManager::Cache> PageCacheManager::GetCache (
- DocumentKey pDocument,
- const Size& rPreviewSize)
-{
- ::boost::shared_ptr<Cache> pResult;
-
- // Look for the cache in the list of active caches.
- CacheDescriptor aKey (pDocument, rPreviewSize);
- PageCacheContainer::iterator iCache (mpPageCaches->find(aKey));
- if (iCache != mpPageCaches->end())
- pResult = iCache->second;
-
- // Look for the cache in the list of recently used caches.
- if (pResult.get() == NULL)
- pResult = GetRecentlyUsedCache(pDocument, rPreviewSize);
-
- // Create the cache when no suitable one does exist.
- if (pResult.get() == NULL)
- pResult.reset(new Cache());
-
- // The cache may be newly created and thus empty or is old and may
- // contain previews that are not up-to-date. Recycle previews from
- // other caches to fill in the holes.
- Recycle(pResult, pDocument,rPreviewSize);
-
- // Put the new (or old) cache into the container.
- if (pResult.get() != NULL)
- mpPageCaches->insert(PageCacheContainer::value_type(aKey, pResult));
-
- return pResult;
-}
-
-
-
-
-void PageCacheManager::Recycle (
- const ::boost::shared_ptr<Cache>& rpCache,
- DocumentKey pDocument,
- const Size& rPreviewSize)
-{
- BestFittingPageCaches aCaches;
-
- // Add bitmap caches from active caches.
- PageCacheContainer::iterator iActiveCache;
- for (iActiveCache=mpPageCaches->begin(); iActiveCache!=mpPageCaches->end(); ++iActiveCache)
- {
- if (iActiveCache->first.mpDocument == pDocument)
- aCaches.push_back(BestFittingPageCaches::value_type(
- iActiveCache->first.maPreviewSize, iActiveCache->second));
- }
-
- // Add bitmap caches from recently used caches.
- RecentlyUsedPageCaches::iterator iQueue (mpRecentlyUsedPageCaches->find(pDocument));
- if (iQueue != mpRecentlyUsedPageCaches->end())
- {
- RecentlyUsedQueue::const_iterator iRecentCache;
- for (iRecentCache=iQueue->second.begin();iRecentCache!=iQueue->second.end();++iRecentCache)
- aCaches.push_back(BestFittingPageCaches::value_type(
- iRecentCache->maPreviewSize, iRecentCache->mpCache));
- }
-
- ::std::sort(aCaches.begin(), aCaches.end(), BestFittingCacheComparer(rPreviewSize));
-
- BestFittingPageCaches::const_iterator iBestCache;
- for (iBestCache=aCaches.begin(); iBestCache!=aCaches.end(); ++iBestCache)
- {
- rpCache->Recycle(*iBestCache->second);
- }
-}
-
-
-
-
-void PageCacheManager::ReleaseCache (const ::boost::shared_ptr<Cache>& rpCache)
-{
- PageCacheContainer::iterator iCache (::std::find_if(
- mpPageCaches->begin(),
- mpPageCaches->end(),
- PageCacheContainer::CompareWithCache(rpCache)));
-
- if (iCache != mpPageCaches->end())
- {
- OSL_ASSERT(iCache->second == rpCache);
-
- PutRecentlyUsedCache(iCache->first.mpDocument,iCache->first.maPreviewSize,rpCache);
-
- mpPageCaches->erase(iCache);
- }
-}
-
-
-
-
-::boost::shared_ptr<PageCacheManager::Cache> PageCacheManager::ChangeSize (
- const ::boost::shared_ptr<Cache>& rpCache,
- const Size& rOldPreviewSize,
- const Size& rNewPreviewSize)
-{
- (void)rOldPreviewSize;
-
- ::boost::shared_ptr<Cache> pResult;
-
- if (rpCache.get() != NULL)
- {
- // Look up the given cache in the list of active caches.
- PageCacheContainer::iterator iCacheToChange (::std::find_if(
- mpPageCaches->begin(),
- mpPageCaches->end(),
- PageCacheContainer::CompareWithCache(rpCache)));
- if (iCacheToChange != mpPageCaches->end())
- {
- OSL_ASSERT(iCacheToChange->second == rpCache);
-
- // Now, we can change the preview size of the existing one by
- // removing the cache from the list and re-insert it with the
- // updated size.
- const ::sd::slidesorter::cache::PageCacheManager::DocumentKey aKey (
- iCacheToChange->first.mpDocument);
- mpPageCaches->erase(iCacheToChange);
- mpPageCaches->insert(PageCacheContainer::value_type(
- CacheDescriptor(aKey,rNewPreviewSize),
- rpCache));
-
- pResult = rpCache;
- }
- else
- {
- OSL_ASSERT(iCacheToChange != mpPageCaches->end());
- }
- }
-
- return pResult;
-}
-
-
-
-
-bool PageCacheManager::InvalidatePreviewBitmap (
- DocumentKey pDocument,
- const SdrPage* pKey)
-{
- bool bHasChanged (false);
-
- if (pDocument!=NULL)
- {
- // Iterate over all caches that are currently in use and invalidate
- // the previews in those that belong to the document.
- PageCacheContainer::iterator iCache;
- for (iCache=mpPageCaches->begin(); iCache!=mpPageCaches->end(); ++iCache)
- if (iCache->first.mpDocument == pDocument)
- bHasChanged |= iCache->second->InvalidateBitmap(pKey);
-
- // Invalidate the previews in the recently used caches belonging to
- // the given document.
- RecentlyUsedPageCaches::iterator iQueue (mpRecentlyUsedPageCaches->find(pDocument));
- if (iQueue != mpRecentlyUsedPageCaches->end())
- {
- RecentlyUsedQueue::const_iterator iCache2;
- for (iCache2=iQueue->second.begin(); iCache2!=iQueue->second.end(); ++iCache2)
- bHasChanged |= iCache2->mpCache->InvalidateBitmap(pKey);
- }
- }
-
- return bHasChanged;
-}
-
-
-
-
-void PageCacheManager::InvalidateAllPreviewBitmaps (DocumentKey pDocument)
-{
- if (pDocument == NULL)
- return;
-
- // Iterate over all caches that are currently in use and invalidate the
- // previews in those that belong to the document.
- PageCacheContainer::iterator iCache;
- for (iCache=mpPageCaches->begin(); iCache!=mpPageCaches->end(); ++iCache)
- if (iCache->first.mpDocument == pDocument)
- iCache->second->InvalidateCache();
-
- // Invalidate the previews in the recently used caches belonging to the
- // given document.
- RecentlyUsedPageCaches::iterator iQueue (mpRecentlyUsedPageCaches->find(pDocument));
- if (iQueue != mpRecentlyUsedPageCaches->end())
- {
- RecentlyUsedQueue::const_iterator iCache2;
- for (iCache2=iQueue->second.begin(); iCache2!=iQueue->second.end(); ++iCache2)
- iCache2->mpCache->InvalidateCache();
- }
-}
-
-
-
-
-void PageCacheManager::InvalidateAllCaches (void)
-{
- // Iterate over all caches that are currently in use and invalidate
- // them.
- PageCacheContainer::iterator iCache;
- for (iCache=mpPageCaches->begin(); iCache!=mpPageCaches->end(); ++iCache)
- iCache->second->InvalidateCache();
-
- // Remove all recently used caches, there is not much sense in storing
- // invalidated and unused caches.
- mpRecentlyUsedPageCaches->clear();
-}
-
-
-
-
-void PageCacheManager::ReleasePreviewBitmap (const SdrPage* pPage)
-{
- PageCacheContainer::iterator iCache;
- for (iCache=mpPageCaches->begin(); iCache!=mpPageCaches->end(); ++iCache)
- iCache->second->ReleaseBitmap(pPage);
-}
-
-
-
-
-::boost::shared_ptr<PageCacheManager::Cache> PageCacheManager::GetRecentlyUsedCache (
- DocumentKey pDocument,
- const Size& rPreviewSize)
-{
- ::boost::shared_ptr<Cache> pCache;
-
- // Look for the cache in the list of recently used caches.
- RecentlyUsedPageCaches::iterator iQueue (mpRecentlyUsedPageCaches->find(pDocument));
- if (iQueue != mpRecentlyUsedPageCaches->end())
- {
- RecentlyUsedQueue::iterator iCache;
- for (iCache=iQueue->second.begin(); iCache!= iQueue->second.end(); ++iCache)
- if (iCache->maPreviewSize == rPreviewSize)
- {
- pCache = iCache->mpCache;
- iQueue->second.erase(iCache);
- break;
- }
- }
-
- return pCache;
-}
-
-
-
-
-void PageCacheManager::PutRecentlyUsedCache(
- DocumentKey pDocument,
- const Size& rPreviewSize,
- const ::boost::shared_ptr<Cache>& rpCache)
-{
- // Look up the list of recently used caches for the given document.
- RecentlyUsedPageCaches::iterator iQueue (mpRecentlyUsedPageCaches->find(pDocument));
- if (iQueue == mpRecentlyUsedPageCaches->end())
- iQueue = mpRecentlyUsedPageCaches->insert(
- RecentlyUsedPageCaches::value_type(pDocument, RecentlyUsedQueue())
- ).first;
-
- if (iQueue != mpRecentlyUsedPageCaches->end())
- {
- iQueue->second.push_front(RecentlyUsedCacheDescriptor(pDocument,rPreviewSize,rpCache));
- // Shorten the list of recently used caches to the allowed maximal length.
- while (iQueue->second.size() > mnMaximalRecentlyCacheCount)
- iQueue->second.pop_back();
- }
-}
-
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsQueueProcessor.cxx b/sd/source/ui/slidesorter/cache/SlsQueueProcessor.cxx
deleted file mode 100644
index ff404eef4..000000000
--- a/sd/source/ui/slidesorter/cache/SlsQueueProcessor.cxx
+++ /dev/null
@@ -1,259 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlsQueueProcessor.hxx"
-#include "SlsCacheConfiguration.hxx"
-#include "SlsRequestQueue.hxx"
-
-namespace sd { namespace slidesorter { namespace cache {
-
-
-//===== QueueProcessor ======================================================
-
-QueueProcessor::QueueProcessor (
- RequestQueue& rQueue,
- const ::boost::shared_ptr<BitmapCache>& rpCache,
- const Size& rPreviewSize,
- const bool bDoSuperSampling,
- const SharedCacheContext& rpCacheContext)
- : maMutex(),
- maTimer(),
- mnTimeBetweenHighPriorityRequests (10/*ms*/),
- mnTimeBetweenLowPriorityRequests (100/*ms*/),
- mnTimeBetweenRequestsWhenNotIdle (1000/*ms*/),
- maPreviewSize(rPreviewSize),
- mbDoSuperSampling(bDoSuperSampling),
- mpCacheContext(rpCacheContext),
- mrQueue(rQueue),
- mpCache(rpCache),
- maBitmapFactory(),
- mbIsPaused(false)
-{
- // Look into the configuration if there for overriding values.
- ::com::sun::star::uno::Any aTimeBetweenReqeusts;
- aTimeBetweenReqeusts = CacheConfiguration::Instance()->GetValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TimeBetweenHighPriorityRequests")));
- if (aTimeBetweenReqeusts.has<sal_Int32>())
- aTimeBetweenReqeusts >>= mnTimeBetweenHighPriorityRequests;
-
- aTimeBetweenReqeusts = CacheConfiguration::Instance()->GetValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TimeBetweenLowPriorityRequests")));
- if (aTimeBetweenReqeusts.has<sal_Int32>())
- aTimeBetweenReqeusts >>= mnTimeBetweenLowPriorityRequests;
-
- aTimeBetweenReqeusts = CacheConfiguration::Instance()->GetValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TimeBetweenRequestsDuringShow")));
- if (aTimeBetweenReqeusts.has<sal_Int32>())
- aTimeBetweenReqeusts >>= mnTimeBetweenRequestsWhenNotIdle;
-
- maTimer.SetTimeoutHdl (LINK(this,QueueProcessor,ProcessRequestHdl));
- maTimer.SetTimeout (mnTimeBetweenHighPriorityRequests);
-}
-
-
-
-
-
-QueueProcessor::~QueueProcessor (void)
-{
-}
-
-
-
-
-void QueueProcessor::Start (int nPriorityClass)
-{
- if (mbIsPaused)
- return;
- if ( ! maTimer.IsActive())
- {
- if (nPriorityClass == 0)
- maTimer.SetTimeout (mnTimeBetweenHighPriorityRequests);
- else
- maTimer.SetTimeout (mnTimeBetweenLowPriorityRequests);
- maTimer.Start();
- }
-}
-
-
-
-
-void QueueProcessor::Stop (void)
-{
- if (maTimer.IsActive())
- maTimer.Stop();
-}
-
-
-
-
-void QueueProcessor::Pause (void)
-{
- mbIsPaused = true;
-}
-
-
-
-
-void QueueProcessor::Resume (void)
-{
- mbIsPaused = false;
- if ( ! mrQueue.IsEmpty())
- Start(mrQueue.GetFrontPriorityClass());
-}
-
-
-
-
-void QueueProcessor::Terminate (void)
-{
-}
-
-
-
-
-void QueueProcessor::SetPreviewSize (
- const Size& rPreviewSize,
- const bool bDoSuperSampling)
-{
- maPreviewSize = rPreviewSize;
- mbDoSuperSampling = bDoSuperSampling;
-}
-
-
-
-
-IMPL_LINK(QueueProcessor, ProcessRequestHdl, Timer*, EMPTYARG)
-{
- ProcessRequests();
- return 1;
-}
-
-
-
-
-void QueueProcessor::ProcessRequests (void)
-{
- OSL_ASSERT(mpCacheContext.get()!=NULL);
-
- // Never process more than one request at a time in order to prevent the
- // lock up of the edit view.
- if ( ! mrQueue.IsEmpty()
- && ! mbIsPaused
- && mpCacheContext->IsIdle())
- {
- CacheKey aKey = NULL;
- RequestPriorityClass ePriorityClass (NOT_VISIBLE);
- {
- ::osl::MutexGuard aGuard (mrQueue.GetMutex());
-
- if ( ! mrQueue.IsEmpty())
- {
- // Get the request with the highest priority from the queue.
- ePriorityClass = mrQueue.GetFrontPriorityClass();
- aKey = mrQueue.GetFront();
- mrQueue.PopFront();
- }
- }
-
- if (aKey != NULL)
- ProcessOneRequest(aKey, ePriorityClass);
- }
-
- // Schedule the processing of the next element(s).
- {
- ::osl::MutexGuard aGuard (mrQueue.GetMutex());
- if ( ! mrQueue.IsEmpty())
- Start(mrQueue.GetFrontPriorityClass());
- }
-}
-
-
-
-
-void QueueProcessor::ProcessOneRequest (
- CacheKey aKey,
- const RequestPriorityClass ePriorityClass)
-{
- try
- {
- ::osl::MutexGuard aGuard (maMutex);
-
- // Create a new preview bitmap and store it in the cache.
- if (mpCache.get() != NULL
- && mpCacheContext.get() != NULL)
- {
- const SdPage* pSdPage = dynamic_cast<const SdPage*>(mpCacheContext->GetPage(aKey));
- if (pSdPage != NULL)
- {
- const Bitmap aPreview (
- maBitmapFactory.CreateBitmap(*pSdPage, maPreviewSize, mbDoSuperSampling));
- mpCache->SetBitmap (pSdPage, aPreview, ePriorityClass!=NOT_VISIBLE);
-
- // Initiate a repaint of the new preview.
- mpCacheContext->NotifyPreviewCreation(aKey, aPreview);
- }
- }
- }
- catch (::com::sun::star::uno::RuntimeException &aException)
- {
- (void) aException;
- OSL_FAIL("RuntimeException caught in QueueProcessor");
- }
- catch (::com::sun::star::uno::Exception &aException)
- {
- (void) aException;
- OSL_FAIL("Exception caught in QueueProcessor");
- }
-}
-
-
-
-
-void QueueProcessor::RemoveRequest (CacheKey aKey)
-{
- (void)aKey;
- // See the method declaration above for an explanation why this makes sense.
- ::osl::MutexGuard aGuard (maMutex);
-}
-
-
-
-
-void QueueProcessor::SetBitmapCache (
- const ::boost::shared_ptr<BitmapCache>& rpCache)
-{
- mpCache = rpCache;
-}
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsQueueProcessor.hxx b/sd/source/ui/slidesorter/cache/SlsQueueProcessor.hxx
deleted file mode 100644
index 1f4170f51..000000000
--- a/sd/source/ui/slidesorter/cache/SlsQueueProcessor.hxx
+++ /dev/null
@@ -1,143 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_QUEUE_PROCESSOR_HXX
-#define SD_SLIDESORTER_QUEUE_PROCESSOR_HXX
-
-#include "cache/SlsPageCache.hxx"
-#include "SlsRequestPriorityClass.hxx"
-#include "SlsBitmapFactory.hxx"
-#include "view/SlideSorterView.hxx"
-#include "tools/IdleDetection.hxx"
-#include "SlsBitmapCache.hxx"
-#include "sdpage.hxx"
-#include "Window.hxx"
-
-#include <svx/svdpagv.hxx>
-#include <vcl/svapp.hxx>
-#include <vcl/timer.hxx>
-#include <boost/function.hpp>
-
-
-namespace sd { namespace slidesorter { namespace view {
-class SlideSorterView;
-} } }
-
-
-
-namespace sd { namespace slidesorter { namespace cache {
-
-class BitmapCache;
-class RequestQueue;
-
-
-
-/** This queue processor is timer based, i.e. when an entry is added to the
- queue and the processor is started with Start() in the base class a
- timer is started that eventually calls ProcessRequest(). This is
- repeated until the queue is empty or Stop() is called.
-*/
-class QueueProcessor
-{
-public:
- typedef ::boost::function<bool()> IdleDetectionCallback;
- QueueProcessor (
- RequestQueue& rQueue,
- const ::boost::shared_ptr<BitmapCache>& rpCache,
- const Size& rPreviewSize,
- const bool bDoSuperSampling,
- const SharedCacheContext& rpCacheContext);
- virtual ~QueueProcessor();
-
- /** Start the processor. This implementation is timer based and waits
- an defined amount of time that depends on the given argument before
- the next entry in the queue is processed.
- @param nPriorityClass
- A priority class of 0 tells the processor that a high priority
- request is waiting in the queue. The time to wait is thus
- shorter then that for a low priority request (denoted by a value
- of 1.) When the timer is already running it is not modified.
- */
- void Start (int nPriorityClass = 0);
- void Stop (void);
- void Pause (void);
- void Resume (void);
-
- void Terminate (void);
-
- void SetPreviewSize (
- const Size& rSize,
- const bool bDoSuperSampling);
-
- /** As we can not really terminate the rendering of a preview bitmap for
- a request in midair this method acts more like a semaphor. It
- returns only when it is save for the caller to delete the request.
- For this to work it is important to remove the request from the
- queue before calling this method.
- */
- void RemoveRequest (CacheKey aKey);
-
- /** Use this method when the page cache is (maybe) using a different
- BitmapCache. This is usually necessary after calling
- PageCacheManager::ChangeSize().
- */
- void SetBitmapCache (const ::boost::shared_ptr<BitmapCache>& rpCache);
-
-private:
- /** This mutex is used to guard the queue processor. Be carefull not to
- mix its use with that of the solar mutex.
- */
- ::osl::Mutex maMutex;
-
- Timer maTimer;
- DECL_LINK(ProcessRequestHdl, Timer*);
- sal_uInt32 mnTimeBetweenHighPriorityRequests;
- sal_uInt32 mnTimeBetweenLowPriorityRequests;
- sal_uInt32 mnTimeBetweenRequestsWhenNotIdle;
- Size maPreviewSize;
- bool mbDoSuperSampling;
- SharedCacheContext mpCacheContext;
- RequestQueue& mrQueue;
- ::boost::shared_ptr<BitmapCache> mpCache;
- BitmapFactory maBitmapFactory;
- bool mbIsPaused;
-
- void ProcessRequests (void);
- void ProcessOneRequest (
- CacheKey aKey,
- const RequestPriorityClass ePriorityClass);
-};
-
-
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsQueueProcessorThread.hxx b/sd/source/ui/slidesorter/cache/SlsQueueProcessorThread.hxx
deleted file mode 100644
index ca9a11862..000000000
--- a/sd/source/ui/slidesorter/cache/SlsQueueProcessorThread.hxx
+++ /dev/null
@@ -1,322 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_QUEUE_PROCESSOR_THREAD_HXX
-#define SD_SLIDESORTER_QUEUE_PROCESSOR_THREAD_HXX
-
-#include "view/SlsPageObjectViewObjectContact.hxx"
-#include <vcl/svapp.hxx>
-#include <osl/thread.hxx>
-
-namespace sd { namespace slidesorter { namespace view {
-class SlideSorterView;
-} } }
-
-
-namespace sd { namespace slidesorter { namespace cache {
-
-
-template <class Queue,
- class RequestData,
- class BitmapCache,
- class BitmapFactory>
-class QueueProcessorThread
- : public ::osl::Thread
-{
-public:
- QueueProcessorThread (
- view::SlideSorterView& rView,
- Queue& rQueue,
- BitmapCache& rCache);
- ~QueueProcessorThread (void);
-
- /** Start the execution of a suspended thread. A thread is suspended
- after Stop() is called or when the queue on which it operates is
- empty. Calling Start() on a running thread is OK.
- */
- void Start (void);
-
- /** Stop the thread by suspending it. To re-start its execution call
- Start().
- */
- void Stop (void);
-
- /** As we can not really terminate the rendering of a preview bitmap for
- a request in midair this method acts more like a semaphor. It
- returns only when it is save for the caller to delete the request.
- For this to work it is important to remove the request from the
- queue before calling this method.
- */
- void RemoveRequest (RequestData& rRequest);
-
- /** Terminate the execution of the thread. When the thread is detached
- it deletes itself. Otherwise the caller of this method may call
- delete after this method returnes.
- */
- void SAL_CALL Terminate (void);
-
-protected:
- /** This virutal method is called (among others?) from the
- inherited create method and acts as the main function of this
- thread.
- */
- virtual void SAL_CALL run (void);
-
- /** Called after the thread is terminated via the terminate
- method. Used to kill the thread by calling delete on this.
- */
- virtual void SAL_CALL onTerminated (void);
-
-private:
- /** Flag that indicates wether the onTerminated method has been already
- called. If so then a subsequent call to detach deletes the thread.
- */
- volatile bool mbIsTerminated;
-
- volatile bool mbCanBeJoined;
-
- /** This mutex is used to guard the queue processor. Be carefull not to
- mix its use with that of the solar mutex.
- */
- ::osl::Mutex maMutex;
-
- view::SlideSorterView& mrView;
- Queue& mrQueue;
- BitmapCache& mrCache;
-
- void ProcessQueueEntry (void);
-};
-
-
-
-
-//===== QueueProcessorThread ================================================
-
-template <class Queue, class Request, class Cache, class Factory>
- QueueProcessorThread<Queue, Request, Cache, Factory>
- ::QueueProcessorThread (
- view::SlideSorterView& rView,
- Queue& rQueue,
- Cache& rCache)
- : mbIsTerminated (false),
- mbCanBeJoined (false),
- mrView (rView),
- mrQueue (rQueue),
- mrCache (rCache)
-{
- create();
-}
-
-
-
-
-template <class Queue, class Request, class Cache, class Factory>
- QueueProcessorThread<Queue, Request, Cache, Factory>
- ::~QueueProcessorThread (void)
-{
-}
-
-
-
-
-template <class Queue, class Request, class Cache, class Factory>
-void SAL_CALL QueueProcessorThread<Queue, Request, Cache, Factory>::run (void)
-{
- while ( ! mbIsTerminated)
- {
- if (mrQueue.IsEmpty())
- {
- // Sleep while the queue is empty.
- suspend();
- }
-
- else if (GetpApp()->AnyInput())
- {
- yield();
- // When there is input waiting to be processed we wait a short
- // time and try again.
- TimeValue aTimeToWait;
- aTimeToWait.Seconds = 0;
- aTimeToWait.Nanosec = 50*1000*1000;
- wait (aTimeToWait);
- }
-
- else
- {
- ProcessQueueEntry();
- yield ();
- }
- }
-}
-
-
-
-
-template <class Queue, class Request, class Cache, class Factory>
-void QueueProcessorThread<Queue, Request, Cache, Factory>
- ::ProcessQueueEntry (void)
-{
- Request* pRequest = NULL;
- int nPriorityClass;
- bool bRequestIsValid = false;
-
- do
- {
- {
- ::osl::MutexGuard aGuard (maMutex);
- if (mbIsTerminated)
- break;
- if (mrQueue.IsEmpty())
- break;
- }
- SolarMutexGuard aSolarGuard;
- ::osl::MutexGuard aGuard (maMutex);
- if (mbIsTerminated)
- break;
-
- if (mrQueue.IsEmpty())
- break;
-
- // Get the requeuest with the highest priority from the queue.
- nPriorityClass = mrQueue.GetFrontPriorityClass();
- pRequest = &mrQueue.GetFront();
- mrQueue.PopFront();
- bRequestIsValid = true;
-
- try
- {
- // Create a new preview bitmap and store it in the cache.
- if (mbIsTerminated)
- break;
- BitmapEx aBitmap (Factory::CreateBitmap (*pRequest, mrView));
- if (mbIsTerminated)
- break;
- mrCache.SetBitmap (
- pRequest->GetPage(),
- aBitmap,
- nPriorityClass==0);
- }
- catch (...)
- {
- OSL_TRACE ("QueueProcessorThread::ProcessQueueEntry(): caught exception; %p", this);
- // We are rendering a preview and can do without if need
- // be. So keep going if something happens that should
- // not happen.
- }
- }
- while (false);
-}
-
-
-
-
-template <class Queue,
- class RequestData,
- class BitmapCache,
- class BitmapFactory>
-void QueueProcessorThread<
- Queue, RequestData, BitmapCache, BitmapFactory
- >::Start (void)
-{
- resume ();
-}
-
-
-
-
-template <class Queue,
- class RequestData,
- class BitmapCache,
- class BitmapFactory>
-void QueueProcessorThread<
- Queue, RequestData, BitmapCache, BitmapFactory
- >::Stop (void)
-{
- suspend();
-}
-
-
-
-
-template <class Queue,
- class RequestData,
- class BitmapCache,
- class BitmapFactory>
-void QueueProcessorThread<
- Queue, RequestData, BitmapCache, BitmapFactory
- >::RemoveRequest (RequestData& rRequest)
-{
- // Do nothing else then wait for the mutex to be released.
- ::osl::MutexGuard aGuard (mrQueue.GetMutex());
-}
-
-
-
-
-template <class Queue,
- class RequestData,
- class BitmapCache,
- class BitmapFactory>
-void QueueProcessorThread<
- Queue, RequestData, BitmapCache, BitmapFactory
- >::Terminate (void)
-{
- // SolarMutexGuard aSolarGuard;
- ::osl::Thread::terminate ();
- {
- ::osl::MutexGuard aGuard (maMutex);
- mbIsTerminated = true;
- }
- Start();
-}
-
-
-
-
-/** This callback method is called when the run() method terminates.
-*/
-template <class Queue,
- class RequestData,
- class BitmapCache,
- class BitmapFactory>
-void SAL_CALL QueueProcessorThread<
- Queue, RequestData, BitmapCache, BitmapFactory
- >::onTerminated (void)
-{
- ::osl::MutexGuard aGuard (maMutex);
- mbCanBeJoined = true;
-}
-
-
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsRequestFactory.cxx b/sd/source/ui/slidesorter/cache/SlsRequestFactory.cxx
deleted file mode 100644
index 4324796a4..000000000
--- a/sd/source/ui/slidesorter/cache/SlsRequestFactory.cxx
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlsRequestFactory.hxx"
-
-#include "SlsGenericPageCache.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "model/SlsPageEnumerationProvider.hxx"
-#include "view/SlideSorterView.hxx"
-#include <svx/svdpagv.hxx>
-#include <svx/sdrpagewindow.hxx>
-#include <svx/sdr/contact/viewcontact.hxx>
-
-
-namespace sd { namespace slidesorter { namespace cache {
-
-void RequestFactory::operator()(
- RequestQueue& rRequestQueue,
- const SharedCacheContext& rpCacheContext)
-{
- ::boost::shared_ptr<std::vector<CacheKey> > aKeys;
-
- // Add the requests for the visible pages.
- aKeys = rpCacheContext->GetEntryList(true);
- if (aKeys.get() != NULL)
- {
- std::vector<CacheKey>::const_iterator iKey;
- std::vector<CacheKey>::const_iterator iEnd (aKeys->end());
- for (iKey=aKeys->begin(); iKey!=iEnd; ++iKey)
- rRequestQueue.AddRequest(*iKey, VISIBLE_NO_PREVIEW);
- }
-
- // Add the requests for the non-visible pages.
- aKeys = rpCacheContext->GetEntryList(false);
- if (aKeys.get() != NULL)
- {
- std::vector<CacheKey>::const_iterator iKey;
- std::vector<CacheKey>::const_iterator iEnd (aKeys->end());
- for (iKey=aKeys->begin(); iKey!=iEnd; ++iKey)
- rRequestQueue.AddRequest(*iKey, NOT_VISIBLE);
- }
-}
-
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsRequestFactory.hxx b/sd/source/ui/slidesorter/cache/SlsRequestFactory.hxx
deleted file mode 100644
index f908598de..000000000
--- a/sd/source/ui/slidesorter/cache/SlsRequestFactory.hxx
+++ /dev/null
@@ -1,51 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_REQUEST_FACTORY_HXX
-#define SD_SLIDESORTER_REQUEST_FACTORY_HXX
-
-#include "cache/SlsCacheContext.hxx"
-
-namespace sd { namespace slidesorter { namespace cache {
-
-class RequestQueue;
-
-class RequestFactory
-{
-public:
- void operator() (
- RequestQueue& rRequestQueue,
- const SharedCacheContext& rpCacheContext);
-};
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsRequestPriorityClass.hxx b/sd/source/ui/slidesorter/cache/SlsRequestPriorityClass.hxx
deleted file mode 100644
index 077940a82..000000000
--- a/sd/source/ui/slidesorter/cache/SlsRequestPriorityClass.hxx
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_CACHE_REQUEST_PRIORITY_CLASS_HXX
-#define SD_SLIDESORTER_CACHE_REQUEST_PRIORITY_CLASS_HXX
-
-namespace sd { namespace slidesorter { namespace cache {
-
-
-/** Each request for a preview creation has a priority. This enum defines
- the available priorities. The special values MIN__CLASS and MAX__CLASS
- are/can be used for validation and have to be kept up-to-date.
-*/
-enum RequestPriorityClass
-{
- MIN__CLASS = 0,
-
- // The slide is visible. A preview does not yet exist.
- VISIBLE_NO_PREVIEW = MIN__CLASS,
- // The slide is visible. A preview exists but is not up-to-date anymore.
- VISIBLE_OUTDATED_PREVIEW,
- // The slide is not visible.
- NOT_VISIBLE,
-
- MAX__CLASS = NOT_VISIBLE
-};
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsRequestQueue.cxx b/sd/source/ui/slidesorter/cache/SlsRequestQueue.cxx
deleted file mode 100644
index a4c8d072b..000000000
--- a/sd/source/ui/slidesorter/cache/SlsRequestQueue.cxx
+++ /dev/null
@@ -1,291 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlsRequestQueue.hxx"
-
-#include <set>
-
-
-#undef VERBOSE
-//#define VERBOSE
-
-namespace sd { namespace slidesorter { namespace cache {
-
-/** This class extends the actual request data with additional information
- that is used by the priority queues.
-*/
-class Request
-{
-public:
- Request (
- CacheKey aKey, sal_Int32 nPriority, RequestPriorityClass eClass)
- : maKey(aKey), mnPriorityInClass(nPriority), meClass(eClass)
- {}
- /** Sort requests according to priority classes and then to priorities.
- */
- class Comparator { public:
- bool operator() (const Request& rRequest1, const Request& rRequest2)
- {
- if (rRequest1.meClass == rRequest2.meClass)
- return (rRequest1.mnPriorityInClass > rRequest2.mnPriorityInClass);
- else
- return (rRequest1.meClass < rRequest2.meClass);
- }
- };
- /** Request data is compared arbitrarily by their addresses in memory.
- This just establishes an order so that the STL containers are happy.
- The order is not semantically interpreted.
- */
- class DataComparator { public:
- DataComparator (const Request&rRequest):maKey(rRequest.maKey){}
- DataComparator (const CacheKey aKey):maKey(aKey){}
- bool operator() (const Request& rRequest) { return maKey == rRequest.maKey; }
- private: const CacheKey maKey;
- };
-
- CacheKey maKey;
- sal_Int32 mnPriorityInClass;
- RequestPriorityClass meClass;
-};
-
-
-class RequestQueue::Container
- : public ::std::set<
- Request,
- Request::Comparator>
-{
-};
-
-
-
-
-//===== GenericRequestQueue =================================================
-
-
-RequestQueue::RequestQueue (const SharedCacheContext& rpCacheContext)
- : maMutex(),
- mpRequestQueue(new Container()),
- mpCacheContext(rpCacheContext),
- mnMinimumPriority(0),
- mnMaximumPriority(1)
-{
-}
-
-
-
-
-RequestQueue::~RequestQueue (void)
-{
-}
-
-
-
-
-void RequestQueue::AddRequest (
- CacheKey aKey,
- RequestPriorityClass eRequestClass,
- bool /*bInsertWithHighestPriority*/)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- OSL_ASSERT(eRequestClass>=MIN__CLASS && eRequestClass<=MAX__CLASS);
-
- // If the request is already a member of the queue then remove it so
- // that the following insertion will use the new prioritization.
-#ifdef VERBOSE
- bool bRemoved =
-#endif
- RemoveRequest(aKey);
-
- // The priority of the request inside its priority class is defined by
- // the page number. This ensures a strict top-to-bottom, left-to-right
- // order.
- sal_Int32 nPriority (mpCacheContext->GetPriority(aKey));
- Request aRequest (aKey, nPriority, eRequestClass);
- mpRequestQueue->insert(aRequest);
-
- SSCD_SET_REQUEST_CLASS(rRequestData.GetPage(),eRequestClass);
-
-#ifdef VERBOSE
- OSL_TRACE("%s request for page %d with priority class %d",
- bRemoved?"replaced":"added",
- (rRequestData.GetPage()->GetPageNum()-1)/2,
- eRequestClass);
-#endif
-}
-
-
-
-
-bool RequestQueue::RemoveRequest (
- CacheKey aKey)
-{
- bool bRequestWasRemoved (false);
- ::osl::MutexGuard aGuard (maMutex);
-
- while(true)
- {
- Container::const_iterator aRequestIterator = ::std::find_if (
- mpRequestQueue->begin(),
- mpRequestQueue->end(),
- Request::DataComparator(aKey));
- if (aRequestIterator != mpRequestQueue->end())
- {
- if (aRequestIterator->mnPriorityInClass == mnMinimumPriority+1)
- mnMinimumPriority++;
- else if (aRequestIterator->mnPriorityInClass == mnMaximumPriority-1)
- mnMaximumPriority--;
- mpRequestQueue->erase(aRequestIterator);
- bRequestWasRemoved = true;
-
- if (bRequestWasRemoved)
- {
- SSCD_SET_STATUS(rRequest.GetPage(),NONE);
- }
- }
- else
- break;
- }
-
- return bRequestWasRemoved;
-}
-
-
-
-
-void RequestQueue::ChangeClass (
- CacheKey aKey,
- RequestPriorityClass eNewRequestClass)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- OSL_ASSERT(eNewRequestClass>=MIN__CLASS && eNewRequestClass<=MAX__CLASS);
-
- Container::const_iterator iRequest (
- ::std::find_if (
- mpRequestQueue->begin(),
- mpRequestQueue->end(),
- Request::DataComparator(aKey)));
- if (iRequest!=mpRequestQueue->end() && iRequest->meClass!=eNewRequestClass)
- {
- AddRequest(aKey, eNewRequestClass, true);
- SSCD_SET_REQUEST_CLASS(rRequestData.GetPage(),eNewRequestClass);
- }
-}
-
-
-
-
-CacheKey RequestQueue::GetFront (void)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- if (mpRequestQueue->empty())
- throw ::com::sun::star::uno::RuntimeException(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "RequestQueue::GetFront(): queue is empty")),
- NULL);
-
- return mpRequestQueue->begin()->maKey;
-}
-
-
-
-
-RequestPriorityClass RequestQueue::GetFrontPriorityClass (void)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- if (mpRequestQueue->empty())
- throw ::com::sun::star::uno::RuntimeException(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "RequestQueue::GetFrontPriorityClass(): queue is empty")),
- NULL);
-
- return mpRequestQueue->begin()->meClass;
-}
-
-
-
-
-void RequestQueue::PopFront (void)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- if ( ! mpRequestQueue->empty())
- {
- SSCD_SET_STATUS(maRequestQueue.begin()->mpData->GetPage(),NONE);
-
- mpRequestQueue->erase(mpRequestQueue->begin());
-
- // Reset the priority counter if possible.
- if (mpRequestQueue->empty())
- {
- mnMinimumPriority = 0;
- mnMaximumPriority = 1;
- }
- }
-}
-
-
-
-
-bool RequestQueue::IsEmpty (void)
-{
- ::osl::MutexGuard aGuard (maMutex);
- return mpRequestQueue->empty();
-}
-
-
-
-
-void RequestQueue::Clear (void)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- mpRequestQueue->clear();
- mnMinimumPriority = 0;
- mnMaximumPriority = 1;
-}
-
-
-
-
-::osl::Mutex& RequestQueue::GetMutex (void)
-{
- return maMutex;
-}
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/cache/SlsRequestQueue.hxx b/sd/source/ui/slidesorter/cache/SlsRequestQueue.hxx
deleted file mode 100644
index 5b9c0cdb2..000000000
--- a/sd/source/ui/slidesorter/cache/SlsRequestQueue.hxx
+++ /dev/null
@@ -1,136 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_REQUEST_QUEUE_HXX
-#define SD_SLIDESORTER_REQUEST_QUEUE_HXX
-
-#include "SlsRequestPriorityClass.hxx"
-#include "cache/SlsCacheContext.hxx"
-#include "taskpane/SlideSorterCacheDisplay.hxx"
-#include <drawdoc.hxx>
-#include "osl/mutex.hxx"
-
-
-namespace sd { namespace slidesorter { namespace cache {
-
-class RequestData;
-
-/** The request queue stores requests that are described by the RequestData
- sorted according to priority class and then priority.
-*/
-class RequestQueue
-{
-public:
- RequestQueue (const SharedCacheContext& rpCacheContext);
- ~RequestQueue (void);
-
- /** Insert a request with highest or lowest priority in its priority
- class. When the request is already present then it is first
- removed. This effect is then a re-prioritization.
- @param rRequestData
- The request.
- @param eRequestClass
- The priority class in which to insert the request with highest
- or lowest priority.
- @param bInsertWithHighestPriority
- When this flag is <TRUE/> the request is inserted with highes
- priority in its class. When <FALSE/> the request is inserted
- with lowest priority.
- */
- void AddRequest (
- CacheKey aKey,
- RequestPriorityClass eRequestClass,
- bool bInsertWithHighestPriority = false);
-
- /** Remove the specified request from the queue.
- @param rRequestData
- It is OK when the specified request is not a member of the
- queue.
- @return
- Returns <TRUE/> when the request has been successfully been
- removed from the queue. Otherwise, e.g. because the request was
- not a member of the queue, <FALSE/> is returned.
- */
- bool RemoveRequest (CacheKey aKey);
-
- /** Change the priority class of the specified request.
- */
- void ChangeClass (
- CacheKey aKey,
- RequestPriorityClass eNewRequestClass);
-
- /** Get the request with the highest priority int the highest priority class.
- */
- CacheKey GetFront (void);
-
- // For debugging.
- RequestPriorityClass GetFrontPriorityClass (void);
-
- /** Really a synonym for RemoveRequest(GetFront());
- */
- void PopFront (void);
-
- /** Returns <TRUE/> when there is no element in the queue.
- */
- bool IsEmpty (void);
-
- /** Remove all requests from the queue. This resets the minimum and
- maximum priorities to their default values.
- */
- void Clear (void);
-
- /** Return the mutex that guards the access to the priority queue.
- */
- ::osl::Mutex& GetMutex (void);
-
-private:
- ::osl::Mutex maMutex;
- class Container;
- ::boost::scoped_ptr<Container> mpRequestQueue;
- SharedCacheContext mpCacheContext;
-
- /** A lower bound of the lowest priority of all elements in the queues.
- The start value is 0. It is assigned and then decreased every time
- when an element is inserted or marked as the request with lowest
- priority.
- */
- int mnMinimumPriority;
- /** An upper bound of the highest priority of all elements in the queues.
- The start value is 1. It is assigned and then increased every time
- when an element is inserted or marked as the request with highest
- priority.
- */
- int mnMaximumPriority;
-};
-
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlideSorterController.cxx b/sd/source/ui/slidesorter/controller/SlideSorterController.cxx
deleted file mode 100644
index 984d01663..000000000
--- a/sd/source/ui/slidesorter/controller/SlideSorterController.cxx
+++ /dev/null
@@ -1,1134 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "controller/SlideSorterController.hxx"
-
-#include "SlideSorter.hxx"
-#include "controller/SlsPageSelector.hxx"
-#include "controller/SlsSelectionFunction.hxx"
-#include "controller/SlsProperties.hxx"
-#include "controller/SlsCurrentSlideManager.hxx"
-#include "SlsListener.hxx"
-#include "controller/SlsFocusManager.hxx"
-#include "SlsSelectionCommand.hxx"
-#include "controller/SlsAnimator.hxx"
-#include "controller/SlsClipboard.hxx"
-#include "controller/SlsInsertionIndicatorHandler.hxx"
-#include "controller/SlsScrollBarManager.hxx"
-#include "controller/SlsSelectionManager.hxx"
-#include "controller/SlsSlotManager.hxx"
-#include "controller/SlsTransferable.hxx"
-#include "controller/SlsVisibleAreaManager.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageEnumerationProvider.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsLayouter.hxx"
-#include "view/SlsFontProvider.hxx"
-#include "view/SlsPageObjectLayouter.hxx"
-#include "view/SlsPageObjectPainter.hxx"
-#include "view/SlsTheme.hxx"
-#include "view/SlsToolTip.hxx"
-#include "cache/SlsPageCache.hxx"
-#include "cache/SlsPageCacheManager.hxx"
-
-#include "drawdoc.hxx"
-#include "DrawViewShell.hxx"
-#include "TextLogger.hxx"
-#include "ViewShellBase.hxx"
-#include "Window.hxx"
-#include "FrameView.hxx"
-#include "DrawDocShell.hxx"
-#include "sdpage.hxx"
-#include "res_bmp.hrc"
-#include "sdresid.hxx"
-#include "strings.hrc"
-#include "app.hrc"
-#include "glob.hrc"
-#include "sdmod.hxx"
-#include "sdxfer.hxx"
-#include "FrameView.hxx"
-#include "ViewShellHint.hxx"
-#include "AccessibleSlideSorterView.hxx"
-#include "AccessibleSlideSorterObject.hxx"
-
-#include <vcl/window.hxx>
-#include <svx/svdopage.hxx>
-#include <svx/svxids.hrc>
-#include <svx/ruler.hxx>
-#include <svx/zoomitem.hxx>
-#include <svtools/tabbar.hxx>
-#include <sfx2/request.hxx>
-#include <sfx2/viewfrm.hxx>
-#include <sfx2/dispatch.hxx>
-#include <tools/link.hxx>
-#include <vcl/svapp.hxx>
-
-#include <com/sun/star/lang/XComponent.hpp>
-#include <com/sun/star/drawing/XMasterPagesSupplier.hpp>
-#include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
-#include <com/sun/star/drawing/XDrawPages.hpp>
-#include <com/sun/star/accessibility/AccessibleEventId.hpp>
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::sd::slidesorter::model;
-using namespace ::sd::slidesorter::view;
-using namespace ::sd::slidesorter::controller;
-using namespace ::basegfx;
-
-namespace sd { namespace slidesorter { namespace controller {
-
-
-SlideSorterController::SlideSorterController (SlideSorter& rSlideSorter)
- : mrSlideSorter(rSlideSorter),
- mrModel(mrSlideSorter.GetModel()),
- mrView(mrSlideSorter.GetView()),
- mpPageSelector(),
- mpFocusManager(),
- mpSlotManager(),
- mpClipboard(),
- mpScrollBarManager(),
- mpCurrentSlideManager(),
- mpSelectionManager(),
- mpInsertionIndicatorHandler(new InsertionIndicatorHandler(rSlideSorter)),
- mpAnimator(new Animator(rSlideSorter)),
- mpVisibleAreaManager(new VisibleAreaManager(rSlideSorter)),
- mpListener(),
- mnModelChangeLockCount(0),
- mbIsForcedRearrangePending(false),
- mbPreModelChangeDone(false),
- mbPostModelChangePending(false),
- maSelectionBeforeSwitch(),
- mnCurrentPageBeforeSwitch(0),
- mpEditModeChangeMasterPage(NULL),
- maTotalWindowArea(),
- mnPaintEntranceCount(0),
- mbIsContextMenuOpen(false)
-{
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- OSL_ASSERT(pWindow);
- if (pWindow)
- {
- // The whole background is painted by the view and controls.
- ::Window* pParentWindow = pWindow->GetParent();
- OSL_ASSERT(pParentWindow!=NULL);
- pParentWindow->SetBackground (Wallpaper());
-
- // Connect the view with the window that has been created by our base
- // class.
- pWindow->SetBackground(Wallpaper());
- pWindow->SetCenterAllowed(false);
- pWindow->SetMapMode(MapMode(MAP_PIXEL));
- pWindow->SetViewSize(mrView.GetModelArea().GetSize());
- }
-}
-
-
-
-
-void SlideSorterController::Init (void)
-{
- mpCurrentSlideManager.reset(new CurrentSlideManager(mrSlideSorter));
- mpPageSelector.reset(new PageSelector(mrSlideSorter));
- mpFocusManager.reset(new FocusManager(mrSlideSorter));
- mpSlotManager.reset(new SlotManager(mrSlideSorter));
- mpClipboard.reset(new Clipboard(mrSlideSorter));
- mpScrollBarManager.reset(new ScrollBarManager(mrSlideSorter));
- mpSelectionManager.reset(new SelectionManager(mrSlideSorter));
-
- mpScrollBarManager->LateInitialization();
-
- // Create the selection function.
- SfxRequest aRequest (
- SID_OBJECT_SELECT,
- 0,
- mrModel.GetDocument()->GetItemPool());
- mrSlideSorter.SetCurrentFunction(CreateSelectionFunction(aRequest));
-
- mpListener = new Listener(mrSlideSorter);
-
- mpPageSelector->GetCoreSelection();
- GetSelectionManager()->SelectionHasChanged();
-}
-
-
-
-
-SlideSorterController::~SlideSorterController (void)
-{
- try
- {
- uno::Reference<lang::XComponent> xComponent (
- static_cast<XWeak*>(mpListener.get()), uno::UNO_QUERY);
- if (xComponent.is())
- xComponent->dispose();
- }
- catch( uno::Exception& e )
- {
- (void)e;
- OSL_FAIL( "sd::SlideSorterController::~SlideSorterController(), exception caught!" );
- }
-
- // dispose should have been called by now so that nothing is to be done
- // to shut down cleanly.
-}
-
-
-
-
-void SlideSorterController::Dispose (void)
-{
- mpInsertionIndicatorHandler->End(Animator::AM_Immediate);
- mpSelectionManager.reset();
- mpAnimator->Dispose();
-}
-
-
-
-
-model::SharedPageDescriptor SlideSorterController::GetPageAt (
- const Point& aWindowPosition)
-{
- sal_Int32 nHitPageIndex (mrView.GetPageIndexAtPoint(aWindowPosition));
- model::SharedPageDescriptor pDescriptorAtPoint;
- if (nHitPageIndex >= 0)
- {
- pDescriptorAtPoint = mrModel.GetPageDescriptor(nHitPageIndex);
-
- // Depending on a property we may have to check that the mouse is no
- // just over the page object but over the preview area.
- if (pDescriptorAtPoint
- && mrSlideSorter.GetProperties()->IsOnlyPreviewTriggersMouseOver()
- && ! pDescriptorAtPoint->HasState(PageDescriptor::ST_Selected))
- {
- // Make sure that the mouse is over the preview area.
- if ( ! mrView.GetLayouter().GetPageObjectLayouter()->GetBoundingBox(
- pDescriptorAtPoint,
- view::PageObjectLayouter::Preview,
- view::PageObjectLayouter::WindowCoordinateSystem).IsInside(aWindowPosition))
- {
- pDescriptorAtPoint.reset();
- }
- }
- }
-
- return pDescriptorAtPoint;
-}
-
-
-
-
-PageSelector& SlideSorterController::GetPageSelector (void)
-{
- OSL_ASSERT(mpPageSelector.get()!=NULL);
- return *mpPageSelector.get();
-}
-
-
-
-
-FocusManager& SlideSorterController::GetFocusManager (void)
-{
- OSL_ASSERT(mpFocusManager.get()!=NULL);
- return *mpFocusManager.get();
-}
-
-
-
-
-Clipboard& SlideSorterController::GetClipboard (void)
-{
- OSL_ASSERT(mpClipboard.get()!=NULL);
- return *mpClipboard.get();
-}
-
-
-
-
-ScrollBarManager& SlideSorterController::GetScrollBarManager (void)
-{
- OSL_ASSERT(mpScrollBarManager.get()!=NULL);
- return *mpScrollBarManager.get();
-}
-
-
-
-
-::boost::shared_ptr<CurrentSlideManager> SlideSorterController::GetCurrentSlideManager (void) const
-{
- OSL_ASSERT(mpCurrentSlideManager.get()!=NULL);
- return mpCurrentSlideManager;
-}
-
-
-
-
-::boost::shared_ptr<SlotManager> SlideSorterController::GetSlotManager (void) const
-{
- OSL_ASSERT(mpSlotManager.get()!=NULL);
- return mpSlotManager;
-}
-
-
-
-
-::boost::shared_ptr<SelectionManager> SlideSorterController::GetSelectionManager (void) const
-{
- OSL_ASSERT(mpSelectionManager.get()!=NULL);
- return mpSelectionManager;
-}
-
-
-
-
-::boost::shared_ptr<InsertionIndicatorHandler>
- SlideSorterController::GetInsertionIndicatorHandler (void) const
-{
- OSL_ASSERT(mpInsertionIndicatorHandler.get()!=NULL);
- return mpInsertionIndicatorHandler;
-}
-
-
-
-
-void SlideSorterController::Paint (
- const Rectangle& rBBox,
- ::Window* pWindow)
-{
- if (mnPaintEntranceCount == 0)
- {
- ++mnPaintEntranceCount;
-
- try
- {
- mrView.CompleteRedraw(pWindow, Region(rBBox), 0);
- }
- catch (const Exception&)
- {
- // Ignore all exceptions.
- }
-
- --mnPaintEntranceCount;
- }
-}
-
-
-
-
-void SlideSorterController::FuTemporary (SfxRequest& rRequest)
-{
- mpSlotManager->FuTemporary (rRequest);
-}
-
-
-
-
-void SlideSorterController::FuPermanent (SfxRequest &rRequest)
-{
- mpSlotManager->FuPermanent (rRequest);
-}
-
-
-
-
-void SlideSorterController::FuSupport (SfxRequest &rRequest)
-{
- mpSlotManager->FuSupport (rRequest);
-}
-
-
-
-
-bool SlideSorterController::Command (
- const CommandEvent& rEvent,
- ::sd::Window* pWindow)
-{
- bool bEventHasBeenHandled = false;
-
- if (pWindow == NULL)
- return false;
-
- ViewShell* pViewShell = mrSlideSorter.GetViewShell();
- if (pViewShell == NULL)
- return false;
-
- switch (rEvent.GetCommand())
- {
- case COMMAND_CONTEXTMENU:
- {
- SdPage* pPage = NULL;
- sal_uInt16 nPopupId;
-
- model::PageEnumeration aSelectedPages (
- PageEnumerationProvider::CreateSelectedPagesEnumeration(mrModel));
- if (aSelectedPages.HasMoreElements())
- pPage = aSelectedPages.GetNextElement()->GetPage();
-
- // Choose the popup menu depending on a) the type of the main
- // view shell, b) the edit mode, and c) on whether the selection
- // is empty or not.
- ViewShell::ShellType eMainViewShellType (ViewShell::ST_NONE);
- ::boost::shared_ptr<ViewShell> pMainViewShell (
- pViewShell->GetViewShellBase().GetMainViewShell());
- if (pMainViewShell.get() != NULL)
- eMainViewShellType = pMainViewShell->GetShellType();
- switch (eMainViewShellType)
- {
- case ViewShell::ST_DRAW:
- if (pPage != NULL)
- nPopupId = RID_SLIDE_SORTER_DRAW_SEL_POPUP;
- else
- nPopupId = RID_SLIDE_SORTER_DRAW_NOSEL_POPUP;
- break;
-
- default:
- if (mrModel.GetEditMode() == EM_PAGE)
- if (pPage != NULL)
- nPopupId = RID_SLIDE_SORTER_IMPRESS_SEL_POPUP;
- else
- nPopupId = RID_SLIDE_SORTER_IMPRESS_NOSEL_POPUP;
- else
- if (pPage != NULL)
- nPopupId = RID_SLIDE_SORTER_MASTER_SEL_POPUP;
- else
- nPopupId = RID_SLIDE_SORTER_MASTER_NOSEL_POPUP;
- }
- ::boost::scoped_ptr<InsertionIndicatorHandler::ForceShowContext> pContext;
- if (pPage == NULL)
- {
- // When there is no selection, then we show the insertion
- // indicator so that the user knows where a page insertion
- // would take place.
- mpInsertionIndicatorHandler->Start(false);
- mpInsertionIndicatorHandler->UpdateIndicatorIcon(
- dynamic_cast<Transferable*>(SD_MOD()->pTransferClip));
- mpInsertionIndicatorHandler->UpdatePosition(
- pWindow->PixelToLogic(rEvent.GetMousePosPixel()),
- InsertionIndicatorHandler::MoveMode);
- pContext.reset(new InsertionIndicatorHandler::ForceShowContext(
- mpInsertionIndicatorHandler));
- }
-
- pWindow->ReleaseMouse();
-
- Point aMenuLocation (0,0);
- if (rEvent.IsMouseEvent())
- {
- // We have to explicitly specify the location of the menu
- // when the slide sorter is placed in an undocked child
- // menu. But when it is docked it does not hurt, so we
- // specify the location always.
- aMenuLocation = rEvent.GetMousePosPixel();
- }
- else
- {
- // The event is not a mouse event. Use the center of the
- // focused page as top left position of the context menu.
- model::SharedPageDescriptor pDescriptor (
- GetFocusManager().GetFocusedPageDescriptor());
- if (pDescriptor.get() != NULL)
- {
- Rectangle aBBox (
- mrView.GetLayouter().GetPageObjectLayouter()->GetBoundingBox (
- pDescriptor,
- PageObjectLayouter::PageObject,
- PageObjectLayouter::ModelCoordinateSystem));
- aMenuLocation = aBBox.Center();
- }
- }
-
- mbIsContextMenuOpen = true;
- if (pViewShell != NULL)
- {
- SfxDispatcher* pDispatcher = pViewShell->GetDispatcher();
- if (pDispatcher != NULL)
- {
- pDispatcher->ExecutePopup(
- SdResId(nPopupId),
- pWindow,
- &aMenuLocation);
- mrSlideSorter.GetView().UpdatePageUnderMouse(false);
- ::rtl::Reference<SelectionFunction> pFunction(GetCurrentSelectionFunction());
- if (pFunction.is())
- pFunction->ResetMouseAnchor();
- }
- }
- mbIsContextMenuOpen = false;
- if (pPage == NULL)
- {
- // Remember the position of the insertion indicator before
- // it is hidden, so that a pending slide insertion slot call
- // finds the right place to insert a new slide.
- GetSelectionManager()->SetInsertionPosition(
- GetInsertionIndicatorHandler()->GetInsertionPageIndex());
- }
- pContext.reset();
- bEventHasBeenHandled = true;
- }
- break;
-
- case COMMAND_WHEEL:
- {
- const CommandWheelData* pData = rEvent.GetWheelData();
- if (pData == NULL)
- return false;
- if (pData->IsMod1())
- {
- // We do not support zooming with control+mouse wheel.
- return false;
- }
- // Determine whether to scroll horizontally or vertically. This
- // depends on the orientation of the scroll bar and the
- // IsHoriz() flag of the event.
- if ((mrSlideSorter.GetView().GetOrientation()==view::Layouter::HORIZONTAL)
- == pData->IsHorz())
- {
- GetScrollBarManager().Scroll(
- ScrollBarManager::Orientation_Vertical,
- ScrollBarManager::Unit_Slide,
- -pData->GetNotchDelta());
- }
- else
- {
- GetScrollBarManager().Scroll(
- ScrollBarManager::Orientation_Horizontal,
- ScrollBarManager::Unit_Slide,
- -pData->GetNotchDelta());
- }
- mrSlideSorter.GetView().UpdatePageUnderMouse(rEvent.GetMousePosPixel(), false);
-
- bEventHasBeenHandled = true;
- }
- break;
- }
-
- return bEventHasBeenHandled;
-}
-
-
-
-
-void SlideSorterController::LockModelChange (void)
-{
- mnModelChangeLockCount += 1;
-}
-
-
-
-
-void SlideSorterController::UnlockModelChange (void)
-{
- mnModelChangeLockCount -= 1;
- if (mnModelChangeLockCount==0 && mbPostModelChangePending)
- {
- PostModelChange();
- }
-}
-
-
-
-
-void SlideSorterController::PreModelChange (void)
-{
- // Prevent PreModelChange to execute more than once per model lock.
- if (mbPostModelChangePending)
- return;
- mbPreModelChangeDone = true;
-
- if (mrSlideSorter.GetViewShell() != NULL)
- mrSlideSorter.GetViewShell()->Broadcast(
- ViewShellHint(ViewShellHint::HINT_COMPLEX_MODEL_CHANGE_START));
-
- GetCurrentSlideManager()->PrepareModelChange();
-
- if (mrSlideSorter.GetContentWindow())
- mrView.PreModelChange();
-
- mbPostModelChangePending = true;
-}
-
-
-
-
-void SlideSorterController::PostModelChange (void)
-{
- mbPostModelChangePending = false;
- mrModel.Resync();
-
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- if (pWindow)
- {
- GetCurrentSlideManager()->HandleModelChange();
-
- mrView.PostModelChange ();
-
- pWindow->SetViewOrigin (Point (0,0));
- pWindow->SetViewSize (mrView.GetModelArea().GetSize());
-
- // The visibility of the scroll bars may have to be changed. Then
- // the size of the view has to change, too. Let Rearrange() handle
- // that.
- Rearrange(mbIsForcedRearrangePending);
- }
-
- if (mrSlideSorter.GetViewShell() != NULL)
- mrSlideSorter.GetViewShell()->Broadcast(
- ViewShellHint(ViewShellHint::HINT_COMPLEX_MODEL_CHANGE_END));
-}
-
-
-
-
-void SlideSorterController::HandleModelChange (void)
-{
- // Ignore this call when the document is not in a valid state, i.e. has
- // not the same number of regular and notes pages.
- bool bIsDocumentValid = (mrModel.GetDocument()->GetPageCount() % 2 == 1);
-
- if (bIsDocumentValid)
- {
- ModelChangeLock aLock (*this);
- PreModelChange();
- }
-}
-
-
-
-
-IMPL_LINK(SlideSorterController, WindowEventHandler, VclWindowEvent*, pEvent)
-{
- if (pEvent != NULL)
- {
- ::Window* pWindow = pEvent->GetWindow();
- SharedSdWindow pActiveWindow (mrSlideSorter.GetContentWindow());
- switch (pEvent->GetId())
- {
- case VCLEVENT_WINDOW_ACTIVATE:
- case VCLEVENT_WINDOW_SHOW:
- if (pActiveWindow && pWindow == pActiveWindow->GetParent())
- mrView.RequestRepaint();
- break;
-
- case VCLEVENT_WINDOW_HIDE:
- if (pActiveWindow && pWindow == pActiveWindow->GetParent())
- mrView.SetPageUnderMouse(SharedPageDescriptor());
- break;
-
- case VCLEVENT_WINDOW_GETFOCUS:
- if (pActiveWindow)
- if (pWindow == pActiveWindow.get())
- GetFocusManager().ShowFocus(false);
- break;
-
- case VCLEVENT_WINDOW_LOSEFOCUS:
- if (pActiveWindow && pWindow == pActiveWindow.get())
- {
- GetFocusManager().HideFocus();
- mrView.GetToolTip().Hide();
-
- // Select the current slide so that it is properly
- // visualized when the focus is moved to the edit view.
- GetPageSelector().SelectPage(GetCurrentSlideManager()->GetCurrentSlide());
- }
- break;
-
- case VCLEVENT_APPLICATION_DATACHANGED:
- {
- // Invalidate the preview cache.
- cache::PageCacheManager::Instance()->InvalidateAllCaches();
-
- // Update the draw mode.
- sal_uLong nDrawMode (Application::GetSettings().GetStyleSettings().GetHighContrastMode()
- ? ViewShell::OUTPUT_DRAWMODE_CONTRAST
- : ViewShell::OUTPUT_DRAWMODE_COLOR);
- if (mrSlideSorter.GetViewShell() != NULL)
- mrSlideSorter.GetViewShell()->GetFrameView()->SetDrawMode(nDrawMode);
- if (pActiveWindow != NULL)
- pActiveWindow->SetDrawMode(nDrawMode);
- mrView.HandleDrawModeChange();
-
- // When the system font has changed a layout has to be done.
- mrView.Resize();
- FontProvider::Instance().Invalidate();
-
- // Update theme colors.
- mrSlideSorter.GetProperties()->HandleDataChangeEvent();
- mrSlideSorter.GetTheme()->Update(mrSlideSorter.GetProperties());
- mrView.HandleDataChangeEvent();
- }
- break;
-
- default:
- break;
- }
- }
-
- return sal_True;
-}
-
-
-
-
-void SlideSorterController::GetCtrlState (SfxItemSet& rSet)
-{
- if (rSet.GetItemState(SID_RELOAD) != SFX_ITEM_UNKNOWN)
- {
- // "Letzte Version" vom SFx en/disablen lassen
- SfxViewFrame* pSlideViewFrame = SfxViewFrame::Current();
- DBG_ASSERT(pSlideViewFrame!=NULL,
- "SlideSorterController::GetCtrlState: ViewFrame not found");
- if (pSlideViewFrame)
- {
- pSlideViewFrame->GetSlotState (SID_RELOAD, NULL, &rSet);
- }
- else // MI sagt: kein MDIFrame --> disablen
- {
- rSet.DisableItem(SID_RELOAD);
- }
- }
-
- // Output quality.
- if (rSet.GetItemState(SID_OUTPUT_QUALITY_COLOR)==SFX_ITEM_AVAILABLE
- ||rSet.GetItemState(SID_OUTPUT_QUALITY_GRAYSCALE)==SFX_ITEM_AVAILABLE
- ||rSet.GetItemState(SID_OUTPUT_QUALITY_BLACKWHITE)==SFX_ITEM_AVAILABLE
- ||rSet.GetItemState(SID_OUTPUT_QUALITY_CONTRAST)==SFX_ITEM_AVAILABLE)
- {
- if (mrSlideSorter.GetContentWindow())
- {
- sal_uLong nMode = mrSlideSorter.GetContentWindow()->GetDrawMode();
- sal_uInt16 nQuality = 0;
-
- switch (nMode)
- {
- case ViewShell::OUTPUT_DRAWMODE_COLOR:
- nQuality = 0;
- break;
- case ViewShell::OUTPUT_DRAWMODE_GRAYSCALE:
- nQuality = 1;
- break;
- case ViewShell::OUTPUT_DRAWMODE_BLACKWHITE:
- nQuality = 2;
- break;
- case ViewShell::OUTPUT_DRAWMODE_CONTRAST:
- nQuality = 3;
- break;
- }
-
- rSet.Put (SfxBoolItem (SID_OUTPUT_QUALITY_COLOR,
- (sal_Bool)(nQuality==0)));
- rSet.Put (SfxBoolItem (SID_OUTPUT_QUALITY_GRAYSCALE,
- (sal_Bool)(nQuality==1)));
- rSet.Put (SfxBoolItem (SID_OUTPUT_QUALITY_BLACKWHITE,
- (sal_Bool)(nQuality==2)));
- rSet.Put (SfxBoolItem (SID_OUTPUT_QUALITY_CONTRAST,
- (sal_Bool)(nQuality==3)));
- }
- }
-
- if (rSet.GetItemState(SID_MAIL_SCROLLBODY_PAGEDOWN) == SFX_ITEM_AVAILABLE)
- {
- rSet.Put (SfxBoolItem( SID_MAIL_SCROLLBODY_PAGEDOWN, sal_True));
- }
-}
-
-
-
-
-void SlideSorterController::GetStatusBarState (SfxItemSet& rSet)
-{
- mpSlotManager->GetStatusBarState (rSet);
-}
-
-
-
-
-void SlideSorterController::ExecCtrl (SfxRequest& rRequest)
-{
- mpSlotManager->ExecCtrl (rRequest);
-}
-
-
-
-
-void SlideSorterController::GetAttrState (SfxItemSet& rSet)
-{
- mpSlotManager->GetAttrState (rSet);
-}
-
-
-
-
-void SlideSorterController::ExecStatusBar (SfxRequest& )
-{
-}
-
-
-
-
-void SlideSorterController::UpdateAllPages (void)
-{
- // Do a redraw.
- mrSlideSorter.GetContentWindow()->Invalidate();
-}
-
-
-
-
-Rectangle SlideSorterController::Resize (const Rectangle& rAvailableSpace)
-{
- Rectangle aContentArea (rAvailableSpace);
-
- if (maTotalWindowArea != rAvailableSpace)
- {
- maTotalWindowArea = rAvailableSpace;
- aContentArea = Rearrange(true);
- }
-
- return aContentArea;
-}
-
-
-
-
-Rectangle SlideSorterController::Rearrange (bool bForce)
-{
- Rectangle aNewContentArea (maTotalWindowArea);
-
- if (aNewContentArea.IsEmpty())
- return aNewContentArea;
-
- if (mnModelChangeLockCount>0)
- {
- mbIsForcedRearrangePending |= bForce;
- return aNewContentArea;
- }
- else
- mbIsForcedRearrangePending = false;
-
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- if (pWindow)
- {
- if (bForce)
- mrView.UpdateOrientation();
-
- // Place the scroll bars.
- aNewContentArea = GetScrollBarManager().PlaceScrollBars(
- maTotalWindowArea,
- mrView.GetOrientation() != view::Layouter::VERTICAL,
- mrView.GetOrientation() != view::Layouter::HORIZONTAL);
-
- bool bSizeHasChanged (false);
- // Only when bForce is not true we have to test for a size change in
- // order to determine whether the window and the view have to be resized.
- if ( ! bForce)
- {
- Rectangle aCurrentContentArea (pWindow->GetPosPixel(), pWindow->GetOutputSizePixel());
- bSizeHasChanged = (aNewContentArea != aCurrentContentArea);
- }
- if (bForce || bSizeHasChanged)
- {
- // The browser window gets the remaining space.
- pWindow->SetPosSizePixel (aNewContentArea.TopLeft(), aNewContentArea.GetSize());
- mrView.Resize();
- }
-
- // Adapt the scroll bars to the new zoom factor of the browser
- // window and the arrangement of the page objects.
- GetScrollBarManager().UpdateScrollBars(false, !bForce);
-
- // Keep the current slide in the visible area.
- GetVisibleAreaManager().RequestCurrentSlideVisible();
-
- mrView.RequestRepaint();
- }
-
- return aNewContentArea;
-}
-
-
-
-
-FunctionReference SlideSorterController::CreateSelectionFunction (SfxRequest& rRequest)
-{
- FunctionReference xFunc( SelectionFunction::Create(mrSlideSorter, rRequest) );
- return xFunc;
-}
-
-
-
-
-::rtl::Reference<SelectionFunction> SlideSorterController::GetCurrentSelectionFunction (void)
-{
- FunctionReference pFunction (mrSlideSorter.GetViewShell()->GetCurrentFunction());
- return ::rtl::Reference<SelectionFunction>(dynamic_cast<SelectionFunction*>(pFunction.get()));
-}
-
-
-
-
-void SlideSorterController::PrepareEditModeChange (void)
-{
- // Before we throw away the page descriptors we prepare for selecting
- // descriptors in the other mode and for restoring the current
- // selection when switching back to the current mode.
- if (mrModel.GetEditMode() == EM_PAGE)
- {
- maSelectionBeforeSwitch.clear();
-
- // Search for the first selected page and determine the master page
- // used by its page object. It will be selected after the switch.
- // In the same loop the current selection is stored.
- PageEnumeration aSelectedPages (
- PageEnumerationProvider::CreateSelectedPagesEnumeration(mrModel));
- while (aSelectedPages.HasMoreElements())
- {
- SharedPageDescriptor pDescriptor (aSelectedPages.GetNextElement());
- SdPage* pPage = pDescriptor->GetPage();
- // Remember the master page of the first selected descriptor.
- if (pPage!=NULL && mpEditModeChangeMasterPage==NULL)
- mpEditModeChangeMasterPage = &static_cast<SdPage&>(
- pPage->TRG_GetMasterPage());
-
- maSelectionBeforeSwitch.push_back(pPage);
- }
-
- // Remember the current page.
- if (mrSlideSorter.GetViewShell() != NULL)
- mnCurrentPageBeforeSwitch = (mrSlideSorter.GetViewShell()->GetViewShellBase()
- .GetMainViewShell()->GetActualPage()->GetPageNum()-1)/2;
- }
-}
-
-
-
-
-bool SlideSorterController::ChangeEditMode (EditMode eEditMode)
-{
- bool bResult (false);
- if (mrModel.GetEditMode() != eEditMode)
- {
- ModelChangeLock aLock (*this);
- PreModelChange();
- // Do the actual edit mode switching.
- bResult = mrModel.SetEditMode(eEditMode);
- if (bResult)
- HandleModelChange();
- }
- return bResult;
-}
-
-
-
-
-void SlideSorterController::FinishEditModeChange (void)
-{
- if (mrModel.GetEditMode() == EM_MASTERPAGE)
- {
- // Search for the master page that was determined in
- // PrepareEditModeChange() and make it the current page.
- PageEnumeration aAllPages (PageEnumerationProvider::CreateAllPagesEnumeration(mrModel));
- while (aAllPages.HasMoreElements())
- {
- SharedPageDescriptor pDescriptor (aAllPages.GetNextElement());
- if (pDescriptor->GetPage() == mpEditModeChangeMasterPage)
- {
- GetCurrentSlideManager()->SwitchCurrentSlide(pDescriptor);
- break;
- }
- }
- }
- else
- {
- SharedPageDescriptor pDescriptor (mrModel.GetPageDescriptor(mnCurrentPageBeforeSwitch));
- GetCurrentSlideManager()->SwitchCurrentSlide(pDescriptor);
-
- // Restore the selection.
- ::std::vector<SdPage*>::iterator iPage;
- for (iPage=maSelectionBeforeSwitch.begin();
- iPage!=maSelectionBeforeSwitch.end();
- ++iPage)
- {
- mpPageSelector->SelectPage(*iPage);
- }
- maSelectionBeforeSwitch.clear( );
- }
- mpEditModeChangeMasterPage = NULL;
-}
-
-
-
-
-void SlideSorterController::PageNameHasChanged (int nPageIndex, const String& rsOldName)
-{
- // Request a repaint for the page object whose name has changed.
- model::SharedPageDescriptor pDescriptor (mrModel.GetPageDescriptor(nPageIndex));
- if (pDescriptor.get() != NULL)
- mrView.RequestRepaint(pDescriptor);
-
- // Get a pointer to the corresponding accessible object and notify
- // that of the name change.
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- if ( ! pWindow)
- return;
-
- ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >
- xAccessible (pWindow->GetAccessible(sal_False));
- if ( ! xAccessible.is())
- return;
-
- // Now comes a small hack. We assume that the accessible object is
- // an instantiation of AccessibleSlideSorterView and cast it to that
- // class. The cleaner alternative to this cast would be a new member
- // in which we would store the last AccessibleSlideSorterView object
- // created by SlideSorterViewShell::CreateAccessibleDocumentView().
- // But then there is no guaranty that the accessible object obtained
- // from the window really is that instance last created by
- // CreateAccessibleDocumentView().
- // However, the dynamic cast together with the check of the result
- // being NULL should be safe enough.
- ::accessibility::AccessibleSlideSorterView* pAccessibleView
- = dynamic_cast< ::accessibility::AccessibleSlideSorterView*>(xAccessible.get());
- if (pAccessibleView == NULL)
- return;
-
- ::accessibility::AccessibleSlideSorterObject* pChild
- = pAccessibleView->GetAccessibleChildImplementation(nPageIndex);
- if (pChild == NULL || pChild->GetPage() == NULL)
- return;
-
- ::rtl::OUString sOldName (rsOldName);
- ::rtl::OUString sNewName (pChild->GetPage()->GetName());
- pChild->FireAccessibleEvent(
- ::com::sun::star::accessibility::AccessibleEventId::NAME_CHANGED,
- makeAny(sOldName),
- makeAny(sNewName));
-}
-
-
-
-
-bool SlideSorterController::IsContextMenuOpen (void) const
-{
- return mbIsContextMenuOpen;
-}
-
-
-
-
-void SlideSorterController::SetDocumentSlides (const Reference<container::XIndexAccess>& rxSlides)
-{
- if (mrModel.GetDocumentSlides() != rxSlides)
- {
- ModelChangeLock aLock (*this);
- PreModelChange();
-
- mrModel.SetDocumentSlides(rxSlides);
- mrView.Layout();
-
- // Select just the current slide.
- PageSelector::BroadcastLock aBroadcastLock (*mpPageSelector);
- mpPageSelector->DeselectAllPages();
- mpPageSelector->SelectPage(mpCurrentSlideManager->GetCurrentSlide());
- }
-}
-
-
-
-
-::boost::shared_ptr<Animator> SlideSorterController::GetAnimator (void) const
-{
- return mpAnimator;
-}
-
-
-
-
-VisibleAreaManager& SlideSorterController::GetVisibleAreaManager (void) const
-{
- OSL_ASSERT(mpVisibleAreaManager);
- return *mpVisibleAreaManager;
-}
-
-
-
-
-void SlideSorterController::CheckForMasterPageAssignment (void)
-{
- if (mrModel.GetPageCount()%2==0)
- return;
- PageEnumeration aAllPages (PageEnumerationProvider::CreateAllPagesEnumeration(mrModel));
- while (aAllPages.HasMoreElements())
- {
- SharedPageDescriptor pDescriptor (aAllPages.GetNextElement());
- if (pDescriptor->UpdateMasterPage())
- {
- mrView.GetPreviewCache()->InvalidatePreviewBitmap (
- pDescriptor->GetPage(),
- true);
- }
- }
-}
-
-
-
-
-//===== SlideSorterController::ModelChangeLock ================================
-
-SlideSorterController::ModelChangeLock::ModelChangeLock (
- SlideSorterController& rController)
- : mpController(&rController)
-{
- mpController->LockModelChange();
-}
-
-
-
-
-SlideSorterController::ModelChangeLock::~ModelChangeLock (void)
-{
- Release();
-}
-
-
-
-
-void SlideSorterController::ModelChangeLock::Release (void)
-{
- if (mpController != NULL)
- {
- mpController->UnlockModelChange();
- mpController = NULL;
- }
-}
-
-} } } // end of namespace ::sd::slidesorter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsAnimationFunction.cxx b/sd/source/ui/slidesorter/controller/SlsAnimationFunction.cxx
deleted file mode 100644
index ae84a40c0..000000000
--- a/sd/source/ui/slidesorter/controller/SlsAnimationFunction.cxx
+++ /dev/null
@@ -1,294 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-#include "controller/SlsAnimationFunction.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "view/SlideSorterView.hxx"
-
-
-#include <osl/diagnose.hxx>
-#include <rtl/math.hxx>
-
-namespace sd { namespace slidesorter { namespace controller {
-
-
-double AnimationFunction::Linear (const double nTime)
-{
- OSL_ASSERT(nTime>=0.0 && nTime<=1.0);
- return nTime;
-}
-
-
-
-
-double AnimationFunction::FastInSlowOut_Sine (const double nTime)
-{
- OSL_ASSERT(nTime>=0.0 && nTime<=1.0);
-
- const double nResult (sin(nTime * M_PI/2));
-
- OSL_ASSERT(nResult>=0.0 && nResult<=1.0);
- return nResult;
-}
-
-
-
-
-double AnimationFunction::FastInSlowOut_Root (const double nTime)
-{
- OSL_ASSERT(nTime>=0.0 && nTime<=1.0);
-
- const double nResult (sqrt(nTime));
-
- OSL_ASSERT(nResult>=0.0 && nResult<=1.0);
- return nResult;
-}
-
-
-
-
-double AnimationFunction::SlowInSlowOut_0to0_Sine (const double nTime)
-{
- OSL_ASSERT(nTime>=0.0 && nTime<=1.0);
-
- const double nResult (sin(nTime * M_PI));
-
- OSL_ASSERT(nResult>=0.0 && nResult<=1.0);
- return nResult;
-}
-
-
-
-
-double AnimationFunction::Vibrate_Sine (const double nTime)
-{
- return sin(nTime*M_PI*8);
-}
-
-
-
-
-Point AnimationFunction::ScalePoint (const Point& rPoint, const double nTime)
-{
- return Point(
- sal_Int32(::rtl::math::round(rPoint.X() * nTime)),
- sal_Int32(::rtl::math::round(rPoint.Y() * nTime)));
-}
-
-
-
-
-double AnimationFunction::Blend (
- const double nStartValue,
- const double nEndValue,
- const double nTime)
-{
- return nStartValue*(1-nTime) + nEndValue*nTime;
-}
-
-
-
-
-void AnimationFunction::ApplyVisualStateChange (
- const model::SharedPageDescriptor& rpDescriptor,
- view::SlideSorterView& rView,
- const double nTime)
-{
- if (rpDescriptor)
- {
- rpDescriptor->GetVisualState().SetVisualStateBlend(nTime);
- rView.RequestRepaint(rpDescriptor);
- }
-}
-
-
-
-
-void AnimationFunction::ApplyLocationOffsetChange (
- const model::SharedPageDescriptor& rpDescriptor,
- view::SlideSorterView& rView,
- const Point aLocationOffset)
-{
- if (rpDescriptor)
- {
- const Rectangle aOldBoundingBox(rpDescriptor->GetBoundingBox());
- rpDescriptor->GetVisualState().SetLocationOffset(aLocationOffset);
- rView.RequestRepaint(aOldBoundingBox);
- rView.RequestRepaint(rpDescriptor);
- }
-}
-
-
-
-
-void AnimationFunction::ApplyButtonAlphaChange(
- const model::SharedPageDescriptor& rpDescriptor,
- view::SlideSorterView& rView,
- const double nButtonAlpha,
- const double nButtonBarAlpha)
-{
- if (rpDescriptor)
- {
- rpDescriptor->GetVisualState().SetButtonAlpha(nButtonAlpha);
- rpDescriptor->GetVisualState().SetButtonBarAlpha(nButtonBarAlpha);
- rView.RequestRepaint(rpDescriptor);
- }
-}
-
-
-
-
-//===== AnimationBezierFunction ===============================================
-
-AnimationBezierFunction::AnimationBezierFunction (
- const double nX1,
- const double nY1,
- const double nX2,
- const double nY2)
- : mnX1(nX1),
- mnY1(nY1),
- mnX2(nX2),
- mnY2(nY2)
-{
-}
-
-
-
-
-AnimationBezierFunction::AnimationBezierFunction (
- const double nX1,
- const double nY1)
- : mnX1(nX1),
- mnY1(nY1),
- mnX2(1-nY1),
- mnY2(1-nX1)
-{
-}
-
-
-
-
-::basegfx::B2DPoint AnimationBezierFunction::operator() (const double nT)
-{
- return ::basegfx::B2DPoint(
- EvaluateComponent(nT, mnX1, mnX2),
- EvaluateComponent(nT, mnY1, mnY2));
-}
-
-
-
-
-double AnimationBezierFunction::EvaluateComponent (
- const double nT,
- const double nV1,
- const double nV2)
-{
- const double nS (1-nT);
-
- // While the control point values 1 and 2 are explicitly given the start
- // and end values are implicitly given.
- const double nV0 (0);
- const double nV3 (1);
-
- const double nV01 (nS*nV0 + nT*nV1);
- const double nV12 (nS*nV1 + nT*nV2);
- const double nV23 (nS*nV2 + nT*nV3);
-
- const double nV012 (nS*nV01 + nT*nV12);
- const double nV123 (nS*nV12 + nT*nV23);
-
- const double nV0123 (nS*nV012 + nT*nV123);
-
- return nV0123;
-}
-
-
-
-
-//===== AnimationParametricFunction ===========================================
-
-AnimationParametricFunction::AnimationParametricFunction (const ParametricFunction& rFunction)
- : maY()
-{
- const sal_Int32 nSampleCount (64);
-
- // Sample the given parametric function.
- ::std::vector<basegfx::B2DPoint> aPoints;
- aPoints.reserve(nSampleCount);
- for (sal_Int32 nIndex=0; nIndex<nSampleCount; ++nIndex)
- {
- const double nT (nIndex/double(nSampleCount-1));
- aPoints.push_back(basegfx::B2DPoint(rFunction(nT)));
- }
-
- // Interpolate at evenly spaced points.
- maY.clear();
- maY.reserve(nSampleCount);
- double nX0 (aPoints[0].getX());
- double nY0 (aPoints[0].getY());
- double nX1 (aPoints[1].getX());
- double nY1 (aPoints[1].getY());
- sal_Int32 nIndex (1);
- for (sal_Int32 nIndex2=0; nIndex2<nSampleCount; ++nIndex2)
- {
- const double nX (nIndex2 / double(nSampleCount-1));
- while (nX > nX1 && nIndex<nSampleCount)
- {
- nX0 = nX1;
- nY0 = nY1;
- nX1 = aPoints[nIndex].getX();
- nY1 = aPoints[nIndex].getY();
- ++nIndex;
- }
- const double nU ((nX-nX1) / (nX0 - nX1));
- const double nY (nY0*nU + nY1*(1-nU));
- maY.push_back(nY);
- }
-}
-
-
-
-
-double AnimationParametricFunction::operator() (const double nX)
-{
- const sal_Int32 nIndex0 (static_cast<sal_Int32>(nX * maY.size()));
- const double nX0 (nIndex0 / double(maY.size()-1));
- const sal_uInt32 nIndex1 (nIndex0 + 1);
- const double nX1 (nIndex1 / double(maY.size()-1));
-
- if (nIndex0<=0)
- return maY[0];
- else if (sal_uInt32(nIndex0)>=maY.size() || nIndex1>=maY.size())
- return maY[maY.size()-1];
-
- const double nU ((nX-nX1) / (nX0 - nX1));
- return maY[nIndex0]*nU + maY[nIndex1]*(1-nU);
-}
-
-
-} } } // end of namespace ::sd::slidesorter::controller
diff --git a/sd/source/ui/slidesorter/controller/SlsAnimator.cxx b/sd/source/ui/slidesorter/controller/SlsAnimator.cxx
deleted file mode 100644
index 74f9fc2c2..000000000
--- a/sd/source/ui/slidesorter/controller/SlsAnimator.cxx
+++ /dev/null
@@ -1,398 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-#include "controller/SlsAnimator.hxx"
-#include "view/SlideSorterView.hxx"
-#include "View.hxx"
-#include <boost/bind.hpp>
-
-namespace sd { namespace slidesorter { namespace controller {
-
-namespace {
- static const sal_Int32 gnResolution = 25;
-}
-/** Handle one animation function by using a timer for frequent calls to
- the animations operator().
-*/
-class Animator::Animation
-{
-public:
- Animation (
- const Animator::AnimationFunctor& rAnimation,
- const double nStartOffset,
- const double nDuration,
- const double nGlobalTime,
- const Animator::AnimationId nAnimationId,
- const Animator::FinishFunctor& rFinishFunctor);
- ~Animation (void);
- /** Run next animation step. If animation has reached its end it is
- expired.
- */
- bool Run (const double nGlobalTime);
-
- /** Typically called when an animation has finished, but also from
- Animator::Disposed(). The finish functor is called and the
- animation is marked as expired to prevent another run.
- */
- void Expire (void);
- bool IsExpired (void);
-
- Animator::AnimationFunctor maAnimation;
- Animator::FinishFunctor maFinishFunctor;
- const Animator::AnimationId mnAnimationId;
- const double mnDuration;
- const double mnEnd;
- const double mnGlobalTimeAtStart;
- bool mbIsExpired;
-};
-
-
-
-
-Animator::Animator (SlideSorter& rSlideSorter)
- : mrSlideSorter(rSlideSorter),
- maTimer(),
- mbIsDisposed(false),
- maAnimations(),
- maElapsedTime(),
- mpDrawLock(),
- mnNextAnimationId(0)
-{
- maTimer.SetTimeout(gnResolution);
- maTimer.SetTimeoutHdl(LINK(this,Animator,TimeoutHandler));
-}
-
-
-
-
-Animator::~Animator (void)
-{
- if ( ! mbIsDisposed)
- {
- OSL_ASSERT(mbIsDisposed);
- Dispose();
- }
-}
-
-
-
-
-void Animator::Dispose (void)
-{
- mbIsDisposed = true;
-
- AnimationList aCopy (maAnimations);
- AnimationList::const_iterator iAnimation;
- for (iAnimation=aCopy.begin(); iAnimation!=aCopy.end(); ++iAnimation)
- (*iAnimation)->Expire();
-
- maTimer.Stop();
- if (mpDrawLock)
- {
- mpDrawLock->Dispose();
- mpDrawLock.reset();
- }
-}
-
-
-
-
-Animator::AnimationId Animator::AddAnimation (
- const AnimationFunctor& rAnimation,
- const sal_Int32 nStartOffset,
- const sal_Int32 nDuration,
- const FinishFunctor& rFinishFunctor)
-{
- // When the animator is already disposed then ignore this call
- // silently (well, we show an assertion, but do not throw an exception.)
- OSL_ASSERT( ! mbIsDisposed);
- if (mbIsDisposed)
- return -1;
-
- boost::shared_ptr<Animation> pAnimation (
- new Animation(
- rAnimation,
- nStartOffset / 1000.0,
- nDuration / 1000.0,
- maElapsedTime.getElapsedTime(),
- ++mnNextAnimationId,
- rFinishFunctor));
- maAnimations.push_back(pAnimation);
-
- RequestNextFrame();
-
- return pAnimation->mnAnimationId;
-}
-
-
-
-
-Animator::AnimationId Animator::AddInfiniteAnimation (
- const AnimationFunctor& rAnimation,
- const double nDelta)
-{
- (void)nDelta;
-
- // When the animator is already disposed then ignore this call
- // silently (well, we show an assertion, but do not throw an exception.)
- OSL_ASSERT( ! mbIsDisposed);
- if (mbIsDisposed)
- return -1;
-
- boost::shared_ptr<Animation> pAnimation (
- new Animation(
- rAnimation,
- 0,
- -1,
- maElapsedTime.getElapsedTime(),
- mnNextAnimationId++,
- FinishFunctor()));
- maAnimations.push_back(pAnimation);
-
- RequestNextFrame();
-
- return pAnimation->mnAnimationId;
-}
-
-
-
-
-void Animator::RemoveAnimation (const Animator::AnimationId nId)
-{
- OSL_ASSERT( ! mbIsDisposed);
-
- const AnimationList::iterator iAnimation (::std::find_if(
- maAnimations.begin(),
- maAnimations.end(),
- ::boost::bind(
- ::std::equal_to<Animator::AnimationId>(),
- nId,
- ::boost::bind(&Animation::mnAnimationId, _1))));
- if (iAnimation != maAnimations.end())
- {
- OSL_ASSERT((*iAnimation)->mnAnimationId == nId);
- (*iAnimation)->Expire();
- maAnimations.erase(iAnimation);
- }
-
- if (maAnimations.empty())
- {
- // Reset the animation id when we can.
- mnNextAnimationId = 0;
-
- // No more animations => we do not have to suppress painting
- // anymore.
- mpDrawLock.reset();
- }
-}
-
-
-
-
-void Animator::RemoveAllAnimations (void)
-{
- ::std::for_each(
- maAnimations.begin(),
- maAnimations.end(),
- ::boost::bind(
- &Animation::Expire,
- _1));
- maAnimations.clear();
- mnNextAnimationId = 0;
-
- // No more animations => we do not have to suppress painting
- // anymore.
- mpDrawLock.reset();
-}
-
-
-
-
-bool Animator::ProcessAnimations (const double nTime)
-{
- bool bExpired (false);
-
- OSL_ASSERT( ! mbIsDisposed);
- if (mbIsDisposed)
- return bExpired;
-
-
- AnimationList aCopy (maAnimations);
- AnimationList::const_iterator iAnimation;
- for (iAnimation=aCopy.begin(); iAnimation!=aCopy.end(); ++iAnimation)
- {
- bExpired |= (*iAnimation)->Run(nTime);
- }
-
- return bExpired;
-}
-
-
-
-
-void Animator::CleanUpAnimationList (void)
-{
- OSL_ASSERT( ! mbIsDisposed);
- if (mbIsDisposed)
- return;
-
- AnimationList aActiveAnimations;
-
- AnimationList::const_iterator iAnimation;
- for (iAnimation=maAnimations.begin(); iAnimation!=maAnimations.end(); ++iAnimation)
- {
- if ( ! (*iAnimation)->IsExpired())
- aActiveAnimations.push_back(*iAnimation);
- }
-
- maAnimations.swap(aActiveAnimations);
-}
-
-
-
-
-void Animator::RequestNextFrame (const double nFrameStart)
-{
- (void)nFrameStart;
- if ( ! maTimer.IsActive())
- {
- // Prevent redraws except for the ones in TimeoutHandler. While the
- // Animator is active it will schedule repaints regularly. Repaints
- // in between would only lead to visual artifacts.
- mpDrawLock.reset(new view::SlideSorterView::DrawLock(mrSlideSorter));
- maTimer.Start();
- }
-}
-
-
-
-
-IMPL_LINK(Animator, TimeoutHandler, Timer*, EMPTYARG)
-{
- if (mbIsDisposed)
- return 0;
-
- if (ProcessAnimations(maElapsedTime.getElapsedTime()))
- CleanUpAnimationList();
-
- // Unlock the draw lock. This should lead to a repaint.
- mpDrawLock.reset();
-
- if (maAnimations.size() > 0)
- RequestNextFrame();
-
- return 0;
-}
-
-
-
-
-//===== Animator::Animation ===================================================
-
-Animator::Animation::Animation (
- const Animator::AnimationFunctor& rAnimation,
- const double nStartOffset,
- const double nDuration,
- const double nGlobalTime,
- const Animator::AnimationId nId,
- const Animator::FinishFunctor& rFinishFunctor)
- : maAnimation(rAnimation),
- maFinishFunctor(rFinishFunctor),
- mnAnimationId(nId),
- mnDuration(nDuration),
- mnEnd(nGlobalTime + nDuration + nStartOffset),
- mnGlobalTimeAtStart(nGlobalTime + nStartOffset),
- mbIsExpired(false)
-{
- Run(nGlobalTime);
-}
-
-
-
-
-Animator::Animation::~Animation (void)
-{
-}
-
-
-
-
-bool Animator::Animation::Run (const double nGlobalTime)
-{
- if ( ! mbIsExpired)
- {
- if (mnDuration > 0)
- {
- if (nGlobalTime >= mnEnd)
- {
- maAnimation(1.0);
- Expire();
- }
- else if (nGlobalTime >= mnGlobalTimeAtStart)
- {
- maAnimation((nGlobalTime - mnGlobalTimeAtStart) / mnDuration);
- }
- }
- else if (mnDuration < 0)
- {
- // Animations without end have to be expired by their owner.
- maAnimation(nGlobalTime);
- }
- }
-
- return mbIsExpired;
-}
-
-
-
-
-void Animator::Animation::Expire (void)
-{
- if ( ! mbIsExpired)
- {
- mbIsExpired = true;
- if (maFinishFunctor)
- maFinishFunctor();
- }
-}
-
-
-
-
-bool Animator::Animation::IsExpired (void)
-{
- return mbIsExpired;
-}
-
-
-
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsClipboard.cxx b/sd/source/ui/slidesorter/controller/SlsClipboard.cxx
deleted file mode 100644
index 10e9a8fdd..000000000
--- a/sd/source/ui/slidesorter/controller/SlsClipboard.cxx
+++ /dev/null
@@ -1,892 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "controller/SlsClipboard.hxx"
-
-#include "SlideSorterViewShell.hxx"
-#include "SlideSorter.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "model/SlsPageEnumerationProvider.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsTheme.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsInsertionIndicatorHandler.hxx"
-#include "controller/SlsPageSelector.hxx"
-#include "controller/SlsSelectionFunction.hxx"
-#include "controller/SlsCurrentSlideManager.hxx"
-#include "controller/SlsScrollBarManager.hxx"
-#include "controller/SlsFocusManager.hxx"
-#include "controller/SlsSelectionManager.hxx"
-#include "controller/SlsTransferable.hxx"
-#include "controller/SlsSelectionObserver.hxx"
-#include "cache/SlsPageCache.hxx"
-
-#include "ViewShellBase.hxx"
-#include "DrawViewShell.hxx"
-#include "Window.hxx"
-#include "fupoor.hxx"
-#include "fuzoom.hxx"
-#include "fucushow.hxx"
-#include "fusldlg.hxx"
-#include "fuexpand.hxx"
-#include "fusumry.hxx"
-#include "app.hrc"
-#include "glob.hrc"
-#include "strings.hrc"
-#include "sdresid.hxx"
-#include "sdxfer.hxx"
-#include "sdmod.hxx"
-#include "sddll.hxx"
-#include "ins_paste.hxx"
-#include "drawdoc.hxx"
-#include "DrawDocShell.hxx"
-#include "sdpage.hxx"
-
-#include <com/sun/star/datatransfer/dnd/DNDConstants.hpp>
-#include <sfx2/request.hxx>
-#include <sfx2/viewfrm.hxx>
-#include <sfx2/bindings.hxx>
-#include <sfx2/docfile.hxx>
-#include <svx/svxids.hrc>
-#include <svx/svdstr.hrc>
-#include <vcl/msgbox.hxx>
-#include <tools/urlobj.hxx>
-#include <rtl/ustring.hxx>
-#include <osl/mutex.hxx>
-#include <vcl/svapp.hxx>
-
-namespace sd { namespace slidesorter { namespace controller {
-
-class Clipboard::UndoContext
-{
-public:
- UndoContext (
- SdDrawDocument* pDocument,
- const ::boost::shared_ptr<ViewShell>& rpMainViewShell,
- const ::boost::shared_ptr<view::Theme>& rpTheme)
- : mpDocument(pDocument),
- mpMainViewShell(rpMainViewShell)
- {
- if (mpDocument!=NULL && mpDocument->IsUndoEnabled())
- {
- if (mpMainViewShell && mpMainViewShell->GetShellType() == ViewShell::ST_DRAW)
- mpDocument->BegUndo(rpTheme->GetString(view::Theme::String_DragAndDropPages));
- else
- mpDocument->BegUndo(rpTheme->GetString(view::Theme::String_DragAndDropSlides));
- }
- }
-
- ~UndoContext (void)
- {
- if (mpDocument!=NULL && mpDocument->IsUndoEnabled())
- mpDocument->EndUndo();
- if (mpMainViewShell && mpMainViewShell->GetViewFrame()!=NULL)
- {
- SfxBindings& rBindings = mpMainViewShell->GetViewFrame()->GetBindings();
- rBindings.Invalidate(SID_UNDO);
- rBindings.Invalidate(SID_REDO);
- }
- }
-private:
- SdDrawDocument* mpDocument;
- ::boost::shared_ptr<ViewShell> mpMainViewShell;
-};
-
-
-
-
-Clipboard::Clipboard (SlideSorter& rSlideSorter)
- : ViewClipboard(rSlideSorter.GetView()),
- mrSlideSorter(rSlideSorter),
- mrController(mrSlideSorter.GetController()),
- maPagesToRemove(),
- maPagesToSelect(),
- mbUpdateSelectionPending(false),
- mpUndoContext(),
- mpSelectionObserverContext(),
- mnDragFinishedUserEventId(0)
-{
-}
-
-
-
-
-Clipboard::~Clipboard (void)
-{
- if (mnDragFinishedUserEventId != 0)
- Application::RemoveUserEvent(mnDragFinishedUserEventId);
-}
-
-
-
-
-/** With the current implementation the forwarded calls to the current
- function will come back eventually to call the local Do(Cut|Copy|Paste)
- methods. A shortcut is possible but would be an unclean hack.
-*/
-void Clipboard::HandleSlotCall (SfxRequest& rRequest)
-{
- ViewShell* pViewShell = mrSlideSorter.GetViewShell();
- FunctionReference xFunc;
- if (pViewShell != NULL)
- xFunc = pViewShell->GetCurrentFunction();
- switch (rRequest.GetSlot())
- {
- case SID_CUT:
- if (mrSlideSorter.GetModel().GetEditMode() != EM_MASTERPAGE)
- {
- if(xFunc.is())
- xFunc->DoCut();
- else
- DoCut();
- }
- rRequest.Done();
- break;
-
- case SID_COPY:
- if (mrSlideSorter.GetModel().GetEditMode() != EM_MASTERPAGE)
- {
- if(xFunc.is())
- xFunc->DoCopy();
- else
- DoCopy();
- }
- rRequest.Done();
- break;
-
- case SID_PASTE:
- // Prevent redraws while inserting pages from the clipboard
- // because the intermediate inconsistent state might lead to
- // a crash.
- if (mrSlideSorter.GetModel().GetEditMode() != EM_MASTERPAGE)
- {
- view::SlideSorterView::DrawLock aLock (mrSlideSorter);
- SelectionObserver::Context aContext (mrSlideSorter);
- if(xFunc.is())
- xFunc->DoPaste();
- else
- DoPaste();
- }
- rRequest.Done();
- break;
-
- case SID_DELETE:
- DoDelete();
- rRequest.Done();
- break;
- }
-}
-
-
-
-
-void Clipboard::DoCut (::Window* pWindow)
-{
- if (mrSlideSorter.GetModel().GetPageCount() > 1)
- {
- DoCopy(pWindow);
- DoDelete(pWindow);
- }
-}
-
-
-
-
-void Clipboard::DoDelete (::Window* )
-{
- if (mrSlideSorter.GetModel().GetPageCount() > 1)
- {
- mrController.GetSelectionManager()->DeleteSelectedPages();
- }
-}
-
-
-
-
-void Clipboard::DoCopy (::Window* pWindow )
-{
- CreateSlideTransferable( pWindow, sal_False );
-}
-
-
-
-
-void Clipboard::DoPaste (::Window* pWindow)
-{
- SdTransferable* pClipTransferable = SD_MOD()->pTransferClip;
-
- if (pClipTransferable!=NULL && pClipTransferable->IsPageTransferable())
- {
- sal_Int32 nInsertPosition = GetInsertionPosition(pWindow);
-
- if (nInsertPosition >= 0)
- {
- // Paste the pages from the clipboard.
- sal_Int32 nInsertPageCount = PasteTransferable(nInsertPosition);
- // Select the pasted pages and make the first of them the
- // current page.
- mrSlideSorter.GetContentWindow()->GrabFocus();
- SelectPageRange(nInsertPosition, nInsertPageCount);
- }
- }
-}
-
-
-
-
-sal_Int32 Clipboard::GetInsertionPosition (::Window* pWindow)
-{
- sal_Int32 nInsertPosition = -1;
-
- // Determine the insertion position:
- // a) When the insertion indicator is visible, then at that position.
- // b) When the focus indicator is visible, then before or after the
- // focused page, depending on user input to a dialog.
- // c) When there is a selection but no focus, then after the
- // selection.
- // d) After the last page when there is no selection and no focus.
-
- ::boost::shared_ptr<controller::InsertionIndicatorHandler> pInsertionIndicatorHandler (
- mrController.GetInsertionIndicatorHandler());
- if (pInsertionIndicatorHandler->IsActive())
- {
- // Use the insertion index of an active insertion indicator.
- nInsertPosition = pInsertionIndicatorHandler->GetInsertionPageIndex();
- }
- else if (mrController.GetSelectionManager()->GetInsertionPosition() >= 0)
- {
- // Use the insertion index of an insertion indicator that has been
- // deactivated a short while ago.
- nInsertPosition = mrController.GetSelectionManager()->GetInsertionPosition();
- }
- else if (mrController.GetFocusManager().IsFocusShowing())
- {
- // Use the focus to determine the insertion position.
- SdInsertPasteDlg aDialog (pWindow);
- if (aDialog.Execute() == RET_OK)
- {
- nInsertPosition = mrController.GetFocusManager().GetFocusedPageIndex();
- if ( ! aDialog.IsInsertBefore())
- nInsertPosition ++;
- }
- }
-
- return nInsertPosition;
-}
-
-
-
-
-sal_Int32 Clipboard::PasteTransferable (sal_Int32 nInsertPosition)
-{
- SdTransferable* pClipTransferable = SD_MOD()->pTransferClip;
- model::SlideSorterModel& rModel (mrSlideSorter.GetModel());
- bool bMergeMasterPages = !pClipTransferable->HasSourceDoc (rModel.GetDocument());
- sal_uInt16 nInsertIndex (rModel.GetCoreIndex(nInsertPosition));
- sal_Int32 nInsertPageCount (0);
- if (pClipTransferable->HasPageBookmarks())
- {
- const List& rBookmarkList = pClipTransferable->GetPageBookmarks();
- const SolarMutexGuard aGuard;
-
- nInsertPageCount = (sal_uInt16) rBookmarkList.Count();
- rModel.GetDocument()->InsertBookmarkAsPage(
- const_cast<List*>(&rBookmarkList),
- NULL,
- sal_False,
- sal_False,
- nInsertIndex,
- sal_False,
- pClipTransferable->GetPageDocShell(),
- sal_True,
- bMergeMasterPages,
- sal_False);
- }
- else
- {
- SfxObjectShell* pShell = pClipTransferable->GetDocShell();
- DrawDocShell* pDataDocSh = (DrawDocShell*)pShell;
- SdDrawDocument* pDataDoc = pDataDocSh->GetDoc();
-
- if (pDataDoc!=NULL
- && pDataDoc->GetSdPageCount(PK_STANDARD))
- {
- const SolarMutexGuard aGuard;
-
- bMergeMasterPages = (pDataDoc != rModel.GetDocument());
- nInsertPageCount = pDataDoc->GetSdPageCount( PK_STANDARD );
- rModel.GetDocument()->InsertBookmarkAsPage(
- NULL,
- NULL,
- sal_False,
- sal_False,
- nInsertIndex,
- sal_False,
- pDataDocSh,
- sal_True,
- bMergeMasterPages,
- sal_False);
- }
- }
- mrController.HandleModelChange();
- return nInsertPageCount;
-}
-
-
-
-
-void Clipboard::SelectPageRange (sal_Int32 nFirstIndex, sal_Int32 nPageCount)
-{
- // Select the newly inserted pages. That are the nInsertPageCount pages
- // after the nInsertIndex position.
- PageSelector& rSelector (mrController.GetPageSelector());
- rSelector.DeselectAllPages();
- for (sal_uInt16 i=0; i<nPageCount; i++)
- {
- model::SharedPageDescriptor pDescriptor (
- mrSlideSorter.GetModel().GetPageDescriptor(nFirstIndex + i));
- if (pDescriptor.get() != NULL)
- {
- rSelector.SelectPage(pDescriptor);
- // The first page of the new selection is made the current page.
- if (i == 0)
- {
- mrController.GetCurrentSlideManager()->SwitchCurrentSlide(pDescriptor);
- }
- }
- }
-}
-
-
-
-
-void Clipboard::CreateSlideTransferable (
- ::Window* pWindow,
- bool bDrag)
-{
- List aBookmarkList;
-
- // Insert all selected pages into a bookmark list and remember them in
- // maPagesToRemove for possible later removal.
- model::PageEnumeration aSelectedPages
- (model::PageEnumerationProvider::CreateSelectedPagesEnumeration(
- mrSlideSorter.GetModel()));
- while (aSelectedPages.HasMoreElements())
- {
- model::SharedPageDescriptor pDescriptor (aSelectedPages.GetNextElement());
- aBookmarkList.Insert (
- new String(pDescriptor->GetPage()->GetName()),
- LIST_APPEND);
- maPagesToRemove.push_back (pDescriptor->GetPage());
- }
-
- // Create a small set of representatives of the selection for which
- // previews are included into the transferable so that an insertion
- // indicator can be rendered.
- aSelectedPages.Rewind();
- ::std::vector<Transferable::Representative> aRepresentatives;
- aRepresentatives.reserve(3);
- ::boost::shared_ptr<cache::PageCache> pPreviewCache (
- mrSlideSorter.GetView().GetPreviewCache());
- while (aSelectedPages.HasMoreElements())
- {
- model::SharedPageDescriptor pDescriptor (aSelectedPages.GetNextElement());
- if ( ! pDescriptor || pDescriptor->GetPage()==NULL)
- continue;
- Bitmap aPreview (pPreviewCache->GetPreviewBitmap(pDescriptor->GetPage(), false));
- aRepresentatives.push_back(Transferable::Representative(
- aPreview,
- pDescriptor->HasState(model::PageDescriptor::ST_Excluded)));
- if (aRepresentatives.size() >= 3)
- break;
- }
-
- if (aBookmarkList.Count() > 0)
- {
- mrSlideSorter.GetView().BrkAction();
- SdDrawDocument* pDocument = mrSlideSorter.GetModel().GetDocument();
- SdTransferable* pTransferable = new Transferable (
- pDocument,
- NULL,
- sal_False,
- dynamic_cast<SlideSorterViewShell*>(mrSlideSorter.GetViewShell()),
- aRepresentatives);
-
- if (bDrag)
- SD_MOD()->pTransferDrag = pTransferable;
- else
- SD_MOD()->pTransferClip = pTransferable;
-
- pDocument->CreatingDataObj (pTransferable);
- pTransferable->SetWorkDocument( dynamic_cast<SdDrawDocument*>(pDocument->AllocModel()) );
- pDocument->CreatingDataObj (NULL);
- TransferableObjectDescriptor aObjDesc;
- pTransferable->GetWorkDocument()->GetDocSh()
- ->FillTransferableObjectDescriptor (aObjDesc);
-
- if (pDocument->GetDocSh() != NULL)
- aObjDesc.maDisplayName = pDocument->GetDocSh()
- ->GetMedium()->GetURLObject().GetURLNoPass();
-
- ::Window* pActionWindow = pWindow;
- if (pActionWindow == NULL)
- {
- ViewShell* pViewShell = mrSlideSorter.GetViewShell();
- if (pViewShell != NULL)
- pActionWindow = pViewShell->GetActiveWindow();
- }
-
- pTransferable->SetStartPos (pActionWindow->PixelToLogic(
- pActionWindow->GetPointerPosPixel()));
- pTransferable->SetObjectDescriptor (aObjDesc);
- pTransferable->SetPageBookmarks (aBookmarkList, !bDrag);
-
- for (void* p=aBookmarkList.First(); p!=NULL; p=aBookmarkList.Next())
- delete static_cast<String*>(p);
-
- if (bDrag)
- {
- pTransferable->SetView (&mrSlideSorter.GetView());
- sal_Int8 nDragSourceActions (DND_ACTION_COPY);
- // The move action is available only when not all pages would be
- // moved. Otherwise an empty document would remain. Crash.
- sal_Int32 nRemainingPages = mrSlideSorter.GetModel().GetPageCount() - aBookmarkList.Count();
- if (nRemainingPages > 0)
- nDragSourceActions |= DND_ACTION_MOVE;
- pTransferable->StartDrag (pActionWindow, nDragSourceActions);
- }
- else
- pTransferable->CopyToClipboard (pActionWindow);
- }
-}
-
-
-
-
-void Clipboard::StartDrag (
- const Point& rPosition,
- ::Window* pWindow)
-{
- maPagesToRemove.clear();
- maPagesToSelect.clear();
- mbUpdateSelectionPending = false;
- CreateSlideTransferable(pWindow, sal_True);
-
- mrController.GetInsertionIndicatorHandler()->UpdatePosition(
- rPosition,
- InsertionIndicatorHandler::UnknownMode);
-}
-
-
-
-
-void Clipboard::DragFinished (sal_Int8 nDropAction)
-{
- SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
- if (pDragTransferable != NULL)
- pDragTransferable->SetView (NULL);
-
- if (mnDragFinishedUserEventId == 0)
- {
- if ( ! Application::PostUserEvent(
- mnDragFinishedUserEventId,
- LINK(this, Clipboard, ProcessDragFinished),
- reinterpret_cast<void*>(nDropAction)))
- {
- mnDragFinishedUserEventId = 0;
- }
- }
-}
-
-
-
-
-IMPL_LINK(Clipboard, ProcessDragFinished, void*, pUserData)
-{
- const sal_Int8 nDropAction (static_cast<sal_Int8>(reinterpret_cast<sal_IntPtr>(pUserData)));
-
- mnDragFinishedUserEventId = 0;
-
- // Hide the substitution display and insertion indicator.
- ::rtl::Reference<SelectionFunction> pFunction (mrController.GetCurrentSelectionFunction());
- if (pFunction.is())
- pFunction->NotifyDragFinished();
-
- PageSelector& rSelector (mrController.GetPageSelector());
- if ((nDropAction & DND_ACTION_MOVE) != 0
- && ! maPagesToRemove.empty())
- {
- // Remove the pages that have been moved to another place (possibly
- // in the same document.)
- rSelector.DeselectAllPages();
- PageList::iterator aDraggedPage;
- for (aDraggedPage=maPagesToRemove.begin();
- aDraggedPage!=maPagesToRemove.end();
- ++aDraggedPage)
- {
- rSelector.SelectPage(*aDraggedPage);
- }
- mrController.GetSelectionManager()->DeleteSelectedPages();
- }
- mpUndoContext.reset();
- mpSelectionObserverContext.reset();
-
- return 1;
-}
-
-
-
-
-void Clipboard::SelectPages (void)
-{
- PageSelector& rSelector (mrController.GetPageSelector());
-
- // Select the dropped pages.
- PageList::iterator iPage;
- rSelector.DeselectAllPages();
- for (iPage=maPagesToSelect.begin(); iPage!=maPagesToSelect.end(); ++iPage)
- {
- rSelector.SelectPage(*iPage);
- }
-}
-
-
-
-
-sal_Int8 Clipboard::AcceptDrop (
- const AcceptDropEvent& rEvent,
- DropTargetHelper& rTargetHelper,
- ::sd::Window* pTargetWindow,
- sal_uInt16 nPage,
- sal_uInt16 nLayer)
-{
- sal_Int8 nAction (DND_ACTION_NONE);
-
- const Clipboard::DropType eDropType (IsDropAccepted());
-
- switch (eDropType)
- {
- case DT_PAGE:
- {
- // Accept a drop.
- nAction = rEvent.mnAction;
-
- // Use the copy action when the drop action is the default, i.e. not
- // explicitly set to move or link, and when the source and
- // target models are not the same.
- const SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
- if (pDragTransferable != NULL
- && pDragTransferable->IsPageTransferable()
- && ((rEvent.maDragEvent.DropAction
- & ::com::sun::star::datatransfer::dnd::DNDConstants::ACTION_DEFAULT) != 0)
- && (mrSlideSorter.GetModel().GetDocument()->GetDocSh()
- != pDragTransferable->GetPageDocShell()))
- {
- nAction = DND_ACTION_COPY;
- }
- else if (mrController.GetInsertionIndicatorHandler()->IsInsertionTrivial(nAction))
- {
- nAction = DND_ACTION_NONE;
- }
-
- // Show the insertion marker and the substitution for a drop.
- SelectionFunction* pSelectionFunction = dynamic_cast<SelectionFunction*>(
- mrSlideSorter.GetViewShell()->GetCurrentFunction().get());
- if (pSelectionFunction != NULL)
- pSelectionFunction->MouseDragged(rEvent, nAction);
-
- // Scroll the window when the mouse reaches the window border.
- // mrController.GetScrollBarManager().AutoScroll (rEvent.maPosPixel);
- }
- break;
-
- case DT_SHAPE:
- nAction = ExecuteOrAcceptShapeDrop(
- DC_ACCEPT,
- rEvent.maPosPixel,
- &rEvent,
- rTargetHelper,
- pTargetWindow,
- nPage,
- nLayer);
- break;
-
- default:
- nAction = DND_ACTION_NONE;
- break;
- }
-
- return nAction;
-}
-
-
-
-
-sal_Int8 Clipboard::ExecuteDrop (
- const ExecuteDropEvent& rEvent,
- DropTargetHelper& rTargetHelper,
- ::sd::Window* pTargetWindow,
- sal_uInt16 nPage,
- sal_uInt16 nLayer)
-{
- sal_Int8 nResult = DND_ACTION_NONE;
- mpUndoContext.reset();
-
- switch (IsDropAccepted())
- {
- case DT_PAGE:
- {
- const SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
- const Point aEventModelPosition (
- pTargetWindow->PixelToLogic (rEvent.maPosPixel));
- const sal_Int32 nXOffset (labs (pDragTransferable->GetStartPos().X()
- - aEventModelPosition.X()));
- const sal_Int32 nYOffset (labs (pDragTransferable->GetStartPos().Y()
- - aEventModelPosition.Y()));
- bool bContinue =
- ( pDragTransferable->GetView() != &mrSlideSorter.GetView() )
- || ( nXOffset >= 2 && nYOffset >= 2 );
-
- ::boost::shared_ptr<InsertionIndicatorHandler> pInsertionIndicatorHandler(
- mrController.GetInsertionIndicatorHandler());
- // Get insertion position and then turn off the insertion indicator.
- pInsertionIndicatorHandler->UpdatePosition(aEventModelPosition, rEvent.mnAction);
- // sal_uInt16 nIndex = DetermineInsertPosition(*pDragTransferable);
-
- // Do not process the insertion when it is trivial,
- // i.e. would insert pages at their original place.
- if (pInsertionIndicatorHandler->IsInsertionTrivial(rEvent.mnAction))
- bContinue = false;
-
- // Tell the insertion indicator handler to hide before the model
- // is modified. Doing it later may result in page objects whose
- // animation state is not properly reset because they are then
- // in another run then before the model change.
- pInsertionIndicatorHandler->End(Animator::AM_Immediate);
-
- if (bContinue)
- {
- SlideSorterController::ModelChangeLock aModelChangeLock (mrController);
-
- // Handle a general drop operation.
- mpUndoContext.reset(new UndoContext (
- mrSlideSorter.GetModel().GetDocument(),
- mrSlideSorter.GetViewShell()->GetViewShellBase().GetMainViewShell(),
- mrSlideSorter.GetTheme()));
- mpSelectionObserverContext.reset(new SelectionObserver::Context(mrSlideSorter));
-
- HandlePageDrop(*pDragTransferable);
- nResult = rEvent.mnAction;
-
- // We leave the undo context alive for when moving or
- // copying inside one view then the actions in
- // NotifyDragFinished should be covered as well as
- // well as the ones above.
- }
-
- // Notify the receiving selection function that drag-and-drop is
- // finished and the substitution handler can be released.
- ::rtl::Reference<SelectionFunction> pFunction (
- mrController.GetCurrentSelectionFunction());
- if (pFunction.is())
- pFunction->NotifyDragFinished();
- }
- break;
-
- case DT_SHAPE:
- nResult = ExecuteOrAcceptShapeDrop(
- DC_EXECUTE,
- rEvent.maPosPixel,
- &rEvent,
- rTargetHelper,
- pTargetWindow,
- nPage,
- nLayer);
- break;
- default:
- break;
- }
-
- return nResult;
-}
-
-
-
-
-void Clipboard::Abort (void)
-{
- if (mpSelectionObserverContext)
- {
- mpSelectionObserverContext->Abort();
- mpSelectionObserverContext.reset();
- }
-}
-
-
-
-
-sal_uInt16 Clipboard::DetermineInsertPosition (const SdTransferable& )
-{
- // Tell the model to move the dragged pages behind the one with the
- // index nInsertionIndex which first has to be transformed into an index
- // understandable by the document.
- const sal_Int32 nInsertionIndex (
- mrController.GetInsertionIndicatorHandler()->GetInsertionPageIndex());
-
- // Convert to insertion index to that of an SdModel.
- if (nInsertionIndex >= 0)
- return mrSlideSorter.GetModel().GetCoreIndex(nInsertionIndex);
- else
- return 0;
-}
-
-
-
-
-sal_uInt16 Clipboard::InsertSlides (
- const SdTransferable& rTransferable,
- sal_uInt16 nInsertPosition)
-{
- sal_uInt16 nInsertedPageCount = ViewClipboard::InsertSlides (
- rTransferable,
- nInsertPosition);
-
- // Remember the inserted pages so that they can be selected when the
- // operation is finished.
- maPagesToSelect.clear();
- SdDrawDocument* pDocument = mrSlideSorter.GetModel().GetDocument();
- if (pDocument != NULL)
- for (sal_Int32 i=0; i<=nInsertedPageCount; i+=2)
- maPagesToSelect.push_back(
- dynamic_cast<SdPage*>(pDocument->GetPage(nInsertPosition+i)));
-
- mbUpdateSelectionPending |= (nInsertedPageCount>0);
-
- return nInsertedPageCount;
-}
-
-
-
-
-Clipboard::DropType Clipboard::IsDropAccepted (void) const
-{
- DropType eResult (DT_NONE);
-
- const SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
- if (pDragTransferable != NULL)
- {
- if (pDragTransferable->IsPageTransferable())
- {
- if (mrSlideSorter.GetModel().GetEditMode() != EM_MASTERPAGE)
- eResult = DT_PAGE;
- }
- else
- {
- eResult = DT_SHAPE;
- }
- }
-
- return eResult;
-}
-
-
-
-
-sal_Int8 Clipboard::ExecuteOrAcceptShapeDrop (
- DropCommand eCommand,
- const Point& rPosition,
- const void* pDropEvent,
- DropTargetHelper& rTargetHelper,
- ::sd::Window* pTargetWindow,
- sal_uInt16 nPage,
- sal_uInt16 nLayer)
-{
- sal_Int8 nResult = 0;
-
- // The dropping of a shape is accepted or executed only when there is
- // DrawViewShell available to which we can forward this call. This has
- // technical reasons: The actual code to accept or execute a shape drop
- // is implemented in the ViewShell class and uses the page view of the
- // main edit view. This is not possible without a DrawViewShell.
- ::boost::shared_ptr<DrawViewShell> pDrawViewShell;
- if (mrSlideSorter.GetViewShell() != NULL)
- pDrawViewShell = ::boost::dynamic_pointer_cast<DrawViewShell>(
- mrSlideSorter.GetViewShell()->GetViewShellBase().GetMainViewShell());
- if (pDrawViewShell.get() != NULL
- && (pDrawViewShell->GetShellType() == ViewShell::ST_IMPRESS
- || pDrawViewShell->GetShellType() == ViewShell::ST_DRAW))
- {
- // The drop is only accepted or executed when it takes place over a
- // page object. Therefore we replace a missing page number by the
- // number of the page under the mouse.
- if (nPage == SDRPAGE_NOTFOUND)
- {
- model::SharedPageDescriptor pDescriptor (
- mrSlideSorter.GetModel().GetPageDescriptor(
- mrSlideSorter.GetView().GetPageIndexAtPoint(rPosition)));
- if (pDescriptor)
- nPage = pDescriptor->GetPageIndex();
- }
-
- // Now comes the code that is different for the Execute and Accept:
- // We simply forward the call to the AcceptDrop() or ExecuteDrop()
- // methods of the DrawViewShell in the center pane.
- if (nPage != SDRPAGE_NOTFOUND)
- switch (eCommand)
- {
- case DC_ACCEPT:
- nResult = pDrawViewShell->AcceptDrop(
- *reinterpret_cast<const AcceptDropEvent*>(pDropEvent),
- rTargetHelper,
- pTargetWindow,
- nPage,
- nLayer);
- break;
-
- case DC_EXECUTE:
- nResult = pDrawViewShell->ExecuteDrop(
- *reinterpret_cast<const ExecuteDropEvent*>(pDropEvent),
- rTargetHelper,
- pTargetWindow,
- nPage,
- nLayer);
- break;
- }
- }
-
- return nResult;
-}
-
-
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsCommand.hxx b/sd/source/ui/slidesorter/controller/SlsCommand.hxx
deleted file mode 100644
index d6dee9911..000000000
--- a/sd/source/ui/slidesorter/controller/SlsCommand.hxx
+++ /dev/null
@@ -1,48 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_COMMAND_HXX
-#define SD_SLIDESORTER_COMMAND_HXX
-
-namespace sd { namespace slidesorter { namespace controller {
-
-/** Base class for command objects. It specifies the interface for commands
- whose execution can be scheduled via the SlotManager.
-*/
-class Command
-{
-public:
- virtual ~Command (void) {};
- virtual void operator() (void) = 0;
-};
-
-} } } // end of namespace sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsCurrentSlideManager.cxx b/sd/source/ui/slidesorter/controller/SlsCurrentSlideManager.cxx
deleted file mode 100644
index 8cd692418..000000000
--- a/sd/source/ui/slidesorter/controller/SlsCurrentSlideManager.cxx
+++ /dev/null
@@ -1,322 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlideSorter.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "controller/SlsPageSelector.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsCurrentSlideManager.hxx"
-#include "controller/SlsFocusManager.hxx"
-#include "view/SlideSorterView.hxx"
-#include "ViewShellBase.hxx"
-#include "ViewShell.hxx"
-#include "DrawViewShell.hxx"
-#include "sdpage.hxx"
-#include "FrameView.hxx"
-#include <com/sun/star/beans/XPropertySet.hpp>
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-
-using namespace ::sd::slidesorter::model;
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-
-CurrentSlideManager::CurrentSlideManager (SlideSorter& rSlideSorter)
- : mrSlideSorter(rSlideSorter),
- mnCurrentSlideIndex(-1),
- mpCurrentSlide(),
- maSwitchPageDelayTimer()
-{
- maSwitchPageDelayTimer.SetTimeout(100);
- maSwitchPageDelayTimer.SetTimeoutHdl(LINK(this,CurrentSlideManager,SwitchPageCallback));
-}
-
-
-
-
-CurrentSlideManager::~CurrentSlideManager (void)
-{
-}
-
-
-
-
-void CurrentSlideManager::NotifyCurrentSlideChange (const SdPage* pPage)
-{
- if (pPage != NULL)
- NotifyCurrentSlideChange(
- mrSlideSorter.GetModel().GetIndex(
- Reference<drawing::XDrawPage>(
- const_cast<SdPage*>(pPage)->getUnoPage(),
- UNO_QUERY)));
- else
- NotifyCurrentSlideChange(-1);
-}
-
-
-
-
-void CurrentSlideManager::NotifyCurrentSlideChange (const sal_Int32 nSlideIndex)
-{
- if (mnCurrentSlideIndex != nSlideIndex)
- {
- ReleaseCurrentSlide();
- AcquireCurrentSlide(nSlideIndex);
-
- // Update the selection.
- mrSlideSorter.GetController().GetPageSelector().DeselectAllPages();
- if (mpCurrentSlide)
- {
- mrSlideSorter.GetController().GetPageSelector().SelectPage(mpCurrentSlide);
- mrSlideSorter.GetController().GetFocusManager().SetFocusedPage(mpCurrentSlide);
- }
- }
-}
-
-
-
-
-void CurrentSlideManager::ReleaseCurrentSlide (void)
-{
- if (mpCurrentSlide.get() != NULL)
- mrSlideSorter.GetView().SetState(mpCurrentSlide, PageDescriptor::ST_Current, false);
-
- mpCurrentSlide.reset();
- mnCurrentSlideIndex = -1;
-}
-
-
-
-
-bool CurrentSlideManager::IsCurrentSlideIsValid (void)
-{
- return mnCurrentSlideIndex >= 0 && mnCurrentSlideIndex<mrSlideSorter.GetModel().GetPageCount();
-}
-
-
-
-
-void CurrentSlideManager::AcquireCurrentSlide (const sal_Int32 nSlideIndex)
-{
- mnCurrentSlideIndex = nSlideIndex;
-
- if (IsCurrentSlideIsValid())
- {
- // Get a descriptor for the XDrawPage reference. Note that the
- // given XDrawPage may or may not be member of the slide sorter
- // document.
- mpCurrentSlide = mrSlideSorter.GetModel().GetPageDescriptor(mnCurrentSlideIndex);
- if (mpCurrentSlide.get() != NULL)
- mrSlideSorter.GetView().SetState(mpCurrentSlide, PageDescriptor::ST_Current, true);
- }
-}
-
-
-
-
-void CurrentSlideManager::SwitchCurrentSlide (
- const sal_Int32 nSlideIndex,
- const bool bUpdateSelection)
-{
- SwitchCurrentSlide(mrSlideSorter.GetModel().GetPageDescriptor(nSlideIndex), bUpdateSelection);
-}
-
-
-
-
-void CurrentSlideManager::SwitchCurrentSlide (
- const SharedPageDescriptor& rpDescriptor,
- const bool bUpdateSelection)
-{
- if (rpDescriptor.get() != NULL && mpCurrentSlide!=rpDescriptor)
- {
- ReleaseCurrentSlide();
- AcquireCurrentSlide((rpDescriptor->GetPage()->GetPageNum()-1)/2);
-
- ViewShell* pViewShell = mrSlideSorter.GetViewShell();
- if (pViewShell != NULL && pViewShell->IsMainViewShell())
- {
- // The slide sorter is the main view.
- FrameView* pFrameView = pViewShell->GetFrameView();
- if (pFrameView != NULL)
- pFrameView->SetSelectedPage(sal::static_int_cast<sal_uInt16>(mnCurrentSlideIndex));
- mrSlideSorter.GetController().GetPageSelector().SetCoreSelection();
- }
-
- // We do not tell the XController/ViewShellBase about the new
- // slide right away. This is done asynchronously after a short
- // delay to allow for more slide switches in the slide sorter.
- // This goes under the assumption that slide switching inside
- // the slide sorter is fast (no expensive redraw of the new page
- // (unless the preview of the new slide is not yet preset)) and
- // that slide switching in the edit view is slow (all shapes of
- // the new slide have to be repainted.)
- maSwitchPageDelayTimer.Start();
-
- // We have to store the (index of the) new current slide at
- // the tab control because there are other asynchronous
- // notifications of the slide switching that otherwise
- // overwrite the correct value.
- SetCurrentSlideAtTabControl(mpCurrentSlide);
-
- if (bUpdateSelection)
- {
- mrSlideSorter.GetController().GetPageSelector().DeselectAllPages();
- mrSlideSorter.GetController().GetPageSelector().SelectPage(rpDescriptor);
- }
- mrSlideSorter.GetController().GetFocusManager().SetFocusedPage(rpDescriptor);
- }
-}
-
-
-
-
-void CurrentSlideManager::SetCurrentSlideAtViewShellBase (const SharedPageDescriptor& rpDescriptor)
-{
- OSL_ASSERT(rpDescriptor.get() != NULL);
-
- ViewShellBase* pBase = mrSlideSorter.GetViewShellBase();
- if (pBase != NULL)
- {
- DrawViewShell* pDrawViewShell = dynamic_cast<DrawViewShell*>(
- pBase->GetMainViewShell().get());
- if (pDrawViewShell != NULL)
- {
- sal_uInt16 nPageNumber = (rpDescriptor->GetPage()->GetPageNum()-1)/2;
- pDrawViewShell->SwitchPage(nPageNumber);
- pDrawViewShell->GetPageTabControl()->SetCurPageId(nPageNumber+1);
- }
- }
-}
-
-
-
-
-void CurrentSlideManager::SetCurrentSlideAtTabControl (const SharedPageDescriptor& rpDescriptor)
-{
- OSL_ASSERT(rpDescriptor.get() != NULL);
-
- ViewShellBase* pBase = mrSlideSorter.GetViewShellBase();
- if (pBase != NULL)
- {
- ::boost::shared_ptr<DrawViewShell> pDrawViewShell (
- ::boost::dynamic_pointer_cast<DrawViewShell>(pBase->GetMainViewShell()));
- if (pDrawViewShell)
- {
- sal_uInt16 nPageNumber = (rpDescriptor->GetPage()->GetPageNum()-1)/2;
- pDrawViewShell->GetPageTabControl()->SetCurPageId(nPageNumber+1);
- }
- }
-}
-
-
-
-
-void CurrentSlideManager::SetCurrentSlideAtXController (const SharedPageDescriptor& rpDescriptor)
-{
- OSL_ASSERT(rpDescriptor.get() != NULL);
-
- try
- {
- Reference<beans::XPropertySet> xSet (mrSlideSorter.GetXController(), UNO_QUERY);
- if (xSet.is())
- {
- Any aPage;
- aPage <<= rpDescriptor->GetPage()->getUnoPage();
- xSet->setPropertyValue (
- String::CreateFromAscii("CurrentPage"),
- aPage);
- }
- }
- catch (const Exception&)
- {
- // We have not been able to set the current page at the main view.
- // This is sad but still leaves us in a valid state. Therefore,
- // this exception is silently ignored.
- }
-}
-
-
-
-
-SharedPageDescriptor CurrentSlideManager::GetCurrentSlide (void)
-{
- return mpCurrentSlide;
-}
-
-
-
-
-void CurrentSlideManager::PrepareModelChange (void)
-{
- mpCurrentSlide.reset();
-}
-
-
-
-
-void CurrentSlideManager::HandleModelChange (void)
-{
- if (mnCurrentSlideIndex >= 0)
- {
- mpCurrentSlide = mrSlideSorter.GetModel().GetPageDescriptor(mnCurrentSlideIndex);
- if (mpCurrentSlide.get() != NULL)
- mrSlideSorter.GetView().SetState(mpCurrentSlide, PageDescriptor::ST_Current, true);
- }
-}
-
-
-
-
-IMPL_LINK(CurrentSlideManager, SwitchPageCallback, void*, EMPTYARG)
-{
- if (mpCurrentSlide)
- {
- // Set current page. At the moment we have to do this in two
- // different ways. The UNO way is the preferable one but, alas,
- // it does not work always correctly (after some kinds of model
- // changes). Therefore, we call DrawViewShell::SwitchPage(),
- // too.
- ViewShell* pViewShell = mrSlideSorter.GetViewShell();
- if (pViewShell==NULL || ! pViewShell->IsMainViewShell())
- SetCurrentSlideAtViewShellBase(mpCurrentSlide);
- SetCurrentSlideAtXController(mpCurrentSlide);
- }
-
- return 1;
-}
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsDragAndDropContext.cxx b/sd/source/ui/slidesorter/controller/SlsDragAndDropContext.cxx
deleted file mode 100644
index 2ed5ed39b..000000000
--- a/sd/source/ui/slidesorter/controller/SlsDragAndDropContext.cxx
+++ /dev/null
@@ -1,199 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlsDragAndDropContext.hxx"
-
-#include "SlideSorter.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageEnumerationProvider.hxx"
-#include "view/SlideSorterView.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsInsertionIndicatorHandler.hxx"
-#include "controller/SlsScrollBarManager.hxx"
-#include "controller/SlsProperties.hxx"
-#include "controller/SlsSelectionFunction.hxx"
-#include "controller/SlsSelectionManager.hxx"
-#include "controller/SlsTransferable.hxx"
-#include "DrawDocShell.hxx"
-#include "drawdoc.hxx"
-#include "app.hrc"
-#include <sfx2/bindings.hxx>
-#include <boost/bind.hpp>
-
-namespace sd { namespace slidesorter { namespace controller {
-
-DragAndDropContext::DragAndDropContext (SlideSorter& rSlideSorter)
- : mpTargetSlideSorter(&rSlideSorter),
- mnInsertionIndex(-1)
-{
- ::std::vector<const SdPage*> aPages;
-
- // No Drag-and-Drop for master pages.
- if (rSlideSorter.GetModel().GetEditMode() != EM_PAGE)
- return;
-
- rSlideSorter.GetController().GetInsertionIndicatorHandler()->UpdateIndicatorIcon(
- dynamic_cast<Transferable*>(SD_MOD()->pTransferDrag));
-}
-
-
-
-
-DragAndDropContext::~DragAndDropContext (void)
-{
- SetTargetSlideSorter (NULL, Point(0,0), InsertionIndicatorHandler::UnknownMode, false);
-}
-
-
-
-
-void DragAndDropContext::GetPagesFromBookmarks (
- ::std::vector<const SdPage*>& rPages,
- sal_Int32& rnSelectionCount,
- DrawDocShell* pDocShell,
- const List& rBookmarks) const
-{
- if (pDocShell == NULL)
- return;
-
- const SdDrawDocument* pDocument = pDocShell->GetDoc();
- if (pDocument == NULL)
- return;
-
- for (sal_uLong nIndex=0,nCount=rBookmarks.Count(); nIndex<nCount; ++nIndex)
- {
- const String sPageName (*static_cast<String*>(rBookmarks.GetObject(nIndex)));
- sal_Bool bIsMasterPage (sal_False);
- const sal_uInt16 nPageIndex (pDocument->GetPageByName(sPageName, bIsMasterPage));
- if (nPageIndex == SDRPAGE_NOTFOUND)
- continue;
-
- const SdPage* pPage = dynamic_cast<const SdPage*>(pDocument->GetPage(nPageIndex));
- if (pPage != NULL)
- rPages.push_back(pPage);
- }
- rnSelectionCount = rBookmarks.Count();
-}
-
-
-
-
-void DragAndDropContext::GetPagesFromSelection (
- ::std::vector<const SdPage*>& rPages,
- sal_Int32& rnSelectionCount,
- model::PageEnumeration& rSelection) const
-{
- // Show a new substitution for the selected page objects.
- rnSelectionCount = 0;
-
- while (rSelection.HasMoreElements())
- {
- model::SharedPageDescriptor pDescriptor (rSelection.GetNextElement());
- if (rPages.size() < 3)
- rPages.push_back(pDescriptor->GetPage());
- ++rnSelectionCount;
- }
-}
-
-
-
-
-void DragAndDropContext::Dispose (void)
-{
- mnInsertionIndex = -1;
-}
-
-
-
-
-void DragAndDropContext::UpdatePosition (
- const Point& rMousePosition,
- const InsertionIndicatorHandler::Mode eMode,
- const bool bAllowAutoScroll)
-{
- if (mpTargetSlideSorter == NULL)
- return;
-
- if (mpTargetSlideSorter->GetProperties()->IsUIReadOnly())
- return;
-
- // Convert window coordinates into model coordinates (we need the
- // window coordinates for auto-scrolling because that remains
- // constant while scrolling.)
- SharedSdWindow pWindow (mpTargetSlideSorter->GetContentWindow());
- const Point aMouseModelPosition (pWindow->PixelToLogic(rMousePosition));
- ::boost::shared_ptr<InsertionIndicatorHandler> pInsertionIndicatorHandler (
- mpTargetSlideSorter->GetController().GetInsertionIndicatorHandler());
-
- if ( ! (bAllowAutoScroll
- && mpTargetSlideSorter->GetController().GetScrollBarManager().AutoScroll(
- rMousePosition,
- ::boost::bind(
- &DragAndDropContext::UpdatePosition, this, rMousePosition, eMode, false))))
- {
- pInsertionIndicatorHandler->UpdatePosition(aMouseModelPosition, eMode);
-
- // Remember the new insertion index.
- mnInsertionIndex = pInsertionIndicatorHandler->GetInsertionPageIndex();
- if (pInsertionIndicatorHandler->IsInsertionTrivial(mnInsertionIndex, eMode))
- mnInsertionIndex = -1;
- }
-}
-
-
-
-
-void DragAndDropContext::SetTargetSlideSorter (
- SlideSorter* pSlideSorter,
- const Point aMousePosition,
- const InsertionIndicatorHandler::Mode eMode,
- const bool bIsOverSourceView)
-{
- if (mpTargetSlideSorter != NULL)
- {
- mpTargetSlideSorter->GetController().GetScrollBarManager().StopAutoScroll();
- mpTargetSlideSorter->GetController().GetInsertionIndicatorHandler()->End(
- Animator::AM_Animated);
- }
-
- mpTargetSlideSorter = pSlideSorter;
-
- if (mpTargetSlideSorter != NULL)
- {
- mpTargetSlideSorter->GetController().GetInsertionIndicatorHandler()->Start(
- bIsOverSourceView);
- mpTargetSlideSorter->GetController().GetInsertionIndicatorHandler()->UpdatePosition(
- aMousePosition,
- eMode);
-
- }
-}
-
-
-} } } // end of namespace ::sd::slidesorter::controller
diff --git a/sd/source/ui/slidesorter/controller/SlsDragAndDropContext.hxx b/sd/source/ui/slidesorter/controller/SlsDragAndDropContext.hxx
deleted file mode 100644
index 434771ae6..000000000
--- a/sd/source/ui/slidesorter/controller/SlsDragAndDropContext.hxx
+++ /dev/null
@@ -1,100 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_SUBSTITUTION_HANDLER_HXX
-#define SD_SLIDESORTER_SUBSTITUTION_HANDLER_HXX
-
-#include <tools/gen.hxx>
-
-#include "model/SlsSharedPageDescriptor.hxx"
-#include "controller/SlsInsertionIndicatorHandler.hxx"
-#include <vector>
-
-
-namespace sd { namespace slidesorter {
-class SlideSorter;
-} }
-
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-/** A DragAndDropContext object handles an active drag and drop operation.
- When the mouse is moved from one slide sorter window to another the
- target SlideSorter object is exchanged accordingly.
-*/
-class DragAndDropContext
-{
-public:
- /** Create a substitution display of the currently selected pages or,
- when provided, the pages in the transferable.
- */
- DragAndDropContext (SlideSorter& rSlideSorter);
- ~DragAndDropContext (void);
-
- /** Call this method (for example as reaction to ESC key press) to avoid
- processing (ie moving or inserting) the substition when the called
- DragAndDropContext object is destroyed.
- */
- void Dispose (void);
-
- /** Move the substitution display by the distance the mouse has
- travelled since the last call to this method or to
- CreateSubstitution(). The given point becomes the new anchor.
- */
- void UpdatePosition (
- const Point& rMousePosition,
- const InsertionIndicatorHandler::Mode eMode,
- const bool bAllowAutoScroll = true);
-
- void SetTargetSlideSorter (
- SlideSorter* pSlideSorter = NULL,
- const Point aMousePosition = Point(0,0),
- const InsertionIndicatorHandler::Mode eMode = InsertionIndicatorHandler::UnknownMode,
- const bool bIsOverSourceView = false);
-
-private:
- SlideSorter* mpTargetSlideSorter;
- model::SharedPageDescriptor mpHitDescriptor;
- sal_Int32 mnInsertionIndex;
-
- void GetPagesFromBookmarks (
- ::std::vector<const SdPage*>& rPages,
- sal_Int32& rnSelectionCount,
- DrawDocShell* pDocShell,
- const List& rBookmarks) const;
- void GetPagesFromSelection (
- ::std::vector<const SdPage*>& rPages,
- sal_Int32& rnSelectionCount,
- model::PageEnumeration& rSelection) const;
-};
-
-
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
diff --git a/sd/source/ui/slidesorter/controller/SlsFocusManager.cxx b/sd/source/ui/slidesorter/controller/SlsFocusManager.cxx
deleted file mode 100644
index 6f67c8188..000000000
--- a/sd/source/ui/slidesorter/controller/SlsFocusManager.cxx
+++ /dev/null
@@ -1,384 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-#include "controller/SlsFocusManager.hxx"
-
-#include "SlideSorter.hxx"
-#include "PaneDockingWindow.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsCurrentSlideManager.hxx"
-#include "controller/SlsVisibleAreaManager.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsLayouter.hxx"
-#include <vcl/toolbox.hxx>
-
-#include "Window.hxx"
-#include "sdpage.hxx"
-
-#define UNIFY_FOCUS_AND_CURRENT_PAGE
-
-namespace sd { namespace slidesorter { namespace controller {
-
-FocusManager::FocusManager (SlideSorter& rSlideSorter)
- : mrSlideSorter(rSlideSorter),
- mnPageIndex(0),
- mbPageIsFocused(false),
- mbIsVerticalWrapActive(false)
-{
- if (mrSlideSorter.GetModel().GetPageCount() > 0)
- mnPageIndex = 0;
-}
-
-
-
-
-FocusManager::~FocusManager (void)
-{
-}
-
-
-
-
-void FocusManager::MoveFocus (FocusMoveDirection eDirection)
-{
- if (mnPageIndex >= 0 && mbPageIsFocused)
- {
- HideFocusIndicator (GetFocusedPageDescriptor());
-
- const sal_Int32 nColumnCount (mrSlideSorter.GetView().GetLayouter().GetColumnCount());
- const sal_Int32 nPageCount (mrSlideSorter.GetModel().GetPageCount());
- switch (eDirection)
- {
- case FMD_NONE:
- // Nothing to be done.
- break;
-
- case FMD_LEFT:
- if (mnPageIndex > 0)
- mnPageIndex -= 1;
- else if (mbIsVerticalWrapActive)
- mnPageIndex = nPageCount-1;
- break;
-
- case FMD_RIGHT:
- if (mnPageIndex < nPageCount-1)
- mnPageIndex += 1;
- else if (mbIsVerticalWrapActive)
- mnPageIndex = 0;
- break;
-
- case FMD_UP:
- {
- const sal_Int32 nCandidate (mnPageIndex - nColumnCount);
- if (nCandidate < 0)
- {
- if (mbIsVerticalWrapActive)
- {
- // Wrap arround to the bottom row or the one above
- // and go to the correct column.
- const sal_Int32 nLastIndex (nPageCount-1);
- const sal_Int32 nLastColumn (nLastIndex % nColumnCount);
- const sal_Int32 nCurrentColumn (mnPageIndex%nColumnCount);
- if (nLastColumn >= nCurrentColumn)
- {
- // The last row contains the current column.
- mnPageIndex = nLastIndex - (nLastColumn-nCurrentColumn);
- }
- else
- {
- // Only the second to last row contains the current column.
- mnPageIndex = nLastIndex - nLastColumn
- - nColumnCount
- + nCurrentColumn;
- }
- }
- }
- else
- {
- // Move the focus the previous row.
- mnPageIndex = nCandidate;
- }
- }
- break;
-
- case FMD_DOWN:
- {
- const sal_Int32 nCandidate (mnPageIndex + nColumnCount);
- if (nCandidate >= nPageCount)
- {
- if (mbIsVerticalWrapActive)
- {
- // Wrap arround to the correct column.
- mnPageIndex = mnPageIndex % nColumnCount;
- }
- else
- {
- // Do not move the focus.
- }
- }
- else
- {
- // Move the focus to the next row.
- mnPageIndex = nCandidate;
- }
- }
- break;
- }
-
- if (mnPageIndex < 0)
- {
- OSL_ASSERT(mnPageIndex>=0);
- mnPageIndex = 0;
- }
- else if (mnPageIndex >= nPageCount)
- {
- OSL_ASSERT(mnPageIndex<nPageCount);
- mnPageIndex = nPageCount - 1;
- }
-
- if (mbPageIsFocused)
- {
- ShowFocusIndicator(GetFocusedPageDescriptor(), true);
- }
- }
-}
-
-
-
-
-void FocusManager::ShowFocus (const bool bScrollToFocus)
-{
- mbPageIsFocused = true;
- ShowFocusIndicator(GetFocusedPageDescriptor(), bScrollToFocus);
-}
-
-
-
-
-void FocusManager::HideFocus (void)
-{
- mbPageIsFocused = false;
- HideFocusIndicator(GetFocusedPageDescriptor());
-}
-
-
-
-
-bool FocusManager::ToggleFocus (void)
-{
- if (mnPageIndex >= 0)
- {
- if (mbPageIsFocused)
- HideFocus ();
- else
- ShowFocus ();
- }
- return mbPageIsFocused;
-}
-
-
-
-
-bool FocusManager::HasFocus (void) const
-{
- return mrSlideSorter.GetContentWindow()->HasFocus();
-}
-
-
-
-
-model::SharedPageDescriptor FocusManager::GetFocusedPageDescriptor (void) const
-{
- return mrSlideSorter.GetModel().GetPageDescriptor(mnPageIndex);
-}
-
-
-
-
-sal_Int32 FocusManager::GetFocusedPageIndex (void) const
-{
- return mnPageIndex;
-}
-
-
-void FocusManager::SetFocusedPage (const model::SharedPageDescriptor& rpDescriptor)
-{
- if (rpDescriptor.get() != NULL)
- {
- FocusHider aFocusHider (*this);
- mnPageIndex = (rpDescriptor->GetPage()->GetPageNum()-1)/2;
- }
-}
-
-
-
-
-void FocusManager::SetFocusedPage (sal_Int32 nPageIndex)
-{
- FocusHider aFocusHider (*this);
- mnPageIndex = nPageIndex;
-}
-
-
-
-
-void FocusManager::SetFocusedPageToCurrentPage (void)
-{
- SetFocusedPage(mrSlideSorter.GetController().GetCurrentSlideManager()->GetCurrentSlide());
-}
-
-
-
-
-bool FocusManager::IsFocusShowing (void) const
-{
- return HasFocus() && mbPageIsFocused;
-}
-
-
-
-
-void FocusManager::HideFocusIndicator (const model::SharedPageDescriptor& rpDescriptor)
-{
- if (rpDescriptor.get() != NULL)
- {
- mrSlideSorter.GetView().SetState(rpDescriptor, model::PageDescriptor::ST_Focused, false);
- }
-}
-
-
-
-
-void FocusManager::ShowFocusIndicator (
- const model::SharedPageDescriptor& rpDescriptor,
- const bool bScrollToFocus)
-{
- if (rpDescriptor.get() != NULL)
- {
- mrSlideSorter.GetView().SetState(rpDescriptor, model::PageDescriptor::ST_Focused, true);
-
- if (bScrollToFocus)
- {
- // Scroll the focused page object into the visible area and repaint
- // it, so that the focus indicator becomes visible.
- mrSlideSorter.GetController().GetVisibleAreaManager().RequestVisible(rpDescriptor,true);
- }
- mrSlideSorter.GetView().RequestRepaint(rpDescriptor);
-
- NotifyFocusChangeListeners();
- }
-}
-
-
-
-
-void FocusManager::AddFocusChangeListener (const Link& rListener)
-{
- if (::std::find (maFocusChangeListeners.begin(), maFocusChangeListeners.end(), rListener)
- == maFocusChangeListeners.end())
- {
- maFocusChangeListeners.push_back (rListener);
- }
-}
-
-
-
-
-void FocusManager::RemoveFocusChangeListener (const Link& rListener)
-{
- maFocusChangeListeners.erase (
- ::std::find (maFocusChangeListeners.begin(), maFocusChangeListeners.end(), rListener));
-}
-
-
-
-
-void FocusManager::SetFocusToToolBox (void)
-{
- HideFocus();
-
- if (mrSlideSorter.GetViewShell() != NULL)
- {
- ::Window* pParentWindow = mrSlideSorter.GetViewShell()->GetParentWindow();
- DockingWindow* pDockingWindow = NULL;
- while (pParentWindow!=NULL && pDockingWindow==NULL)
- {
- pDockingWindow = dynamic_cast<DockingWindow*>(pParentWindow);
- pParentWindow = pParentWindow->GetParent();
- }
- if (pDockingWindow)
- {
- PaneDockingWindow* pPaneDockingWindow = dynamic_cast<PaneDockingWindow*>(pDockingWindow);
- if (pPaneDockingWindow != NULL)
- pPaneDockingWindow->GetToolBox().GrabFocus();
- }
- }
-}
-
-
-
-
-void FocusManager::NotifyFocusChangeListeners (void) const
-{
- // Create a copy of the listener list to be safe when that is modified.
- ::std::vector<Link> aListeners (maFocusChangeListeners);
-
- // Tell the slection change listeners that the selection has changed.
- ::std::vector<Link>::iterator iListener (aListeners.begin());
- ::std::vector<Link>::iterator iEnd (aListeners.end());
- for (; iListener!=iEnd; ++iListener)
- {
- iListener->Call(NULL);
- }
-}
-
-
-
-
-FocusManager::FocusHider::FocusHider (FocusManager& rManager)
-: mbFocusVisible(rManager.IsFocusShowing())
-, mrManager(rManager)
-{
- mrManager.HideFocus();
-}
-
-
-
-
-FocusManager::FocusHider::~FocusHider (void)
-{
- if (mbFocusVisible)
- mrManager.ShowFocus();
-}
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsHideSlideFunction.cxx b/sd/source/ui/slidesorter/controller/SlsHideSlideFunction.cxx
deleted file mode 100644
index 71bf69410..000000000
--- a/sd/source/ui/slidesorter/controller/SlsHideSlideFunction.cxx
+++ /dev/null
@@ -1,174 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlsHideSlideFunction.hxx"
-
-#include "SlideSorter.hxx"
-#include "model/SlsPageEnumerationProvider.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "view/SlideSorterView.hxx"
-
-#include "app.hrc"
-#include "drawdoc.hxx"
-#include "sdpage.hxx"
-#include "ViewShell.hxx"
-
-#include <sfx2/viewfrm.hxx>
-#include <sfx2/bindings.hxx>
-#include <sfx2/request.hxx>
-#include <svx/svxids.hrc>
-
-namespace sd { namespace slidesorter { namespace controller {
-
-TYPEINIT1(HideSlideFunction, SlideFunction);
-
-HideSlideFunction::HideSlideFunction (
- SlideSorter& rSlideSorter,
- SfxRequest& rRequest)
- : SlideFunction( rSlideSorter, rRequest),
- mrSlideSorter(rSlideSorter)
-{
-}
-
-
-
-
-HideSlideFunction::~HideSlideFunction (void)
-{
-}
-
-
-
-
-FunctionReference HideSlideFunction::Create (
- SlideSorter& rSlideSorter,
- SfxRequest& rRequest )
-{
- FunctionReference xFunc( new HideSlideFunction( rSlideSorter, rRequest ) );
- xFunc->DoExecute(rRequest);
- return xFunc;
-}
-
-
-
-
-void HideSlideFunction::DoExecute (SfxRequest& rRequest)
-{
- SlideFunction::DoExecute(rRequest);
-
- model::PageEnumeration aSelectedPages (
- model::PageEnumerationProvider::CreateSelectedPagesEnumeration(mrSlideSorter.GetModel()));
-
- ExclusionState eState (UNDEFINED);
-
- switch (rRequest.GetSlot())
- {
- case SID_HIDE_SLIDE:
- eState = EXCLUDED;
- break;
-
- case SID_SHOW_SLIDE:
- eState = INCLUDED;
- break;
-
- default:
- eState = UNDEFINED;
- break;
- }
-
- if (eState != UNDEFINED)
- {
- // Set status at the selected pages.
- aSelectedPages.Rewind ();
- while (aSelectedPages.HasMoreElements())
- {
- model::SharedPageDescriptor pDescriptor (aSelectedPages.GetNextElement());
- static_cast<view::SlideSorterView*>(mpView)->SetState(
- pDescriptor,
- model::PageDescriptor::ST_Excluded,
- eState==EXCLUDED);
- }
- }
-
- SfxBindings& rBindings = mpViewShell->GetViewFrame()->GetBindings();
- rBindings.Invalidate (SID_PRESENTATION);
- rBindings.Invalidate (SID_REHEARSE_TIMINGS);
- rBindings.Invalidate (SID_HIDE_SLIDE);
- rBindings.Invalidate (SID_SHOW_SLIDE);
- mpDoc->SetChanged();
-}
-
-
-
-
-HideSlideFunction::ExclusionState HideSlideFunction::GetExclusionState (
- model::PageEnumeration& rPageSet)
-{
- ExclusionState eState (UNDEFINED);
- sal_Bool bState;
-
- // Get toggle state of the selected pages.
- while (rPageSet.HasMoreElements() && eState!=MIXED)
- {
- bState = rPageSet.GetNextElement()->GetPage()->IsExcluded();
- switch (eState)
- {
- case UNDEFINED:
- // Use the first selected page to set the inital value.
- eState = bState ? EXCLUDED : INCLUDED;
- break;
-
- case EXCLUDED:
- // The pages before where all not part of the show,
- // this one is.
- if ( ! bState)
- eState = MIXED;
- break;
-
- case INCLUDED:
- // The pages before where all part of the show,
- // this one is not.
- if (bState)
- eState = MIXED;
- break;
-
- case MIXED:
- default:
- // No need to change anything.
- break;
- }
- }
-
- return eState;
-}
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsHideSlideFunction.hxx b/sd/source/ui/slidesorter/controller/SlsHideSlideFunction.hxx
deleted file mode 100644
index 9fb32c2c0..000000000
--- a/sd/source/ui/slidesorter/controller/SlsHideSlideFunction.hxx
+++ /dev/null
@@ -1,75 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_HIDE_SLIDE_FUNCTION_HXX
-#define SD_SLIDESORTER_HIDE_SLIDE_FUNCTION_HXX
-
-#include "controller/SlsSlideFunction.hxx"
-#include "model/SlsPageEnumeration.hxx"
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-/** Toggle the hidden flag of the selected slides.
- When the selected pages have not all the same state they will all set to
- hidden. When all selected pages have the same state this state is
- toggled for all of them
-*/
-class HideSlideFunction
- : public SlideFunction
-{
-public:
- TYPEINFO();
-
- virtual ~HideSlideFunction (void);
-
- static FunctionReference Create( SlideSorter& rSlideSorter, SfxRequest& rRequest );
- virtual void DoExecute( SfxRequest& rReq );
-
- // The state of a set of slides with respect to being excluded from the
- // slide show.
- enum ExclusionState {UNDEFINED, EXCLUDED, INCLUDED, MIXED};
-
- /** Return for the given set of slides whether they included are
- excluded from the slide show.
- */
- static ExclusionState GetExclusionState (model::PageEnumeration& rPageSet);
-
-protected:
- HideSlideFunction (
- SlideSorter& rSlideSorter,
- SfxRequest& rRequest);
-
- SlideSorter& mrSlideSorter;
-};
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsInsertionIndicatorHandler.cxx b/sd/source/ui/slidesorter/controller/SlsInsertionIndicatorHandler.cxx
deleted file mode 100644
index b39bb106a..000000000
--- a/sd/source/ui/slidesorter/controller/SlsInsertionIndicatorHandler.cxx
+++ /dev/null
@@ -1,327 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "controller/SlsInsertionIndicatorHandler.hxx"
-#include "controller/SlsProperties.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsLayouter.hxx"
-#include "view/SlsInsertionIndicatorOverlay.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageEnumerationProvider.hxx"
-#include <com/sun/star/datatransfer/dnd/DNDConstants.hpp>
-
-#include "SlideSorter.hxx"
-
-using namespace ::com::sun::star::datatransfer::dnd::DNDConstants;
-
-namespace sd { namespace slidesorter { namespace controller {
-
-
-InsertionIndicatorHandler::InsertionIndicatorHandler (SlideSorter& rSlideSorter)
- : mrSlideSorter(rSlideSorter),
- mpInsertAnimator(),
- mpInsertionIndicatorOverlay(new view::InsertionIndicatorOverlay(rSlideSorter)),
- maInsertPosition(),
- meMode(MoveMode),
- mbIsActive(false),
- mbIsReadOnly(mrSlideSorter.GetModel().IsReadOnly()),
- mbIsOverSourceView(true),
- maIconSize(0,0),
- mbIsForcedShow(false)
-{
-}
-
-
-
-
-InsertionIndicatorHandler::~InsertionIndicatorHandler (void)
-{
-}
-
-
-
-
-void InsertionIndicatorHandler::Start (const bool bIsOverSourceView)
-{
- if (mbIsActive)
- {
- OSL_ASSERT(!mbIsActive);
- }
-
- mbIsReadOnly = mrSlideSorter.GetModel().IsReadOnly();
- if (mbIsReadOnly)
- return;
-
- mbIsActive = true;
- mbIsOverSourceView = bIsOverSourceView;
-}
-
-
-
-
-void InsertionIndicatorHandler::End (const controller::Animator::AnimationMode eMode)
-{
- if (mbIsForcedShow || ! mbIsActive || mbIsReadOnly)
- return;
-
- GetInsertAnimator()->Reset(eMode);
-
- mbIsActive = false;
- // maInsertPosition = view::InsertPosition();
- meMode = UnknownMode;
-
- mpInsertionIndicatorOverlay->Hide();
- mpInsertionIndicatorOverlay.reset(new view::InsertionIndicatorOverlay(mrSlideSorter));
-}
-
-
-
-
-void InsertionIndicatorHandler::ForceShow (void)
-{
- mbIsForcedShow = true;
-}
-
-
-
-
-void InsertionIndicatorHandler::ForceEnd (void)
-{
- mbIsForcedShow = false;
- End(Animator::AM_Immediate);
-}
-
-
-
-
-void InsertionIndicatorHandler::UpdateIndicatorIcon (const Transferable* pTransferable)
-{
- mpInsertionIndicatorOverlay->Create(pTransferable);
- maIconSize = mpInsertionIndicatorOverlay->GetSize();
-}
-
-
-
-
-InsertionIndicatorHandler::Mode InsertionIndicatorHandler::GetModeFromDndAction (
- const sal_Int8 nDndAction)
-{
- if ((nDndAction & ACTION_MOVE) != 0)
- return MoveMode;
- else if ((nDndAction & ACTION_COPY) != 0)
- return CopyMode;
- else
- return UnknownMode;
-}
-
-
-
-
-void InsertionIndicatorHandler::UpdatePosition (
- const Point& rMouseModelPosition,
- const Mode eMode)
-{
- if ( ! mbIsActive)
- return;
-
- if (mbIsReadOnly)
- return;
-
- SetPosition(rMouseModelPosition, eMode);
-}
-
-
-
-
-void InsertionIndicatorHandler::UpdatePosition (
- const Point& rMouseModelPosition,
- const sal_Int8 nDndAction)
-{
- UpdatePosition(rMouseModelPosition, GetModeFromDndAction(nDndAction));
-}
-
-
-
-
-bool InsertionIndicatorHandler::IsActive (void) const
-{
- return mbIsActive;
-}
-
-
-
-
-sal_Int32 InsertionIndicatorHandler::GetInsertionPageIndex (void) const
-{
- if (mbIsReadOnly)
- return -1;
- else
- return maInsertPosition.GetIndex();
-}
-
-
-
-
-void InsertionIndicatorHandler::SetPosition (
- const Point& rPoint,
- const Mode eMode)
-{
- view::Layouter& rLayouter (mrSlideSorter.GetView().GetLayouter());
-
- const view::InsertPosition aInsertPosition (rLayouter.GetInsertPosition(
- rPoint,
- maIconSize,
- mrSlideSorter.GetModel()));
-
- static sal_Int32 TargetIndex (1);
- if (aInsertPosition.GetIndex() == TargetIndex)
- {
- const view::InsertPosition aPosition (rLayouter.GetInsertPosition(
- rPoint,
- maIconSize,
- mrSlideSorter.GetModel()));
- const view::InsertPosition aPosition2 (rLayouter.GetInsertPosition(
- rPoint,
- maIconSize,
- mrSlideSorter.GetModel()));
- }
-
- if (maInsertPosition != aInsertPosition
- || meMode != eMode
- // || ! mpInsertionIndicatorOverlay->IsVisible()
- )
- {
- maInsertPosition = aInsertPosition;
- meMode = eMode;
- mbIsInsertionTrivial = IsInsertionTrivial(maInsertPosition.GetIndex(), eMode);
- if (maInsertPosition.GetIndex()>=0 && ! mbIsInsertionTrivial)
- {
- mpInsertionIndicatorOverlay->SetLocation(maInsertPosition.GetLocation());
-
- GetInsertAnimator()->SetInsertPosition(maInsertPosition);
- mpInsertionIndicatorOverlay->Show();
- }
- else
- {
- GetInsertAnimator()->Reset(Animator::AM_Animated);
- mpInsertionIndicatorOverlay->Hide();
- }
- }
-}
-
-
-
-
-::boost::shared_ptr<view::InsertAnimator> InsertionIndicatorHandler::GetInsertAnimator (void)
-{
- if ( ! mpInsertAnimator)
- mpInsertAnimator.reset(new view::InsertAnimator(mrSlideSorter));
- return mpInsertAnimator;
-}
-
-
-
-
-bool InsertionIndicatorHandler::IsInsertionTrivial (
- const sal_Int32 nInsertionIndex,
- const Mode eMode) const
-{
- if (eMode == CopyMode)
- return false;
- else if (eMode == UnknownMode)
- return true;
-
- if ( ! mbIsOverSourceView)
- return false;
-
- // Iterate over all selected pages and check whether there are
- // holes. While we do this we remember the indices of the first and
- // last selected page as preparation for the next step.
- sal_Int32 nCurrentIndex = -1;
- sal_Int32 nFirstIndex = -1;
- sal_Int32 nLastIndex = -1;
- model::PageEnumeration aSelectedPages (
- model::PageEnumerationProvider::CreateSelectedPagesEnumeration(
- mrSlideSorter.GetModel()));
- while (aSelectedPages.HasMoreElements())
- {
- model::SharedPageDescriptor pDescriptor (aSelectedPages.GetNextElement());
-
- // Get the page number and compare it to the last one.
- const sal_Int32 nPageNumber (pDescriptor->GetPageIndex());
- if (nCurrentIndex>=0 && nPageNumber>(nCurrentIndex+1))
- return false;
- else
- nCurrentIndex = nPageNumber;
-
- // Remember indices of the first and last page of the selection.
- if (nFirstIndex == -1)
- nFirstIndex = nPageNumber;
- nLastIndex = nPageNumber;
- }
-
- // When we come here then the selection has no holes. We still have
- // to check that the insertion position is not directly in front or
- // directly behind the selection and thus moving the selection there
- // would not change the model.
- if (nInsertionIndex<nFirstIndex || nInsertionIndex>(nLastIndex+1))
- return false;
-
- return true;
-}
-
-
-
-
-bool InsertionIndicatorHandler::IsInsertionTrivial (const sal_Int8 nDndAction)
-{
- return IsInsertionTrivial(GetInsertionPageIndex(), GetModeFromDndAction(nDndAction));
-}
-
-
-
-
-//===== InsertionIndicatorHandler::ForceShowContext ===========================
-
-InsertionIndicatorHandler::ForceShowContext::ForceShowContext (
- const ::boost::shared_ptr<InsertionIndicatorHandler>& rpHandler)
- : mpHandler(rpHandler)
-{
- mpHandler->ForceShow();
-}
-
-
-
-
-InsertionIndicatorHandler::ForceShowContext::~ForceShowContext (void)
-{
- mpHandler->ForceEnd();
-}
-
-} } } // end of namespace ::sd::slidesorter::controller
diff --git a/sd/source/ui/slidesorter/controller/SlsListener.cxx b/sd/source/ui/slidesorter/controller/SlsListener.cxx
deleted file mode 100644
index 7c2d905a1..000000000
--- a/sd/source/ui/slidesorter/controller/SlsListener.cxx
+++ /dev/null
@@ -1,701 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlsListener.hxx"
-
-#include "SlideSorter.hxx"
-#include "SlideSorterViewShell.hxx"
-#include "ViewShellHint.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsPageSelector.hxx"
-#include "controller/SlsCurrentSlideManager.hxx"
-#include "controller/SlsSelectionManager.hxx"
-#include "controller/SlsSelectionObserver.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageEnumerationProvider.hxx"
-#include "view/SlideSorterView.hxx"
-#include "cache/SlsPageCache.hxx"
-#include "cache/SlsPageCacheManager.hxx"
-#include "drawdoc.hxx"
-#include "DrawDocShell.hxx"
-
-#include "glob.hrc"
-#include "ViewShellBase.hxx"
-#include "ViewShellManager.hxx"
-#include "FrameView.hxx"
-#include "EventMultiplexer.hxx"
-#include <com/sun/star/document/XEventBroadcaster.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/frame/FrameActionEvent.hpp>
-#include <com/sun/star/frame/FrameAction.hpp>
-#include <sfx2/viewfrm.hxx>
-#include <tools/diagnose_ex.h>
-
-
-using namespace ::com::sun::star::accessibility;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star;
-
-namespace sd { namespace slidesorter { namespace controller {
-
-
-Listener::Listener (
- SlideSorter& rSlideSorter)
- : ListenerInterfaceBase(maMutex),
- mrSlideSorter(rSlideSorter),
- mrController(mrSlideSorter.GetController()),
- mpBase(mrSlideSorter.GetViewShellBase()),
- mbListeningToDocument (false),
- mbListeningToUNODocument (false),
- mbListeningToController (false),
- mbListeningToFrame (false),
- mbIsMainViewChangePending(false),
- mxControllerWeak(),
- mxFrameWeak(),
- mpModelChangeLock()
-{
- StartListening(*mrSlideSorter.GetModel().GetDocument());
- StartListening(*mrSlideSorter.GetModel().GetDocument()->GetDocSh());
- mbListeningToDocument = true;
-
- // Connect to the UNO document.
- Reference<document::XEventBroadcaster> xBroadcaster (
- mrSlideSorter.GetModel().GetDocument()->getUnoModel(), uno::UNO_QUERY);
- if (xBroadcaster.is())
- {
- xBroadcaster->addEventListener (this);
- mbListeningToUNODocument = true;
- }
-
- // Listen for disposing events from the document.
- Reference<XComponent> xComponent (xBroadcaster, UNO_QUERY);
- if (xComponent.is())
- xComponent->addEventListener (
- Reference<lang::XEventListener>(
- static_cast<XWeak*>(this), UNO_QUERY));
-
- // Connect to the frame to listen for controllers being exchanged.
- bool bIsMainViewShell (false);
- ViewShell* pViewShell = mrSlideSorter.GetViewShell();
- if (pViewShell != NULL)
- bIsMainViewShell = pViewShell->IsMainViewShell();
- if ( ! bIsMainViewShell)
- {
- // Listen to changes of certain properties.
- Reference<frame::XFrame> xFrame;
- Reference<frame::XController> xController (mrSlideSorter.GetXController());
- if (xController.is())
- xFrame = xController->getFrame();
- mxFrameWeak = xFrame;
- if (xFrame.is())
- {
- xFrame->addFrameActionListener (
- Reference<frame::XFrameActionListener>(
- static_cast<XWeak*>(this), UNO_QUERY));
- mbListeningToFrame = true;
- }
-
- // Connect to the current controller.
- ConnectToController ();
- }
-
- // Listen for hints of the MainViewShell as well. If that is not yet
- // present then the EventMultiplexer will tell us when it is available.
- if (mpBase != NULL)
- {
- ViewShell* pMainViewShell = mpBase->GetMainViewShell().get();
- if (pMainViewShell != NULL
- && pMainViewShell!=pViewShell)
- {
- StartListening(*pMainViewShell);
- }
-
- Link aLink (LINK(this, Listener, EventMultiplexerCallback));
- mpBase->GetEventMultiplexer()->AddEventListener(
- aLink,
- tools::EventMultiplexerEvent::EID_MAIN_VIEW_REMOVED
- | tools::EventMultiplexerEvent::EID_MAIN_VIEW_ADDED
- | tools::EventMultiplexerEvent::EID_CONTROLLER_ATTACHED
- | tools::EventMultiplexerEvent::EID_CONTROLLER_DETACHED
- | tools::EventMultiplexerEvent::EID_CONFIGURATION_UPDATED);
- }
-}
-
-
-
-
-Listener::~Listener (void)
-{
- DBG_ASSERT( !mbListeningToDocument && !mbListeningToUNODocument && !mbListeningToFrame,
- "sd::Listener::~Listener(), disposing() was not called, ask DBO!" );
-}
-
-
-
-
-void Listener::ReleaseListeners (void)
-{
- if (mbListeningToDocument)
- {
- EndListening(*mrSlideSorter.GetModel().GetDocument()->GetDocSh());
- EndListening(*mrSlideSorter.GetModel().GetDocument());
- mbListeningToDocument = false;
- }
-
- if (mbListeningToUNODocument)
- {
- Reference<document::XEventBroadcaster> xBroadcaster (
- mrSlideSorter.GetModel().GetDocument()->getUnoModel(), UNO_QUERY);
- if (xBroadcaster.is())
- xBroadcaster->removeEventListener (this);
-
- // Remove the dispose listener.
- Reference<XComponent> xComponent (xBroadcaster, UNO_QUERY);
- if (xComponent.is())
- xComponent->removeEventListener (
- Reference<lang::XEventListener>(
- static_cast<XWeak*>(this), UNO_QUERY));
-
- mbListeningToUNODocument = false;
- }
-
- if (mbListeningToFrame)
- {
- // Listen to changes of certain properties.
- Reference<frame::XFrame> xFrame (mxFrameWeak);
- if (xFrame.is())
- {
- xFrame->removeFrameActionListener (
- Reference<frame::XFrameActionListener>(
- static_cast<XWeak*>(this), UNO_QUERY));
- mbListeningToFrame = false;
- }
- }
-
- DisconnectFromController ();
-
- if (mpBase != NULL)
- {
- Link aLink (LINK(this, Listener, EventMultiplexerCallback));
- mpBase->GetEventMultiplexer()->RemoveEventListener(
- aLink,
- tools::EventMultiplexerEvent::EID_MAIN_VIEW_REMOVED
- | tools::EventMultiplexerEvent::EID_MAIN_VIEW_ADDED
- | tools::EventMultiplexerEvent::EID_CONTROLLER_ATTACHED
- | tools::EventMultiplexerEvent::EID_CONTROLLER_DETACHED
- | tools::EventMultiplexerEvent::EID_CONFIGURATION_UPDATED);
- }
-}
-
-
-
-
-void Listener::ConnectToController (void)
-{
- ViewShell* pShell = mrSlideSorter.GetViewShell();
-
- // Register at the controller of the main view shell (if we are that not
- // ourself).
- if (pShell==NULL || ! pShell->IsMainViewShell())
- {
- Reference<frame::XController> xController (mrSlideSorter.GetXController());
-
- // Listen to changes of certain properties.
- Reference<beans::XPropertySet> xSet (xController, UNO_QUERY);
- if (xSet.is())
- {
- try
- {
- xSet->addPropertyChangeListener(String::CreateFromAscii("CurrentPage"), this);
- }
- catch (beans::UnknownPropertyException&)
- {
- DBG_UNHANDLED_EXCEPTION();
- }
- try
- {
- xSet->addPropertyChangeListener(String::CreateFromAscii("IsMasterPageMode"), this);
- }
- catch (beans::UnknownPropertyException&)
- {
- DBG_UNHANDLED_EXCEPTION();
- }
- }
-
- // Listen for disposing events.
- Reference<XComponent> xComponent (xController, UNO_QUERY);
- if (xComponent.is())
- {
- xComponent->addEventListener (
- Reference<lang::XEventListener>(static_cast<XWeak*>(this), UNO_QUERY));
-
- mxControllerWeak = xController;
- mbListeningToController = true;
- }
- }
-}
-
-
-
-
-void Listener::DisconnectFromController (void)
-{
- if (mbListeningToController)
- {
- Reference<frame::XController> xController = mxControllerWeak;
- Reference<beans::XPropertySet> xSet (xController, UNO_QUERY);
- try
- {
- // Remove the property listener.
- if (xSet.is())
- {
- xSet->removePropertyChangeListener (
- String::CreateFromAscii("CurrentPage"),
- this);
- xSet->removePropertyChangeListener (
- String::CreateFromAscii("IsMasterPageMode"),
- this);
- }
-
- // Remove the dispose listener.
- Reference<XComponent> xComponent (xController, UNO_QUERY);
- if (xComponent.is())
- xComponent->removeEventListener (
- Reference<lang::XEventListener>(
- static_cast<XWeak*>(this), UNO_QUERY));
- }
- catch (beans::UnknownPropertyException&)
- {
- DBG_UNHANDLED_EXCEPTION();
- }
-
- mbListeningToController = false;
- mxControllerWeak = Reference<frame::XController>();
- }
-}
-
-
-
-
-void Listener::Notify (
- SfxBroadcaster& rBroadcaster,
- const SfxHint& rHint)
-{
- if (rHint.ISA(SdrHint))
- {
- SdrHint& rSdrHint (*PTR_CAST(SdrHint,&rHint));
- switch (rSdrHint.GetKind())
- {
- case HINT_PAGEORDERCHG:
- if (&rBroadcaster == mrSlideSorter.GetModel().GetDocument())
- HandleModelChange(rSdrHint.GetPage());
- break;
-
- default:
- break;
- }
- }
- else if (rHint.ISA(ViewShellHint))
- {
- ViewShellHint& rViewShellHint (*PTR_CAST(ViewShellHint,&rHint));
- switch (rViewShellHint.GetHintId())
- {
- case ViewShellHint::HINT_PAGE_RESIZE_START:
- // Initiate a model change but do nothing (well, not much)
- // until we are told that all slides have been resized.
- mpModelChangeLock.reset(new SlideSorterController::ModelChangeLock(mrController));
- mrController.HandleModelChange();
- break;
-
- case ViewShellHint::HINT_PAGE_RESIZE_END:
- // All slides have been resized. The model has to be updated.
- mpModelChangeLock.reset();
- break;
-
- case ViewShellHint::HINT_CHANGE_EDIT_MODE_START:
- mrController.PrepareEditModeChange();
- break;
-
- case ViewShellHint::HINT_CHANGE_EDIT_MODE_END:
- mrController.FinishEditModeChange();
- break;
-
- case ViewShellHint::HINT_COMPLEX_MODEL_CHANGE_START:
- mpModelChangeLock.reset(new SlideSorterController::ModelChangeLock(mrController));
- break;
-
- case ViewShellHint::HINT_COMPLEX_MODEL_CHANGE_END:
- mpModelChangeLock.reset();
- break;
- }
- }
- else if (rHint.ISA(SfxSimpleHint))
- {
- SfxSimpleHint& rSfxSimpleHint (*PTR_CAST(SfxSimpleHint,&rHint));
- switch (rSfxSimpleHint.GetId())
- {
- case SFX_HINT_DOCCHANGED:
- mrController.CheckForMasterPageAssignment();
- break;
- }
- }
-}
-
-
-
-
-IMPL_LINK(Listener, EventMultiplexerCallback, ::sd::tools::EventMultiplexerEvent*, pEvent)
-{
- switch (pEvent->meEventId)
- {
- case tools::EventMultiplexerEvent::EID_MAIN_VIEW_REMOVED:
- {
- if (mpBase != NULL)
- {
- ViewShell* pMainViewShell = mpBase->GetMainViewShell().get();
- if (pMainViewShell != NULL)
- EndListening(*pMainViewShell);
- }
- }
- break;
-
-
- case tools::EventMultiplexerEvent::EID_MAIN_VIEW_ADDED:
- mbIsMainViewChangePending = true;
- break;
-
- case tools::EventMultiplexerEvent::EID_CONFIGURATION_UPDATED:
- if (mbIsMainViewChangePending && mpBase != NULL)
- {
- mbIsMainViewChangePending = false;
- ViewShell* pMainViewShell = mpBase->GetMainViewShell().get();
- if (pMainViewShell != NULL
- && pMainViewShell!=mrSlideSorter.GetViewShell())
- {
- StartListening (*pMainViewShell);
- }
- }
- break;
-
- case tools::EventMultiplexerEvent::EID_CONTROLLER_ATTACHED:
- {
- ConnectToController();
- // mrController.GetPageSelector().GetCoreSelection();
- UpdateEditMode();
- }
- break;
-
-
- case tools::EventMultiplexerEvent::EID_CONTROLLER_DETACHED:
- DisconnectFromController();
- break;
-
- case tools::EventMultiplexerEvent::EID_SHAPE_CHANGED:
- case tools::EventMultiplexerEvent::EID_SHAPE_INSERTED:
- case tools::EventMultiplexerEvent::EID_SHAPE_REMOVED:
- HandleShapeModification(static_cast<const SdrPage*>(pEvent->mpUserData));
- break;
-
- default:
- break;
- }
-
- return 0;
-}
-
-
-
-
-//===== lang::XEventListener ================================================
-
-void SAL_CALL Listener::disposing (
- const lang::EventObject& rEventObject)
- throw (RuntimeException)
-{
- if ((mbListeningToDocument || mbListeningToUNODocument)
- && mrSlideSorter.GetModel().GetDocument()!=NULL
- && rEventObject.Source
- == mrSlideSorter.GetModel().GetDocument()->getUnoModel())
- {
- mbListeningToDocument = false;
- mbListeningToUNODocument = false;
- }
- else if (mbListeningToController)
- {
- Reference<frame::XController> xController (mxControllerWeak);
- if (rEventObject.Source == xController)
- {
- mbListeningToController = false;
- }
- }
-}
-
-
-
-
-//===== document::XEventListener ============================================
-
-void SAL_CALL Listener::notifyEvent (
- const document::EventObject& )
- throw (RuntimeException)
-{
-}
-
-
-
-
-//===== beans::XPropertySetListener =========================================
-
-void SAL_CALL Listener::propertyChange (
- const PropertyChangeEvent& rEvent)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
-
- static const ::rtl::OUString sCurrentPagePropertyName (
- RTL_CONSTASCII_USTRINGPARAM("CurrentPage"));
- static const ::rtl::OUString sEditModePropertyName (
- RTL_CONSTASCII_USTRINGPARAM("IsMasterPageMode"));
-
- if (rEvent.PropertyName.equals(sCurrentPagePropertyName))
- {
- Any aCurrentPage = rEvent.NewValue;
- Reference<beans::XPropertySet> xPageSet (aCurrentPage, UNO_QUERY);
- if (xPageSet.is())
- {
- try
- {
- Any aPageNumber = xPageSet->getPropertyValue (
- String(RTL_CONSTASCII_USTRINGPARAM("Number")));
- sal_Int32 nCurrentPage = 0;
- aPageNumber >>= nCurrentPage;
- mrController.GetPageSelector().GetCoreSelection();
- // The selection is already set but we call SelectPage()
- // nevertheless in order to make the new current page the
- // last recently selected page of the PageSelector. This is
- // used when making the selection visible.
- mrController.GetPageSelector().SelectPage(nCurrentPage-1);
- mrController.GetCurrentSlideManager()->NotifyCurrentSlideChange(nCurrentPage-1);
- }
- catch (beans::UnknownPropertyException&)
- {
- DBG_UNHANDLED_EXCEPTION();
- }
- catch (lang::DisposedException&)
- {
- // Something is already disposed. There is not much we can
- // do, except not to crash.
- }
- }
- }
- else if (rEvent.PropertyName.equals (sEditModePropertyName))
- {
- sal_Bool bIsMasterPageMode = sal_False;
- rEvent.NewValue >>= bIsMasterPageMode;
- mrController.ChangeEditMode (
- bIsMasterPageMode ? EM_MASTERPAGE : EM_PAGE);
- }
-}
-
-
-
-
-//===== frame::XFrameActionListener ==========================================
-
-void SAL_CALL Listener::frameAction (const frame::FrameActionEvent& rEvent)
- throw (::com::sun::star::uno::RuntimeException)
-{
- switch (rEvent.Action)
- {
- case frame::FrameAction_COMPONENT_DETACHING:
- DisconnectFromController();
- break;
-
- case frame::FrameAction_COMPONENT_REATTACHED:
- {
- ConnectToController();
- mrController.GetPageSelector().GetCoreSelection();
- UpdateEditMode();
- }
- break;
-
- default:
- break;
- }
-}
-
-
-
-
-//===== accessibility::XAccessibleEventListener ==============================
-
-void SAL_CALL Listener::notifyEvent (
- const AccessibleEventObject& )
- throw (RuntimeException)
-{
-}
-
-
-
-
-void SAL_CALL Listener::disposing (void)
-{
- ReleaseListeners();
-}
-
-
-
-
-void Listener::UpdateEditMode (void)
-{
- // When there is a new controller then the edit mode may have changed at
- // the same time.
- Reference<frame::XController> xController (mxControllerWeak);
- Reference<beans::XPropertySet> xSet (xController, UNO_QUERY);
- bool bIsMasterPageMode = false;
- if (xSet != NULL)
- {
- try
- {
- Any aValue (xSet->getPropertyValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsMasterPageMode"))));
- aValue >>= bIsMasterPageMode;
- }
- catch (beans::UnknownPropertyException&)
- {
- // When the property is not supported then the master page mode
- // is not supported, too.
- bIsMasterPageMode = false;
- }
- }
- mrController.ChangeEditMode (
- bIsMasterPageMode ? EM_MASTERPAGE : EM_PAGE);
-}
-
-
-
-void Listener::HandleModelChange (const SdrPage* pPage)
-{
- // Notify model and selection observer about the page. The return value
- // of the model call acts as filter as to which events to pass to the
- // selection observer.
- if (mrSlideSorter.GetModel().NotifyPageEvent(pPage))
- {
- // The page of the hint belongs (or belonged) to the model.
-
- // Tell the cache manager that the preview bitmaps for a deleted
- // page can be removed from all caches.
- if (pPage!=NULL && ! pPage->IsInserted())
- cache::PageCacheManager::Instance()->ReleasePreviewBitmap(pPage);
-
- mrController.GetSelectionManager()->GetSelectionObserver()->NotifyPageEvent(pPage);
- }
-
- // Tell the controller about the model change only when the document is
- // in a sane state, not just in the middle of a larger change.
- SdDrawDocument* pDocument (mrSlideSorter.GetModel().GetDocument());
- if (pDocument != NULL
- && pDocument->GetMasterSdPageCount(PK_STANDARD) == pDocument->GetMasterSdPageCount(PK_NOTES))
- {
- // A model change can make updates of some text fields necessary
- // (like page numbers and page count.) Invalidate all previews in
- // the cache to cope with this. Doing this on demand would be a
- // nice optimization.
- cache::PageCacheManager::Instance()->InvalidateAllPreviewBitmaps(pDocument->getUnoModel());
-
- mrController.HandleModelChange();
- }
-}
-
-
-
-void Listener::HandleShapeModification (const SdrPage* pPage)
-{
- if (pPage == NULL)
- return;
-
- // Invalidate the preview of the page (in all slide sorters that display
- // it.)
- ::boost::shared_ptr<cache::PageCacheManager> pCacheManager (cache::PageCacheManager::Instance());
- if ( ! pCacheManager)
- return;
- SdDrawDocument* pDocument = mrSlideSorter.GetModel().GetDocument();
- if (pDocument == NULL)
- {
- OSL_ASSERT(pDocument!=NULL);
- return;
- }
- pCacheManager->InvalidatePreviewBitmap(pDocument->getUnoModel(), pPage);
- mrSlideSorter.GetView().GetPreviewCache()->RequestPreviewBitmap(pPage);
-
- // When the page is a master page then invalidate the previews of all
- // pages that are linked to this master page.
- if (pPage->IsMasterPage())
- {
- for (sal_uInt16 nIndex=0,nCount=pDocument->GetSdPageCount(PK_STANDARD);
- nIndex<nCount;
- ++nIndex)
- {
- const SdPage* pCandidate = pDocument->GetSdPage(nIndex, PK_STANDARD);
- if (pCandidate!=NULL && pCandidate->TRG_HasMasterPage())
- {
- if (&pCandidate->TRG_GetMasterPage() == pPage)
- pCacheManager->InvalidatePreviewBitmap(pDocument->getUnoModel(), pCandidate);
- }
- else
- {
- OSL_ASSERT(pCandidate!=NULL && pCandidate->TRG_HasMasterPage());
- }
- }
- }
-}
-
-
-
-
-void Listener::ThrowIfDisposed (void)
- throw (::com::sun::star::lang::DisposedException)
-{
- if (rBHelper.bDisposed || rBHelper.bInDispose)
- {
- throw lang::DisposedException (
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "SlideSorterController object has already been disposed")),
- static_cast<uno::XWeak*>(this));
- }
-}
-
-
-
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsListener.hxx b/sd/source/ui/slidesorter/controller/SlsListener.hxx
deleted file mode 100644
index 28248c291..000000000
--- a/sd/source/ui/slidesorter/controller/SlsListener.hxx
+++ /dev/null
@@ -1,197 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_SLIDE_SORTER_LISTENER_HXX
-#define SD_SLIDESORTER_SLIDE_SORTER_LISTENER_HXX
-
-#include "MutexOwner.hxx"
-#include "controller/SlideSorterController.hxx"
-#include <com/sun/star/document/XEventListener.hpp>
-#include <com/sun/star/beans/XPropertyChangeListener.hpp>
-#include <com/sun/star/accessibility/XAccessibleEventListener.hpp>
-#include <com/sun/star/lang/DisposedException.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/frame/XFrameActionListener.hpp>
-#include <cppuhelper/compbase4.hxx>
-
-#include <svl/lstner.hxx>
-#include <tools/link.hxx>
-#include <boost/shared_ptr.hpp>
-
-namespace sd {
-class ViewShellBase;
-}
-
-namespace sd { namespace tools {
-class EventMultiplexerEvent;
-} }
-
-namespace sd { namespace slidesorter {
-class SlideSorter;
-} }
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-typedef cppu::WeakComponentImplHelper4<
- ::com::sun::star::document::XEventListener,
- ::com::sun::star::beans::XPropertyChangeListener,
- ::com::sun::star::accessibility::XAccessibleEventListener,
- ::com::sun::star::frame::XFrameActionListener
- > ListenerInterfaceBase;
-
-class SlideSorterController;
-
-/** Listen for events of various types and sources and react to them. This
- class is a part of the controller.
-
- When the view shell in the center pane is replaced by another the
- associated controller is replaced as well. Therefore we have to
- register at the frame and on certain FrameActionEvents to stop listening
- to the old controller and register as listener at the new one.
-*/
-class Listener
- : protected MutexOwner,
- public ListenerInterfaceBase,
- public SfxListener
-{
-public:
- Listener (SlideSorter& rSlideSorter);
- virtual ~Listener (void);
-
- /** Connect to the current controller of the view shell as listener.
- This method is called once during initialization and every time a
- FrameActionEvent signals the current controller being exchanged.
- When the connection is successfull then the flag
- mbListeningToController is set to <TRUE/>.
- */
- void ConnectToController (void);
-
- /** Disconnect from the current controller of the view shell as
- listener. This method is called once during initialization and
- every time a FrameActionEvent signals the current controller being
- exchanged. When this method terminates then mbListeningToController
- is <FALSE/>.
- */
- void DisconnectFromController (void);
-
- virtual void Notify (
- SfxBroadcaster& rBroadcaster,
- const SfxHint& rHint);
-
- //===== lang::XEventListener ============================================
- virtual void SAL_CALL
- disposing (const ::com::sun::star::lang::EventObject& rEventObject)
- throw (::com::sun::star::uno::RuntimeException);
-
-
- //===== document::XEventListener ========================================
- virtual void SAL_CALL
- notifyEvent (
- const ::com::sun::star::document::EventObject& rEventObject)
- throw (::com::sun::star::uno::RuntimeException);
-
- //===== beans::XPropertySetListener =====================================
- virtual void SAL_CALL
- propertyChange (
- const com::sun::star::beans::PropertyChangeEvent& rEvent)
- throw (::com::sun::star::uno::RuntimeException);
-
- //===== accessibility::XAccessibleEventListener ==========================
- virtual void SAL_CALL
- notifyEvent (
- const ::com::sun::star::accessibility::AccessibleEventObject&
- rEvent)
- throw (::com::sun::star::uno::RuntimeException);
-
- //===== frame::XFrameActionListener ======================================
- /** For certain actions the listener connects to a new controller of the
- frame it is listening to. This usually happens when the view shell
- in the center pane is replaced by another view shell.
- */
- virtual void SAL_CALL
- frameAction (const ::com::sun::star::frame::FrameActionEvent& rEvent)
- throw (::com::sun::star::uno::RuntimeException);
-
- virtual void SAL_CALL disposing (void);
-
-private:
- SlideSorter& mrSlideSorter;
- SlideSorterController& mrController;
- ViewShellBase* mpBase;
-
- /// Remember whether we are listening to the document.
- bool mbListeningToDocument;
- /// Remember whether we are listening to the UNO document.
- bool mbListeningToUNODocument;
- /// Remember whether we are listening to the UNO controller.
- bool mbListeningToController;
- /// Remember whether we are listening to the frame.
- bool mbListeningToFrame;
- bool mbIsMainViewChangePending;
-
- ::com::sun::star::uno::WeakReference< ::com::sun::star::frame::XController> mxControllerWeak;
- ::com::sun::star::uno::WeakReference< ::com::sun::star::frame::XFrame> mxFrameWeak;
-
- /** This object is used to lock the model between some
- events. It is refernce counted in order to cope with events that
- are expected but never sent.
- */
- ::boost::shared_ptr<SlideSorterController::ModelChangeLock> mpModelChangeLock;
-
- void ReleaseListeners (void);
-
- /** Called when the edit mode has changed. Update model accordingly.
- */
- void UpdateEditMode (void);
-
- /** Handle a change in the order of slides or when the set of slides has
- changed, i.e. a slide has been created.
- */
- void HandleModelChange (const SdrPage* pPage);
-
- /** Handle a modification to a shape on the given page. When this is a
- regular page then update its preview. When it is a master page then
- additionally update the previews of all pages linked to it.
- */
- void HandleShapeModification (const SdrPage* pPage);
-
- /** This method throws a DisposedException when the object has already been
- disposed.
- */
- void ThrowIfDisposed (void)
- throw (::com::sun::star::lang::DisposedException);
-
- DECL_LINK(EventMultiplexerCallback, tools::EventMultiplexerEvent*);
-};
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsPageObjectFactory.cxx b/sd/source/ui/slidesorter/controller/SlsPageObjectFactory.cxx
deleted file mode 100644
index 7e49d884b..000000000
--- a/sd/source/ui/slidesorter/controller/SlsPageObjectFactory.cxx
+++ /dev/null
@@ -1,103 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include "controller/SlsPageObjectFactory.hxx"
-
-#include "view/SlsPageObject.hxx"
-#include "view/SlsPageObjectViewContact.hxx"
-#include "view/SlsPageObjectViewObjectContact.hxx"
-
-#include "sdpage.hxx"
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-
-PageObjectFactory::PageObjectFactory (
- const ::boost::shared_ptr<cache::PageCache>& rpCache,
- const ::boost::shared_ptr<controller::Properties>& rpProperties)
- : mpPageCache(rpCache),
- mpProperties(rpProperties)
-{
-}
-
-
-
-
-PageObjectFactory::~PageObjectFactory (void)
-{
-}
-
-
-
-
-view::PageObject* PageObjectFactory::CreatePageObject (
- SdPage* pPage,
- const model::SharedPageDescriptor& rpDescriptor) const
-{
- return new view::PageObject(
- Rectangle (Point(0,0), pPage->GetSize()),
- pPage,
- rpDescriptor);
-}
-
-
-
-
-::sdr::contact::ViewContact*
- PageObjectFactory::CreateViewContact (
- view::PageObject* pPageObject,
- const model::SharedPageDescriptor& rpDescriptor) const
-{
- return new view::PageObjectViewContact (
- *pPageObject,
- rpDescriptor);
-}
-
-
-
-
-::sdr::contact::ViewObjectContact*
- PageObjectFactory::CreateViewObjectContact (
- ::sdr::contact::ObjectContact& rObjectContact,
- ::sdr::contact::ViewContact& rViewContact) const
-{
- return new view::PageObjectViewObjectContact (
- rObjectContact,
- rViewContact,
- mpPageCache,
- mpProperties);
-}
-
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsPageSelector.cxx b/sd/source/ui/slidesorter/controller/SlsPageSelector.cxx
deleted file mode 100644
index a9545b089..000000000
--- a/sd/source/ui/slidesorter/controller/SlsPageSelector.cxx
+++ /dev/null
@@ -1,491 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "controller/SlsPageSelector.hxx"
-
-#include "SlideSorter.hxx"
-#include "SlideSorterViewShell.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsSelectionManager.hxx"
-#include "controller/SlsAnimator.hxx"
-#include "controller/SlsCurrentSlideManager.hxx"
-#include "controller/SlsVisibleAreaManager.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "model/SlsPageEnumerationProvider.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "view/SlideSorterView.hxx"
-
-#include "sdpage.hxx"
-#include "ViewShell.hxx"
-#include "DrawViewShell.hxx"
-#include "ViewShellBase.hxx"
-#include <com/sun/star/drawing/XDrawView.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <boost/bind.hpp>
-
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::sd::slidesorter::model;
-using namespace ::sd::slidesorter::view;
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-PageSelector::PageSelector (SlideSorter& rSlideSorter)
- : mrModel(rSlideSorter.GetModel()),
- mrSlideSorter(rSlideSorter),
- mrController(mrSlideSorter.GetController()),
- mnSelectedPageCount(0),
- mnBroadcastDisableLevel(0),
- mbSelectionChangeBroadcastPending(false),
- mpMostRecentlySelectedPage(),
- mpSelectionAnchor(),
- mpCurrentPage(),
- mnUpdateLockCount(0),
- mbIsUpdateCurrentPagePending(false)
-{
- CountSelectedPages ();
-}
-
-
-
-
-void PageSelector::SelectAllPages (void)
-{
- VisibleAreaManager::TemporaryDisabler aDisabler (mrSlideSorter);
- PageSelector::UpdateLock aLock (*this);
-
- int nPageCount = mrModel.GetPageCount();
- for (int nPageIndex=0; nPageIndex<nPageCount; nPageIndex++)
- SelectPage(nPageIndex);
-}
-
-
-
-
-void PageSelector::DeselectAllPages (void)
-{
- VisibleAreaManager::TemporaryDisabler aDisabler (mrSlideSorter);
- PageSelector::UpdateLock aLock (*this);
-
- int nPageCount = mrModel.GetPageCount();
- for (int nPageIndex=0; nPageIndex<nPageCount; nPageIndex++)
- DeselectPage(nPageIndex);
-
- DBG_ASSERT (mnSelectedPageCount==0,
- "PageSelector::DeselectAllPages: the selected pages counter is not 0");
- mnSelectedPageCount = 0;
- mpSelectionAnchor.reset();
-}
-
-
-
-
-void PageSelector::GetCoreSelection (void)
-{
- PageSelector::UpdateLock aLock (*this);
-
- bool bSelectionHasChanged (true);
- mnSelectedPageCount = 0;
- model::PageEnumeration aAllPages (
- model::PageEnumerationProvider::CreateAllPagesEnumeration(mrModel));
- while (aAllPages.HasMoreElements())
- {
- model::SharedPageDescriptor pDescriptor (aAllPages.GetNextElement());
- if (pDescriptor->GetCoreSelection())
- {
- mrSlideSorter.GetController().GetVisibleAreaManager().RequestVisible(pDescriptor);
- mrSlideSorter.GetView().RequestRepaint(pDescriptor);
- bSelectionHasChanged = true;
- }
-
- if (pDescriptor->HasState(PageDescriptor::ST_Selected))
- mnSelectedPageCount++;
- }
-
- if (bSelectionHasChanged)
- {
- if (mnBroadcastDisableLevel > 0)
- mbSelectionChangeBroadcastPending = true;
- else
- mrController.GetSelectionManager()->SelectionHasChanged();
- }
-}
-
-
-
-
-void PageSelector::SetCoreSelection (void)
-{
- model::PageEnumeration aAllPages (
- model::PageEnumerationProvider::CreateAllPagesEnumeration(mrModel));
- while (aAllPages.HasMoreElements())
- {
- model::SharedPageDescriptor pDescriptor (aAllPages.GetNextElement());
- pDescriptor->SetCoreSelection();
- }
-}
-
-
-
-
-void PageSelector::SelectPage (int nPageIndex)
-{
- SharedPageDescriptor pDescriptor (mrModel.GetPageDescriptor(nPageIndex));
- if (pDescriptor.get() != NULL)
- SelectPage(pDescriptor);
-}
-
-
-
-
-void PageSelector::SelectPage (const SdPage* pPage)
-{
- const sal_Int32 nPageIndex (mrModel.GetIndex(pPage));
- SharedPageDescriptor pDescriptor (mrModel.GetPageDescriptor(nPageIndex));
- if (pDescriptor.get()!=NULL && pDescriptor->GetPage()==pPage)
- SelectPage(pDescriptor);
-}
-
-
-
-
-void PageSelector::SelectPage (const SharedPageDescriptor& rpDescriptor)
-{
- if (rpDescriptor.get()!=NULL
- && mrSlideSorter.GetView().SetState(rpDescriptor, PageDescriptor::ST_Selected, true))
- {
- ++mnSelectedPageCount;
- mrSlideSorter.GetController().GetVisibleAreaManager().RequestVisible(rpDescriptor,true);
- mrSlideSorter.GetView().RequestRepaint(rpDescriptor);
-
- mpMostRecentlySelectedPage = rpDescriptor;
- if (mpSelectionAnchor == NULL)
- mpSelectionAnchor = rpDescriptor;
-
- if (mnBroadcastDisableLevel > 0)
- mbSelectionChangeBroadcastPending = true;
- else
- mrController.GetSelectionManager()->SelectionHasChanged();
- UpdateCurrentPage();
-
- CheckConsistency();
- }
-}
-
-
-
-
-void PageSelector::DeselectPage (
- int nPageIndex,
- const bool bUpdateCurrentPage)
-{
- model::SharedPageDescriptor pDescriptor (mrModel.GetPageDescriptor(nPageIndex));
- if (pDescriptor.get() != NULL)
- DeselectPage(pDescriptor, bUpdateCurrentPage);
-}
-
-
-
-
-void PageSelector::DeselectPage (
- const SdPage* pPage,
- const bool bUpdateCurrentPage)
-{
- const sal_Int32 nPageIndex (mrModel.GetIndex(pPage));
- SharedPageDescriptor pDescriptor (mrModel.GetPageDescriptor(nPageIndex));
- if (pDescriptor.get()!=NULL && pDescriptor->GetPage()==pPage)
- DeselectPage(pDescriptor, bUpdateCurrentPage);
-}
-
-
-
-
-void PageSelector::DeselectPage (
- const SharedPageDescriptor& rpDescriptor,
- const bool bUpdateCurrentPage)
-{
- if (rpDescriptor.get()!=NULL
- && mrSlideSorter.GetView().SetState(rpDescriptor, PageDescriptor::ST_Selected, false))
- {
- --mnSelectedPageCount;
- mrSlideSorter.GetController().GetVisibleAreaManager().RequestVisible(rpDescriptor);
- mrSlideSorter.GetView().RequestRepaint(rpDescriptor);
- if (mpMostRecentlySelectedPage == rpDescriptor)
- mpMostRecentlySelectedPage.reset();
- if (mnBroadcastDisableLevel > 0)
- mbSelectionChangeBroadcastPending = true;
- else
- mrController.GetSelectionManager()->SelectionHasChanged();
- if (bUpdateCurrentPage)
- UpdateCurrentPage();
-
- CheckConsistency();
- }
-}
-
-
-
-
-void PageSelector::CheckConsistency (void) const
-{
- int nSelectionCount (0);
- for (int nPageIndex=0,nPageCount=mrModel.GetPageCount(); nPageIndex<nPageCount; nPageIndex++)
- {
- SharedPageDescriptor pDescriptor (mrModel.GetPageDescriptor(nPageIndex));
- assert(pDescriptor);
- if (pDescriptor->HasState(PageDescriptor::ST_Selected))
- ++nSelectionCount;
- }
- if (nSelectionCount!=mnSelectedPageCount)
- {
- assert(nSelectionCount==mnSelectedPageCount);
- }
-}
-
-
-
-
-bool PageSelector::IsPageSelected (int nPageIndex)
-{
- SharedPageDescriptor pDescriptor (mrModel.GetPageDescriptor(nPageIndex));
- if (pDescriptor.get() != NULL)
- return pDescriptor->HasState(PageDescriptor::ST_Selected);
- else
- return false;
-}
-
-
-
-
-int PageSelector::GetPageCount (void) const
-{
- return mrModel.GetPageCount();
-}
-
-
-
-
-int PageSelector::GetSelectedPageCount (void) const
-{
- return mnSelectedPageCount;
-}
-
-
-
-
-SharedPageDescriptor PageSelector::GetSelectionAnchor (void) const
-{
- return mpSelectionAnchor;
-}
-
-
-
-
-void PageSelector::CountSelectedPages (void)
-{
- mnSelectedPageCount = 0;
- model::PageEnumeration aSelectedPages (
- model::PageEnumerationProvider::CreateSelectedPagesEnumeration(mrModel));
- while (aSelectedPages.HasMoreElements())
- {
- mnSelectedPageCount++;
- aSelectedPages.GetNextElement();
- }
-}
-
-
-
-
-void PageSelector::EnableBroadcasting (void)
-{
- if (mnBroadcastDisableLevel > 0)
- mnBroadcastDisableLevel --;
- if (mnBroadcastDisableLevel==0 && mbSelectionChangeBroadcastPending)
- {
- mrController.GetSelectionManager()->SelectionHasChanged();
- mbSelectionChangeBroadcastPending = false;
- }
-}
-
-
-
-
-void PageSelector::DisableBroadcasting (void)
-{
- mnBroadcastDisableLevel ++;
-}
-
-
-
-
-::boost::shared_ptr<PageSelector::PageSelection> PageSelector::GetPageSelection (void) const
-{
- ::boost::shared_ptr<PageSelection> pSelection (new PageSelection());
- pSelection->reserve(GetSelectedPageCount());
-
- int nPageCount = GetPageCount();
- for (int nIndex=0; nIndex<nPageCount; nIndex++)
- {
- SharedPageDescriptor pDescriptor (mrModel.GetPageDescriptor(nIndex));
- if (pDescriptor.get()!=NULL && pDescriptor->HasState(PageDescriptor::ST_Selected))
- pSelection->push_back(pDescriptor->GetPage());
- }
-
- return pSelection;
-}
-
-
-
-
-void PageSelector::SetPageSelection (
- const ::boost::shared_ptr<PageSelection>& rpSelection,
- const bool bUpdateCurrentPage)
-{
- PageSelection::const_iterator iPage;
- for (iPage=rpSelection->begin(); iPage!=rpSelection->end(); ++iPage)
- SelectPage(*iPage);
- if (bUpdateCurrentPage)
- UpdateCurrentPage();
-}
-
-
-
-
-void PageSelector::UpdateCurrentPage (const bool bUpdateOnlyWhenPending)
-{
- if (mnUpdateLockCount > 0)
- {
- mbIsUpdateCurrentPagePending = true;
- return;
- }
-
- if ( ! mbIsUpdateCurrentPagePending && bUpdateOnlyWhenPending)
- return;
-
- mbIsUpdateCurrentPagePending = false;
-
- // Make the first selected page the current page.
- const sal_Int32 nPageCount (GetPageCount());
- for (sal_Int32 nIndex=0; nIndex<nPageCount; ++nIndex)
- {
- SharedPageDescriptor pDescriptor (mrModel.GetPageDescriptor(nIndex));
- if (pDescriptor && pDescriptor->HasState(PageDescriptor::ST_Selected))
- {
- // Switching the current slide normally sets also the selection
- // to just the new current slide. To prevent that, we store
- // (and at the end of this scope restore) the current selection.
- ::boost::shared_ptr<PageSelection> pSelection (GetPageSelection());
-
- mrController.GetCurrentSlideManager()->SwitchCurrentSlide(pDescriptor);
-
- // Restore the selection and prevent a recursive call to
- // UpdateCurrentPage().
- SetPageSelection(pSelection, false);
- return;
- }
- }
-
- // No page is selected. Do not change the current slide.
-}
-
-
-
-
-//===== PageSelector::UpdateLock ==============================================
-
-PageSelector::UpdateLock::UpdateLock (SlideSorter& rSlideSorter)
- : mpSelector(&rSlideSorter.GetController().GetPageSelector())
-{
- ++mpSelector->mnUpdateLockCount;
-}
-
-
-
-
-PageSelector::UpdateLock::UpdateLock (PageSelector& rSelector)
- : mpSelector(&rSelector)
-{
- ++mpSelector->mnUpdateLockCount;
-}
-
-
-
-
-PageSelector::UpdateLock::~UpdateLock (void)
-{
- Release();
-}
-
-void PageSelector::UpdateLock::Release (void)
-{
- if (mpSelector != NULL)
- {
- --mpSelector->mnUpdateLockCount;
- OSL_ASSERT(mpSelector->mnUpdateLockCount >= 0);
- if (mpSelector->mnUpdateLockCount == 0)
- mpSelector->UpdateCurrentPage(true);
-
- mpSelector = NULL;
- }
-}
-
-
-
-
-//===== PageSelector::BroadcastLock ==============================================
-
-PageSelector::BroadcastLock::BroadcastLock (SlideSorter& rSlideSorter)
- : mrSelector(rSlideSorter.GetController().GetPageSelector())
-{
- mrSelector.DisableBroadcasting();
-}
-
-
-
-
-PageSelector::BroadcastLock::BroadcastLock (PageSelector& rSelector)
- : mrSelector(rSelector)
-{
- mrSelector.DisableBroadcasting();
-}
-
-
-
-
-PageSelector::BroadcastLock::~BroadcastLock (void)
-{
- mrSelector.EnableBroadcasting();
-}
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsProperties.cxx b/sd/source/ui/slidesorter/controller/SlsProperties.cxx
deleted file mode 100644
index fef6b6eb1..000000000
--- a/sd/source/ui/slidesorter/controller/SlsProperties.cxx
+++ /dev/null
@@ -1,276 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "controller/SlsProperties.hxx"
-#include <vcl/svapp.hxx>
-
-namespace sd { namespace slidesorter { namespace controller {
-
-Properties::Properties (void)
- : mbIsHighlightCurrentSlide(false),
- mbIsShowSelection(true),
- mbIsShowFocus(true),
- mbIsCenterSelection(false),
- mbIsSmoothSelectionScrolling(true),
- mbIsSuspendPreviewUpdatesDuringFullScreenPresentation(true),
- maBackgroundColor(Application::GetSettings().GetStyleSettings().GetWindowColor()),
- maTextColor(Application::GetSettings().GetStyleSettings().GetActiveTextColor()),
- maSelectionColor(Application::GetSettings().GetStyleSettings().GetHighlightColor()),
- maHighlightColor(Application::GetSettings().GetStyleSettings().GetMenuHighlightColor()),
- mbIsUIReadOnly(false),
- mbIsOnlyPreviewTriggersMouseOver(true),
- mbIsHighContrastModeActive(
- Application::GetSettings().GetStyleSettings().GetHighContrastMode())
-{
-}
-
-
-
-
-Properties::~Properties (void)
-{
-}
-
-
-
-
-void Properties::HandleDataChangeEvent (void)
-{
- maBackgroundColor = Application::GetSettings().GetStyleSettings().GetWindowColor();
- maTextColor = Application::GetSettings().GetStyleSettings().GetActiveTextColor();
- maSelectionColor = Application::GetSettings().GetStyleSettings().GetHighlightColor();
- maHighlightColor = Application::GetSettings().GetStyleSettings().GetMenuHighlightColor();
- mbIsHighContrastModeActive
- = Application::GetSettings().GetStyleSettings().GetHighContrastMode();
-}
-
-
-
-
-bool Properties::IsHighlightCurrentSlide (void) const
-{
- return mbIsHighlightCurrentSlide;
-}
-
-
-
-
-void Properties::SetHighlightCurrentSlide (const bool bIsHighlightCurrentSlide)
-{
- mbIsHighlightCurrentSlide = bIsHighlightCurrentSlide;
-}
-
-
-
-
-bool Properties::IsShowSelection (void) const
-{
- return mbIsShowSelection;
-}
-
-
-
-
-void Properties::SetShowSelection (const bool bIsShowSelection)
-{
- mbIsShowSelection = bIsShowSelection;
-}
-
-
-
-
-bool Properties::IsShowFocus (void) const
-{
- return mbIsShowFocus;
-}
-
-
-
-
-void Properties::SetShowFocus (const bool bIsShowFocus)
-{
- mbIsShowFocus = bIsShowFocus;
-}
-
-
-
-
-bool Properties::IsCenterSelection (void) const
-{
- return mbIsCenterSelection;
-}
-
-
-
-
-void Properties::SetCenterSelection (const bool bIsCenterSelection)
-{
- mbIsCenterSelection = bIsCenterSelection;
-}
-
-
-
-
-bool Properties::IsSmoothSelectionScrolling (void) const
-{
- return mbIsSmoothSelectionScrolling;
-}
-
-
-
-
-void Properties::SetSmoothSelectionScrolling (const bool bIsSmoothSelectionScrolling)
-{
- mbIsSmoothSelectionScrolling = bIsSmoothSelectionScrolling;
-}
-
-
-
-
-bool Properties::IsSuspendPreviewUpdatesDuringFullScreenPresentation (void) const
-{
- return mbIsSuspendPreviewUpdatesDuringFullScreenPresentation;
-}
-
-
-
-
-void Properties::SetSuspendPreviewUpdatesDuringFullScreenPresentation (const bool bFlag)
-{
- mbIsSuspendPreviewUpdatesDuringFullScreenPresentation = bFlag;
-}
-
-
-
-
-Color Properties::GetBackgroundColor (void) const
-{
- return maBackgroundColor;
-}
-
-
-
-
-void Properties::SetBackgroundColor (const Color& rColor)
-{
- maBackgroundColor = rColor;
-}
-
-
-
-Color Properties::GetTextColor (void) const
-{
- return maTextColor;
-}
-
-
-
-
-void Properties::SetTextColor (const Color& rColor)
-{
- maTextColor = rColor;
-}
-
-
-
-
-Color Properties::GetSelectionColor (void) const
-{
- return maSelectionColor;
-}
-
-
-
-
-void Properties::SetSelectionColor (const Color& rColor)
-{
- maSelectionColor = rColor;
-}
-
-
-
-
-Color Properties::GetHighlightColor (void) const
-{
- return maHighlightColor;
-}
-
-
-
-
-void Properties::SetHighlightColor (const Color& rColor)
-{
- maHighlightColor = rColor;
-}
-
-
-
-
-bool Properties::IsUIReadOnly (void) const
-{
- return mbIsUIReadOnly;
-}
-
-
-
-
-void Properties::SetUIReadOnly (const bool bIsUIReadOnly)
-{
- mbIsUIReadOnly = bIsUIReadOnly;
-}
-
-
-
-
-bool Properties::IsOnlyPreviewTriggersMouseOver (void) const
-{
- return mbIsOnlyPreviewTriggersMouseOver;
-}
-
-
-
-
-void Properties::SetOnlyPreviewTriggersMouseOver (const bool bFlag)
-{
- mbIsOnlyPreviewTriggersMouseOver = bFlag;
-}
-
-
-
-
-bool Properties::IsHighContrastModeActive (void) const
-{
- return mbIsHighContrastModeActive;
-}
-
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsScrollBarManager.cxx b/sd/source/ui/slidesorter/controller/SlsScrollBarManager.cxx
deleted file mode 100644
index 2d1cba5ce..000000000
--- a/sd/source/ui/slidesorter/controller/SlsScrollBarManager.cxx
+++ /dev/null
@@ -1,740 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "controller/SlsScrollBarManager.hxx"
-
-#include "SlideSorter.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsVisibleAreaManager.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsLayouter.hxx"
-#include "view/SlsTheme.hxx"
-#include "Window.hxx"
-#include "sdpage.hxx"
-
-#include <boost/limits.hpp>
-
-#include <vcl/scrbar.hxx>
-
-namespace sd { namespace slidesorter { namespace controller {
-
-ScrollBarManager::ScrollBarManager (SlideSorter& rSlideSorter)
- : mrSlideSorter(rSlideSorter),
- mpHorizontalScrollBar(mrSlideSorter.GetHorizontalScrollBar()),
- mpVerticalScrollBar(mrSlideSorter.GetVerticalScrollBar()),
- mnHorizontalPosition (0),
- mnVerticalPosition (0),
- maScrollBorder (20,20),
- mnHorizontalScrollFactor (0.15),
- mnVerticalScrollFactor (0.25),
- mpScrollBarFiller(mrSlideSorter.GetScrollBarFiller()),
- maAutoScrollTimer(),
- maAutoScrollOffset(0,0),
- mbIsAutoScrollActive(false),
- mpContentWindow(mrSlideSorter.GetContentWindow()),
- maAutoScrollFunctor()
-{
- // Hide the scroll bars by default to prevent display errors while
- // switching between view shells: In the short time between initiating
- // such a switch and the final rearrangement of UI controls the scroll
- // bars and the filler where displayed in the upper left corner of the
- // ViewTabBar.
- mpHorizontalScrollBar->Hide();
- mpVerticalScrollBar->Hide();
- mpScrollBarFiller->Hide();
-
- maAutoScrollTimer.SetTimeout(25);
- maAutoScrollTimer.SetTimeoutHdl (
- LINK(this, ScrollBarManager, AutoScrollTimeoutHandler));
-}
-
-
-
-
-ScrollBarManager::~ScrollBarManager (void)
-{
-}
-
-
-
-
-void ScrollBarManager::LateInitialization (void)
-{
-}
-
-
-
-
-void ScrollBarManager::Connect (void)
-{
- if (mpVerticalScrollBar != NULL)
- {
- mpVerticalScrollBar->SetScrollHdl (
- LINK(this, ScrollBarManager, VerticalScrollBarHandler));
- }
- if (mpHorizontalScrollBar != NULL)
- {
- mpHorizontalScrollBar->SetScrollHdl(
- LINK(this, ScrollBarManager, HorizontalScrollBarHandler));
- }
-}
-
-
-
-
-void ScrollBarManager::Disconnect (void)
-{
- if (mpVerticalScrollBar != NULL)
- {
- mpVerticalScrollBar->SetScrollHdl (Link());
- }
- if (mpHorizontalScrollBar != NULL)
- {
- mpHorizontalScrollBar->SetScrollHdl (Link());
- }
-}
-
-
-
-
-/** Placing the scroll bars is an iterative process. The visibility of one
- scroll bar affects the remaining size and thus may lead to the other
- scroll bar becoming visible.
-
- First we determine the visibility of the horizontal scroll bar. After
- that we do the same for the vertical scroll bar. To have an initial
- value for the required size we call the layouter before that. When one
- of the two scroll bars is made visible then the size of the browser
- window changes and a second call to the layouter becomes necessary.
- That call is made anyway after this method returns.
-*/
-Rectangle ScrollBarManager::PlaceScrollBars (
- const Rectangle& rAvailableArea,
- const bool bIsHorizontalScrollBarAllowed,
- const bool bIsVerticalScrollBarAllowed)
-{
- Rectangle aRemainingSpace (DetermineScrollBarVisibilities(
- rAvailableArea,
- bIsHorizontalScrollBarAllowed,
- bIsVerticalScrollBarAllowed));
-
- if (mpHorizontalScrollBar!=NULL && mpHorizontalScrollBar->IsVisible())
- PlaceHorizontalScrollBar (rAvailableArea);
-
- if (mpVerticalScrollBar!=NULL && mpVerticalScrollBar->IsVisible())
- PlaceVerticalScrollBar (rAvailableArea);
-
- if (mpScrollBarFiller!=NULL && mpScrollBarFiller->IsVisible())
- PlaceFiller (rAvailableArea);
-
- return aRemainingSpace;
-}
-
-
-
-
-void ScrollBarManager::PlaceHorizontalScrollBar (const Rectangle& aAvailableArea)
-{
- // Save the current relative position.
- mnHorizontalPosition = double(mpHorizontalScrollBar->GetThumbPos())
- / double(mpHorizontalScrollBar->GetRange().Len());
-
- // Place the scroll bar.
- Size aScrollBarSize (mpHorizontalScrollBar->GetSizePixel());
- mpHorizontalScrollBar->SetPosSizePixel (
- Point(aAvailableArea.Left(),
- aAvailableArea.Bottom()-aScrollBarSize.Height()+1),
- Size (aAvailableArea.GetWidth() - GetVerticalScrollBarWidth(),
- aScrollBarSize.Height()));
-
- // Restore the relative position.
- mpHorizontalScrollBar->SetThumbPos(
- (long)(0.5 + mnHorizontalPosition * mpHorizontalScrollBar->GetRange().Len()));
-}
-
-
-
-
-void ScrollBarManager::PlaceVerticalScrollBar (const Rectangle& aArea)
-{
- const double nThumbPosition (mpVerticalScrollBar->GetThumbPos());
-
- // Place the scroll bar.
- Size aScrollBarSize (mpVerticalScrollBar->GetSizePixel());
- Point aPosition (aArea.Right()-aScrollBarSize.Width()+1, aArea.Top());
- Size aSize (aScrollBarSize.Width(), aArea.GetHeight() - GetHorizontalScrollBarHeight());
- mpVerticalScrollBar->SetPosSizePixel(aPosition, aSize);
-
- // Restore the position.
- mpVerticalScrollBar->SetThumbPos(static_cast<long>(nThumbPosition));
- mnVerticalPosition = nThumbPosition / double(mpVerticalScrollBar->GetRange().Len());
-}
-
-
-
-
-void ScrollBarManager::PlaceFiller (const Rectangle& aArea)
-{
- mpScrollBarFiller->SetPosSizePixel(
- Point(
- aArea.Right()-mpVerticalScrollBar->GetSizePixel().Width()+1,
- aArea.Bottom()-mpHorizontalScrollBar->GetSizePixel().Height()+1),
- Size (
- mpVerticalScrollBar->GetSizePixel().Width(),
- mpHorizontalScrollBar->GetSizePixel().Height()));
-}
-
-
-
-
-void ScrollBarManager::UpdateScrollBars (bool bResetThumbPosition, bool bUseScrolling)
-{
- Rectangle aModelArea (mrSlideSorter.GetView().GetModelArea());
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- Size aWindowModelSize (pWindow->PixelToLogic(pWindow->GetSizePixel()));
-
- // The horizontal scroll bar is only shown when the window is
- // horizontally smaller than the view.
- if (mpHorizontalScrollBar != NULL && mpHorizontalScrollBar->IsVisible())
- {
- mpHorizontalScrollBar->Show();
- mpHorizontalScrollBar->SetRange (
- Range(aModelArea.Left(), aModelArea.Right()));
- if (bResetThumbPosition)
- {
- mpHorizontalScrollBar->SetThumbPos (0);
- mnHorizontalPosition = 0;
- }
- else
- mnHorizontalPosition =
- double(mpHorizontalScrollBar->GetThumbPos())
- / double(mpHorizontalScrollBar->GetRange().Len());
-
- mpHorizontalScrollBar->SetVisibleSize (aWindowModelSize.Width());
-
- const long nWidth (mpContentWindow->PixelToLogic(
- mpContentWindow->GetSizePixel()).Width());
- // Make the line size about 10% of the visible width.
- mpHorizontalScrollBar->SetLineSize (nWidth / 10);
- // Make the page size about 90% of the visible width.
- mpHorizontalScrollBar->SetPageSize ((nWidth * 9) / 10);
- }
- else
- {
- mnHorizontalPosition = 0;
- }
-
- // The vertical scroll bar is always shown.
- if (mpVerticalScrollBar != NULL && mpVerticalScrollBar->IsVisible())
- {
- mpVerticalScrollBar->SetRange (
- Range(aModelArea.Top(), aModelArea.Bottom()));
- if (bResetThumbPosition)
- {
- mpVerticalScrollBar->SetThumbPos (0);
- mnVerticalPosition = 0;
- }
- else
- mnVerticalPosition =
- double(mpVerticalScrollBar->GetThumbPos())
- / double(mpVerticalScrollBar->GetRange().Len());
-
- mpVerticalScrollBar->SetVisibleSize (aWindowModelSize.Height());
-
- const long nHeight (mpContentWindow->PixelToLogic(
- mpContentWindow->GetSizePixel()).Height());
- // Make the line size about 10% of the visible height.
- mpVerticalScrollBar->SetLineSize (nHeight / 10);
- // Make the page size about 90% of the visible height.
- mpVerticalScrollBar->SetPageSize ((nHeight * 9) / 10);
- }
- else
- {
- mnVerticalPosition = 0;
- }
-
-
- double nEps (::std::numeric_limits<double>::epsilon());
- if (fabs(mnHorizontalPosition-pWindow->GetVisibleX()) > nEps
- || fabs(mnVerticalPosition-pWindow->GetVisibleY()) > nEps)
- {
- mrSlideSorter.GetView().InvalidatePageObjectVisibilities();
- if (bUseScrolling)
- pWindow->SetVisibleXY(mnHorizontalPosition, mnVerticalPosition);
- else
- SetWindowOrigin(mnHorizontalPosition, mnVerticalPosition);
- }
-}
-
-
-
-
-IMPL_LINK(ScrollBarManager, VerticalScrollBarHandler, ScrollBar*, pScrollBar)
-{
- if (pScrollBar!=NULL
- && pScrollBar==mpVerticalScrollBar.get()
- && pScrollBar->IsVisible()
- && mrSlideSorter.GetContentWindow()!=NULL)
- {
- double nRelativePosition = double(pScrollBar->GetThumbPos())
- / double(pScrollBar->GetRange().Len());
- mrSlideSorter.GetView().InvalidatePageObjectVisibilities();
- mrSlideSorter.GetContentWindow()->SetVisibleXY(-1, nRelativePosition);
- mrSlideSorter.GetController().GetVisibleAreaManager().DeactivateCurrentSlideTracking();
- }
- return sal_True;
-}
-
-
-
-
-IMPL_LINK(ScrollBarManager, HorizontalScrollBarHandler, ScrollBar*, pScrollBar)
-{
- if (pScrollBar!=NULL
- && pScrollBar==mpHorizontalScrollBar.get()
- && pScrollBar->IsVisible()
- && mrSlideSorter.GetContentWindow()!=NULL)
- {
- double nRelativePosition = double(pScrollBar->GetThumbPos())
- / double(pScrollBar->GetRange().Len());
- mrSlideSorter.GetView().InvalidatePageObjectVisibilities();
- mrSlideSorter.GetContentWindow()->SetVisibleXY(nRelativePosition, -1);
- mrSlideSorter.GetController().GetVisibleAreaManager().DeactivateCurrentSlideTracking();
- }
- return sal_True;
-}
-
-
-
-
-void ScrollBarManager::SetWindowOrigin (
- double nHorizontalPosition,
- double nVerticalPosition)
-{
- mnHorizontalPosition = nHorizontalPosition;
- mnVerticalPosition = nVerticalPosition;
-
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- Size aViewSize (pWindow->GetViewSize());
- Point aOrigin (
- (long int) (mnHorizontalPosition * aViewSize.Width()),
- (long int) (mnVerticalPosition * aViewSize.Height()));
-
- pWindow->SetWinViewPos (aOrigin);
- pWindow->UpdateMapMode ();
- pWindow->Invalidate ();
-}
-
-
-
-
-/** Determining the visibility of the scroll bars is quite complicated. The
- visibility of one influences that of the other because showing a scroll
- bar makes the available space smaller and may lead to the need of
- displaying the other.
- To solve this we test all four combinations of showing or hiding each
- scroll bar and use the best one. The best one is that combination that
- a) shows the least number of scroll bars with preference of showing the
- vertical over showing the horizontal and
- b) when not showing a scroll bar the area used by the page objects fits
- into the available area in the scroll bars orientation.
-*/
-Rectangle ScrollBarManager::DetermineScrollBarVisibilities (
- const Rectangle& rAvailableArea,
- const bool bIsHorizontalScrollBarAllowed,
- const bool bIsVerticalScrollBarAllowed)
-{
- // Test which combination of scroll bars is the best.
- bool bShowHorizontal = false;
- bool bShowVertical = false;
- if (mrSlideSorter.GetModel().GetPageCount() == 0)
- {
- // No pages => no scroll bars.
- }
- else if (TestScrollBarVisibilities(false, false, rAvailableArea))
- {
- // Nothing to be done.
- }
- else if (bIsHorizontalScrollBarAllowed
- && TestScrollBarVisibilities(true, false, rAvailableArea))
- {
- bShowHorizontal = true;
- }
- else if (bIsVerticalScrollBarAllowed
- && TestScrollBarVisibilities(false, true, rAvailableArea))
- {
- bShowVertical = true;
- }
- else
- {
- bShowHorizontal = true;
- bShowVertical = true;
- }
-
- // Make the visibility of the scroll bars permanent.
- mpVerticalScrollBar->Show(bShowVertical);
- mpHorizontalScrollBar->Show(bShowHorizontal);
- mpScrollBarFiller->Show(bShowVertical && bShowHorizontal);
-
- // Adapt the remaining space accordingly.
- Rectangle aRemainingSpace (rAvailableArea);
- if (bShowVertical)
- aRemainingSpace.Right() -= mpVerticalScrollBar->GetSizePixel().Width();
- if (bShowHorizontal)
- aRemainingSpace.Bottom() -= mpHorizontalScrollBar->GetSizePixel().Height();
-
- return aRemainingSpace;
-}
-
-
-
-
-bool ScrollBarManager::TestScrollBarVisibilities (
- bool bHorizontalScrollBarVisible,
- bool bVerticalScrollBarVisible,
- const Rectangle& rAvailableArea)
-{
- model::SlideSorterModel& rModel (mrSlideSorter.GetModel());
-
- // Adapt the available size by subtracting the sizes of the scroll bars
- // visible in this combination.
- Size aBrowserSize (rAvailableArea.GetSize());
- if (bHorizontalScrollBarVisible)
- aBrowserSize.Height() -= mpHorizontalScrollBar->GetSizePixel().Height();
- if (bVerticalScrollBarVisible)
- aBrowserSize.Width() -= mpVerticalScrollBar->GetSizePixel().Width();
-
- // Tell the view to rearrange its page objects and check whether the
- // page objects can be shown without clipping.
- bool bRearrangeSuccess (mrSlideSorter.GetView().GetLayouter().Rearrange (
- mrSlideSorter.GetView().GetOrientation(),
- aBrowserSize,
- rModel.GetPageDescriptor(0)->GetPage()->GetSize(),
- rModel.GetPageCount()));
-
- if (bRearrangeSuccess)
- {
- Size aPageSize = mrSlideSorter.GetView().GetLayouter().GetTotalBoundingBox().GetSize();
- Size aWindowModelSize = mpContentWindow->PixelToLogic(aBrowserSize);
-
- // The content may be clipped, i.e. not fully visible, in one
- // direction only when the scroll bar is visible in that direction.
- if (aPageSize.Width() > aWindowModelSize.Width())
- if ( ! bHorizontalScrollBarVisible)
- return false;
- if (aPageSize.Height() > aWindowModelSize.Height())
- if ( ! bVerticalScrollBarVisible)
- return false;
-
- return true;
- }
- else
- return false;
-}
-
-
-
-
-void ScrollBarManager::SetTopLeft (const Point aNewTopLeft)
-{
- if (( ! mpVerticalScrollBar
- || mpVerticalScrollBar->GetThumbPos() == aNewTopLeft.Y())
- && ( ! mpHorizontalScrollBar
- || mpHorizontalScrollBar->GetThumbPos() == aNewTopLeft.X()))
- return;
-
- // Flush pending repaints before scrolling to avoid temporary artifacts.
- mrSlideSorter.GetContentWindow()->Update();
-
- if (mpVerticalScrollBar)
- {
- mpVerticalScrollBar->SetThumbPos(aNewTopLeft.Y());
- mnVerticalPosition = aNewTopLeft.Y() / double(mpVerticalScrollBar->GetRange().Len());
- }
- if (mpHorizontalScrollBar)
- {
- mpHorizontalScrollBar->SetThumbPos(aNewTopLeft.X());
- mnHorizontalPosition = aNewTopLeft.X() / double(mpHorizontalScrollBar->GetRange().Len());
- }
-
- mrSlideSorter.GetContentWindow()->SetVisibleXY(mnHorizontalPosition, mnVerticalPosition);
- mrSlideSorter.GetView().InvalidatePageObjectVisibilities();
-}
-
-
-
-
-sal_Int32 ScrollBarManager::GetTop (void) const
-{
- if (mpVerticalScrollBar != NULL)
- return mpVerticalScrollBar->GetThumbPos();
- else
- return 0;
-}
-
-
-
-
-sal_Int32 ScrollBarManager::GetLeft (void) const
-{
- if (mpHorizontalScrollBar != NULL)
- return mpHorizontalScrollBar->GetThumbPos();
- else
- return 0;
-}
-
-
-
-
-int ScrollBarManager::GetVerticalScrollBarWidth (void) const
-{
- if (mpVerticalScrollBar != NULL && mpVerticalScrollBar->IsVisible())
- return mpVerticalScrollBar->GetSizePixel().Width();
- else
- return 0;
-}
-
-
-
-
-int ScrollBarManager::GetHorizontalScrollBarHeight (void) const
-{
- if (mpHorizontalScrollBar != NULL && mpHorizontalScrollBar->IsVisible())
- return mpHorizontalScrollBar->GetSizePixel().Height();
- else
- return 0;
-}
-
-
-
-
-void ScrollBarManager::CalcAutoScrollOffset (const Point& rMouseWindowPosition)
-{
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
-
- int nDx = 0;
- int nDy = 0;
-
- Size aWindowSize = pWindow->GetOutputSizePixel();
- Rectangle aWindowArea (pWindow->GetPosPixel(), aWindowSize);
- Rectangle aViewPixelArea (
- pWindow->LogicToPixel(mrSlideSorter.GetView().GetModelArea()));
-
- if (aWindowSize.Width() > maScrollBorder.Width() * 3
- && mpHorizontalScrollBar != NULL
- && mpHorizontalScrollBar->IsVisible())
- {
- if (rMouseWindowPosition.X() < maScrollBorder.Width()
- && aWindowArea.Left() > aViewPixelArea.Left())
- {
- nDx = -1 + (int)(mnHorizontalScrollFactor
- * (rMouseWindowPosition.X() - maScrollBorder.Width()));
- }
-
- if (rMouseWindowPosition.X() >= (aWindowSize.Width() - maScrollBorder.Width())
- && aWindowArea.Right() < aViewPixelArea.Right())
- {
- nDx = 1 + (int)(mnHorizontalScrollFactor
- * (rMouseWindowPosition.X() - aWindowSize.Width()
- + maScrollBorder.Width()));
- }
- }
-
- if (aWindowSize.Height() > maScrollBorder.Height() * 3
- && aWindowSize.Height() < aViewPixelArea.GetHeight())
- {
- if (rMouseWindowPosition.Y() < maScrollBorder.Height()
- && aWindowArea.Top() > aViewPixelArea.Top())
- {
- nDy = -1 + (int)(mnVerticalScrollFactor
- * (rMouseWindowPosition.Y() - maScrollBorder.Height()));
- }
-
- if (rMouseWindowPosition.Y() >= (aWindowSize.Height() - maScrollBorder.Height())
- && aWindowArea.Bottom() < aViewPixelArea.Bottom())
- {
- nDy = 1 + (int)(mnVerticalScrollFactor
- * (rMouseWindowPosition.Y() - aWindowSize.Height()
- + maScrollBorder.Height()));
- }
- }
-
- maAutoScrollOffset = Size(nDx,nDy);
-}
-
-
-
-
-bool ScrollBarManager::AutoScroll (
- const Point& rMouseWindowPosition,
- const ::boost::function<void(void)>& rAutoScrollFunctor)
-{
- maAutoScrollFunctor = rAutoScrollFunctor;
- CalcAutoScrollOffset(rMouseWindowPosition);
- bool bResult (true);
- if ( ! mbIsAutoScrollActive)
- bResult = RepeatAutoScroll();
-
- return bResult;
-}
-
-
-
-
-void ScrollBarManager::StopAutoScroll (void)
-{
- maAutoScrollTimer.Stop();
- mbIsAutoScrollActive = false;
-}
-
-
-
-
-bool ScrollBarManager::RepeatAutoScroll (void)
-{
- if (maAutoScrollOffset != Size(0,0))
- {
- if (mrSlideSorter.GetViewShell() != NULL)
- {
- mrSlideSorter.GetViewShell()->Scroll(
- maAutoScrollOffset.Width(),
- maAutoScrollOffset.Height());
- mrSlideSorter.GetView().InvalidatePageObjectVisibilities();
-
- if (maAutoScrollFunctor)
- maAutoScrollFunctor();
-
- mbIsAutoScrollActive = true;
- maAutoScrollTimer.Start();
-
- return true;
- }
- }
-
- maAutoScrollFunctor = ::boost::function<void(void)>();
- mbIsAutoScrollActive = false;
- return false;
-}
-
-
-
-
-IMPL_LINK(ScrollBarManager, AutoScrollTimeoutHandler, Timer *, EMPTYARG)
-{
- RepeatAutoScroll();
-
- return 0;
-}
-
-
-
-
-void ScrollBarManager::Scroll(
- const Orientation eOrientation,
- const Unit eUnit,
- const sal_Int32 nDistance)
-{
- bool bIsVertical (false);
- switch (eOrientation)
- {
- case Orientation_Horizontal: bIsVertical = false; break;
- case Orientation_Vertical: bIsVertical = true; break;
- default:
- OSL_ASSERT(eOrientation==Orientation_Horizontal || eOrientation==Orientation_Vertical);
- return;
- }
-
- Point aNewTopLeft (
- mpHorizontalScrollBar ? mpHorizontalScrollBar->GetThumbPos() : 0,
- mpVerticalScrollBar ? mpVerticalScrollBar->GetThumbPos() : 0);
- switch (eUnit)
- {
- case Unit_Pixel:
- if (bIsVertical)
- aNewTopLeft.Y() += nDistance;
- else
- aNewTopLeft.X() += nDistance;
- break;
-
- case Unit_Slide:
- {
- view::Layouter& rLayouter (mrSlideSorter.GetView().GetLayouter());
-
- // Calculate estimate of new location.
- if (bIsVertical)
- aNewTopLeft.Y() += nDistance * rLayouter.GetPageObjectSize().Height();
- else
- aNewTopLeft.X() += nDistance * rLayouter.GetPageObjectSize().Width();
-
- // Adapt location to show whole slides.
- if (bIsVertical)
- if (nDistance > 0)
- {
- const sal_Int32 nIndex (rLayouter.GetIndexAtPoint(
- Point(aNewTopLeft.X(), aNewTopLeft.Y()+mpVerticalScrollBar->GetVisibleSize()),
- true));
- aNewTopLeft.Y() = rLayouter.GetPageObjectBox(nIndex,true).Bottom()
- - mpVerticalScrollBar->GetVisibleSize();
- }
- else
- {
- const sal_Int32 nIndex (rLayouter.GetIndexAtPoint(
- Point(aNewTopLeft.X(), aNewTopLeft.Y()),
- true));
- aNewTopLeft.Y() = rLayouter.GetPageObjectBox(nIndex,true).Top();
- }
- else
- if (nDistance > 0)
- {
- const sal_Int32 nIndex (rLayouter.GetIndexAtPoint(
- Point(aNewTopLeft.X()+mpVerticalScrollBar->GetVisibleSize(), aNewTopLeft.Y()),
- true));
- aNewTopLeft.X() = rLayouter.GetPageObjectBox(nIndex,true).Right()
- - mpVerticalScrollBar->GetVisibleSize();
- }
- else
- {
- const sal_Int32 nIndex (rLayouter.GetIndexAtPoint(
- Point(aNewTopLeft.X(), aNewTopLeft.Y()),
- true));
- aNewTopLeft.X() = rLayouter.GetPageObjectBox(nIndex,true).Left();
- }
- }
- }
- mrSlideSorter.GetController().GetVisibleAreaManager().DeactivateCurrentSlideTracking();
- SetTopLeft(aNewTopLeft);
-}
-
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsSelectionCommand.cxx b/sd/source/ui/slidesorter/controller/SlsSelectionCommand.cxx
deleted file mode 100644
index d85e80f74..000000000
--- a/sd/source/ui/slidesorter/controller/SlsSelectionCommand.cxx
+++ /dev/null
@@ -1,88 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlsSelectionCommand.hxx"
-
-#include "controller/SlsCurrentSlideManager.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageDescriptor.hxx"
-
-#include "sdpage.hxx"
-
-namespace sd { namespace slidesorter { namespace controller {
-
-
-
-SelectionCommand::SelectionCommand (
- PageSelector& rSelector,
- const ::boost::shared_ptr<CurrentSlideManager>& rpCurrentSlideManager,
- const model::SlideSorterModel& rModel)
- : mrPageSelector(rSelector),
- mpCurrentSlideManager(rpCurrentSlideManager),
- mrModel(rModel),
- maPagesToSelect(),
- mnCurrentPageIndex(-1)
-{
-}
-
-
-
-
-void SelectionCommand::AddSlide (sal_uInt16 nPageIndex)
-{
- maPagesToSelect.push_back(nPageIndex);
-}
-
-
-
-
-void SelectionCommand::operator() (void)
-{
- OSL_ASSERT(mpCurrentSlideManager.get()!=NULL);
-
- mrPageSelector.DeselectAllPages();
-
- if (mnCurrentPageIndex >= 0)
- mpCurrentSlideManager->SwitchCurrentSlide(mnCurrentPageIndex);
-
- PageList::iterator iPage = maPagesToSelect.begin();
- PageList::iterator iEnd = maPagesToSelect.end();
- for (; iPage!=iEnd; ++iPage)
- {
- sal_Int32 nIndex (*iPage);
- if (nIndex >= 0)
- mrPageSelector.SelectPage(mrModel.GetPageDescriptor(nIndex));
- }
-}
-
-
-} } } // end of namespace sd::slidesorter::controller
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsSelectionCommand.hxx b/sd/source/ui/slidesorter/controller/SlsSelectionCommand.hxx
deleted file mode 100644
index 62e0c819b..000000000
--- a/sd/source/ui/slidesorter/controller/SlsSelectionCommand.hxx
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_SELECTION_COMMAND_HXX
-#define SD_SLIDESORTER_SELECTION_COMMAND_HXX
-
-#include "controller/SlsPageSelector.hxx"
-#include "SlsCommand.hxx"
-#include <tools/solar.h>
-#include <com/sun/star/drawing/XDrawPage.hpp>
-
-#include <boost/shared_ptr.hpp>
-#include <vector>
-
-namespace sd { namespace slidesorter { namespace model {
-class SlideSorterModel;
-} } }
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-class CurrentSlideManager;
-class PageSelector;
-
-/** The SelectionCommand stores a list of pages that it will select on its
- execution. Furthermore it will make a page the current page. Note that
- internally pages are stored with pointers because this command is designed
- to be executed after model changes where page indices may change but
- page object identities remain.
-*/
-class SelectionCommand
- : public Command
-{
-public:
- /** Create a new command object that will on its exection use the given
- PageSelector to select a set of pages.
- */
- SelectionCommand (
- PageSelector& rSelector,
- const ::boost::shared_ptr<controller::CurrentSlideManager>& rpCurrentSlideManager,
- const model::SlideSorterModel& rModel);
-
- /** Remember the specified page to be selected when this command is
- executed.
- */
- void AddSlide (sal_uInt16 nPageIndex);
-
- /** Execute the command and select the pages added by previous calls to
- AddPages() and AddPage().
- */
- virtual void operator() (void);
-
-private:
- /// The page selector is used to select pages and set the current page.
- PageSelector& mrPageSelector;
- /// Used for setting the current slide.
- ::boost::shared_ptr<controller::CurrentSlideManager> mpCurrentSlideManager;
- /// The model is used to translate page indices into page pointers.
- const model::SlideSorterModel& mrModel;
- /// The list of pages to be selected when the command is executed.
- typedef ::std::vector<sal_Int32> PageList;
- PageList maPagesToSelect;
- /** The page that will be made the current page when the command is
- executed.
- */
- sal_Int32 mnCurrentPageIndex;
-};
-
-} } } // end of namespace sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx b/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx
deleted file mode 100644
index 13e02cd84..000000000
--- a/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx
+++ /dev/null
@@ -1,2027 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "controller/SlsSelectionFunction.hxx"
-
-#include "SlideSorter.hxx"
-#include "SlideSorterViewShell.hxx"
-#include "SlsDragAndDropContext.hxx"
-#include "controller/SlsTransferable.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsPageSelector.hxx"
-#include "controller/SlsFocusManager.hxx"
-#include "controller/SlsScrollBarManager.hxx"
-#include "controller/SlsClipboard.hxx"
-#include "controller/SlsCurrentSlideManager.hxx"
-#include "controller/SlsInsertionIndicatorHandler.hxx"
-#include "controller/SlsSelectionManager.hxx"
-#include "controller/SlsProperties.hxx"
-#include "controller/SlsProperties.hxx"
-#include "controller/SlsSlotManager.hxx"
-#include "controller/SlsVisibleAreaManager.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "model/SlsPageEnumerationProvider.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsLayouter.hxx"
-#include "view/SlsPageObjectLayouter.hxx"
-#include "view/SlsButtonBar.hxx"
-#include "framework/FrameworkHelper.hxx"
-#include "ViewShellBase.hxx"
-#include "DrawController.hxx"
-#include "Window.hxx"
-#include "sdpage.hxx"
-#include "drawdoc.hxx"
-#include "DrawDocShell.hxx"
-#include "sdxfer.hxx"
-#include "ViewShell.hxx"
-#include "ViewShellBase.hxx"
-#include "FrameView.hxx"
-#include "app.hrc"
-#include "sdresid.hxx"
-#include "strings.hrc"
-#include <vcl/sound.hxx>
-#include <sfx2/viewfrm.hxx>
-#include <sfx2/dispatch.hxx>
-#include <svx/svdpagv.hxx>
-#include <vcl/msgbox.hxx>
-#include <svx/svxids.hrc>
-#include <boost/bind.hpp>
-#include <boost/optional.hpp>
-
-namespace {
-static const sal_uInt32 SINGLE_CLICK (0x00000001);
-static const sal_uInt32 DOUBLE_CLICK (0x00000002);
-static const sal_uInt32 LEFT_BUTTON (0x00000010);
-static const sal_uInt32 RIGHT_BUTTON (0x00000020);
-static const sal_uInt32 MIDDLE_BUTTON (0x00000040);
-static const sal_uInt32 BUTTON_DOWN (0x00000100);
-static const sal_uInt32 BUTTON_UP (0x00000200);
-static const sal_uInt32 MOUSE_MOTION (0x00000400);
-static const sal_uInt32 MOUSE_DRAG (0x00000800);
-// The rest leaves the lower 16 bit untouched so that it can be used with
-// key codes.
-static const sal_uInt32 OVER_SELECTED_PAGE (0x00010000);
-static const sal_uInt32 OVER_UNSELECTED_PAGE (0x00020000);
-static const sal_uInt32 OVER_FADE_INDICATOR (0x00040000);
-static const sal_uInt32 OVER_BUTTON_AREA (0x00080000);
-static const sal_uInt32 OVER_BUTTON (0x00100000);
-static const sal_uInt32 SHIFT_MODIFIER (0x00200000);
-static const sal_uInt32 CONTROL_MODIFIER (0x00400000);
-
-static const sal_uInt32 KEY_EVENT (0x10000000);
-
-// Some absent events are defined so they can be expressed explicitly.
-static const sal_uInt32 NO_MODIFIER (0x00000000);
-static const sal_uInt32 NOT_OVER_PAGE (0x00000000);
-
-// Masks
-static const sal_uInt32 MODIFIER_MASK (SHIFT_MODIFIER | CONTROL_MODIFIER);
-static const sal_uInt32 BUTTON_MASK (LEFT_BUTTON | RIGHT_BUTTON | MIDDLE_BUTTON);
-
-} // end of anonymous namespace
-
-
-
-// Define some macros to make the following switch statement more readable.
-#define ANY_MODIFIER(code) \
- code|NO_MODIFIER: \
- case code|SHIFT_MODIFIER: \
- case code|CONTROL_MODIFIER
-
-namespace sd { namespace slidesorter { namespace controller {
-
-//===== SelectionFunction::EventDescriptor ====================================
-
-class SelectionFunction::EventDescriptor
-{
-public:
- Point maMousePosition;
- Point maMouseModelPosition;
- model::SharedPageDescriptor mpHitDescriptor;
- SdrPage* mpHitPage;
- sal_uInt32 mnEventCode;
- bool mbIsOverButton;
- InsertionIndicatorHandler::Mode meDragMode;
- bool mbMakeSelectionVisible;
- bool mbIsLeaving;
-
- EventDescriptor (
- sal_uInt32 nEventType,
- const MouseEvent& rEvent,
- SlideSorter& rSlideSorter);
- EventDescriptor (
- sal_uInt32 nEventType,
- const AcceptDropEvent& rEvent,
- const sal_Int8 nDragAction,
- SlideSorter& rSlideSorter);
- EventDescriptor (
- const KeyEvent& rEvent,
- SlideSorter& rSlideSorter);
-
- void SetDragMode (const InsertionIndicatorHandler::Mode eMode);
-
-private:
- /** Compute a numerical code that describes a mouse event and that can
- be used for fast look up of the appropriate reaction.
- */
- sal_uInt32 EncodeMouseEvent (const MouseEvent& rEvent) const;
-
- /** Compute a numerical code that describes a key event and that can
- be used for fast look up of the appropriate reaction.
- */
- sal_uInt32 EncodeKeyEvent (const KeyEvent& rEvent) const;
-
- /** Compute a numerical code that describes the current state like
- whether the selection rectangle is visible or whether the page under
- the mouse or the one that has the focus is selected.
- */
- sal_uInt32 EncodeState (void) const;
-};
-
-
-
-
-//===== SelectionFunction::ModeHandler ========================================
-
-class SelectionFunction::ModeHandler
-{
-public:
- ModeHandler (
- SlideSorter& rSlideSorter,
- SelectionFunction& rSelectionFunction,
- const bool bIsMouseOverIndicatorAllowed);
- virtual ~ModeHandler (void);
-
- virtual Mode GetMode (void) const = 0;
- virtual void Abort (void) = 0;
- virtual void ProcessEvent (EventDescriptor& rDescriptor);
-
- /** Set the selection to exactly the specified page and also set it as
- the current page.
- */
- void SetCurrentPage (const model::SharedPageDescriptor& rpDescriptor);
-
- /// Deselect all pages.
- void DeselectAllPages (void);
- void SelectOnePage (const model::SharedPageDescriptor& rpDescriptor);
-
- /** When the view on which this selection function is working is the
- main view then the view is switched to the regular editing view.
- */
- void SwitchView (const model::SharedPageDescriptor& rpDescriptor);
-
- void StartDrag (
- const Point& rMousePosition,
- const InsertionIndicatorHandler::Mode eMode);
-
- bool IsMouseOverIndicatorAllowed (void) const;
-
-protected:
- SlideSorter& mrSlideSorter;
- SelectionFunction& mrSelectionFunction;
-
- virtual bool ProcessButtonDownEvent (EventDescriptor& rDescriptor);
- virtual bool ProcessButtonUpEvent (EventDescriptor& rDescriptor);
- virtual bool ProcessMotionEvent (EventDescriptor& rDescriptor);
- virtual bool ProcessDragEvent (EventDescriptor& rDescriptor);
- virtual bool HandleUnprocessedEvent (EventDescriptor& rDescriptor);
-
- void ReprocessEvent (EventDescriptor& rDescriptor);
-
-private:
- const bool mbIsMouseOverIndicatorAllowed;
-};
-
-
-/** This is the default handler for processing events. It activates the
- multi selection or drag-and-drop when the right conditions are met.
-*/
-class NormalModeHandler : public SelectionFunction::ModeHandler
-{
-public:
- NormalModeHandler (
- SlideSorter& rSlideSorter,
- SelectionFunction& rSelectionFunction);
- virtual ~NormalModeHandler (void);
-
- virtual SelectionFunction::Mode GetMode (void) const;
- virtual void Abort (void);
-
- void ResetButtonDownLocation (void);
-
-protected:
- virtual bool ProcessButtonDownEvent (SelectionFunction::EventDescriptor& rDescriptor);
- virtual bool ProcessButtonUpEvent (SelectionFunction::EventDescriptor& rDescriptor);
- virtual bool ProcessMotionEvent (SelectionFunction::EventDescriptor& rDescriptor);
- virtual bool ProcessDragEvent (SelectionFunction::EventDescriptor& rDescriptor);
-
-private:
- ::boost::optional<Point> maButtonDownLocation;
-
- /** Select all pages between and including the selection anchor and the
- specified page.
- */
- void RangeSelect (const model::SharedPageDescriptor& rpDescriptor);
-};
-
-
-/** Handle events during a multi selection, which typically is started by
- pressing the left mouse button when not over a page.
-*/
-class MultiSelectionModeHandler : public SelectionFunction::ModeHandler
-{
-public:
- /** Start a rectangle selection at the given position.
- */
- MultiSelectionModeHandler (
- SlideSorter& rSlideSorter,
- SelectionFunction& rSelectionFunction,
- const Point& rMouseModelPosition,
- const sal_uInt32 nEventCode);
- virtual ~MultiSelectionModeHandler (void);
-
- virtual SelectionFunction::Mode GetMode (void) const;
- virtual void Abort (void);
- virtual void ProcessEvent (SelectionFunction::EventDescriptor& rDescriptor);
-
- enum SelectionMode { SM_Normal, SM_Add, SM_Toggle };
-
- void SetSelectionMode (const SelectionMode eSelectionMode);
- void SetSelectionModeFromModifier (const sal_uInt32 nEventCode);
-
-protected:
- virtual bool ProcessButtonUpEvent (SelectionFunction::EventDescriptor& rDescriptor);
- virtual bool ProcessMotionEvent (SelectionFunction::EventDescriptor& rDescriptor);
- virtual bool HandleUnprocessedEvent (SelectionFunction::EventDescriptor& rDescriptor);
-
-private:
- SelectionMode meSelectionMode;
- Point maSecondCorner;
- Pointer maSavedPointer;
- sal_Int32 mnAnchorIndex;
- sal_Int32 mnSecondIndex;
- view::ButtonBar::Lock maButtonBarLock;
-
- virtual void UpdateModelPosition (const Point& rMouseModelPosition);
- virtual void UpdateSelection (void);
-
- /** Update the rectangle selection so that the given position becomes
- the new second point of the selection rectangle.
- */
- void UpdatePosition (
- const Point& rMousePosition,
- const bool bAllowAutoScroll);
-
- void UpdateSelectionState (
- const model::SharedPageDescriptor& rpDescriptor,
- const bool bIsInSelection) const;
-};
-
-
-/** Handle events during drag-and-drop.
-*/
-class DragAndDropModeHandler : public SelectionFunction::ModeHandler
-{
-public:
- DragAndDropModeHandler (
- SlideSorter& rSlideSorter,
- SelectionFunction& rSelectionFunction,
- const Point& rMousePosition,
- ::Window* pWindow);
- virtual ~DragAndDropModeHandler (void);
-
- virtual SelectionFunction::Mode GetMode (void) const;
- virtual void Abort (void);
-
-protected:
- virtual bool ProcessButtonUpEvent (SelectionFunction::EventDescriptor& rDescriptor);
- virtual bool ProcessDragEvent (SelectionFunction::EventDescriptor& rDescriptor);
-
-private:
- ::boost::scoped_ptr<DragAndDropContext> mpDragAndDropContext;
-};
-
-
-/** Handle events while the left mouse button is pressed over the button
- bar.
-*/
-class ButtonModeHandler : public SelectionFunction::ModeHandler
-{
-public:
- ButtonModeHandler (
- SlideSorter& rSlideSorter,
- SelectionFunction& rSelectionFunction);
- virtual ~ButtonModeHandler (void);
- virtual void Abort (void);
-
- virtual SelectionFunction::Mode GetMode (void) const;
-
-protected:
- virtual bool ProcessButtonDownEvent (SelectionFunction::EventDescriptor& rDescriptor);
- virtual bool ProcessButtonUpEvent (SelectionFunction::EventDescriptor& rDescriptor);
- virtual bool ProcessMotionEvent (SelectionFunction::EventDescriptor& rDescriptor);
-};
-
-
-
-
-//===== SelectionFunction =====================================================
-
-TYPEINIT1(SelectionFunction, FuPoor);
-
-
-SelectionFunction::SelectionFunction (
- SlideSorter& rSlideSorter,
- SfxRequest& rRequest)
- : FuPoor (
- rSlideSorter.GetViewShell(),
- rSlideSorter.GetContentWindow().get(),
- &rSlideSorter.GetView(),
- rSlideSorter.GetModel().GetDocument(),
- rRequest),
- mrSlideSorter(rSlideSorter),
- mrController(mrSlideSorter.GetController()),
- mbDragSelection(false),
- maInsertionMarkerBox(),
- mbProcessingMouseButtonDown(false),
- mnShiftKeySelectionAnchor(-1),
- mpModeHandler(new NormalModeHandler(rSlideSorter, *this))
-{
-}
-
-
-
-
-SelectionFunction::~SelectionFunction (void)
-{
- mpModeHandler.reset();
-}
-
-
-
-
-FunctionReference SelectionFunction::Create(
- SlideSorter& rSlideSorter,
- SfxRequest& rRequest)
-{
- FunctionReference xFunc( new SelectionFunction( rSlideSorter, rRequest ) );
- return xFunc;
-}
-
-
-
-
-sal_Bool SelectionFunction::MouseButtonDown (const MouseEvent& rEvent)
-{
- // remember button state for creation of own MouseEvents
- SetMouseButtonCode (rEvent.GetButtons());
- aMDPos = rEvent.GetPosPixel();
- mbProcessingMouseButtonDown = true;
-
- // mpWindow->CaptureMouse();
-
- ProcessMouseEvent(BUTTON_DOWN, rEvent);
-
- return sal_True;
-}
-
-
-
-
-sal_Bool SelectionFunction::MouseMove (const MouseEvent& rEvent)
-{
- ProcessMouseEvent(MOUSE_MOTION, rEvent);
- return sal_True;
-}
-
-
-
-
-sal_Bool SelectionFunction::MouseButtonUp (const MouseEvent& rEvent)
-{
- mrController.GetScrollBarManager().StopAutoScroll ();
-
- ProcessMouseEvent(BUTTON_UP, rEvent);
-
- mbProcessingMouseButtonDown = false;
-// mpWindow->ReleaseMouse();
-
- return sal_True;
-}
-
-
-
-
-void SelectionFunction::NotifyDragFinished (void)
-{
- SwitchToNormalMode();
-}
-
-
-
-
-sal_Bool SelectionFunction::KeyInput (const KeyEvent& rEvent)
-{
- view::SlideSorterView::DrawLock aDrawLock (mrSlideSorter);
- PageSelector::UpdateLock aLock (mrSlideSorter);
- FocusManager& rFocusManager (mrController.GetFocusManager());
- sal_Bool bResult = sal_False;
-
- const KeyCode& rCode (rEvent.GetKeyCode());
- switch (rCode.GetCode())
- {
- case KEY_RETURN:
- {
- model::SharedPageDescriptor pDescriptor (rFocusManager.GetFocusedPageDescriptor());
- ViewShell* pViewShell = mrSlideSorter.GetViewShell();
- if (rFocusManager.HasFocus() && pDescriptor && pViewShell!=NULL)
- {
- // The Return key triggers different functions depending on
- // whether the slide sorter is the main view or displayed in
- // the right pane.
- if (pViewShell->IsMainViewShell())
- {
- mpModeHandler->SetCurrentPage(pDescriptor);
- mpModeHandler->SwitchView(pDescriptor);
- }
- else
- {
- pViewShell->GetDispatcher()->Execute(
- SID_INSERTPAGE,
- SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
- }
- bResult = sal_True;
- }
- break;
- }
-
- case KEY_TAB:
- if ( ! rFocusManager.IsFocusShowing())
- {
- rFocusManager.ShowFocus();
- bResult = sal_True;
- }
- break;
-
- case KEY_ESCAPE:
- // When there is an active multiselection or drag-and-drop
- // operation then stop that.
- mpModeHandler->Abort();
- SwitchToNormalMode();
- bResult = sal_True;
- break;
-
- case KEY_SPACE:
- {
- // Toggle the selection state.
- model::SharedPageDescriptor pDescriptor (rFocusManager.GetFocusedPageDescriptor());
- if (pDescriptor && rCode.IsMod1())
- {
- if (pDescriptor->HasState(model::PageDescriptor::ST_Selected))
- mrController.GetPageSelector().DeselectPage(pDescriptor, false);
- else
- mrController.GetPageSelector().SelectPage(pDescriptor);
- }
- bResult = sal_True;
- }
- break;
-
-
- // Move the focus indicator left.
- case KEY_LEFT:
- MoveFocus(FocusManager::FMD_LEFT, rCode.IsShift(), rCode.IsMod1());
- bResult = sal_True;
- break;
-
- // Move the focus indicator right.
- case KEY_RIGHT:
- MoveFocus(FocusManager::FMD_RIGHT, rCode.IsShift(), rCode.IsMod1());
- bResult = sal_True;
- break;
-
- // Move the focus indicator up.
- case KEY_UP:
- MoveFocus(FocusManager::FMD_UP, rCode.IsShift(), rCode.IsMod1());
- bResult = sal_True;
- break;
-
- // Move the focus indicator down.
- case KEY_DOWN:
- MoveFocus(FocusManager::FMD_DOWN, rCode.IsShift(), rCode.IsMod1());
- bResult = sal_True;
- break;
-
- // Go to previous page. No wrap around.
- case KEY_PAGEUP:
- GotoNextPage(-1);
- bResult = sal_True;
- break;
-
- // Go to next page. No wrap around..
- case KEY_PAGEDOWN:
- GotoNextPage(+1);
- bResult = sal_True;
- break;
-
- case KEY_HOME:
- GotoPage(0);
- bResult = sal_True;
- break;
-
- case KEY_END:
- GotoPage(mrSlideSorter.GetModel().GetPageCount()-1);
- bResult = sal_True;
- break;
-
- case KEY_DELETE:
- case KEY_BACKSPACE:
- {
- if (mrSlideSorter.GetProperties()->IsUIReadOnly())
- break;
-
- mrController.GetSelectionManager()->DeleteSelectedPages(rCode.GetCode()==KEY_DELETE);
-
- mnShiftKeySelectionAnchor = -1;
- bResult = sal_True;
- }
- break;
-
- case KEY_F10:
- if (rCode.IsShift())
- {
- mpModeHandler->SelectOnePage(
- mrSlideSorter.GetController().GetFocusManager().GetFocusedPageDescriptor());
- }
- break;
-
- default:
- break;
- }
-
- if ( ! bResult)
- bResult = FuPoor::KeyInput(rEvent);
-
- return bResult;
-}
-
-
-
-
-void SelectionFunction::MoveFocus (
- const FocusManager::FocusMoveDirection eDirection,
- const bool bIsShiftDown,
- const bool bIsControlDown)
-{
- // Remember the anchor of shift key multi selection.
- if (bIsShiftDown)
- {
- if (mnShiftKeySelectionAnchor<0)
- {
- model::SharedPageDescriptor pFocusedDescriptor (
- mrController.GetFocusManager().GetFocusedPageDescriptor());
- mnShiftKeySelectionAnchor = pFocusedDescriptor->GetPageIndex();
- }
- }
- else if ( ! bIsControlDown)
- ResetShiftKeySelectionAnchor();
-
- mrController.GetFocusManager().MoveFocus(eDirection);
-
- PageSelector& rSelector (mrController.GetPageSelector());
- model::SharedPageDescriptor pFocusedDescriptor (
- mrController.GetFocusManager().GetFocusedPageDescriptor());
- if (bIsShiftDown)
- {
- // When shift is pressed then select all pages in the range between
- // the currently and the previously focused pages, including them.
- if (pFocusedDescriptor)
- {
- sal_Int32 nPageRangeEnd (pFocusedDescriptor->GetPageIndex());
- model::PageEnumeration aPages (
- model::PageEnumerationProvider::CreateAllPagesEnumeration(
- mrSlideSorter.GetModel()));
- while (aPages.HasMoreElements())
- {
- model::SharedPageDescriptor pDescriptor (aPages.GetNextElement());
- if (pDescriptor)
- {
- const sal_Int32 nPageIndex(pDescriptor->GetPageIndex());
- if ((nPageIndex>=mnShiftKeySelectionAnchor && nPageIndex<=nPageRangeEnd)
- || (nPageIndex<=mnShiftKeySelectionAnchor && nPageIndex>=nPageRangeEnd))
- {
- rSelector.SelectPage(pDescriptor);
- }
- else
- {
- rSelector.DeselectPage(pDescriptor);
- }
- }
- }
- }
- }
- else if (bIsControlDown)
- {
- // When control is pressed then do not alter the selection or the
- // current page, just move the focus.
- }
- else
- {
- // Without shift just select the focused page.
- mpModeHandler->SelectOnePage(pFocusedDescriptor);
- }
-}
-
-
-
-
-void SelectionFunction::Activate()
-{
- FuPoor::Activate();
-}
-
-
-
-
-void SelectionFunction::Deactivate()
-{
- FuPoor::Deactivate();
-}
-
-
-
-void SelectionFunction::ScrollStart (void)
-{
-}
-
-
-
-
-void SelectionFunction::ScrollEnd (void)
-{
-}
-
-
-
-
-void SelectionFunction::DoCut (void)
-{
- if ( ! mrSlideSorter.GetProperties()->IsUIReadOnly())
- {
- mrController.GetClipboard().DoCut();
- }
-}
-
-
-
-
-void SelectionFunction::DoCopy (void)
-{
- mrController.GetClipboard().DoCopy();
-}
-
-
-
-
-void SelectionFunction::DoPaste (void)
-{
- if ( ! mrSlideSorter.GetProperties()->IsUIReadOnly())
- {
- mrController.GetClipboard().DoPaste();
- }
-}
-
-
-
-
-bool SelectionFunction::cancel (void)
-{
- mrController.GetFocusManager().ToggleFocus();
- return true;
-}
-
-
-
-
-void SelectionFunction::GotoNextPage (int nOffset)
-{
- model::SharedPageDescriptor pDescriptor
- = mrController.GetCurrentSlideManager()->GetCurrentSlide();
- if (pDescriptor.get() != NULL)
- {
- SdPage* pPage = pDescriptor->GetPage();
- OSL_ASSERT(pPage!=NULL);
- sal_Int32 nIndex = (pPage->GetPageNum()-1) / 2;
- GotoPage(nIndex + nOffset);
- }
- ResetShiftKeySelectionAnchor();
-}
-
-
-
-
-void SelectionFunction::GotoPage (int nIndex)
-{
- sal_uInt16 nPageCount = (sal_uInt16)mrSlideSorter.GetModel().GetPageCount();
-
- if (nIndex >= nPageCount)
- nIndex = nPageCount - 1;
- if (nIndex < 0)
- nIndex = 0;
-
- mrController.GetFocusManager().SetFocusedPage(nIndex);
- model::SharedPageDescriptor pNextPageDescriptor (
- mrSlideSorter.GetModel().GetPageDescriptor (nIndex));
- if (pNextPageDescriptor.get() != NULL)
- mpModeHandler->SetCurrentPage(pNextPageDescriptor);
- else
- {
- OSL_ASSERT(pNextPageDescriptor.get() != NULL);
- }
- ResetShiftKeySelectionAnchor();
-}
-
-
-
-
-void SelectionFunction::ProcessMouseEvent (sal_uInt32 nEventType, const MouseEvent& rEvent)
-{
- // #95491# remember button state for creation of own MouseEvents
- SetMouseButtonCode (rEvent.GetButtons());
-
- EventDescriptor aEventDescriptor (nEventType, rEvent, mrSlideSorter);
- ProcessEvent(aEventDescriptor);
-}
-
-
-
-
-void SelectionFunction::MouseDragged (
- const AcceptDropEvent& rEvent,
- const sal_Int8 nDragAction)
-{
- EventDescriptor aEventDescriptor (MOUSE_DRAG, rEvent, nDragAction, mrSlideSorter);
- ProcessEvent(aEventDescriptor);
-}
-
-
-
-
-void SelectionFunction::ProcessKeyEvent (const KeyEvent& rEvent)
-{
- EventDescriptor aEventDescriptor (rEvent, mrSlideSorter);
- ProcessEvent(aEventDescriptor);
-}
-
-
-
-
-void SelectionFunction::ProcessEvent (EventDescriptor& rDescriptor)
-{
- // The call to ProcessEvent may switch to another mode handler.
- // Prevent the untimely destruction of the called handler by aquiring a
- // temporary reference here.
- ::boost::shared_ptr<ModeHandler> pModeHandler (mpModeHandler);
- pModeHandler->ProcessEvent(rDescriptor);
-}
-
-
-
-
-bool Match (
- const sal_uInt32 nEventCode,
- const sal_uInt32 nPositivePattern)
-{
- return (nEventCode & nPositivePattern)==nPositivePattern;
-}
-
-
-
-
-void SelectionFunction::SwitchToNormalMode (void)
-{
- if (mpModeHandler->GetMode() != NormalMode)
- SwitchMode(::boost::shared_ptr<ModeHandler>(
- new NormalModeHandler(mrSlideSorter, *this)));
-}
-
-
-
-
-void SelectionFunction::SwitchToDragAndDropMode (const Point aMousePosition)
-{
- if (mpModeHandler->GetMode() != DragAndDropMode)
- {
- SwitchMode(::boost::shared_ptr<ModeHandler>(
- new DragAndDropModeHandler(mrSlideSorter, *this, aMousePosition, mpWindow)));
- }
-}
-
-
-
-
-void SelectionFunction::SwitchToMultiSelectionMode (
- const Point aMousePosition,
- const sal_uInt32 nEventCode)
-{
- if (mpModeHandler->GetMode() != MultiSelectionMode)
- SwitchMode(::boost::shared_ptr<ModeHandler>(
- new MultiSelectionModeHandler(mrSlideSorter, *this, aMousePosition, nEventCode)));
-}
-
-
-
-
-bool SelectionFunction::SwitchToButtonMode (void)
-{
- // Do not show the buttons for draw pages.
- ::boost::shared_ptr<ViewShell> pMainViewShell (mrSlideSorter.GetViewShellBase()->GetMainViewShell());
- if (pMainViewShell
- && pMainViewShell->GetShellType()!=ViewShell::ST_DRAW
- && mpModeHandler->GetMode() != ButtonMode)
- {
- SwitchMode(::boost::shared_ptr<ModeHandler>(new ButtonModeHandler(mrSlideSorter, *this)));
- return true;
- }
- else
- return false;
-}
-
-
-
-
-void SelectionFunction::SwitchMode (const ::boost::shared_ptr<ModeHandler>& rpHandler)
-{
- // Not all modes allow mouse over indicator.
- if (mpModeHandler->IsMouseOverIndicatorAllowed() != rpHandler->IsMouseOverIndicatorAllowed())
- {
- if ( ! rpHandler->IsMouseOverIndicatorAllowed())
- {
- mrSlideSorter.GetView().SetPageUnderMouse(model::SharedPageDescriptor());
- mrSlideSorter.GetView().GetButtonBar().ResetPage();
- }
- else
- mrSlideSorter.GetView().UpdatePageUnderMouse(false);
- }
-
- mpModeHandler = rpHandler;
-}
-
-
-
-
-void SelectionFunction::ResetShiftKeySelectionAnchor (void)
-{
- mnShiftKeySelectionAnchor = -1;
-}
-
-
-
-
-void SelectionFunction::ResetMouseAnchor (void)
-{
- if (mpModeHandler && mpModeHandler->GetMode() == NormalMode)
- {
- ::boost::shared_ptr<NormalModeHandler> pHandler (
- ::boost::dynamic_pointer_cast<NormalModeHandler>(mpModeHandler));
- if (pHandler)
- pHandler->ResetButtonDownLocation();
- }
-}
-
-
-
-
-//===== EventDescriptor =======================================================
-
-SelectionFunction::EventDescriptor::EventDescriptor (
- const sal_uInt32 nEventType,
- const MouseEvent& rEvent,
- SlideSorter& rSlideSorter)
- : maMousePosition(rEvent.GetPosPixel()),
- maMouseModelPosition(),
- mpHitDescriptor(),
- mpHitPage(),
- mnEventCode(nEventType),
- mbIsOverButton(rSlideSorter.GetView().GetButtonBar().IsMouseOverButton()),
- meDragMode(InsertionIndicatorHandler::MoveMode),
- mbMakeSelectionVisible(true),
- mbIsLeaving(false)
-{
- maMouseModelPosition = rSlideSorter.GetContentWindow()->PixelToLogic(maMousePosition);
- mpHitDescriptor = rSlideSorter.GetController().GetPageAt(maMousePosition);
- if (mpHitDescriptor)
- {
- mpHitPage = mpHitDescriptor->GetPage();
- }
-
- mnEventCode |= EncodeMouseEvent(rEvent);
- mnEventCode |= EncodeState();
-
- // Detect the mouse leaving the window. When not button is pressed then
- // we can call IsLeaveWindow at the event. Otherwise we have to make an
- // explicit test.
- mbIsLeaving = rEvent.IsLeaveWindow()
- || ! Rectangle(Point(0,0),
- rSlideSorter.GetContentWindow()->GetOutputSizePixel()).IsInside(maMousePosition);
-}
-
-
-
-
-SelectionFunction::EventDescriptor::EventDescriptor (
- const sal_uInt32 nEventType,
- const AcceptDropEvent& rEvent,
- const sal_Int8 nDragAction,
- SlideSorter& rSlideSorter)
- : maMousePosition(rEvent.maPosPixel),
- maMouseModelPosition(),
- mpHitDescriptor(),
- mpHitPage(),
- mnEventCode(nEventType),
- mbIsOverButton(rSlideSorter.GetView().GetButtonBar().IsMouseOverButton()),
- meDragMode(InsertionIndicatorHandler::GetModeFromDndAction(nDragAction)),
- mbMakeSelectionVisible(true),
- mbIsLeaving(false)
-{
- maMouseModelPosition = rSlideSorter.GetContentWindow()->PixelToLogic(maMousePosition);
- mpHitDescriptor = rSlideSorter.GetController().GetPageAt(maMousePosition);
- if (mpHitDescriptor)
- {
- mpHitPage = mpHitDescriptor->GetPage();
- }
-
- mnEventCode |= EncodeState();
-
- // Detect the mouse leaving the window. When not button is pressed then
- // we can call IsLeaveWindow at the event. Otherwise we have to make an
- // explicit test.
- mbIsLeaving = rEvent.mbLeaving
- || ! Rectangle(Point(0,0),
- rSlideSorter.GetContentWindow()->GetOutputSizePixel()).IsInside(maMousePosition);
-}
-
-
-
-
-SelectionFunction::EventDescriptor::EventDescriptor (
- const KeyEvent& rEvent,
- SlideSorter& rSlideSorter)
- : maMousePosition(),
- maMouseModelPosition(),
- mpHitDescriptor(),
- mpHitPage(),
- mnEventCode(KEY_EVENT),
- mbIsOverButton(rSlideSorter.GetView().GetButtonBar().IsMouseOverButton()),
- meDragMode(InsertionIndicatorHandler::MoveMode),
- mbMakeSelectionVisible(true),
- mbIsLeaving(false)
-{
- model::SharedPageDescriptor pHitDescriptor (
- rSlideSorter.GetController().GetFocusManager().GetFocusedPageDescriptor());
- if (pHitDescriptor.get() != NULL)
- {
- mpHitPage = pHitDescriptor->GetPage();
- mpHitDescriptor = pHitDescriptor;
- }
-
- mnEventCode |= EncodeKeyEvent(rEvent) | EncodeState();
-}
-
-
-
-
-void SelectionFunction::EventDescriptor::SetDragMode (const InsertionIndicatorHandler::Mode eMode)
-{
- meDragMode = eMode;
-}
-
-
-
-
-sal_uInt32 SelectionFunction::EventDescriptor::EncodeMouseEvent (
- const MouseEvent& rEvent) const
-{
- // Initialize with the type of mouse event.
- sal_uInt32 nEventCode (mnEventCode & (BUTTON_DOWN | BUTTON_UP | MOUSE_MOTION));
-
- // Detect the affected button.
- switch (rEvent.GetButtons())
- {
- case MOUSE_LEFT: nEventCode |= LEFT_BUTTON; break;
- case MOUSE_RIGHT: nEventCode |= RIGHT_BUTTON; break;
- case MOUSE_MIDDLE: nEventCode |= MIDDLE_BUTTON; break;
- }
-
- // Detect the number of clicks.
- switch (rEvent.GetClicks())
- {
- case 1: nEventCode |= SINGLE_CLICK; break;
- case 2: nEventCode |= DOUBLE_CLICK; break;
- }
-
- // Detect pressed modifier keys.
- if (rEvent.IsShift())
- nEventCode |= SHIFT_MODIFIER;
- if (rEvent.IsMod1())
- nEventCode |= CONTROL_MODIFIER;
-
- // Detect whether the mouse is over one of the active elements inside a
- // page object.
- if (mbIsOverButton)
- nEventCode |= OVER_BUTTON;
-
- return nEventCode;
-}
-
-
-
-
-sal_uInt32 SelectionFunction::EventDescriptor::EncodeKeyEvent (const KeyEvent& rEvent) const
-{
- // The key code in the lower 16 bit.
- sal_uInt32 nEventCode (rEvent.GetKeyCode().GetCode());
-
- // Detect pressed modifier keys.
- if (rEvent.GetKeyCode().IsShift())
- nEventCode |= SHIFT_MODIFIER;
- if (rEvent.GetKeyCode().IsMod1())
- nEventCode |= CONTROL_MODIFIER;
-
- return nEventCode;
-}
-
-
-
-
-sal_uInt32 SelectionFunction::EventDescriptor::EncodeState (void) const
-{
- sal_uInt32 nEventCode (0);
-
- // Detect whether the event has happened over a page object.
- if (mpHitPage!=NULL && mpHitDescriptor)
- {
- if (mpHitDescriptor->HasState(model::PageDescriptor::ST_Selected))
- nEventCode |= OVER_SELECTED_PAGE;
- else
- nEventCode |= OVER_UNSELECTED_PAGE;
-
- // Detect whether the mouse is over one of the active elements
- // inside a page object.
- if (mbIsOverButton)
- nEventCode |= OVER_BUTTON;
- }
-
- return nEventCode;
-}
-
-
-
-
-//===== SelectionFunction::ModeHandler ========================================
-
-SelectionFunction::ModeHandler::ModeHandler (
- SlideSorter& rSlideSorter,
- SelectionFunction& rSelectionFunction,
- const bool bIsMouseOverIndicatorAllowed)
- : mrSlideSorter(rSlideSorter),
- mrSelectionFunction(rSelectionFunction),
- mbIsMouseOverIndicatorAllowed(bIsMouseOverIndicatorAllowed)
-{
-}
-
-
-
-
-SelectionFunction::ModeHandler::~ModeHandler (void)
-{
-}
-
-
-
-
-void SelectionFunction::ModeHandler::ReprocessEvent (EventDescriptor& rDescriptor)
-{
- mrSelectionFunction.ProcessEvent(rDescriptor);
-}
-
-
-
-
-void SelectionFunction::ModeHandler::ProcessEvent (
- SelectionFunction::EventDescriptor& rDescriptor)
-{
- PageSelector::BroadcastLock aBroadcastLock (mrSlideSorter);
- PageSelector::UpdateLock aUpdateLock (mrSlideSorter);
-
- bool bIsProcessed (false);
- switch (rDescriptor.mnEventCode & (BUTTON_DOWN | BUTTON_UP | MOUSE_MOTION | MOUSE_DRAG))
- {
- case BUTTON_DOWN:
- bIsProcessed = ProcessButtonDownEvent(rDescriptor);
- break;
-
- case BUTTON_UP:
- bIsProcessed = ProcessButtonUpEvent(rDescriptor);
- break;
-
- case MOUSE_MOTION:
- bIsProcessed = ProcessMotionEvent(rDescriptor);
- break;
-
- case MOUSE_DRAG:
- bIsProcessed = ProcessDragEvent(rDescriptor);
- break;
- }
-
- if ( ! bIsProcessed)
- HandleUnprocessedEvent(rDescriptor);
-}
-
-
-
-
-bool SelectionFunction::ModeHandler::ProcessButtonDownEvent (EventDescriptor&)
-{
- return false;
-}
-
-
-
-
-bool SelectionFunction::ModeHandler::ProcessButtonUpEvent (EventDescriptor&)
-{
- mrSelectionFunction.SwitchToNormalMode();
- return false;
-}
-
-
-
-
-bool SelectionFunction::ModeHandler::ProcessMotionEvent (EventDescriptor& rDescriptor)
-{
- if (mbIsMouseOverIndicatorAllowed)
- mrSlideSorter.GetView().UpdatePageUnderMouse(
- rDescriptor.maMousePosition,
- (rDescriptor.mnEventCode & LEFT_BUTTON) != 0,
- true);
-
- if (rDescriptor.mbIsLeaving)
- {
- mrSelectionFunction.SwitchToNormalMode();
- mrSlideSorter.GetView().SetPageUnderMouse(model::SharedPageDescriptor());
-
- return true;
- }
- else
- return false;
-}
-
-
-
-
-bool SelectionFunction::ModeHandler::ProcessDragEvent (EventDescriptor&)
-{
- return false;
-}
-
-
-
-
-bool SelectionFunction::ModeHandler::HandleUnprocessedEvent (EventDescriptor&)
-{
- return false;
-}
-
-
-
-
-void SelectionFunction::ModeHandler::SetCurrentPage (
- const model::SharedPageDescriptor& rpDescriptor)
-{
- SelectOnePage(rpDescriptor);
- mrSlideSorter.GetController().GetCurrentSlideManager()->SwitchCurrentSlide(rpDescriptor);
-}
-
-
-
-
-void SelectionFunction::ModeHandler::DeselectAllPages (void)
-{
- mrSlideSorter.GetController().GetPageSelector().DeselectAllPages();
- mrSelectionFunction.ResetShiftKeySelectionAnchor();
-}
-
-
-
-
-void SelectionFunction::ModeHandler::SelectOnePage (
- const model::SharedPageDescriptor& rpDescriptor)
-{
- DeselectAllPages();
- mrSlideSorter.GetController().GetPageSelector().SelectPage(rpDescriptor);
-}
-
-
-
-
-void SelectionFunction::ModeHandler::SwitchView (const model::SharedPageDescriptor& rpDescriptor)
-{
- // Switch to the draw view. This is done only when the current
- // view is the main view.
- ViewShell* pViewShell = mrSlideSorter.GetViewShell();
- if (pViewShell!=NULL && pViewShell->IsMainViewShell())
- {
- if (rpDescriptor.get()!=NULL && rpDescriptor->GetPage()!=NULL)
- {
- mrSlideSorter.GetModel().GetDocument()->SetSelected(rpDescriptor->GetPage(), sal_True);
- pViewShell->GetFrameView()->SetSelectedPage(
- (rpDescriptor->GetPage()->GetPageNum()-1)/2);
- }
- if (mrSlideSorter.GetViewShellBase() != NULL)
- framework::FrameworkHelper::Instance(*mrSlideSorter.GetViewShellBase())->RequestView(
- framework::FrameworkHelper::msImpressViewURL,
- framework::FrameworkHelper::msCenterPaneURL);
- }
-}
-
-
-
-
-void SelectionFunction::ModeHandler::StartDrag (
- const Point& rMousePosition,
- const InsertionIndicatorHandler::Mode eMode)
-{
- (void)eMode;
- // Do not start a drag-and-drop operation when one is already active.
- // (when dragging pages from one document into another, pressing a
- // modifier key can trigger a MouseMotion event in the originating
- // window (focus still in there). Together with the mouse button pressed
- // (drag-and-drop is active) this triggers the start of drag-and-drop.)
- if (SD_MOD()->pTransferDrag != NULL)
- return;
-
- if ( ! mrSlideSorter.GetProperties()->IsUIReadOnly())
- {
- mrSelectionFunction.SwitchToDragAndDropMode(rMousePosition);
- }
-}
-
-
-
-
-bool SelectionFunction::ModeHandler::IsMouseOverIndicatorAllowed (void) const
-{
- return mbIsMouseOverIndicatorAllowed;
-}
-
-
-
-
-//===== NormalModeHandler =====================================================
-
-NormalModeHandler::NormalModeHandler (
- SlideSorter& rSlideSorter,
- SelectionFunction& rSelectionFunction)
- : ModeHandler(rSlideSorter, rSelectionFunction, true),
- maButtonDownLocation()
-{
-}
-
-
-
-
-NormalModeHandler::~NormalModeHandler (void)
-{
-}
-
-
-
-
-SelectionFunction::Mode NormalModeHandler::GetMode (void) const
-{
- return SelectionFunction::NormalMode;
-}
-
-
-
-
-void NormalModeHandler::Abort (void)
-{
-}
-
-
-
-
-bool NormalModeHandler::ProcessButtonDownEvent (
- SelectionFunction::EventDescriptor& rDescriptor)
-{
- // Remember the location where the left button is pressed. With
- // that we can filter away motion events that are caused by key
- // presses. We also can tune the minimal motion distance that
- // triggers a drag-and-drop operation.
- if ((rDescriptor.mnEventCode & BUTTON_DOWN) != 0)
- maButtonDownLocation = rDescriptor.maMousePosition;
-
- switch (rDescriptor.mnEventCode)
- {
- case BUTTON_DOWN | LEFT_BUTTON | SINGLE_CLICK | OVER_UNSELECTED_PAGE:
- SetCurrentPage(rDescriptor.mpHitDescriptor);
- break;
-
- case BUTTON_DOWN | LEFT_BUTTON | SINGLE_CLICK | OVER_SELECTED_PAGE:
- break;
-
- case BUTTON_DOWN | LEFT_BUTTON | DOUBLE_CLICK | OVER_SELECTED_PAGE:
- case BUTTON_DOWN | LEFT_BUTTON | DOUBLE_CLICK | OVER_UNSELECTED_PAGE:
- // A double click allways shows the selected slide in the center
- // pane in an edit view.
- SetCurrentPage(rDescriptor.mpHitDescriptor);
- SwitchView(rDescriptor.mpHitDescriptor);
- break;
-
- case BUTTON_DOWN | LEFT_BUTTON | SINGLE_CLICK | OVER_SELECTED_PAGE | SHIFT_MODIFIER:
- case BUTTON_DOWN | LEFT_BUTTON | SINGLE_CLICK | OVER_UNSELECTED_PAGE | SHIFT_MODIFIER:
- // Range selection with the shift modifier.
- RangeSelect(rDescriptor.mpHitDescriptor);
- break;
-
- case BUTTON_DOWN | LEFT_BUTTON | SINGLE_CLICK | OVER_UNSELECTED_PAGE | OVER_BUTTON:
- case BUTTON_DOWN | LEFT_BUTTON | SINGLE_CLICK | OVER_SELECTED_PAGE | OVER_BUTTON:
- OSL_ASSERT(mrSlideSorter.GetView().GetButtonBar().IsMouseOverButton());
-
- // Switch to button mode only when the buttons are visible
- // (or being faded in.)
- if (mrSlideSorter.GetView().GetButtonBar().IsVisible(rDescriptor.mpHitDescriptor))
- {
- if (mrSelectionFunction.SwitchToButtonMode())
- ReprocessEvent(rDescriptor);
- }
- else
- {
- // When the buttons are not (yet) visible then behave like
- // the left button had been clicked over any other part of
- // the slide.
- SetCurrentPage(rDescriptor.mpHitDescriptor);
- }
- break;
-
- // Right button for context menu.
- case BUTTON_DOWN | RIGHT_BUTTON | SINGLE_CLICK | OVER_UNSELECTED_PAGE:
- // Single right click and shift+F10 select as preparation to
- // show the context menu. Change the selection only when the
- // page under the mouse is not selected. In this case the
- // selection is set to this single page. Otherwise the
- // selection is not modified.
- SetCurrentPage(rDescriptor.mpHitDescriptor);
- rDescriptor.mbMakeSelectionVisible = false;
- break;
-
- case BUTTON_DOWN | RIGHT_BUTTON | SINGLE_CLICK | OVER_SELECTED_PAGE:
- // Do not change the selection. Just adjust the insertion indicator.
- rDescriptor.mbMakeSelectionVisible = false;
- break;
-
- case BUTTON_DOWN | RIGHT_BUTTON | SINGLE_CLICK | NOT_OVER_PAGE:
- // Remember the current selection so that when a multi selection
- // is started, we can restore the previous selection.
- mrSlideSorter.GetModel().SaveCurrentSelection();
- DeselectAllPages();
- break;
-
- case ANY_MODIFIER(BUTTON_DOWN | LEFT_BUTTON | SINGLE_CLICK | NOT_OVER_PAGE):
- // Remember the current selection so that when a multi selection
- // is started, we can restore the previous selection.
- mrSlideSorter.GetModel().SaveCurrentSelection();
- DeselectAllPages();
- break;
-
- default:
- return false;
- }
- return true;
-}
-
-
-
-
-bool NormalModeHandler::ProcessButtonUpEvent (
- SelectionFunction::EventDescriptor& rDescriptor)
-{
- bool bIsProcessed (true);
- switch (rDescriptor.mnEventCode)
- {
- case BUTTON_UP | LEFT_BUTTON | SINGLE_CLICK | OVER_SELECTED_PAGE:
- SetCurrentPage(rDescriptor.mpHitDescriptor);
- break;
-
- // Multi selection with the control modifier.
- case BUTTON_UP | LEFT_BUTTON | SINGLE_CLICK | OVER_SELECTED_PAGE | CONTROL_MODIFIER:
- mrSlideSorter.GetController().GetPageSelector().DeselectPage(
- rDescriptor.mpHitDescriptor);
- break;
-
- case BUTTON_UP | LEFT_BUTTON | SINGLE_CLICK | OVER_UNSELECTED_PAGE | CONTROL_MODIFIER:
- mrSlideSorter.GetController().GetPageSelector().SelectPage(
- rDescriptor.mpHitDescriptor);
- mrSlideSorter.GetView().UpdatePageUnderMouse(
- rDescriptor.mpHitDescriptor,
- rDescriptor.maMousePosition,
- false);
- break;
- case BUTTON_UP | LEFT_BUTTON | SINGLE_CLICK | NOT_OVER_PAGE:
- break;
-
- default:
- bIsProcessed = false;
- break;
- }
- mrSelectionFunction.SwitchToNormalMode();
- return bIsProcessed;
-}
-
-
-
-
-
-bool NormalModeHandler::ProcessMotionEvent (
- SelectionFunction::EventDescriptor& rDescriptor)
-{
- if (ModeHandler::ProcessMotionEvent(rDescriptor))
- return true;
-
- bool bIsProcessed (true);
- switch (rDescriptor.mnEventCode)
- {
- case ANY_MODIFIER(MOUSE_MOTION | LEFT_BUTTON | SINGLE_CLICK | OVER_UNSELECTED_PAGE):
- // SetCurrentPage(rDescriptor.mpHitDescriptor);
- // Fallthrough
-
- // A mouse motion without visible substitution starts that.
- case ANY_MODIFIER(MOUSE_MOTION | LEFT_BUTTON | SINGLE_CLICK | OVER_SELECTED_PAGE):
- {
- if (maButtonDownLocation)
- {
- const sal_Int32 nDistance (maButtonDownLocation
- ? ::std::max (
- abs(maButtonDownLocation->X() - rDescriptor.maMousePosition.X()),
- abs(maButtonDownLocation->Y() - rDescriptor.maMousePosition.Y()))
- : 0);
- if (nDistance > 3)
- StartDrag(
- rDescriptor.maMousePosition,
- (rDescriptor.mnEventCode & CONTROL_MODIFIER) != 0
- ? InsertionIndicatorHandler::CopyMode
- : InsertionIndicatorHandler::MoveMode);
- }
- }
- break;
-
- // A mouse motion not over a page starts a rectangle selection.
- case ANY_MODIFIER(MOUSE_MOTION | LEFT_BUTTON | SINGLE_CLICK | NOT_OVER_PAGE):
- mrSelectionFunction.SwitchToMultiSelectionMode(
- rDescriptor.maMouseModelPosition,
- rDescriptor.mnEventCode);
- break;
-
- default:
- bIsProcessed = false;
- break;
- }
- return bIsProcessed;
-}
-
-
-
-
-bool NormalModeHandler::ProcessDragEvent (SelectionFunction::EventDescriptor& rDescriptor)
-{
- mrSelectionFunction.SwitchToDragAndDropMode(rDescriptor.maMousePosition);
- ReprocessEvent(rDescriptor);
- return true;
-}
-
-
-
-
-void NormalModeHandler::RangeSelect (const model::SharedPageDescriptor& rpDescriptor)
-{
- PageSelector::UpdateLock aLock (mrSlideSorter);
- PageSelector& rSelector (mrSlideSorter.GetController().GetPageSelector());
-
- model::SharedPageDescriptor pAnchor (rSelector.GetSelectionAnchor());
- DeselectAllPages();
-
- if (pAnchor.get() != NULL)
- {
- // Select all pages between the anchor and the given one, including
- // the two.
- const sal_uInt16 nAnchorIndex ((pAnchor->GetPage()->GetPageNum()-1) / 2);
- const sal_uInt16 nOtherIndex ((rpDescriptor->GetPage()->GetPageNum()-1) / 2);
-
- // Iterate over all pages in the range. Start with the anchor
- // page. This way the PageSelector will recognize it again as
- // anchor (the first selected page after a DeselectAllPages()
- // becomes the anchor.)
- const sal_uInt16 nStep ((nAnchorIndex < nOtherIndex) ? +1 : -1);
- sal_uInt16 nIndex (nAnchorIndex);
- while (true)
- {
- rSelector.SelectPage(nIndex);
- if (nIndex == nOtherIndex)
- break;
- nIndex = nIndex + nStep;
- }
- }
-}
-
-
-
-
-void NormalModeHandler::ResetButtonDownLocation (void)
-{
- maButtonDownLocation = ::boost::optional<Point>();
-}
-
-
-
-
-//===== MultiSelectionModeHandler =============================================
-
-MultiSelectionModeHandler::MultiSelectionModeHandler (
- SlideSorter& rSlideSorter,
- SelectionFunction& rSelectionFunction,
- const Point& rMouseModelPosition,
- const sal_uInt32 nEventCode)
- : ModeHandler(rSlideSorter, rSelectionFunction, false),
- meSelectionMode(SM_Normal),
- maSecondCorner(rMouseModelPosition),
- maSavedPointer(mrSlideSorter.GetContentWindow()->GetPointer()),
- mnAnchorIndex(-1),
- mnSecondIndex(-1),
- maButtonBarLock(rSlideSorter)
-{
- const Pointer aSelectionPointer (POINTER_TEXT);
- mrSlideSorter.GetContentWindow()->SetPointer(aSelectionPointer);
- SetSelectionModeFromModifier(nEventCode);
-}
-
-
-
-
-
-MultiSelectionModeHandler::~MultiSelectionModeHandler (void)
-{
- mrSlideSorter.GetContentWindow()->SetPointer(maSavedPointer);
-}
-
-
-
-
-SelectionFunction::Mode MultiSelectionModeHandler::GetMode (void) const
-{
- return SelectionFunction::MultiSelectionMode;
-}
-
-
-
-
-void MultiSelectionModeHandler::Abort (void)
-{
- mrSlideSorter.GetView().RequestRepaint(mrSlideSorter.GetModel().RestoreSelection());
-}
-
-
-
-
-void MultiSelectionModeHandler::ProcessEvent (
- SelectionFunction::EventDescriptor& rDescriptor)
-{
- // During a multi selection we do not want sudden jumps of the
- // visible area caused by moving newly selected pages into view.
- // Therefore disable that temporarily. The disabler object is
- // released at the end of the event processing, after the focus and
- // current slide have been updated.
- VisibleAreaManager::TemporaryDisabler aDisabler (mrSlideSorter);
-
- ModeHandler::ProcessEvent(rDescriptor);
-}
-
-
-
-
-bool MultiSelectionModeHandler::ProcessButtonUpEvent (
- SelectionFunction::EventDescriptor& rDescriptor)
-{
- if (Match(rDescriptor.mnEventCode, BUTTON_UP | LEFT_BUTTON | SINGLE_CLICK))
- {
- mrSelectionFunction.SwitchToNormalMode();
- return true;
- }
- else
- return false;
-}
-
-
-
-
-bool MultiSelectionModeHandler::ProcessMotionEvent (
- SelectionFunction::EventDescriptor& rDescriptor)
-{
- // The selection rectangle is visible. Handle events accordingly.
- if (Match(rDescriptor.mnEventCode, MOUSE_MOTION | LEFT_BUTTON | SINGLE_CLICK))
- {
- SetSelectionModeFromModifier(rDescriptor.mnEventCode);
- UpdatePosition(rDescriptor.maMousePosition, true);
- rDescriptor.mbMakeSelectionVisible = false;
- return true;
- }
- else
- return false;
-}
-
-
-
-bool MultiSelectionModeHandler::HandleUnprocessedEvent (
- SelectionFunction::EventDescriptor& rDescriptor)
-{
- if ( ! ModeHandler::HandleUnprocessedEvent(rDescriptor))
- {
- // If the event has not been processed then stop multi selection.
- mrSelectionFunction.SwitchToNormalMode();
- ReprocessEvent(rDescriptor);
- }
- return true;
-}
-
-
-
-
-void MultiSelectionModeHandler::UpdatePosition (
- const Point& rMousePosition,
- const bool bAllowAutoScroll)
-{
- VisibleAreaManager::TemporaryDisabler aDisabler (mrSlideSorter);
-
- // Convert window coordinates into model coordinates (we need the
- // window coordinates for auto-scrolling because that remains
- // constant while scrolling.)
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- const Point aMouseModelPosition (pWindow->PixelToLogic(rMousePosition));
-
- if ( ! (bAllowAutoScroll && mrSlideSorter.GetController().GetScrollBarManager().AutoScroll(
- rMousePosition,
- ::boost::bind(
- &MultiSelectionModeHandler::UpdatePosition,
- this,
- rMousePosition,
- false))))
- {
- UpdateModelPosition(aMouseModelPosition);
- }
-}
-
-
-
-
-void MultiSelectionModeHandler::SetSelectionModeFromModifier (
- const sal_uInt32 nEventCode)
-{
- switch (nEventCode & MODIFIER_MASK)
- {
- case NO_MODIFIER:
- SetSelectionMode(SM_Normal);
- break;
-
- case SHIFT_MODIFIER:
- SetSelectionMode(SM_Add);
- break;
-
- case CONTROL_MODIFIER:
- SetSelectionMode(SM_Toggle);
- break;
- }
-}
-
-
-
-
-void MultiSelectionModeHandler::SetSelectionMode (const SelectionMode eSelectionMode)
-{
- if (meSelectionMode != eSelectionMode)
- {
- meSelectionMode = eSelectionMode;
- UpdateSelection();
- }
-}
-
-
-
-
-void MultiSelectionModeHandler::UpdateSelectionState (
- const model::SharedPageDescriptor& rpDescriptor,
- const bool bIsInSelection) const
-{
- // Determine whether the page was selected before the rectangle
- // selection was started.
- const bool bWasSelected (rpDescriptor->HasState(model::PageDescriptor::ST_WasSelected));
-
- // Combine the two selection states depending on the selection mode.
- bool bSelect (false);
- switch(meSelectionMode)
- {
- case SM_Normal:
- bSelect = bIsInSelection;
- break;
-
- case SM_Add:
- bSelect = bIsInSelection || bWasSelected;
- break;
-
- case SM_Toggle:
- if (bIsInSelection)
- bSelect = !bWasSelected;
- else
- bSelect = bWasSelected;
- break;
- }
-
- // Set the new selection state.
- if (bSelect)
- mrSlideSorter.GetController().GetPageSelector().SelectPage(rpDescriptor);
- else
- mrSlideSorter.GetController().GetPageSelector().DeselectPage(rpDescriptor);
-}
-
-
-
-
-void MultiSelectionModeHandler::UpdateModelPosition (const Point& rMouseModelPosition)
-{
- maSecondCorner = rMouseModelPosition;
- UpdateSelection();
-}
-
-
-
-
-void MultiSelectionModeHandler::UpdateSelection (void)
-{
- view::SlideSorterView::DrawLock aLock (mrSlideSorter);
-
- model::SlideSorterModel& rModel (mrSlideSorter.GetModel());
- const sal_Int32 nPageCount (rModel.GetPageCount());
-
- const sal_Int32 nIndexUnderMouse (
- mrSlideSorter.GetView().GetLayouter().GetIndexAtPoint (
- maSecondCorner,
- false,
- false));
- if (nIndexUnderMouse>=0 && nIndexUnderMouse<nPageCount)
- {
- if (mnAnchorIndex < 0)
- mnAnchorIndex = nIndexUnderMouse;
- mnSecondIndex = nIndexUnderMouse;
-
- Range aRange (mnAnchorIndex, mnSecondIndex);
- aRange.Justify();
-
- for (sal_Int32 nIndex=0; nIndex<nPageCount; ++nIndex)
- {
- UpdateSelectionState(rModel.GetPageDescriptor(nIndex), aRange.IsInside(nIndex));
- }
- }
-}
-
-
-
-
-//===== DragAndDropModeHandler ================================================
-
-DragAndDropModeHandler::DragAndDropModeHandler (
- SlideSorter& rSlideSorter,
- SelectionFunction& rSelectionFunction,
- const Point& rMousePosition,
- ::Window* pWindow)
- : ModeHandler(rSlideSorter, rSelectionFunction, false)
-{
- SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
- if (pDragTransferable==NULL && mrSlideSorter.GetViewShell() != NULL)
- {
- SlideSorterViewShell* pSlideSorterViewShell
- = dynamic_cast<SlideSorterViewShell*>(mrSlideSorter.GetViewShell());
- if (pSlideSorterViewShell != NULL)
- pSlideSorterViewShell->StartDrag(rMousePosition, pWindow);
- pDragTransferable = SD_MOD()->pTransferDrag;
- }
-
- mpDragAndDropContext.reset(new DragAndDropContext(mrSlideSorter));
- mrSlideSorter.GetController().GetInsertionIndicatorHandler()->Start(
- pDragTransferable != NULL
- && pDragTransferable->GetView()==&mrSlideSorter.GetView());
-}
-
-
-
-
-DragAndDropModeHandler::~DragAndDropModeHandler (void)
-{
- if (mpDragAndDropContext)
- {
- // Disconnect the substitution handler from this selection function.
- mpDragAndDropContext->SetTargetSlideSorter();
- mpDragAndDropContext.reset();
- }
- mrSlideSorter.GetController().GetInsertionIndicatorHandler()->End(Animator::AM_Animated);
-}
-
-
-
-
-SelectionFunction::Mode DragAndDropModeHandler::GetMode (void) const
-{
- return SelectionFunction::DragAndDropMode;
-}
-
-
-
-
-void DragAndDropModeHandler::Abort (void)
-{
- mrSlideSorter.GetController().GetClipboard().Abort();
- if (mpDragAndDropContext)
- mpDragAndDropContext->Dispose();
- // mrSlideSorter.GetView().RequestRepaint(mrSlideSorter.GetModel().RestoreSelection());
-}
-
-
-
-
-bool DragAndDropModeHandler::ProcessButtonUpEvent (
- SelectionFunction::EventDescriptor& rDescriptor)
-{
- if (Match(rDescriptor.mnEventCode, BUTTON_UP | LEFT_BUTTON))
- {
- // The following Process() call may lead to the desctruction
- // of rDescriptor.mpHitDescriptor so release our reference to it.
- rDescriptor.mpHitDescriptor.reset();
- mrSelectionFunction.SwitchToNormalMode();
- return true;
- }
- else
- return false;
-}
-
-
-
-
-bool DragAndDropModeHandler::ProcessDragEvent (SelectionFunction::EventDescriptor& rDescriptor)
-{
- OSL_ASSERT(mpDragAndDropContext);
-
- if (rDescriptor.mbIsLeaving)
- {
- mrSelectionFunction.SwitchToNormalMode();
- }
- else if (mpDragAndDropContext)
- {
- mpDragAndDropContext->UpdatePosition(
- rDescriptor.maMousePosition,
- rDescriptor.meDragMode);
- }
-
- return true;
-}
-
-
-
-
-//===== ButtonModeHandler =====================================================
-
-ButtonModeHandler::ButtonModeHandler (
- SlideSorter& rSlideSorter,
- SelectionFunction& rSelectionFunction)
- : ModeHandler(rSlideSorter, rSelectionFunction, true)
-{
-}
-
-
-
-
-ButtonModeHandler::~ButtonModeHandler (void)
-{
-}
-
-
-
-
-SelectionFunction::Mode ButtonModeHandler::GetMode (void) const
-{
- return SelectionFunction::ButtonMode;
-}
-
-
-
-
-void ButtonModeHandler::Abort (void)
-{
-}
-
-
-
-
-bool ButtonModeHandler::ProcessButtonDownEvent (SelectionFunction::EventDescriptor& rDescriptor)
-{
- switch (rDescriptor.mnEventCode)
- {
- case BUTTON_DOWN | LEFT_BUTTON | SINGLE_CLICK | OVER_UNSELECTED_PAGE | OVER_BUTTON:
- case BUTTON_DOWN | LEFT_BUTTON | SINGLE_CLICK | OVER_SELECTED_PAGE | OVER_BUTTON:
- // Remember page and button index. When mouse button is
- // released over same page and button then invoke action of that
- // button.
- mrSlideSorter.GetView().GetButtonBar().ProcessButtonDownEvent(
- rDescriptor.mpHitDescriptor,
- rDescriptor.maMouseModelPosition);
- return true;
-
- default:
- return false;
- }
-}
-
-
-
-
-bool ButtonModeHandler::ProcessButtonUpEvent (SelectionFunction::EventDescriptor& rDescriptor)
-{
- switch (rDescriptor.mnEventCode & BUTTON_MASK)
- {
- case LEFT_BUTTON:
- mrSlideSorter.GetView().GetButtonBar().ProcessButtonUpEvent(
- rDescriptor.mpHitDescriptor,
- rDescriptor.maMouseModelPosition);
- mrSelectionFunction.SwitchToNormalMode();
- return true;
- }
-
- return false;
-}
-
-
-
-
-bool ButtonModeHandler::ProcessMotionEvent (SelectionFunction::EventDescriptor& rDescriptor)
-{
- switch (rDescriptor.mnEventCode & (MOUSE_MOTION | BUTTON_MASK))
- {
- case MOUSE_MOTION | LEFT_BUTTON:
- mrSlideSorter.GetView().GetButtonBar().ProcessMouseMotionEvent(
- rDescriptor.mpHitDescriptor,
- rDescriptor.maMouseModelPosition,
- true);
- return true;
-
- case MOUSE_MOTION:
- mrSlideSorter.GetView().GetButtonBar().ProcessMouseMotionEvent(
- rDescriptor.mpHitDescriptor,
- rDescriptor.maMouseModelPosition,
- false);
- return true;
- }
-
- return false;
-}
-
-
-
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx b/sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx
deleted file mode 100644
index 3d8726df6..000000000
--- a/sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx
+++ /dev/null
@@ -1,362 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "controller/SlsSelectionManager.hxx"
-
-#include "SlideSorter.hxx"
-#include "SlsCommand.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsAnimator.hxx"
-#include "controller/SlsAnimationFunction.hxx"
-#include "controller/SlsCurrentSlideManager.hxx"
-#include "controller/SlsFocusManager.hxx"
-#include "controller/SlsPageSelector.hxx"
-#include "controller/SlsProperties.hxx"
-#include "controller/SlsScrollBarManager.hxx"
-#include "controller/SlsSlotManager.hxx"
-#include "controller/SlsSelectionObserver.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageEnumerationProvider.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsLayouter.hxx"
-#include "drawdoc.hxx"
-#include "Window.hxx"
-#include <svx/svxids.hrc>
-#include <com/sun/star/drawing/XMasterPagesSupplier.hpp>
-#include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
-
-#include "res_bmp.hrc"
-#include "sdresid.hxx"
-#include "strings.hrc"
-#include "app.hrc"
-#include "glob.hrc"
-
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::drawing;
-using namespace ::com::sun::star::uno;
-using namespace ::sd::slidesorter::model;
-using namespace ::sd::slidesorter::view;
-using namespace ::sd::slidesorter::controller;
-
-namespace sd { namespace slidesorter { namespace controller {
-
-
-class SelectionManager::PageInsertionListener
- : public SfxListener
-{
-public:
-
-};
-
-
-SelectionManager::SelectionManager (SlideSorter& rSlideSorter)
- : mrSlideSorter(rSlideSorter),
- mrController(rSlideSorter.GetController()),
- maSelectionBeforeSwitch(),
- mbIsMakeSelectionVisiblePending(true),
- mnInsertionPosition(-1),
- mnAnimationId(Animator::NotAnAnimationId),
- maRequestedTopLeft(),
- mpPageInsertionListener(),
- mpSelectionObserver(new SelectionObserver(rSlideSorter))
-{
-}
-
-
-
-
-SelectionManager::~SelectionManager (void)
-{
- if (mnAnimationId != Animator::NotAnAnimationId)
- mrController.GetAnimator()->RemoveAnimation(mnAnimationId);
-}
-
-
-
-
-void SelectionManager::DeleteSelectedPages (const bool bSelectFollowingPage)
-{
- // Create some locks to prevent updates of the model, view, selection
- // state while modifying any of them.
- SlideSorterController::ModelChangeLock aLock (mrController);
- SlideSorterView::DrawLock aDrawLock (mrSlideSorter);
- PageSelector::UpdateLock aSelectionLock (mrSlideSorter);
-
- // Hide focus.
- bool bIsFocusShowing = mrController.GetFocusManager().IsFocusShowing();
- if (bIsFocusShowing)
- mrController.GetFocusManager().ToggleFocus();
-
- // Store pointers to all selected page descriptors. This is necessary
- // because the pages get deselected when the first one is deleted.
- model::PageEnumeration aPageEnumeration (
- PageEnumerationProvider::CreateSelectedPagesEnumeration(mrSlideSorter.GetModel()));
- ::std::vector<SdPage*> aSelectedPages;
- sal_Int32 nNewCurrentSlide (-1);
- while (aPageEnumeration.HasMoreElements())
- {
- SharedPageDescriptor pDescriptor (aPageEnumeration.GetNextElement());
- aSelectedPages.push_back(pDescriptor->GetPage());
- if (bSelectFollowingPage || nNewCurrentSlide<0)
- nNewCurrentSlide = pDescriptor->GetPageIndex();
- }
- if (aSelectedPages.empty())
- return;
-
- // Determine the slide to select (and thereby make the current slide)
- // after the deletion.
- if (bSelectFollowingPage)
- nNewCurrentSlide -= aSelectedPages.size() - 1;
- else
- --nNewCurrentSlide;
-
- // The actual deletion of the selected pages is done in one of two
- // helper functions. They are specialized for normal respectively for
- // master pages.
- mrSlideSorter.GetView().BegUndo (SdResId(STR_UNDO_DELETEPAGES));
- if (mrSlideSorter.GetModel().GetEditMode() == EM_PAGE)
- DeleteSelectedNormalPages(aSelectedPages);
- else
- DeleteSelectedMasterPages(aSelectedPages);
- mrSlideSorter.GetView().EndUndo ();
-
- mrController.HandleModelChange();
- aLock.Release();
-
- // Show focus and move it to next valid location.
- if (bIsFocusShowing)
- mrController.GetFocusManager().ToggleFocus();
-
- // Set the new current slide.
- if (nNewCurrentSlide < 0)
- nNewCurrentSlide = 0;
- else if (nNewCurrentSlide >= mrSlideSorter.GetModel().GetPageCount())
- nNewCurrentSlide = mrSlideSorter.GetModel().GetPageCount()-1;
- mrController.GetPageSelector().CountSelectedPages();
- mrController.GetPageSelector().SelectPage(nNewCurrentSlide);
- mrController.GetFocusManager().SetFocusedPage(nNewCurrentSlide);
-}
-
-
-
-
-void SelectionManager::DeleteSelectedNormalPages (const ::std::vector<SdPage*>& rSelectedPages)
-{
- // Prepare the deletion via the UNO API.
- OSL_ASSERT(mrSlideSorter.GetModel().GetEditMode() == EM_PAGE);
-
- try
- {
- Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier( mrSlideSorter.GetModel().GetDocument()->getUnoModel(), UNO_QUERY_THROW );
- Reference<drawing::XDrawPages> xPages( xDrawPagesSupplier->getDrawPages(), UNO_QUERY_THROW );
-
- // Iterate over all pages that where seleted when this method was called
- // and delete the draw page the notes page. The iteration is done in
- // reverse order so that when one slide is not deleted (to avoid an
- // empty document) the remaining slide is the first one.
- ::std::vector<SdPage*>::const_reverse_iterator aI;
- for (aI=rSelectedPages.rbegin(); aI!=rSelectedPages.rend(); ++aI)
- {
- // Do not delete the last slide in the document.
- if (xPages->getCount() <= 1)
- break;
-
- const sal_uInt16 nPage (model::FromCoreIndex((*aI)->GetPageNum()));
-
- Reference< XDrawPage > xPage( xPages->getByIndex( nPage ), UNO_QUERY_THROW );
- xPages->remove(xPage);
- }
- }
- catch( Exception& )
- {
- OSL_FAIL("SelectionManager::DeleteSelectedNormalPages(), exception caught!");
- }
-}
-
-
-
-
-void SelectionManager::DeleteSelectedMasterPages (const ::std::vector<SdPage*>& rSelectedPages)
-{
- // Prepare the deletion via the UNO API.
- OSL_ASSERT(mrSlideSorter.GetModel().GetEditMode() == EM_MASTERPAGE);
-
- try
- {
- Reference<drawing::XMasterPagesSupplier> xDrawPagesSupplier( mrSlideSorter.GetModel().GetDocument()->getUnoModel(), UNO_QUERY_THROW );
- Reference<drawing::XDrawPages> xPages( xDrawPagesSupplier->getMasterPages(), UNO_QUERY_THROW );
-
- // Iterate over all pages that where seleted when this method was called
- // and delete the draw page the notes page. The iteration is done in
- // reverse order so that when one slide is not deleted (to avoid an
- // empty document) the remaining slide is the first one.
- ::std::vector<SdPage*>::const_reverse_iterator aI;
- for (aI=rSelectedPages.rbegin(); aI!=rSelectedPages.rend(); ++aI)
- {
- // Do not delete the last slide in the document.
- if (xPages->getCount() <= 1)
- break;
-
- const sal_uInt16 nPage (model::FromCoreIndex((*aI)->GetPageNum()));
-
- Reference< XDrawPage > xPage( xPages->getByIndex( nPage ), UNO_QUERY_THROW );
- xPages->remove(xPage);
- }
- }
- catch( Exception& )
- {
- OSL_FAIL("SelectionManager::DeleteSelectedMasterPages(), exception caught!");
- }
-}
-
-
-
-
-void SelectionManager::SelectionHasChanged (const bool bMakeSelectionVisible)
-{
- if (bMakeSelectionVisible)
- mbIsMakeSelectionVisiblePending = true;
-
- ViewShell* pViewShell = mrSlideSorter.GetViewShell();
- if (pViewShell != NULL)
- {
- pViewShell->Invalidate (SID_EXPAND_PAGE);
- pViewShell->Invalidate (SID_SUMMARY_PAGE);
- pViewShell->Invalidate(SID_SHOW_SLIDE);
- pViewShell->Invalidate(SID_HIDE_SLIDE);
- pViewShell->Invalidate(SID_DELETE_PAGE);
- pViewShell->Invalidate(SID_DELETE_MASTER_PAGE);
- pViewShell->Invalidate(SID_ASSIGN_LAYOUT);
-
- // StatusBar
- pViewShell->Invalidate (SID_STATUS_PAGE);
- pViewShell->Invalidate (SID_STATUS_LAYOUT);
-
- OSL_ASSERT(mrController.GetCurrentSlideManager());
- SharedPageDescriptor pDescriptor(mrController.GetCurrentSlideManager()->GetCurrentSlide());
- if (pDescriptor.get() != NULL)
- pViewShell->UpdatePreview(pDescriptor->GetPage());
-
- // Tell the slection change listeners that the selection has changed.
- ::std::vector<Link>::iterator iListener (maSelectionChangeListeners.begin());
- ::std::vector<Link>::iterator iEnd (maSelectionChangeListeners.end());
- for (; iListener!=iEnd; ++iListener)
- {
- iListener->Call(NULL);
- }
-
- // Reset the insertion position: until set again it is calculated from
- // the current selection.
- mnInsertionPosition = -1;
- }
-}
-
-
-
-
-void SelectionManager::AddSelectionChangeListener (const Link& rListener)
-{
- if (::std::find (
- maSelectionChangeListeners.begin(),
- maSelectionChangeListeners.end(),
- rListener) == maSelectionChangeListeners.end())
- {
- maSelectionChangeListeners.push_back (rListener);
- }
-}
-
-
-
-
-void SelectionManager::RemoveSelectionChangeListener(const Link&rListener)
-{
- maSelectionChangeListeners.erase (
- ::std::find (
- maSelectionChangeListeners.begin(),
- maSelectionChangeListeners.end(),
- rListener));
-}
-
-
-
-
-sal_Int32 SelectionManager::GetInsertionPosition (void) const
-{
- sal_Int32 nInsertionPosition (mnInsertionPosition);
- if (nInsertionPosition < 0)
- {
- model::PageEnumeration aSelectedPages
- (model::PageEnumerationProvider::CreateSelectedPagesEnumeration(
- mrSlideSorter.GetModel()));
- // Initialize (for the case of an empty selection) with the position
- // at the end of the document.
- nInsertionPosition = mrSlideSorter.GetModel().GetPageCount();
- while (aSelectedPages.HasMoreElements())
- {
- const sal_Int32 nPosition (aSelectedPages.GetNextElement()->GetPage()->GetPageNum());
- // Convert *2+1 index to straight index (n-1)/2 after the page
- // (+1).
- nInsertionPosition = model::FromCoreIndex(nPosition) + 1;
- }
-
- }
- return nInsertionPosition;
-}
-
-
-
-
-void SelectionManager::SetInsertionPosition (const sal_Int32 nInsertionPosition)
-{
- if (nInsertionPosition < 0)
- mnInsertionPosition = -1;
- else if (nInsertionPosition > mrSlideSorter.GetModel().GetPageCount())
- {
- // Assert but then ignore invalid values.
- OSL_ASSERT(nInsertionPosition<=mrSlideSorter.GetModel().GetPageCount());
- return;
- }
- else
- mnInsertionPosition = nInsertionPosition;
-}
-
-
-
-
-::boost::shared_ptr<SelectionObserver> SelectionManager::GetSelectionObserver (void) const
-{
- return mpSelectionObserver;
-}
-
-} } } // end of namespace ::sd::slidesorter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsSelectionObserver.cxx b/sd/source/ui/slidesorter/controller/SlsSelectionObserver.cxx
deleted file mode 100644
index 833e7df81..000000000
--- a/sd/source/ui/slidesorter/controller/SlsSelectionObserver.cxx
+++ /dev/null
@@ -1,173 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlideSorter.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsSelectionManager.hxx"
-#include "controller/SlsSelectionObserver.hxx"
-#include "controller/SlsPageSelector.hxx"
-#include "controller/SlsFocusManager.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include <svx/svdmodel.hxx>
-#include "drawdoc.hxx"
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-SelectionObserver::Context::Context (SlideSorter& rSlideSorter)
- : mpSelectionObserver(
- rSlideSorter.GetController().GetSelectionManager()->GetSelectionObserver())
-{
- if (mpSelectionObserver)
- mpSelectionObserver->StartObservation();
-}
-
-
-
-
-SelectionObserver::Context::~Context(void)
-{
- if (mpSelectionObserver)
- mpSelectionObserver->EndObservation();
-}
-
-
-
-
-void SelectionObserver::Context::Abort(void)
-{
- if (mpSelectionObserver)
- {
- mpSelectionObserver->AbortObservation();
- mpSelectionObserver.reset();
- }
-}
-
-
-
-
-//===== SelectionObserver =====================================================
-
-SelectionObserver::SelectionObserver (SlideSorter& rSlideSorter)
- : mrSlideSorter(rSlideSorter),
- mpDocument(mrSlideSorter.GetModel().GetDocument()),
- mbIsOvservationActive(false),
- maInsertedPages(),
- maDeletedPages()
-{
-}
-
-
-
-
-SelectionObserver::~SelectionObserver (void)
-{
-}
-
-
-
-
-void SelectionObserver::NotifyPageEvent (const SdrPage* pSdrPage)
-{
- if ( ! mbIsOvservationActive)
- return;
-
- const SdPage* pPage = dynamic_cast<const SdPage*>(pSdrPage);
- if (pPage == NULL)
- return;
-
- if (pPage->IsInserted())
- maInsertedPages.push_back(pPage);
- else
- {
- ::std::vector<const SdPage*>::iterator iPage(
- ::std::find(maInsertedPages.begin(), maInsertedPages.end(), pPage));
- if (iPage != maInsertedPages.end())
- maInsertedPages.erase(iPage);
-
- maDeletedPages.push_back(pPage->GetPageNum());
- }
-}
-
-
-
-void SelectionObserver::StartObservation (void)
-{
- OSL_ASSERT(!mbIsOvservationActive);
- maInsertedPages.clear();
- maDeletedPages.clear();
- mbIsOvservationActive = true;
-}
-
-
-
-
-void SelectionObserver::AbortObservation (void)
-{
- OSL_ASSERT(mbIsOvservationActive);
- mbIsOvservationActive = false;
- maInsertedPages.clear();
- maDeletedPages.clear();
-}
-
-
-
-
-void SelectionObserver::EndObservation (void)
-{
- OSL_ASSERT(mbIsOvservationActive);
- mbIsOvservationActive = false;
-
- PageSelector& rSelector (mrSlideSorter.GetController().GetPageSelector());
- PageSelector::UpdateLock aUpdateLock (mrSlideSorter);
- rSelector.DeselectAllPages();
- if ( ! maInsertedPages.empty())
- {
- // Select the inserted pages.
- for (::std::vector<const SdPage*>::const_iterator
- iPage(maInsertedPages.begin()),
- iEnd(maInsertedPages.end());
- iPage!=iEnd;
- ++iPage)
- {
- rSelector.SelectPage(*iPage);
- }
- maInsertedPages.clear();
- }
- maDeletedPages.clear();
-
- aUpdateLock.Release();
- mrSlideSorter.GetController().GetFocusManager().SetFocusedPageToCurrentPage();
-
-}
-
-
-
-} } } // end of namespace ::sd::slidesorter::controller
diff --git a/sd/source/ui/slidesorter/controller/SlsSlideFunction.cxx b/sd/source/ui/slidesorter/controller/SlsSlideFunction.cxx
deleted file mode 100644
index f53719fa0..000000000
--- a/sd/source/ui/slidesorter/controller/SlsSlideFunction.cxx
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include "controller/SlsSlideFunction.hxx"
-
-#include "SlideSorter.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "view/SlideSorterView.hxx"
-#include "model/SlideSorterModel.hxx"
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-TYPEINIT1(SlideFunction, FuPoor);
-
-
-SlideFunction::SlideFunction (
- SlideSorter& rSlideSorter,
- SfxRequest& rRequest)
- : FuPoor (
- rSlideSorter.GetViewShell(),
- rSlideSorter.GetContentWindow().get(),
- &rSlideSorter.GetView(),
- rSlideSorter.GetModel().GetDocument(),
- rRequest)
-{
-}
-
-void SlideFunction::ScrollStart (void)
-{
-}
-
-void SlideFunction::ScrollEnd (void)
-{
-}
-
-sal_Bool SlideFunction::MouseMove(const MouseEvent& )
-{
- return sal_False;
-}
-
-sal_Bool SlideFunction::MouseButtonUp(const MouseEvent& )
-{
- return sal_False;
-
-}
-
-sal_Bool SlideFunction::MouseButtonDown(const MouseEvent& )
-{
- return sal_False;
-}
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx b/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx
deleted file mode 100644
index cd2b1d3e9..000000000
--- a/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx
+++ /dev/null
@@ -1,1341 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include <com/sun/star/presentation/XPresentation2.hpp>
-
-#include <editeng/outlobj.hxx>
-
-#include "controller/SlsSlotManager.hxx"
-#include "SlideSorter.hxx"
-#include "SlideSorterViewShell.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsClipboard.hxx"
-#include "controller/SlsCurrentSlideManager.hxx"
-#include "controller/SlsFocusManager.hxx"
-#include "controller/SlsInsertionIndicatorHandler.hxx"
-#include "controller/SlsPageSelector.hxx"
-#include "controller/SlsSelectionFunction.hxx"
-#include "controller/SlsSelectionManager.hxx"
-#include "controller/SlsSelectionObserver.hxx"
-#include "SlsCommand.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageEnumerationProvider.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsLayouter.hxx"
-#include "framework/FrameworkHelper.hxx"
-#include "Window.hxx"
-#include "fupoor.hxx"
-#include "fuzoom.hxx"
-#include "fucushow.hxx"
-#include "fusldlg.hxx"
-#include "fuexpand.hxx"
-#include "fusumry.hxx"
-#include "fuscale.hxx"
-#include "slideshow.hxx"
-#include "app.hrc"
-#include "strings.hrc"
-#include "sdresid.hxx"
-#include "drawdoc.hxx"
-#include "DrawDocShell.hxx"
-#include "ViewShellBase.hxx"
-#include "ViewShellImplementation.hxx"
-#include "sdattr.hxx"
-#include "FrameView.hxx"
-#include "zoomlist.hxx"
-#include "sdpage.hxx"
-#include "sdxfer.hxx"
-#include "helpids.h"
-#include "glob.hrc"
-#include "unmodpg.hxx"
-#include "DrawViewShell.hxx"
-
-#include <sfx2/request.hxx>
-#include <sfx2/viewfrm.hxx>
-#include <sfx2/bindings.hxx>
-#include <sfx2/dispatch.hxx>
-#include <svx/svxids.hrc>
-#include <svx/zoomitem.hxx>
-#include <svx/svxdlg.hxx>
-#include <svx/dialogs.hrc>
-#include <vcl/msgbox.hxx>
-#include <svl/intitem.hxx>
-#include <svl/whiter.hxx>
-#include <svl/itempool.hxx>
-#include <svl/aeitem.hxx>
-#include <com/sun/star/presentation/FadeEffect.hpp>
-#include <com/sun/star/drawing/XMasterPagesSupplier.hpp>
-#include <com/sun/star/drawing/XDrawPages.hpp>
-#include <vcl/svapp.hxx>
-
-#include <boost/bind.hpp>
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::presentation;
-
-namespace sd { namespace slidesorter { namespace controller {
-
-namespace {
-
-/** The state of a set of slides with respect to being excluded from the
- slide show.
-*/
-enum SlideExclusionState {UNDEFINED, EXCLUDED, INCLUDED, MIXED};
-
-/** Return for the given set of slides whether they included are
- excluded from the slide show.
-*/
-SlideExclusionState GetSlideExclusionState (model::PageEnumeration& rPageSet);
-
-} // end of anonymous namespace
-
-
-
-SlotManager::SlotManager (SlideSorter& rSlideSorter)
- : mrSlideSorter(rSlideSorter),
- maCommandQueue()
-{
-}
-
-
-
-
-SlotManager::~SlotManager (void)
-{
-}
-
-
-
-
-void SlotManager::FuTemporary (SfxRequest& rRequest)
-{
- SdDrawDocument* pDocument = mrSlideSorter.GetModel().GetDocument();
-
- SlideSorterViewShell* pShell
- = dynamic_cast<SlideSorterViewShell*>(mrSlideSorter.GetViewShell());
- if (pShell == NULL)
- return;
-
- switch (rRequest.GetSlot())
- {
- case SID_PRESENTATION:
- case SID_REHEARSE_TIMINGS:
- ShowSlideShow (rRequest);
- pShell->Cancel();
- rRequest.Done();
- break;
-
- case SID_HIDE_SLIDE:
- ChangeSlideExclusionState(model::SharedPageDescriptor(), true);
- break;
-
- case SID_SHOW_SLIDE:
- ChangeSlideExclusionState(model::SharedPageDescriptor(), false);
- break;
-
- case SID_PAGES_PER_ROW:
- if (rRequest.GetArgs() != NULL)
- {
- SFX_REQUEST_ARG(rRequest, pPagesPerRow, SfxUInt16Item,
- SID_PAGES_PER_ROW, sal_False);
- if (pPagesPerRow != NULL)
- {
- sal_Int32 nColumnCount = pPagesPerRow->GetValue();
- // Force the given number of columns by setting
- // the minimal and maximal number of columns to
- // the same value.
- mrSlideSorter.GetView().GetLayouter().SetColumnCount (
- nColumnCount, nColumnCount);
- // Force a repaint and re-layout.
- pShell->ArrangeGUIElements ();
- // Rearrange the UI-elements controlled by the
- // controller and force a rearrangement of the
- // view.
- mrSlideSorter.GetController().Rearrange(true);
- }
- }
- rRequest.Done();
- break;
-
- case SID_SELECTALL:
- mrSlideSorter.GetController().GetPageSelector().SelectAllPages();
- rRequest.Done();
- break;
-
- case SID_SLIDE_TRANSITIONS_PANEL:
- {
- // Make the slide transition panel visible (expand it)
- // in the tool pane.
- if (mrSlideSorter.GetViewShellBase() != NULL)
- framework::FrameworkHelper::Instance(*mrSlideSorter.GetViewShellBase())
- ->RequestTaskPanel(sd::framework::FrameworkHelper::msSlideTransitionTaskPanelURL);
- rRequest.Ignore ();
- break;
- }
-
- case SID_PRESENTATION_DLG:
- FuSlideShowDlg::Create (
- pShell,
- mrSlideSorter.GetContentWindow().get(),
- &mrSlideSorter.GetView(),
- pDocument,
- rRequest);
- break;
-
- case SID_CUSTOMSHOW_DLG:
- FuCustomShowDlg::Create (
- pShell,
- mrSlideSorter.GetContentWindow().get(),
- &mrSlideSorter.GetView(),
- pDocument,
- rRequest);
- break;
-
- case SID_EXPAND_PAGE:
- FuExpandPage::Create (
- pShell,
- mrSlideSorter.GetContentWindow().get(),
- &mrSlideSorter.GetView(),
- pDocument,
- rRequest);
- break;
-
- case SID_SUMMARY_PAGE:
- FuSummaryPage::Create (
- pShell,
- mrSlideSorter.GetContentWindow().get(),
- &mrSlideSorter.GetView(),
- pDocument,
- rRequest);
- break;
-
- case SID_INSERTPAGE:
- case SID_INSERT_MASTER_PAGE:
- InsertSlide(rRequest);
- rRequest.Done();
- break;
-
- case SID_DUPLICATE_PAGE:
- DuplicateSelectedSlides(rRequest);
- rRequest.Done();
- break;
-
- case SID_DELETE_PAGE:
- case SID_DELETE_MASTER_PAGE:
- case SID_DELETE: // we need SID_CUT to handle the delete key
- // (DEL -> accelerator -> SID_CUT).
- if (mrSlideSorter.GetModel().GetPageCount() > 1)
- {
- mrSlideSorter.GetController().GetSelectionManager()->DeleteSelectedPages();
- }
-
- rRequest.Done();
- break;
-
- case SID_RENAMEPAGE:
- case SID_RENAME_MASTER_PAGE:
- RenameSlide ();
- rRequest.Done ();
- break;
-
- case SID_ASSIGN_LAYOUT:
- {
- pShell->mpImpl->AssignLayout( rRequest, mrSlideSorter.GetModel().GetPageType() );
- rRequest.Done ();
- }
- break;
-
- default:
- break;
- }
-}
-
-
-
-
-void SlotManager::FuPermanent (SfxRequest& rRequest)
-{
- ViewShell* pShell = mrSlideSorter.GetViewShell();
- if (pShell == NULL)
- return;
-
- if(pShell->GetCurrentFunction().is())
- {
- FunctionReference xEmpty;
- if (pShell->GetOldFunction() == pShell->GetCurrentFunction())
- pShell->SetOldFunction(xEmpty);
-
- pShell->GetCurrentFunction()->Deactivate();
- pShell->SetCurrentFunction(xEmpty);
- }
-
- switch(rRequest.GetSlot())
- {
- case SID_OBJECT_SELECT:
- pShell->SetCurrentFunction( SelectionFunction::Create(mrSlideSorter, rRequest) );
- rRequest.Done();
- break;
-
- default:
- break;
- }
-
- if(pShell->GetOldFunction().is())
- {
- pShell->GetOldFunction()->Deactivate();
- FunctionReference xEmpty;
- pShell->SetOldFunction(xEmpty);
- }
-
- if(pShell->GetCurrentFunction().is())
- {
- pShell->GetCurrentFunction()->Activate();
- pShell->SetOldFunction(pShell->GetCurrentFunction());
- }
-
- //! das ist nur bis das ENUM-Slots sind
- // Invalidate( SID_OBJECT_SELECT );
-}
-
-void SlotManager::FuSupport (SfxRequest& rRequest)
-{
- switch (rRequest.GetSlot())
- {
- case SID_STYLE_FAMILY:
- if (rRequest.GetArgs() != NULL)
- {
- SdDrawDocument* pDocument
- = mrSlideSorter.GetModel().GetDocument();
- if (pDocument != NULL)
- {
- const SfxPoolItem& rItem (
- rRequest.GetArgs()->Get(SID_STYLE_FAMILY));
- pDocument->GetDocSh()->SetStyleFamily(
- static_cast<const SfxUInt16Item&>(rItem).GetValue());
- }
- }
- break;
-
- case SID_PASTE:
- {
- SdTransferable* pTransferClip = SD_MOD()->pTransferClip;
- if( pTransferClip )
- {
- SfxObjectShell* pTransferDocShell = pTransferClip->GetDocShell();
-
- DrawDocShell* pDocShell = dynamic_cast<DrawDocShell*>(pTransferDocShell);
- if (pDocShell && pDocShell->GetDoc()->GetPageCount() > 1)
- {
- mrSlideSorter.GetController().GetClipboard().HandleSlotCall(rRequest);
- break;
- }
- }
- ViewShellBase* pBase = mrSlideSorter.GetViewShellBase();
- if (pBase != NULL)
- {
- ::boost::shared_ptr<DrawViewShell> pDrawViewShell (
- ::boost::dynamic_pointer_cast<DrawViewShell>(pBase->GetMainViewShell()));
- if (pDrawViewShell.get() != NULL)
- pDrawViewShell->FuSupport(rRequest);
- }
- }
- break;
-
- case SID_CUT:
- case SID_COPY:
- case SID_DELETE:
- mrSlideSorter.GetController().GetClipboard().HandleSlotCall(rRequest);
- break;
-
- case SID_DRAWINGMODE:
- case SID_NOTESMODE:
- case SID_HANDOUTMODE:
- case SID_DIAMODE:
- case SID_OUTLINEMODE:
- {
- ViewShellBase* pBase = mrSlideSorter.GetViewShellBase();
- if (pBase != NULL)
- {
- framework::FrameworkHelper::Instance(*pBase)->HandleModeChangeSlot(
- rRequest.GetSlot(), rRequest);
- rRequest.Done();
- }
- break;
- }
-
- case SID_UNDO:
- {
- SlideSorterViewShell* pViewShell
- = dynamic_cast<SlideSorterViewShell*>(mrSlideSorter.GetViewShell());
- if (pViewShell != NULL)
- {
- view::SlideSorterView::DrawLock aDrawLock (mrSlideSorter);
- SlideSorterController::ModelChangeLock aModelLock (mrSlideSorter.GetController());
- PageSelector::UpdateLock aUpdateLock (mrSlideSorter);
- SelectionObserver::Context aContext (mrSlideSorter);
- pViewShell->ImpSidUndo (sal_False, rRequest);
- }
- break;
- }
-
- case SID_REDO:
- {
- SlideSorterViewShell* pViewShell
- = dynamic_cast<SlideSorterViewShell*>(mrSlideSorter.GetViewShell());
- if (pViewShell != NULL)
- {
- view::SlideSorterView::DrawLock aDrawLock (mrSlideSorter);
- SlideSorterController::ModelChangeLock aModelLock (mrSlideSorter.GetController());
- PageSelector::UpdateLock aUpdateLock (mrSlideSorter);
- SelectionObserver::Context aContext (mrSlideSorter);
- pViewShell->ImpSidRedo (sal_False, rRequest);
- }
- break;
- }
-
- default:
- break;
- }
-}
-
-
-
-
-void SlotManager::ExecCtrl (SfxRequest& rRequest)
-{
- ViewShell* pViewShell = mrSlideSorter.GetViewShell();
- sal_uInt16 nSlot = rRequest.GetSlot();
- switch (nSlot)
- {
- case SID_RELOAD:
- {
- // Undo-Manager leeren
- mrSlideSorter.GetModel().GetDocument()->GetDocSh()->ClearUndoBuffer();
-
- // Normale Weiterleitung an ViewFrame zur Ausfuehrung
- if (pViewShell != NULL)
- pViewShell->GetViewFrame()->ExecuteSlot(rRequest);
-
- // Muss sofort beendet werden
- return;
- }
-
- case SID_OUTPUT_QUALITY_COLOR:
- case SID_OUTPUT_QUALITY_GRAYSCALE:
- case SID_OUTPUT_QUALITY_BLACKWHITE:
- case SID_OUTPUT_QUALITY_CONTRAST:
- {
- // flush page cache
- if (pViewShell != NULL)
- pViewShell->ExecReq (rRequest);
- break;
- }
-
- case SID_MAIL_SCROLLBODY_PAGEDOWN:
- {
- if (pViewShell != NULL)
- pViewShell->ExecReq (rRequest);
- break;
- }
-
- case SID_OPT_LOCALE_CHANGED:
- {
- mrSlideSorter.GetController().UpdateAllPages();
- if (pViewShell != NULL)
- pViewShell->UpdatePreview (pViewShell->GetActualPage());
- rRequest.Done();
- break;
- }
-
- case SID_SEARCH_DLG:
- // We have to handle the SID_SEARCH_DLG slot explicitly because
- // in some cases (when the slide sorter is displayed in the
- // center pane) we want to disable the search dialog. Therefore
- // we have to handle the execution of that slot as well.
- // We try to do that by forwarding the request to the view frame
- // of the view shell.
- if (pViewShell != NULL)
- pViewShell->GetViewFrame()->ExecuteSlot(rRequest);
- break;
-
- default:
- break;
- }
-}
-
-
-
-
-void SlotManager::GetAttrState (SfxItemSet& rSet)
-{
- // Iteratate over all items.
- SfxWhichIter aIter (rSet);
- sal_uInt16 nWhich = aIter.FirstWhich();
- while (nWhich)
- {
- sal_uInt16 nSlotId (nWhich);
- if (SfxItemPool::IsWhich(nWhich) && mrSlideSorter.GetViewShell()!=NULL)
- nSlotId = mrSlideSorter.GetViewShell()->GetPool().GetSlotId(nWhich);
- switch (nSlotId)
- {
- case SID_PAGES_PER_ROW:
- rSet.Put (
- SfxUInt16Item (
- nSlotId,
- (sal_uInt16)mrSlideSorter.GetView().GetLayouter().GetColumnCount()
- )
- );
- break;
- }
- nWhich = aIter.NextWhich();
- }
-}
-
-void SlotManager::GetMenuState (SfxItemSet& rSet)
-{
- EditMode eEditMode = mrSlideSorter.GetModel().GetEditMode();
- ViewShell* pShell = mrSlideSorter.GetViewShell();
- DrawDocShell* pDocShell = mrSlideSorter.GetModel().GetDocument()->GetDocSh();
-
- if (pShell!=NULL && pShell->GetCurrentFunction().is())
- {
- sal_uInt16 nSId = pShell->GetCurrentFunction()->GetSlotID();
-
- rSet.Put( SfxBoolItem( nSId, sal_True ) );
- }
- rSet.Put( SfxBoolItem( SID_DRAWINGMODE, sal_False ) );
- rSet.Put( SfxBoolItem( SID_DIAMODE, sal_True ) );
- rSet.Put( SfxBoolItem( SID_OUTLINEMODE, sal_False ) );
- rSet.Put( SfxBoolItem( SID_NOTESMODE, sal_False ) );
- rSet.Put( SfxBoolItem( SID_HANDOUTMODE, sal_False ) );
-
- // Vorlagenkatalog darf nicht aufgerufen werden
- rSet.DisableItem(SID_STYLE_CATALOG);
-
- if (pShell!=NULL && pShell->IsMainViewShell())
- {
- rSet.DisableItem(SID_SPELL_DIALOG);
- rSet.DisableItem(SID_SEARCH_DLG);
- }
-
- if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_EXPAND_PAGE))
- {
- bool bDisable = true;
- if (eEditMode == EM_PAGE)
- {
- // At least one of the selected pages has to contain an outline
- // presentation objects in order to enable the expand page menu
- // entry.
- model::PageEnumeration aSelectedPages (
- model::PageEnumerationProvider::CreateSelectedPagesEnumeration(
- mrSlideSorter.GetModel()));
- while (aSelectedPages.HasMoreElements())
- {
- SdPage* pPage = aSelectedPages.GetNextElement()->GetPage();
- SdrObject* pObj = pPage->GetPresObj(PRESOBJ_OUTLINE);
- if (pObj!=NULL )
- {
- if( !pObj->IsEmptyPresObj() )
- {
- bDisable = false;
- }
- else
- {
- // check if the object is in edit, than its temporarely not empty
- SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( pObj );
- if( pTextObj )
- {
- OutlinerParaObject* pParaObj = pTextObj->GetEditOutlinerParaObject();
- if( pParaObj )
- {
- delete pParaObj;
- bDisable = false;
- }
- }
- }
- }
- }
- }
-
- if (bDisable)
- rSet.DisableItem (SID_EXPAND_PAGE);
- }
-
- if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_SUMMARY_PAGE))
- {
- bool bDisable = true;
- if (eEditMode == EM_PAGE)
- {
- // At least one of the selected pages has to contain a title
- // presentation objects in order to enable the summary page menu
- // entry.
- model::PageEnumeration aSelectedPages (
- model::PageEnumerationProvider::CreateSelectedPagesEnumeration(
- mrSlideSorter.GetModel()));
- while (aSelectedPages.HasMoreElements())
- {
- SdPage* pPage = aSelectedPages.GetNextElement()->GetPage();
- SdrObject* pObj = pPage->GetPresObj(PRESOBJ_TITLE);
-
- if (pObj!=NULL && !pObj->IsEmptyPresObj())
- bDisable = false;
- }
- }
- if (bDisable)
- rSet.DisableItem (SID_SUMMARY_PAGE);
- }
-
- // Starten der Praesentation moeglich?
- if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_PRESENTATION ) ||
- SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_REHEARSE_TIMINGS ) )
- {
- sal_Bool bDisable = sal_True;
- model::PageEnumeration aAllPages (
- model::PageEnumerationProvider::CreateAllPagesEnumeration(mrSlideSorter.GetModel()));
- while (aAllPages.HasMoreElements())
- {
- SdPage* pPage = aAllPages.GetNextElement()->GetPage();
-
- if( !pPage->IsExcluded() )
- bDisable = sal_False;
- }
- if( bDisable || pDocShell->IsPreview())
- {
- rSet.DisableItem( SID_PRESENTATION );
- rSet.DisableItem( SID_REHEARSE_TIMINGS );
- }
- }
-
-
- // Disable the rename slots when there are no or more than one slides/master
- // pages selected.
- if (rSet.GetItemState(SID_RENAMEPAGE) == SFX_ITEM_AVAILABLE
- || rSet.GetItemState(SID_RENAME_MASTER_PAGE) == SFX_ITEM_AVAILABLE)
- {
- if (mrSlideSorter.GetController().GetPageSelector().GetSelectedPageCount() != 1)
- {
- rSet.DisableItem(SID_RENAMEPAGE);
- rSet.DisableItem(SID_RENAME_MASTER_PAGE);
- }
- }
-
- if (rSet.GetItemState(SID_HIDE_SLIDE) == SFX_ITEM_AVAILABLE
- || rSet.GetItemState(SID_SHOW_SLIDE) == SFX_ITEM_AVAILABLE)
- {
- model::PageEnumeration aSelectedPages (
- model::PageEnumerationProvider::CreateSelectedPagesEnumeration(
- mrSlideSorter.GetModel()));
- const SlideExclusionState eState (GetSlideExclusionState(aSelectedPages));
- switch (eState)
- {
- case MIXED:
- // Show both entries.
- break;
-
- case EXCLUDED:
- rSet.DisableItem(SID_HIDE_SLIDE);
- break;
-
- case INCLUDED:
- rSet.DisableItem(SID_SHOW_SLIDE);
- break;
-
- case UNDEFINED:
- rSet.DisableItem(SID_HIDE_SLIDE);
- rSet.DisableItem(SID_SHOW_SLIDE);
- break;
- }
- }
-
-
- PageKind ePageKind = mrSlideSorter.GetModel().GetPageType();
- if ((eEditMode == EM_MASTERPAGE) && (ePageKind != PK_HANDOUT))
- {
- rSet.DisableItem(SID_ASSIGN_LAYOUT);
- }
-
- if ((eEditMode == EM_MASTERPAGE) || (ePageKind==PK_NOTES))
- {
- rSet.DisableItem(SID_INSERTPAGE);
- }
-
- // Disable some slots when in master page mode.
- if (eEditMode == EM_MASTERPAGE)
- {
- if (rSet.GetItemState(SID_INSERTPAGE) == SFX_ITEM_AVAILABLE)
- rSet.DisableItem(SID_INSERTPAGE);
- if (rSet.GetItemState(SID_DUPLICATE_PAGE) == SFX_ITEM_AVAILABLE)
- rSet.DisableItem(SID_DUPLICATE_PAGE);
- }
-}
-
-
-
-
-void SlotManager::GetClipboardState ( SfxItemSet& rSet)
-{
- SdTransferable* pTransferClip = SD_MOD()->pTransferClip;
-
- if (rSet.GetItemState(SID_PASTE) == SFX_ITEM_AVAILABLE
- || rSet.GetItemState(SID_PASTE_SPECIAL) == SFX_ITEM_AVAILABLE)
- {
- // Keine eigenen Clipboard-Daten?
- if ( !pTransferClip || !pTransferClip->GetDocShell() )
- {
- rSet.DisableItem(SID_PASTE);
- rSet.DisableItem(SID_PASTE_SPECIAL);
- }
- else
- {
- SfxObjectShell* pTransferDocShell = pTransferClip->GetDocShell();
-
- if( !pTransferDocShell || ( (DrawDocShell*) pTransferDocShell)->GetDoc()->GetPageCount() <= 1 )
- {
- bool bIsPastingSupported (false);
-
- // No or just one page. Check if there is anything that can be
- // pasted via a DrawViewShell.
- ViewShellBase* pBase = mrSlideSorter.GetViewShellBase();
- if (pBase != NULL)
- {
- ::boost::shared_ptr<DrawViewShell> pDrawViewShell (
- ::boost::dynamic_pointer_cast<DrawViewShell>(pBase->GetMainViewShell()));
- if (pDrawViewShell.get() != NULL)
- {
- TransferableDataHelper aDataHelper (
- TransferableDataHelper::CreateFromSystemClipboard(
- pDrawViewShell->GetActiveWindow()));
- if (aDataHelper.GetFormatCount() > 0)
- bIsPastingSupported = true;
- }
- }
-
- if ( ! bIsPastingSupported)
- {
- rSet.DisableItem(SID_PASTE);
- rSet.DisableItem(SID_PASTE_SPECIAL);
- }
- }
- }
- }
-
- // Cut, copy and paste of master pages is not yet implemented properly
- if (rSet.GetItemState(SID_COPY) == SFX_ITEM_AVAILABLE
- || rSet.GetItemState(SID_PASTE) == SFX_ITEM_AVAILABLE
- || rSet.GetItemState(SID_PASTE_SPECIAL) == SFX_ITEM_AVAILABLE
- || rSet.GetItemState(SID_CUT) == SFX_ITEM_AVAILABLE)
- {
- if (mrSlideSorter.GetModel().GetEditMode() == EM_MASTERPAGE)
- {
- if (rSet.GetItemState(SID_CUT) == SFX_ITEM_AVAILABLE)
- rSet.DisableItem(SID_CUT);
- if (rSet.GetItemState(SID_COPY) == SFX_ITEM_AVAILABLE)
- rSet.DisableItem(SID_COPY);
- if (rSet.GetItemState(SID_PASTE) == SFX_ITEM_AVAILABLE)
- rSet.DisableItem(SID_PASTE);
- if (rSet.GetItemState(SID_PASTE_SPECIAL) == SFX_ITEM_AVAILABLE)
- rSet.DisableItem(SID_PASTE_SPECIAL);
- }
- }
-
- // Cut, copy, and delete page are disabled when there is no selection.
- if (rSet.GetItemState(SID_CUT) == SFX_ITEM_AVAILABLE
- || rSet.GetItemState(SID_COPY) == SFX_ITEM_AVAILABLE
- || rSet.GetItemState(SID_DELETE) == SFX_ITEM_AVAILABLE
- || rSet.GetItemState(SID_DELETE_PAGE) == SFX_ITEM_AVAILABLE
- || rSet.GetItemState(SID_DELETE_MASTER_PAGE) == SFX_ITEM_AVAILABLE)
- {
- model::PageEnumeration aSelectedPages (
- model::PageEnumerationProvider::CreateSelectedPagesEnumeration(
- mrSlideSorter.GetModel()));
-
- // For copy to work we have to have at least one selected page.
- if ( ! aSelectedPages.HasMoreElements())
- rSet.DisableItem(SID_COPY);
-
- bool bDisable = false;
- // The operations that lead to the deletion of a page are valid if
- // a) there is at least one selected page
- // b) deleting the selected pages leaves at least one page in the
- // document
- // c) selected master pages must not be used by slides.
-
- // Test a).
- if ( ! aSelectedPages.HasMoreElements())
- bDisable = true;
- // Test b): Count the number of selected pages. It has to be less
- // than the number of all pages.
- else if (mrSlideSorter.GetController().GetPageSelector().GetSelectedPageCount()
- >= mrSlideSorter.GetController().GetPageSelector().GetPageCount())
- bDisable = true;
- // Test c): Iterate over the selected pages and look for a master
- // page that is used by at least one page.
- else while (aSelectedPages.HasMoreElements())
- {
- SdPage* pPage = aSelectedPages.GetNextElement()->GetPage();
- int nUseCount (mrSlideSorter.GetModel().GetDocument()
- ->GetMasterPageUserCount(pPage));
- if (nUseCount > 0)
- {
- bDisable = true;
- break;
- }
- }
-
- if (bDisable)
- {
- rSet.DisableItem(SID_CUT);
- rSet.DisableItem(SID_DELETE_PAGE);
- rSet.DisableItem(SID_DELETE_MASTER_PAGE);
- }
- }
-}
-
-
-
-
-void SlotManager::GetStatusBarState (SfxItemSet& rSet)
-{
- // Seitenanzeige und Layout
- SdPage* pPage = NULL;
- SdPage* pFirstPage = NULL;
- sal_uInt16 nFirstPage;
- sal_uInt16 nSelectedPages = (sal_uInt16)mrSlideSorter.GetController().GetPageSelector().GetSelectedPageCount();
- String aPageStr;
- String aLayoutStr;
-
- if (nSelectedPages > 0)
- aPageStr = String(SdResId(STR_SD_PAGE));
-
- if (nSelectedPages == 1)
- {
- model::PageEnumeration aSelectedPages (
- model::PageEnumerationProvider::CreateSelectedPagesEnumeration(
- mrSlideSorter.GetModel()));
- model::SharedPageDescriptor pDescriptor (aSelectedPages.GetNextElement());
- if (pDescriptor)
- {
- pPage = pDescriptor->GetPage();
- nFirstPage = pPage->GetPageNum()/2;
- pFirstPage = pPage;
-
- aPageStr += sal_Unicode(' ');
- aPageStr += String::CreateFromInt32( nFirstPage + 1 );
- aPageStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " / " ));
- aPageStr += String::CreateFromInt32(
- mrSlideSorter.GetModel().GetPageCount());
-
- aLayoutStr = pFirstPage->GetLayoutName();
- aLayoutStr.Erase( aLayoutStr.SearchAscii( SD_LT_SEPARATOR ) );
- }
- }
-
- rSet.Put( SfxStringItem( SID_STATUS_PAGE, aPageStr ) );
- rSet.Put( SfxStringItem( SID_STATUS_LAYOUT, aLayoutStr ) );
-
- if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ATTR_ZOOMSLIDER ) )
- {
- rSet.Put( SfxVoidItem( SID_ATTR_ZOOMSLIDER ) );
- }
-}
-
-void SlotManager::ShowSlideShow( SfxRequest& rReq)
-{
- Reference< XPresentation2 > xPresentation( mrSlideSorter.GetModel().GetDocument()->getPresentation() );
- if( xPresentation.is() )
- {
- if( ( SID_REHEARSE_TIMINGS != rReq.GetSlot() ) )
- xPresentation->start();
- else
- xPresentation->rehearseTimings();
- }
-}
-
-void SlotManager::RenameSlide (void)
-{
- PageKind ePageKind = mrSlideSorter.GetModel().GetPageType();
- View* pDrView = &mrSlideSorter.GetView();
-
- if (ePageKind==PK_STANDARD || ePageKind==PK_NOTES)
- {
- if ( pDrView->IsTextEdit() )
- {
- pDrView->SdrEndTextEdit();
- }
-
- SdPage* pSelectedPage = NULL;
- model::PageEnumeration aSelectedPages (
- model::PageEnumerationProvider::CreateSelectedPagesEnumeration(
- mrSlideSorter.GetModel()));
- if (aSelectedPages.HasMoreElements())
- pSelectedPage = aSelectedPages.GetNextElement()->GetPage();
- if (pSelectedPage != NULL)
- {
- String aTitle( SdResId( STR_TITLE_RENAMESLIDE ) );
- String aDescr( SdResId( STR_DESC_RENAMESLIDE ) );
- String aPageName = pSelectedPage->GetName();
-
- SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
- DBG_ASSERT(pFact, "Dialogdiet fail!");
- AbstractSvxNameDialog* aNameDlg = pFact->CreateSvxNameDialog(
- mrSlideSorter.GetContentWindow().get(),
- aPageName, aDescr);
- DBG_ASSERT(aNameDlg, "Dialogdiet fail!");
- aNameDlg->SetText( aTitle );
- aNameDlg->SetCheckNameHdl( LINK( this, SlotManager, RenameSlideHdl ), true );
- aNameDlg->SetEditHelpId( HID_SD_NAMEDIALOG_PAGE );
-
- if( aNameDlg->Execute() == RET_OK )
- {
- String aNewName;
- aNameDlg->GetName( aNewName );
- if( ! aNewName.Equals( aPageName ) )
- {
-#ifdef DBG_UTIL
- bool bResult =
-#endif
- RenameSlideFromDrawViewShell(
- pSelectedPage->GetPageNum()/2, aNewName );
- DBG_ASSERT( bResult, "Couldn't rename slide" );
- }
- }
- delete aNameDlg;
-
- // Tell the slide sorter about the name change (necessary for
- // accessibility.)
- mrSlideSorter.GetController().PageNameHasChanged(
- (pSelectedPage->GetPageNum()-1)/2, aPageName);
- }
- }
-}
-
-IMPL_LINK(SlotManager, RenameSlideHdl, AbstractSvxNameDialog*, pDialog)
-{
- if( ! pDialog )
- return 0;
-
- String aNewName;
- pDialog->GetName( aNewName );
-
- model::SharedPageDescriptor pDescriptor (
- mrSlideSorter.GetController().GetCurrentSlideManager()->GetCurrentSlide());
- SdPage* pCurrentPage = NULL;
- if (pDescriptor.get() != NULL)
- pCurrentPage = pDescriptor->GetPage();
-
- return ( (pCurrentPage!=NULL && aNewName.Equals( pCurrentPage->GetName() ))
- || (mrSlideSorter.GetViewShell()
- && mrSlideSorter.GetViewShell()->GetDocSh()->IsNewPageNameValid( aNewName ) ));
-}
-
-bool SlotManager::RenameSlideFromDrawViewShell( sal_uInt16 nPageId, const String & rName )
-{
- sal_Bool bOutDummy;
- SdDrawDocument* pDocument = mrSlideSorter.GetModel().GetDocument();
- if( pDocument->GetPageByName( rName, bOutDummy ) != SDRPAGE_NOTFOUND )
- return false;
-
- SdPage* pPageToRename = NULL;
- PageKind ePageKind = mrSlideSorter.GetModel().GetPageType();
-
- ::svl::IUndoManager* pManager = pDocument->GetDocSh()->GetUndoManager();
-
- if( mrSlideSorter.GetModel().GetEditMode() == EM_PAGE )
- {
- model::SharedPageDescriptor pDescriptor (
- mrSlideSorter.GetController().GetCurrentSlideManager()->GetCurrentSlide());
- if (pDescriptor.get() != NULL)
- pPageToRename = pDescriptor->GetPage();
-
- if (pPageToRename != NULL)
- {
- // Undo
- SdPage* pUndoPage = pPageToRename;
- SdrLayerAdmin & rLayerAdmin = pDocument->GetLayerAdmin();
- sal_uInt8 nBackground = rLayerAdmin.GetLayerID( String( SdResId( STR_LAYER_BCKGRND )), sal_False );
- sal_uInt8 nBgObj = rLayerAdmin.GetLayerID( String( SdResId( STR_LAYER_BCKGRNDOBJ )), sal_False );
- SetOfByte aVisibleLayers = pPageToRename->TRG_GetMasterPageVisibleLayers();
-
- // (#67720#)
- ModifyPageUndoAction* pAction = new ModifyPageUndoAction(
- pDocument, pUndoPage, rName, pUndoPage->GetAutoLayout(),
- aVisibleLayers.IsSet( nBackground ),
- aVisibleLayers.IsSet( nBgObj ));
- pManager->AddUndoAction( pAction );
-
- // rename
- pPageToRename->SetName( rName );
-
- if( ePageKind == PK_STANDARD )
- {
- // also rename notes-page
- SdPage* pNotesPage = pDocument->GetSdPage( nPageId, PK_NOTES );
- if (pNotesPage != NULL)
- pNotesPage->SetName (rName);
- }
- }
- }
- else
- {
- // rename MasterPage -> rename LayoutTemplate
- pPageToRename = pDocument->GetMasterSdPage( nPageId, ePageKind );
- if (pPageToRename != NULL)
- {
- const String aOldLayoutName( pPageToRename->GetLayoutName() );
- pManager->AddUndoAction( new RenameLayoutTemplateUndoAction( pDocument, aOldLayoutName, rName ) );
- pDocument->RenameLayoutTemplate( aOldLayoutName, rName );
- }
- }
-
- bool bSuccess = pPageToRename!=NULL && ( sal_False != rName.Equals( pPageToRename->GetName()));
-
- if( bSuccess )
- {
- // user edited page names may be changed by the page so update control
- // aTabControl.SetPageText( nPageId, rName );
-
- // set document to modified state
- pDocument->SetChanged( sal_True );
-
- // inform navigator about change
- SfxBoolItem aItem( SID_NAVIGATOR_INIT, sal_True );
- if (mrSlideSorter.GetViewShell() != NULL)
- mrSlideSorter.GetViewShell()->GetDispatcher()->Execute(
- SID_NAVIGATOR_INIT, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L );
- }
-
- return bSuccess;
-}
-
-
-
-
-/** Insert a slide. The insertion position depends on a) the selection and
- b) the mouse position when there is no selection.
-
- When there is a selection then insertion takes place after the last
- slide of the selection. For this to work all but the last selected
- slide are deselected first.
-
- Otherwise, when there is no selection but the insertion marker is visible
- the slide is inserted at that position. The slide before that marker is
- selected first.
-
- When both the selection and the insertion marker are not visible--can
- that happen?--the new slide is inserted after the last slide.
-*/
-void SlotManager::InsertSlide (SfxRequest& rRequest)
-{
- const sal_Int32 nInsertionIndex (GetInsertionPosition());
-
- PageSelector::BroadcastLock aBroadcastLock (mrSlideSorter);
-
- SdPage* pNewPage = NULL;
- if (mrSlideSorter.GetModel().GetEditMode() == EM_PAGE)
- {
- SlideSorterViewShell* pShell = dynamic_cast<SlideSorterViewShell*>(
- mrSlideSorter.GetViewShell());
- if (pShell != NULL)
- {
- pNewPage = pShell->CreateOrDuplicatePage (
- rRequest,
- mrSlideSorter.GetModel().GetPageType(),
- nInsertionIndex>=0
- ? mrSlideSorter.GetModel().GetPageDescriptor(nInsertionIndex)->GetPage()
- : NULL);
- }
- }
- else
- {
- // Use the API to create a new page.
- SdDrawDocument* pDocument = mrSlideSorter.GetModel().GetDocument();
- Reference<drawing::XMasterPagesSupplier> xMasterPagesSupplier (
- pDocument->getUnoModel(), UNO_QUERY);
- if (xMasterPagesSupplier.is())
- {
- Reference<drawing::XDrawPages> xMasterPages (
- xMasterPagesSupplier->getMasterPages());
- if (xMasterPages.is())
- {
- xMasterPages->insertNewByIndex (nInsertionIndex+1);
-
- // Create shapes for the default layout.
- pNewPage = pDocument->GetMasterSdPage(
- (sal_uInt16)(nInsertionIndex+1), PK_STANDARD);
- pNewPage->CreateTitleAndLayout (sal_True,sal_True);
- }
- }
- }
- if (pNewPage == NULL)
- return;
-
- // When a new page has been inserted then select it, make it the
- // current page, and focus it.
- view::SlideSorterView::DrawLock aDrawLock (mrSlideSorter);
- PageSelector::UpdateLock aUpdateLock (mrSlideSorter);
- mrSlideSorter.GetController().GetPageSelector().DeselectAllPages();
- mrSlideSorter.GetController().GetPageSelector().SelectPage(pNewPage);
-}
-
-
-
-
-void SlotManager::DuplicateSelectedSlides (SfxRequest& rRequest)
-{
- // Create a list of the pages that are to be duplicated. The process of
- // duplication alters the selection.
- sal_Int32 nInsertPosition (0);
- ::std::vector<SdPage*> aPagesToDuplicate;
- model::PageEnumeration aSelectedPages (
- model::PageEnumerationProvider::CreateSelectedPagesEnumeration(mrSlideSorter.GetModel()));
- while (aSelectedPages.HasMoreElements())
- {
- model::SharedPageDescriptor pDescriptor (aSelectedPages.GetNextElement());
- if (pDescriptor && pDescriptor->GetPage())
- {
- aPagesToDuplicate.push_back(pDescriptor->GetPage());
- nInsertPosition = pDescriptor->GetPage()->GetPageNum()+2;
- }
- }
-
- // Duplicate the pages in aPagesToDuplicate and collect the newly
- // created pages in aPagesToSelect.
- const bool bUndo (aPagesToDuplicate.size()>1 && mrSlideSorter.GetView().IsUndoEnabled());
- if (bUndo)
- mrSlideSorter.GetView().BegUndo(String(SdResId(STR_INSERTPAGE)));
-
- ::std::vector<SdPage*> aPagesToSelect;
- for(::std::vector<SdPage*>::const_iterator
- iPage(aPagesToDuplicate.begin()),
- iEnd(aPagesToDuplicate.end());
- iPage!=iEnd;
- ++iPage, nInsertPosition+=2)
- {
- aPagesToSelect.push_back(
- mrSlideSorter.GetViewShell()->CreateOrDuplicatePage(
- rRequest, PK_STANDARD, *iPage, nInsertPosition));
- }
- aPagesToDuplicate.clear();
-
- if (bUndo)
- mrSlideSorter.GetView().EndUndo();
-
- // Set the selection to the pages in aPagesToSelect.
- PageSelector& rSelector (mrSlideSorter.GetController().GetPageSelector());
- rSelector.DeselectAllPages();
- ::std::for_each (
- aPagesToSelect.begin(),
- aPagesToSelect.end(),
- ::boost::bind(
- static_cast<void (PageSelector::*)(const SdPage*)>(&PageSelector::SelectPage),
- rSelector,
- _1));
-}
-
-void SlotManager::ExecuteCommandAsynchronously (::std::auto_ptr<Command> pCommand)
-{
- // Ownership of command is (implicitely) transferred to the queue.
- maCommandQueue.push(pCommand.get());
- pCommand.release();
- Application::PostUserEvent(LINK(this,SlotManager,UserEventCallback));
-}
-
-IMPL_LINK(SlotManager, UserEventCallback, void*, EMPTYARG)
-{
- if ( ! maCommandQueue.empty())
- {
- Command* pCommand = maCommandQueue.front();
- maCommandQueue.pop();
-
- if (pCommand != NULL)
- {
- // The queue ownes the command that has just been removed from
- // it. Therefore it is deleted after it has been executed.
- (*pCommand)();
- delete pCommand;
- }
- }
-
- return 1;
-}
-
-
-
-
-void SlotManager::ChangeSlideExclusionState (
- const model::SharedPageDescriptor& rpDescriptor,
- const bool bExcludeSlide)
-{
- if (rpDescriptor)
- {
- mrSlideSorter.GetView().SetState(
- rpDescriptor,
- model::PageDescriptor::ST_Excluded,
- bExcludeSlide);
- }
- else
- {
- model::PageEnumeration aSelectedPages (
- model::PageEnumerationProvider::CreateSelectedPagesEnumeration(
- mrSlideSorter.GetModel()));
- while (aSelectedPages.HasMoreElements())
- {
- model::SharedPageDescriptor pDescriptor (aSelectedPages.GetNextElement());
- mrSlideSorter.GetView().SetState(
- pDescriptor,
- model::PageDescriptor::ST_Excluded,
- bExcludeSlide);
- }
- }
-
- SfxBindings& rBindings (mrSlideSorter.GetViewShell()->GetViewFrame()->GetBindings());
- rBindings.Invalidate(SID_PRESENTATION);
- rBindings.Invalidate(SID_REHEARSE_TIMINGS);
- rBindings.Invalidate(SID_HIDE_SLIDE);
- rBindings.Invalidate(SID_SHOW_SLIDE);
- mrSlideSorter.GetModel().GetDocument()->SetChanged();
-}
-
-
-
-
-sal_Int32 SlotManager::GetInsertionPosition (void)
-{
- PageSelector& rSelector (mrSlideSorter.GetController().GetPageSelector());
-
- // The insertion indicator is preferred. After all the user explicitly
- // used it to define the insertion position.
- if (mrSlideSorter.GetController().GetInsertionIndicatorHandler()->IsActive())
- {
- // Select the page before the insertion indicator.
- return mrSlideSorter.GetController().GetInsertionIndicatorHandler()->GetInsertionPageIndex()
- - 1;
- }
-
- // Is there a stored insertion position?
- else if (mrSlideSorter.GetController().GetSelectionManager()->GetInsertionPosition() >= 0)
- {
- return mrSlideSorter.GetController().GetSelectionManager()->GetInsertionPosition() - 1;
- }
-
- // Use the index of the last selected slide.
- else if (rSelector.GetSelectedPageCount() > 0)
- {
- for (int nIndex=rSelector.GetPageCount()-1; nIndex>=0; --nIndex)
- if (rSelector.IsPageSelected(nIndex))
- return nIndex;
-
- // We should never get here.
- OSL_ASSERT(false);
- return rSelector.GetPageCount() - 1;
- }
-
- // Select the last page when there is at least one page.
- else if (rSelector.GetPageCount() > 0)
- {
- return rSelector.GetPageCount() - 1;
- }
-
- // Hope for the best that CreateOrDuplicatePage() can cope with an empty
- // selection.
- else
- {
- // We should never get here because there has to be at least one page.
- OSL_ASSERT(false);
- return -1;
- }
-}
-
-
-
-
-void SlotManager::NotifyEditModeChange (void)
-{
- SfxBindings& rBindings (mrSlideSorter.GetViewShell()->GetViewFrame()->GetBindings());
- rBindings.Invalidate(SID_PRESENTATION);
- rBindings.Invalidate(SID_INSERTPAGE);
- rBindings.Invalidate(SID_DUPLICATE_PAGE);
-}
-
-
-
-
-//-----------------------------------------------------------------------------
-
-namespace {
-
-
-
-SlideExclusionState GetSlideExclusionState (model::PageEnumeration& rPageSet)
-{
- SlideExclusionState eState (UNDEFINED);
- sal_Bool bState;
-
- // Get toggle state of the selected pages.
- while (rPageSet.HasMoreElements() && eState!=MIXED)
- {
- bState = rPageSet.GetNextElement()->GetPage()->IsExcluded();
- switch (eState)
- {
- case UNDEFINED:
- // Use the first selected page to set the inital value.
- eState = bState ? EXCLUDED : INCLUDED;
- break;
-
- case EXCLUDED:
- // The pages before where all not part of the show,
- // this one is.
- if ( ! bState)
- eState = MIXED;
- break;
-
- case INCLUDED:
- // The pages before where all part of the show,
- // this one is not.
- if (bState)
- eState = MIXED;
- break;
-
- case MIXED:
- default:
- // No need to change anything.
- break;
- }
- }
-
- return eState;
-}
-
-} // end of anonymous namespace
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsTransferable.cxx b/sd/source/ui/slidesorter/controller/SlsTransferable.cxx
deleted file mode 100644
index 22d33074c..000000000
--- a/sd/source/ui/slidesorter/controller/SlsTransferable.cxx
+++ /dev/null
@@ -1,104 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include "controller/SlsTransferable.hxx"
-
-#include "SlideSorterViewShell.hxx"
-#include "View.hxx"
-
-namespace sd { namespace slidesorter { namespace controller {
-
-Transferable::Transferable (
- SdDrawDocument* pSrcDoc,
- ::sd::View* pWorkView,
- sal_Bool bInitOnGetData,
- SlideSorterViewShell* pViewShell,
- const ::std::vector<Representative>& rRepresentatives)
- : SdTransferable (pSrcDoc, pWorkView, bInitOnGetData),
- mpViewShell(pViewShell),
- maRepresentatives(rRepresentatives)
-{
- if (mpViewShell != NULL)
- StartListening(*mpViewShell);
-}
-
-
-
-
-Transferable::~Transferable (void)
-{
- if (mpViewShell != NULL)
- EndListening(*mpViewShell);
-}
-
-
-
-
-void Transferable::DragFinished (sal_Int8 nDropAction)
-{
- if (mpViewShell != NULL)
- mpViewShell->DragFinished(nDropAction);
-}
-
-
-
-
-void Transferable::Notify (SfxBroadcaster& rBroadcaster, const SfxHint& rHint)
-{
- if (rHint.ISA(SfxSimpleHint) && mpViewShell!=NULL)
- {
- SfxSimpleHint& rSimpleHint (*PTR_CAST(SfxSimpleHint, &rHint));
- if (rSimpleHint.GetId() == SFX_HINT_DYING)
- {
- // This hint may come either from the ViewShell or from the
- // document (registered by SdTransferable). We do not know
- // which but both are sufficient to disconnect from the
- // ViewShell.
- EndListening(*mpViewShell);
- mpViewShell = NULL;
- }
- }
-
- SdTransferable::Notify(rBroadcaster, rHint);
-}
-
-
-
-
-const ::std::vector<Transferable::Representative>& Transferable::GetRepresentatives (void) const
-{
- return maRepresentatives;
-}
-
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/controller/SlsVisibleAreaManager.cxx b/sd/source/ui/slidesorter/controller/SlsVisibleAreaManager.cxx
deleted file mode 100644
index f2cdd8831..000000000
--- a/sd/source/ui/slidesorter/controller/SlsVisibleAreaManager.cxx
+++ /dev/null
@@ -1,305 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "controller/SlsVisibleAreaManager.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsProperties.hxx"
-#include "controller/SlsAnimationFunction.hxx"
-#include "controller/SlsScrollBarManager.hxx"
-#include "controller/SlsCurrentSlideManager.hxx"
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-namespace {
- class VisibleAreaScroller
- {
- public:
- VisibleAreaScroller (
- SlideSorter& rSlideSorter,
- const Point aStart,
- const Point aEnd);
- void operator() (const double nValue);
- private:
- SlideSorter& mrSlideSorter;
- Point maStart;
- const Point maEnd;
- const ::boost::function<double(double)> maAccelerationFunction;
- };
-
-} // end of anonymous namespace
-
-
-
-VisibleAreaManager::VisibleAreaManager (SlideSorter& rSlideSorter)
- : mrSlideSorter(rSlideSorter),
- maVisibleRequests(),
- mnScrollAnimationId(Animator::NotAnAnimationId),
- maRequestedVisibleTopLeft(),
- meRequestedAnimationMode(Animator::AM_Immediate),
- mbIsCurrentSlideTrackingActive(true),
- mnDisableCount(0)
-{
-}
-
-
-
-
-VisibleAreaManager::~VisibleAreaManager (void)
-{
-}
-
-
-
-
-void VisibleAreaManager::ActivateCurrentSlideTracking (void)
-{
- mbIsCurrentSlideTrackingActive = true;
-}
-
-
-
-
-void VisibleAreaManager::DeactivateCurrentSlideTracking (void)
-{
- mbIsCurrentSlideTrackingActive = false;
-}
-
-
-
-
-void VisibleAreaManager::RequestVisible (
- const model::SharedPageDescriptor& rpDescriptor,
- const bool bForce)
-{
- if (rpDescriptor)
- {
- if (mnDisableCount == 0)
- {
- maVisibleRequests.push_back(
- mrSlideSorter.GetView().GetLayouter().GetPageObjectBox(
- rpDescriptor->GetPageIndex(),
- true));
- }
- if (bForce && ! mbIsCurrentSlideTrackingActive)
- ActivateCurrentSlideTracking();
- MakeVisible();
- }
-}
-
-
-
-
-void VisibleAreaManager::RequestCurrentSlideVisible (void)
-{
- if (mbIsCurrentSlideTrackingActive && mnDisableCount==0)
- RequestVisible(
- mrSlideSorter.GetController().GetCurrentSlideManager()->GetCurrentSlide());
-}
-
-
-
-
-void VisibleAreaManager::MakeVisible (void)
-{
- if (maVisibleRequests.empty())
- return;
-
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- if ( ! pWindow)
- return;
- const Point aCurrentTopLeft (pWindow->PixelToLogic(Point(0,0)));
-
- const ::boost::optional<Point> aNewVisibleTopLeft (GetRequestedTopLeft());
- maVisibleRequests.clear();
- if ( ! aNewVisibleTopLeft)
- return;
-
- // We now know what the visible area shall be. Scroll accordingly
- // unless that is not already the visible area or a running scroll
- // animation has it as its target area.
- if (mnScrollAnimationId!=Animator::NotAnAnimationId
- && maRequestedVisibleTopLeft==aNewVisibleTopLeft)
- return;
-
- // Stop a running animation.
- if (mnScrollAnimationId != Animator::NotAnAnimationId)
- mrSlideSorter.GetController().GetAnimator()->RemoveAnimation(mnScrollAnimationId);
-
- maRequestedVisibleTopLeft = aNewVisibleTopLeft.get();
- VisibleAreaScroller aAnimation(
- mrSlideSorter,
- aCurrentTopLeft,
- maRequestedVisibleTopLeft);
- if (meRequestedAnimationMode==Animator::AM_Animated
- && mrSlideSorter.GetProperties()->IsSmoothSelectionScrolling())
- {
- mnScrollAnimationId = mrSlideSorter.GetController().GetAnimator()->AddAnimation(
- aAnimation,
- 0,
- 300);
- }
- else
- {
- // Execute the animation at its final value.
- aAnimation(1.0);
- }
- meRequestedAnimationMode = Animator::AM_Immediate;
-}
-
-
-
-
-::boost::optional<Point> VisibleAreaManager::GetRequestedTopLeft (void) const
-{
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- if ( ! pWindow)
- return ::boost::optional<Point>();
-
- // Get the currently visible area and the model area.
- const Rectangle aVisibleArea (pWindow->PixelToLogic(
- Rectangle(
- Point(0,0),
- pWindow->GetOutputSizePixel())));
- const Rectangle aModelArea (mrSlideSorter.GetView().GetModelArea());
-
- sal_Int32 nVisibleTop (aVisibleArea.Top());
- const sal_Int32 nVisibleWidth (aVisibleArea.GetWidth());
- sal_Int32 nVisibleLeft (aVisibleArea.Left());
- const sal_Int32 nVisibleHeight (aVisibleArea.GetHeight());
-
- // Find the longest run of boxes whose union fits into the visible area.
- Rectangle aBoundingBox;
- for (::std::vector<Rectangle>::const_iterator
- iBox(maVisibleRequests.begin()),
- iEnd(maVisibleRequests.end());
- iBox!=iEnd;
- ++iBox)
- {
- if (nVisibleTop+nVisibleHeight <= iBox->Bottom())
- nVisibleTop = iBox->Bottom()-nVisibleHeight;
- if (nVisibleTop > iBox->Top())
- nVisibleTop = iBox->Top();
-
- if (nVisibleLeft+nVisibleWidth <= iBox->Right())
- nVisibleLeft = iBox->Right()-nVisibleWidth;
- if (nVisibleLeft > iBox->Left())
- nVisibleLeft = iBox->Left();
-
- // Make sure the visible area does not move outside the model area.
- if (nVisibleTop + nVisibleHeight > aModelArea.Bottom())
- nVisibleTop = aModelArea.Bottom() - nVisibleHeight;
- if (nVisibleTop < aModelArea.Top())
- nVisibleTop = aModelArea.Top();
-
- if (nVisibleLeft + nVisibleWidth > aModelArea.Right())
- nVisibleLeft = aModelArea.Right() - nVisibleWidth;
- if (nVisibleLeft < aModelArea.Left())
- nVisibleLeft = aModelArea.Left();
- }
-
- const Point aRequestedTopLeft (nVisibleLeft, nVisibleTop);
- if (aRequestedTopLeft == aVisibleArea.TopLeft())
- return ::boost::optional<Point>();
- else
- return ::boost::optional<Point>(aRequestedTopLeft);
-}
-
-
-
-
-//===== VisibleAreaManager::TemporaryDisabler =================================
-
-VisibleAreaManager::TemporaryDisabler::TemporaryDisabler (SlideSorter& rSlideSorter)
- : mrVisibleAreaManager(rSlideSorter.GetController().GetVisibleAreaManager())
-{
- ++mrVisibleAreaManager.mnDisableCount;
-}
-
-
-
-
-VisibleAreaManager::TemporaryDisabler::~TemporaryDisabler (void)
-{
- --mrVisibleAreaManager.mnDisableCount;
-}
-
-
-
-//===== VerticalVisibleAreaScroller ===========================================
-
-namespace {
-
-const static sal_Int32 gnMaxScrollDistance = 300;
-
-VisibleAreaScroller::VisibleAreaScroller (
- SlideSorter& rSlideSorter,
- const Point aStart,
- const Point aEnd)
- : mrSlideSorter(rSlideSorter),
- maStart(aStart),
- maEnd(aEnd),
- maAccelerationFunction(
- controller::AnimationParametricFunction(
- controller::AnimationBezierFunction (0.1,0.6)))
-{
- // When the distance to scroll is larger than a threshold then first
- // jump to within this distance of the final value and start the
- // animation from there.
- if (abs(aStart.X()-aEnd.X()) > gnMaxScrollDistance)
- {
- if (aStart.X() < aEnd.X())
- maStart.X() = aEnd.X()-gnMaxScrollDistance;
- else
- maStart.X() = aEnd.X()+gnMaxScrollDistance;
- }
- if (abs(aStart.Y()-aEnd.Y()) > gnMaxScrollDistance)
- {
- if (aStart.Y() < aEnd.Y())
- maStart.Y() = aEnd.Y()-gnMaxScrollDistance;
- else
- maStart.Y() = aEnd.Y()+gnMaxScrollDistance;
- }
-}
-
-
-
-
-void VisibleAreaScroller::operator() (const double nTime)
-{
- const double nLocalTime (maAccelerationFunction(nTime));
- mrSlideSorter.GetController().GetScrollBarManager().SetTopLeft(
- Point(
- sal_Int32(0.5 + maStart.X() * (1.0 - nLocalTime) + maEnd.X() * nLocalTime),
- sal_Int32 (0.5 + maStart.Y() * (1.0 - nLocalTime) + maEnd.Y() * nLocalTime)));
-}
-
-} // end of anonymous namespace
-
-} } } // end of namespace ::sd::slidesorter::controller
diff --git a/sd/source/ui/slidesorter/inc/cache/SlsCacheContext.hxx b/sd/source/ui/slidesorter/inc/cache/SlsCacheContext.hxx
deleted file mode 100644
index cafd6f607..000000000
--- a/sd/source/ui/slidesorter/inc/cache/SlsCacheContext.hxx
+++ /dev/null
@@ -1,108 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_CACHE_CONTEXT_HXX
-#define SD_SLIDESORTER_CACHE_CONTEXT_HXX
-
-#include <sal/types.h>
-#include <com/sun/star/uno/XInterface.hpp>
-#include <boost/shared_ptr.hpp>
-#include <vector>
-
-class SdrPage;
-class Bitmap;
-
-namespace sd { namespace slidesorter { namespace cache {
-
-typedef const SdrPage* CacheKey;
-
-/** This interface allows the individualisation of different instances of
- the PreviewCache.
-*/
-class CacheContext
-{
-public:
- /** This method is called when the asynchronous creation of a preview
- has been finished.
- @param aKey
- The key of the page for which the preview has been created.
- @param aPreview
- The newly created preview.
- */
- virtual void NotifyPreviewCreation (
- CacheKey aKey,
- const Bitmap& rPreview) = 0;
-
- /** Called to determine whether the system is idle and a preview can be
- created without annoying the user.
- */
- virtual bool IsIdle (void) = 0;
-
- /** This method is used to determine whether a page is currently visible
- or not. It is called when the cache becomes to large and some
- previews have to be released or scaled down.
- */
- virtual bool IsVisible (CacheKey aKey) = 0;
-
- /** Return the page associdated with the given key. Note that different
- keys may map to a single page (this may be the case with custom
- slide shows.)
- */
- virtual const SdrPage* GetPage (CacheKey aKey) = 0;
-
- /** This method is used when the request queue is filled. It asks for
- the list of visible entries and maybe for the list of not visible
- entries and creates preview creation requests for them.
- @param bVisible
- When this is <FALSE/> then the implementation can decide whether
- to allow rendering of previews that are not visible (ahead of
- time). When not then return an empty pointer or an empty vector.
- */
- virtual ::boost::shared_ptr<std::vector<CacheKey> > GetEntryList (bool bVisible) = 0;
-
- /** Return the priority that defines the order in which previews are
- created for different keys/pages. Typically the visible pages come
- first, then top-down, left-to-right.
- */
- virtual sal_Int32 GetPriority (CacheKey aKey) = 0;
-
- /** Return the model to which the pages belong for which the called
- cache manages the previews. Different caches that belong to the
- same model but have different preview sizes may acces previews of
- each other in order to create fast previews of the previews.
- */
- virtual ::com::sun::star::uno::Reference<com::sun::star::uno::XInterface> GetModel (void) = 0;
-};
-
-typedef ::boost::shared_ptr<CacheContext> SharedCacheContext;
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/cache/SlsPageCache.hxx b/sd/source/ui/slidesorter/inc/cache/SlsPageCache.hxx
deleted file mode 100644
index c31106532..000000000
--- a/sd/source/ui/slidesorter/inc/cache/SlsPageCache.hxx
+++ /dev/null
@@ -1,182 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_PAGE_CACHE_HXX
-#define SD_SLIDESORTER_PAGE_CACHE_HXX
-
-#include "cache/SlsCacheContext.hxx"
-#include <sal/types.h>
-#include <tools/gen.hxx>
-#include <boost/scoped_ptr.hpp>
-#include <vcl/bitmap.hxx>
-
-
-namespace sd { namespace slidesorter { namespace view {
-class PageObjectViewObjectContact;
-} } }
-
-namespace sd { namespace slidesorter { namespace cache {
-
-class GenericPageCache;
-class RequestData;
-
-/** The page cache is responsible for the creation and storage of preview
- bitmaps of pages that are shown by the slide sorter.
-
- <p>Bitmaps for previews and a cache are used to speed up the display
- (painting) of the slide sorter. But, of course, we have to limit this
- time-space-tradeoff by limiting the amount of space that can be use to
- store bitmaps.</p>
-
- <p>There are several strategies employed by this class to shorten the
- perceived time that is used to paint the slide sorter:
- <ul>
- <li>Rendering pages ahead of time. Additionally to rendering the
- visible slides we try to render part or all of the slides that are not
- (yet) visible. This, of course, makes sense only when the computer is
- ohterwise idle while doing that.</li>
- <li>When the size of the slides on the screen changes we mark the
- bitmaps as needing an update but use them while the new bitmap in the
- correct size is not available.</li>
- <li>Give the UI the chance to handle user events between the rendering
- of differe slides.</li>
- <li>Limit the amount of space that may be used for storing preview
- bitmaps and throw.</li>
- </p>
-
- <p>There is another somewhat similar methods for requesting new previews:
- GetPreviewBitmap() schedules a re-rendering (when necessary) and
- returns the preview what is currently available, either as a preview of
- the preview or, when nothing has changed since the last call, as the
- final thing.
- </p>
-*/
-class PageCache
-{
-public:
- /** The page chache is created with a reference to the slide sorter so
- that it has access to both the view and the model and so can fill
- itself with requests for all or just the visible pages.
-
- It is the task of the PageCacheManager to create new objects of this
- class.
- */
- PageCache (
- const Size& rPreviewSize,
- const bool bDoSuperSampling,
- const SharedCacheContext& rpCacheContext);
-
- ~PageCache (void);
-
- void ChangeSize(
- const Size& rPreviewSize,
- const bool bDoSuperSampling);
-
- /** Request a preview bitmap for the specified page object in the
- specified size. The returned bitmap may be a preview of the
- preview, i.e. either a scaled (up or down) version of a previous
- preview (of the wrong size) or an empty bitmap. In this case a
- request for the generation of a new preview is created and inserted
- into the request queue. When the preview is available in the right
- size the page shape will be told to paint itself again. When it
- then calls this method again if receives the correctly sized preview
- bitmap.
- @param rRequestData
- This data is used to determine the preview.
- @param bResize
- When <TRUE/> then when the available bitmap has not the
- requested size, it is scaled before it is returned. When
- <FALSE/> then the bitmap is returned in the wrong size and it is
- the task of the caller to scale it.
- @return
- Returns a bitmap that is either empty, contains a scaled (up or
- down) version or is the requested bitmap.
- */
- Bitmap GetPreviewBitmap (
- const CacheKey aKey,
- const bool bResize);
-
- Bitmap GetMarkedPreviewBitmap (
- const CacheKey aKey,
- const bool bResize);
- void SetMarkedPreviewBitmap (
- const CacheKey aKey,
- const Bitmap& rBitmap);
-
- /** When the requested preview bitmap does not yet exist or is not
- up-to-date then the rendering of one is scheduled. Otherwise this
- method does nothing.
- */
- void RequestPreviewBitmap (const CacheKey aKey);
-
- /** Tell the cache that the bitmap associated with the given request
- data is not up-to-date anymore. This will invalidate all previews
- in other caches that represent the same page as well.
- @param bRequestPreview
- When <TRUE/> then a new preview is requested and will lead
- eventually to a repaint of the associated page object.
- */
- void InvalidatePreviewBitmap (
- const CacheKey aKey,
- const bool bRequestPreview);
-
- /** Call this method when a view-object-contact object is being deleted
- and does not need (a) its current bitmap in the cache and (b) a
- requested new bitmap.
- */
- void ReleasePreviewBitmap (const CacheKey aKey);
-
- /** Call this method when all preview bitmaps have to be generated anew.
- This is the case when the size of the page objects on the screen has
- changed or when the model has changed.
- @param bUpdateCache
- When this flags is <TRUE/> then requests for updated previews
- are created. When it is <FALSE/> the existing previews are only
- marked as not being up-to-date anymore.
- */
- void InvalidateCache (const bool bUpdateCache = true);
-
- /** With the precious flag you can control whether a bitmap can be
- removed or reduced in size to make room for other bitmaps or is so
- precious that it will not touched. A typical use is to set the
- precious flag for exactly the visible pages.
- */
- void SetPreciousFlag (const CacheKey aKey, const bool bIsPrecious);
-
- void Pause (void);
- void Resume (void);
-
-private:
- ::boost::scoped_ptr<GenericPageCache> mpImplementation;
-};
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/cache/SlsPageCacheManager.hxx b/sd/source/ui/slidesorter/inc/cache/SlsPageCacheManager.hxx
deleted file mode 100644
index f21857ca6..000000000
--- a/sd/source/ui/slidesorter/inc/cache/SlsPageCacheManager.hxx
+++ /dev/null
@@ -1,191 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_PAGE_CACHE_MANAGER_HXX
-#define SD_PAGE_CACHE_MANAGER_HXX
-
-#include <sal/types.h>
-#include <com/sun/star/uno/XInterface.hpp>
-#include <boost/shared_ptr.hpp>
-#include <memory>
-#include <vector>
-
-class Size;
-class SdDrawDocument;
-class SdrPage;
-
-namespace sd { namespace slidesorter { namespace view {
-class SlideSorterView;
-class PageObjectViewObjectContact;
-} } }
-
-namespace sd { namespace slidesorter { namespace model {
-class SlideSorterModel;
-} } }
-
-namespace sd { namespace slidesorter { namespace cache {
-
-namespace css = ::com::sun::star;
-
-class BitmapCache;
-
-
-/** Provide and manage the preview bitmap caches for all slide sorter
- instances. There is one cache per active slide sorter plus a small
- number of caches that are no longer in use. The later are kept to speed
- up the switching between views.
-*/
-class PageCacheManager
-{
-public:
- typedef BitmapCache Cache;
- typedef ::std::vector< ::std::pair<Size, ::boost::shared_ptr<BitmapCache> > > BestFittingPageCaches;
- typedef css::uno::Reference<css::uno::XInterface> DocumentKey;
-
- /** Return the one instance of the PageCacheManager class.
- */
- static ::boost::shared_ptr<PageCacheManager> Instance (void);
-
- /** Look up the cache for the given model in which the previews have the
- specified size. If no such cache exists, then one is created. When
- a new BitmapCache is created its Recycle() method is called with a
- sorted list of existing caches from which the new one initialize its
- previews.
- @return
- The returned cache lives as long as somebody keeps a shared
- pointer and the ReleaseCache() method has not been called.
- */
- ::boost::shared_ptr<Cache> GetCache (
- DocumentKey pDocument,
- const Size& rPreviewSize);
-
- /** Tell the cache manager to release its own reference to the specified
- cache. After that the cache will live as long as the caller (and
- maybe others) holds its reference.
- */
- void ReleaseCache (const ::boost::shared_ptr<Cache>& rpCache);
-
- /** This is an information to the cache manager that the size of preview
- bitmaps in the specified cache has changed.
-
- */
- ::boost::shared_ptr<Cache> ChangeSize (
- const ::boost::shared_ptr<Cache>& rpCache,
- const Size& rOldPreviewSize,
- const Size& rNewPreviewSize);
-
- /** Invalidate the preview bitmap for one slide that belongs to the
- specified document. The bitmaps for this slide in all caches are
- marked as out-of-date and will be re-created when they are requested
- the next time.
- */
- bool InvalidatePreviewBitmap (
- DocumentKey pDocument,
- const SdrPage* pPage);
-
- /** Invalidate the preview bitmaps for all slides that belong to the
- specified document. This is necessary after model changes that
- affect e.g. page number fiels.
- */
- void InvalidateAllPreviewBitmaps (DocumentKey pDocument);
-
- /** Invalidate all the caches that are currently in use and destroy
- those that are not. This is used for example when the high contrast
- mode is turned on or off.
- */
- void InvalidateAllCaches (void);
-
- /** Call this method when a page has been deleted and its preview
- is not needed anymore.
- */
- void ReleasePreviewBitmap (const SdrPage* pPage);
-
-private:
- /** Singleton instance of the cache manager. Note that this is a weak
- pointer. The (implementation class of) ViewShellBase holds a
- shared_ptr so that the cache manager has the same life time as the
- ViewShellBase.
- */
- static ::boost::weak_ptr<PageCacheManager> mpInstance;
-
- /// List of active caches.
- class PageCacheContainer;
- ::std::auto_ptr<PageCacheContainer> mpPageCaches;
-
- /// List of inactive, recently used caches.
- class RecentlyUsedPageCaches;
- ::std::auto_ptr<RecentlyUsedPageCaches> mpRecentlyUsedPageCaches;
-
- /** The maximal number of recently used caches that are kept alive after
- they have become inactive, i.e. after they are not used anymore by a
- slide sorter.
- */
- const sal_uInt32 mnMaximalRecentlyCacheCount;
-
- PageCacheManager (void);
- ~PageCacheManager (void);
-
- class Deleter;
- friend class Deleter;
-
- ::boost::shared_ptr<Cache> GetRecentlyUsedCache(
- DocumentKey pDocument,
- const Size& rSize);
-
- /** Add the given cache to the list of recently used caches for the
- document. There is one such list per document. Each least has at
- most mnMaximalRecentlyCacheCount members.
- */
- void PutRecentlyUsedCache(
- DocumentKey pDocument,
- const Size& rPreviewSize,
- const ::boost::shared_ptr<Cache>& rpCache);
-
- /** Return a sorted list of the available caches, both active caches and
- those recently used, for the given document. The sort order is so
- that an exact match of the preview size is at the front. Other
- caches follow with the largest size first.
- */
- BestFittingPageCaches GetBestFittingCaches (
- DocumentKey pDocument,
- const Size& rPreviewSize);
-
- /** This method is used internally to initialize a newly created
- BitmapCache with already exisiting previews.
- */
- void Recycle (
- const ::boost::shared_ptr<Cache>& rpCache,
- DocumentKey pDocument,
- const Size& rPreviewSize);
-};
-
-} } } // end of namespace ::sd::slidesorter::cache
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/controller/SlideSorterController.hxx b/sd/source/ui/slidesorter/inc/controller/SlideSorterController.hxx
deleted file mode 100644
index 912397c8c..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlideSorterController.hxx
+++ /dev/null
@@ -1,346 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_SLIDE_SORTER_CONTROLLER_HXX
-#define SD_SLIDESORTER_SLIDE_SORTER_CONTROLLER_HXX
-
-#include "model/SlsSharedPageDescriptor.hxx"
-#include "ViewShell.hxx"
-
-#include <com/sun/star/drawing/XDrawPages.hpp>
-
-#include <sfx2/shell.hxx>
-#include <sfx2/viewfac.hxx>
-#include <tools/link.hxx>
-#include <tools/gen.hxx>
-#include <comphelper/implementationreference.hxx>
-
-namespace sd { namespace slidesorter {
-class SlideSorter;
-} }
-
-namespace sd { namespace slidesorter { namespace view {
-class SlideSorterView;
-class HighlightObject;
-} } }
-
-namespace sd { namespace slidesorter { namespace model {
-class SlideSorterModel;
-} } }
-
-namespace css = ::com::sun::star;
-
-namespace sd { namespace slidesorter { namespace controller {
-
-class Animator;
-class Clipboard;
-class CurrentSlideManager;
-class FocusManager;
-class InsertionIndicatorHandler;
-class Listener;
-class PageSelector;
-class ScrollBarManager;
-class SelectionFunction;
-class SelectionManager;
-class SelectionObserver;
-class SlotManager;
-class VisibleAreaManager;
-
-class SlideSorterController
-{
-public:
- /** Create a new controller for the slide sorter.
- @param pParentWindow
- The window that contains the controls of the new
- controller.
- */
- SlideSorterController (SlideSorter& rSlideSorter);
-
- /** Late initialization. Call this method once a new new object has been
- created.
- */
- virtual void Init (void);
-
- virtual ~SlideSorterController (void);
-
- void Dispose (void);
-
- /** Place and size the scroll bars and the browser window so that the
- given rectangle is filled.
- @return
- The space occupied by the browser window is returned.
- */
- Rectangle Resize (const Rectangle& rAvailableSpace);
-
- /** Determine which of the UI elements--the scroll bars, the scroll bar
- filler, the actual slide sorter view--are visible and place them in
- the area last passed to Resize().
- @param bForce
- When <TRUE/> is given (<FALSE/> is the default) then the content
- window and with it the SlideSorterView is resized event when its
- size does not change (the size does change when the visibility
- of scroll bars changes.)
- @return
- Returns the space occupied by the browser window.
- */
- Rectangle Rearrange (bool bForce = false);
-
- /** Return the descriptor of the page that is rendered under the
- given position. This takes the IsOnlyPreviewTriggersMouseOver
- property into account.
- @return
- Returns a pointer to a page descriptor instead of a
- reference because when no page is found at the position
- then NULL is returned to indicate this.
- */
- model::SharedPageDescriptor GetPageAt (const Point& rPixelPosition);
-
- PageSelector& GetPageSelector (void);
- FocusManager& GetFocusManager (void);
- controller::Clipboard& GetClipboard (void);
-
- /** Return the object that manages the scroll bars.
- */
- ScrollBarManager& GetScrollBarManager (void);
-
- ::boost::shared_ptr<CurrentSlideManager> GetCurrentSlideManager (void) const;
- ::boost::shared_ptr<SlotManager> GetSlotManager (void) const;
- ::boost::shared_ptr<SelectionManager> GetSelectionManager (void) const;
- ::boost::shared_ptr<InsertionIndicatorHandler> GetInsertionIndicatorHandler (void) const;
-
- /** This method forwards the call to the SlideSorterView and executes
- pending operations like moving selected pages into the visible area.
- */
- void Paint (const Rectangle& rRect, ::Window* pWin);
-
- void FuTemporary (SfxRequest& rRequest);
- void FuPermanent (SfxRequest& rRequest);
- void FuSupport (SfxRequest& rRequest);
- bool Command (
- const CommandEvent& rEvent,
- ::sd::Window* pWindow);
-
- void GetCtrlState (SfxItemSet &rSet);
- void GetStatusBarState (SfxItemSet& rSet);
-
- void ExecCtrl (SfxRequest& rRequest);
- void GetAttrState (SfxItemSet& rSet);
- void ExecStatusBar (SfxRequest& rRequest);
-
- bool IsLocked (void) const;
-
- /** Create an object of this inner class to prevent updates due to model
- changes.
- */
- class ModelChangeLock
- {public:
- ModelChangeLock (SlideSorterController& rController);
- ~ModelChangeLock (void);
- void Release (void);
- private:
- SlideSorterController* mpController;
- };
- friend class ModelChangeLock;
-
-
- /** Handle a change of the model, that is, handle the removal and
- insertion of whole pages or a change of the edit mode.
-
- This method is a convenience function that simply calls
- PreModelChange() and then PostModelChange().
- */
- void HandleModelChange (void);
-
- DECL_LINK(WindowEventHandler, VclWindowEvent*);
-
- /** Update the display of all pages. This involves a redraw and
- releasing previews and caches.
- */
- void UpdateAllPages (void);
-
- /** This factory method creates a selection function.
- */
- virtual FunctionReference CreateSelectionFunction (SfxRequest& rRequest);
-
- /** When the current function of the view shell is the slide sorter
- selection function then return a reference to it. Otherwise return
- an empty reference.
- */
- ::rtl::Reference<SelectionFunction> GetCurrentSelectionFunction (void);
-
- /** Prepare for a change of the edit mode. Depending on the current
- edit mode we may save the selection so that it can be restored when
- later changing back to the current edit mode.
- */
- void PrepareEditModeChange (void);
-
- /** Set a new edit mode and return whether the edit mode really
- has been changed. For proper saving and restoring of the selection
- this method should be called between calls to
- PrepareEditModeChange() and FinishEditModeChange().
- @return
- A return value of <TRUE/> indicates that the edit mode has
- changed.
- */
- bool ChangeEditMode (EditMode eEditMode);
-
- /** Finish the change of the edit mode. Here we may select a page or
- restore a previously saved selection.
- */
- void FinishEditModeChange (void);
-
- /** Call this method when the name of one of the pages has changed.
- This is then notified to the accessibility object, when that exists.
- @param nPageIndex
- The index of the page whose name has been changed.
- @param rsOldName
- The old name of the page. The new name can be taken from the
- page object.
- */
- void PageNameHasChanged (int nPageIndex, const String& rsOldName);
-
- /** Return whether a context menu has been opened by the called
- SlideSorterController object and is still open.
- */
- bool IsContextMenuOpen (void) const;
-
- /** Provide the set of pages to be displayed in the slide sorter. The
- GetDocumentSlides() method can be found only in the SlideSorterModel.
- */
- void SetDocumentSlides (const css::uno::Reference<css::container::XIndexAccess>& rxSlides);
-
- /** Return an Animator object.
- */
- ::boost::shared_ptr<Animator> GetAnimator (void) const;
-
- VisibleAreaManager& GetVisibleAreaManager (void) const;
-
- void CheckForMasterPageAssignment (void);
-
-private:
- SlideSorter& mrSlideSorter;
- model::SlideSorterModel& mrModel;
- view::SlideSorterView& mrView;
- ::boost::scoped_ptr<PageSelector> mpPageSelector;
- ::boost::scoped_ptr<FocusManager> mpFocusManager;
- ::boost::shared_ptr<SlotManager> mpSlotManager;
- ::boost::scoped_ptr<controller::Clipboard> mpClipboard;
- ::boost::scoped_ptr<ScrollBarManager> mpScrollBarManager;
- mutable ::boost::shared_ptr<CurrentSlideManager> mpCurrentSlideManager;
- ::boost::shared_ptr<SelectionManager> mpSelectionManager;
- ::boost::shared_ptr<InsertionIndicatorHandler> mpInsertionIndicatorHandler;
- ::boost::shared_ptr<Animator> mpAnimator;
- ::boost::scoped_ptr<VisibleAreaManager> mpVisibleAreaManager;
-
- // The listener listens to UNO events and thus is a UNO object.
- // For proper life time management and at the same time free access to
- // the implementation object we use the ImplementationReference class.
- ::rtl::Reference<controller::Listener> mpListener;
-
- int mnModelChangeLockCount;
- bool mbIsForcedRearrangePending;
-
- bool mbPreModelChangeDone;
- bool mbPostModelChangePending;
-
- ::std::vector<Link> maSelectionChangeListeners;
-
- /** This array stores the indices of the selected page descriptors at
- the time when the edit mode is switched to EM_MASTERPAGE. With this
- we can restore the selection when switching back to EM_PAGE mode.
- */
- ::std::vector<SdPage*> maSelectionBeforeSwitch;
- /// The current page before the edit mode is switched to EM_MASTERPAGE.
- int mnCurrentPageBeforeSwitch;
-
- /** The master page to select after the edit mode is changed. This
- member is used to pass the pointer from PrepareEditModeChange() to
- FinishEditModeChange().
- */
- SdPage* mpEditModeChangeMasterPage;
-
- /** This rectangle in the parent window encloses scroll bars and slide
- sorter window. It is set when Resize() is called.
- */
- Rectangle maTotalWindowArea;
-
- /** This counter is used to avoid processing of reentrant calls to
- Paint().
- */
- sal_Int32 mnPaintEntranceCount;
-
- /** Remember whether the context menu is open.
- */
- bool mbIsContextMenuOpen;
-
- /** Delete the given list of normal pages. This method is a helper
- function for DeleteSelectedPages().
- @param rSelectedNormalPages
- A list of normal pages. Supplying master pages is an error.
- */
- void DeleteSelectedNormalPages (const ::std::vector<SdPage*>& rSelectedNormalPages);
-
- /** Delete the given list of master pages. This method is a helper
- function for DeleteSelectedPages().
- @param rSelectedMasterPages
- A list of master pages. Supplying normal pages is an error.
- */
- void DeleteSelectedMasterPages (const ::std::vector<SdPage*>& rSelectedMasterPages);
-
- /** Prepare for several model changes, i.e. prevent time-consuming and
- non-critical operations like repaints until UnlockModelChange() is
- called. Ciritcal operations like releasing references to pages that
- do not exist anymore are executed.
- */
- void LockModelChange (void);
-
- /** Further calls to HandleModelChange() will result in a full featured
- update of model, view, and controller. When HandleModelChange() has
- been called since the last LockModelChange() then this is done right
- away to bring the view up-to-date.
- */
- void UnlockModelChange (void);
-
- /** Prepare for a model change. This method does all the things that
- need to be done _before_ the model changes, e.g. because they need
- access to the model data before the change.
- */
- void PreModelChange (void);
-
- /** Complete a model change. This includes the recreation of data
- structures that depend on the model and the request for a repaint to
- show the changes.
- */
- void PostModelChange (void);
-};
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsAnimationFunction.hxx b/sd/source/ui/slidesorter/inc/controller/SlsAnimationFunction.hxx
deleted file mode 100644
index e26ca94cf..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsAnimationFunction.hxx
+++ /dev/null
@@ -1,180 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_CONTROLLER_ANIMATION_FUNCTION_HXX
-#define SD_SLIDESORTER_CONTROLLER_ANIMATION_FUNCTION_HXX
-
-#include "model/SlsSharedPageDescriptor.hxx"
-#include <basegfx/point/b2dpoint.hxx>
-#include <boost/noncopyable.hpp>
-#include <boost/function.hpp>
-#include <tools/gen.hxx>
-#include <vector>
-
-namespace sd { namespace slidesorter { namespace view {
-class SlideSorterView;
-} } }
-
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-/** A collection of functions that are usefull when creating animations.
- They are collected here until a better place is found.
-*/
-class AnimationFunction
- : private ::boost::noncopyable
-{
-public:
- /** Acceleration function that maps [0,1] to [0,1] linearly, ie it
- returns the given time value unaltered.
- */
- static double Linear (const double nTime);
-
- /** Acceleration function that maps [0,1] to [0,1]. Speed starts fast
- and ends slow following the sine function.
- */
- static double FastInSlowOut_Sine (const double nTime);
-
- /** Acceleration function that maps [0,1] to [0,1]. Speed starts fast
- and ends slow following the square root function.
- */
- static double FastInSlowOut_Root (const double nTime);
-
- /** Acceleration function that maps [0,1] to [0,0]. Speed starts slow,
- rises, drops and ends slow following the sine function.
- */
- static double SlowInSlowOut_0to0_Sine (const double nTime);
-
- /** Acceleration function that maps [0,1] to [0,0]. Speed starts slow,
- rises and drops several times and ends slow following multiple
- cycles of the the sine function.
- */
- static double Vibrate_Sine (const double nTime);
-
- /** Scale point linearly.
- */
- static Point ScalePoint (const Point& rPoint, const double nTime);
-
- /** Blend two points together according to the given weight.
- */
- static double Blend (const double nStartValue, const double nEndValue, const double nWeight);
-
- /** Apply a gradual visual state change. The kind of change, i.e. the
- previous and the new states are expected to be already set. This
- method only adjusts the blending of the visual representation from
- one state to the other.
- */
- static void ApplyVisualStateChange (
- const model::SharedPageDescriptor& rpDescriptor,
- view::SlideSorterView& rView,
- const double nTime);
-
- /** Apply a gradual change of a previously set offset to the location of
- a page object.
- */
- static void ApplyLocationOffsetChange (
- const model::SharedPageDescriptor& rpDescriptor,
- view::SlideSorterView& rView,
- const Point aLocationOffset);
-
- /** Apply a gradual change the alpha value from the old value to a
- new value (set prior to this call.)
- */
- static void ApplyButtonAlphaChange(
- const model::SharedPageDescriptor& rpDescriptor,
- view::SlideSorterView& rView,
- const double nButtonAlpha,
- const double nButtonBarAlpha);
-};
-
-
-
-
-class AnimationBezierFunction
-{
-public:
- /** Create a cubic bezier curve whose start and end points are given
- implicitly as P0=(0,0) and P3=(1,1).
- */
- AnimationBezierFunction (
- const double nX1,
- const double nY1,
- const double nX2,
- const double nY2);
-
- /** Create a cubic bezier curve whose start and end points are given
- implicitly as P0=(0,0) and P3=(1,1). The second control point is
- implicitly given as P2=(1-nY1,1-nX1).
- */
- AnimationBezierFunction (
- const double nX1,
- const double nY1);
-
- ::basegfx::B2DPoint operator() (const double nT);
-
-private:
- const double mnX1;
- const double mnY1;
- const double mnX2;
- const double mnY2;
-
- double EvaluateComponent (
- const double nT,
- const double nV1,
- const double nV2);
-};
-
-
-
-
-/** Turn a parametric function into one whose y-Values depend on its
- x-Values. Note a lot of interpolation takes place. The resulting
- accuracy should be good enough for the purpose of acceleration
- function for animations.
-*/
-class AnimationParametricFunction
-{
-public:
- typedef ::boost::function<basegfx::B2DPoint(double)> ParametricFunction;
- AnimationParametricFunction (const ParametricFunction& rFunction);
-
- double operator() (const double nX);
-
-private:
- /** y-Values of the parametric function given to the constructor
- evaluated (and interpolated) for evenly spaced x-Values.
- */
- ::std::vector<double> maY;
-};
-
-
-
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsAnimator.hxx b/sd/source/ui/slidesorter/inc/controller/SlsAnimator.hxx
deleted file mode 100644
index 4a2659f46..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsAnimator.hxx
+++ /dev/null
@@ -1,144 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_CONTROLLER_ANIMATOR_HXX
-#define SD_SLIDESORTER_CONTROLLER_ANIMATOR_HXX
-
-#include "SlideSorter.hxx"
-#include "view/SlideSorterView.hxx"
-#include <canvas/elapsedtime.hxx>
-#include <vcl/timer.hxx>
-#include <sal/types.h>
-#include <vector>
-#include <boost/function.hpp>
-#include <boost/noncopyable.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/shared_ptr.hpp>
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-/** Experimental class for simple eye candy animations.
-*/
-class Animator
- : private ::boost::noncopyable
-{
-public:
- /** In some circumstances we have to avoid animation and jump to the
- final animation state immediately. Use this enum instead of a bool
- to be more expressive.
- */
- enum AnimationMode { AM_Animated, AM_Immediate };
-
- Animator (SlideSorter& rSlideSorter);
- ~Animator (void);
-
- /** When disposed the animator will stop its work immediately and not
- process any timer events anymore.
- */
- void Dispose (void);
-
- /** An animation object is called with values between 0 and 1 as single
- argument to its operator() method.
- */
- typedef ::boost::function1<void, double> AnimationFunctor;
- typedef ::boost::function0<void> FinishFunctor;
-
- typedef sal_Int32 AnimationId;
- static const AnimationId NotAnAnimationId = -1;
-
- /** Schedule a new animation for execution. The () operator of that
- animation will be called with increasing values between 0 and 1 for
- the specified duration.
- @param rAnimation
- The animation operation.
- @param nStartOffset
- Time in milli seconds before the animation is started.
- @param nDuration
- The duration in milli seconds.
- */
- AnimationId AddAnimation (
- const AnimationFunctor& rAnimation,
- const sal_Int32 nStartOffset,
- const sal_Int32 nDuration,
- const FinishFunctor& rFinishFunctor = FinishFunctor());
-
- AnimationId AddInfiniteAnimation (
- const AnimationFunctor& rAnimation,
- const double nDelta);
-
- /** Abort and remove an animation. In order to reduce the bookkeeping
- on the caller side, it is OK to call this method with an animation
- function that is not currently being animated. Such a call is
- silently ignored.
- */
- void RemoveAnimation (const AnimationId nAnimationId);
-
- /** A typical use case for this method is the temporary shutdown of the
- slidesorter when the slide sorter bar is put into a cache due to a
- change of the edit mode.
- */
- void RemoveAllAnimations (void);
-
-private:
- SlideSorter& mrSlideSorter;
- Timer maTimer;
- bool mbIsDisposed;
- class Animation;
- typedef ::std::vector<boost::shared_ptr<Animation> > AnimationList;
- AnimationList maAnimations;
- ::canvas::tools::ElapsedTime maElapsedTime;
-
- ::boost::scoped_ptr<view::SlideSorterView::DrawLock> mpDrawLock;
-
- AnimationId mnNextAnimationId;
-
- DECL_LINK(TimeoutHandler, Timer*);
-
- /** Execute one step of every active animation.
- @param nTime
- Time measured in milli seconds with some arbitrary reference point.
- @return
- When one or more animation has finished then <TRUE/> is
- returned. Call CleanUpAnimationList() in this case.
- */
- bool ProcessAnimations (const double nTime);
-
- /** Remove animations that have expired.
- */
- void CleanUpAnimationList (void);
-
- void RequestNextFrame (const double nFrameStart = 0);
-};
-
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsClipboard.hxx b/sd/source/ui/slidesorter/inc/controller/SlsClipboard.hxx
deleted file mode 100644
index fd83227f3..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsClipboard.hxx
+++ /dev/null
@@ -1,235 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_CLIPBOARD
-#define SD_SLIDESORTER_CLIPBOARD
-
-#include "ViewClipboard.hxx"
-#include "controller/SlsSelectionObserver.hxx"
-#include <sal/types.h>
-#include <tools/solar.h>
-#include <svx/svdpage.hxx>
-
-#include <set>
-
-class SfxRequest;
-class Window;
-
-struct AcceptDropEvent;
-class DropTargetHelper;
-struct ExecuteDropEvent;
-class Point;
-class SdPage;
-class Window;
-
-namespace sd {
-class Window;
-}
-
-namespace sd { namespace slidesorter {
-class SlideSorter;
-} }
-
-namespace sd { namespace slidesorter { namespace model {
-class PageDescriptor;
-} } }
-
-namespace sd { namespace slidesorter { namespace controller {
-
-class SlideSorterController;
-
-class Clipboard
- : public ViewClipboard
-{
-public:
- Clipboard (SlideSorter& rSlideSorter);
- ~Clipboard (void);
-
- void HandleSlotCall (SfxRequest& rRequest);
-
- void DoCut (::Window* pWindow = 0);
- void DoCopy (::Window* pWindow = 0);
- void DoPaste (::Window* pWindow = 0);
- void DoDelete (::Window* pWindow = 0);
-
- void StartDrag (
- const Point& rDragPt,
- ::Window* pWindow );
-
- void DragFinished (
- sal_Int8 nDropAction);
-
- sal_Int8 AcceptDrop (
- const AcceptDropEvent& rEvt,
- DropTargetHelper& rTargetHelper,
- ::sd::Window* pTargetWindow = NULL,
- sal_uInt16 nPage = SDRPAGE_NOTFOUND,
- sal_uInt16 nLayer = SDRPAGE_NOTFOUND );
-
- sal_Int8 ExecuteDrop (
- const ExecuteDropEvent& rEvt,
- DropTargetHelper& rTargetHelper,
- ::sd::Window* pTargetWindow = NULL,
- sal_uInt16 nPage = SDRPAGE_NOTFOUND,
- sal_uInt16 nLayer = SDRPAGE_NOTFOUND);
-
- void Abort (void);
-
-protected:
- virtual sal_uInt16 DetermineInsertPosition (
- const SdTransferable& rTransferable);
-
- virtual sal_uInt16 InsertSlides (
- const SdTransferable& rTransferable,
- sal_uInt16 nInsertPosition);
-
-private:
- SlideSorter& mrSlideSorter;
- SlideSorterController& mrController;
-
- typedef ::std::vector<SdPage*> PageList;
- /** Remember the pages that are dragged to another document or to
- another place in the same document so that they can be removed after
- a move operation.
- */
- PageList maPagesToRemove;
-
- /** Remember the pages inserted from another document or another place
- in the same document so that they can be selected after the
- drag-and-drop operation is completed.
- */
- PageList maPagesToSelect;
-
- /** When pages are moved or copied then the selection of the slide
- sorter has to be updated. This flag is used to remember whether the
- selection has to be updated or can stay as it is (sal_False).
- */
- bool mbUpdateSelectionPending;
-
- /** Used when a drop is executed to combine all undo actions into one.
- Typically created in ExecuteDrop() and released in DragFinish().
- */
- class UndoContext;
- ::boost::scoped_ptr<UndoContext> mpUndoContext;
-
- ::boost::scoped_ptr<SelectionObserver::Context> mpSelectionObserverContext;
- sal_uLong mnDragFinishedUserEventId;
-
- void CreateSlideTransferable (
- ::Window* pWindow,
- bool bDrag);
-
- /** Select the pages stored in the maPagesToSelect member. The list in
- the member is cleared afterwards.
- */
- void SelectPages (void);
-
- /** Determine the position of where to insert the pages in the current
- transferable of the sd module.
- @param pWindow
- This window is used as parent for dialogs that have to be shown
- to the user.
- @return
- The index in the range [0,n] (both inclusive) with n the number
- of pages is returned.
- */
- sal_Int32 GetInsertionPosition (::Window* pWindow);
-
- /** Paste the pages of the transferable of the sd module at the given
- position.
- @param nInsertPosition
- The position at which to insert the pages. The valid range is
- [0,n] (both inclusive) with n the number of pages in the
- document.
- @return
- The number of inserted pages is returned.
- */
- sal_Int32 PasteTransferable (sal_Int32 nInsertPosition);
-
- /** Select a range of pages of the model. Typicall usage is the
- selection of newly inserted pages.
- @param nFirstIndex
- The index of the first page to select.
- @param nPageCount
- The number of pages to select.
- */
- void SelectPageRange (sal_Int32 nFirstIndex, sal_Int32 nPageCount);
-
- /** Return <TRUE/> when the current transferable in the current state of
- the slidesorter is acceptable to be pasted. For this the
- transferable has to
- a) exist,
- b) contain one or more regular draw pages, no master pages.
- When master pages are involved, either in the transferable or in the
- slide sorter (by it displaying master pages) the drop of the
- transferable is not accepted. The reason is the missing
- implementation of proper handling master pages copy-and-paste.
- */
- enum DropType { DT_PAGE, DT_SHAPE, DT_NONE };
- DropType IsDropAccepted (void) const;
-
- /** This method contains the code for AcceptDrop() and ExecuteDrop() shapes.
- There are only minor differences for the two cases at this level.
- @param eCommand
- This parameter specifies whether to do a AcceptDrop() or
- ExecuteDrop().
- @param rPosition
- Since the event is given as void pointer we can not take the
- mouse position from it. The caller has to supply it in this
- parameter.
- @param pDropEvent
- Event though the AcceptDropEvent and ExecuteDropEvent are very
- similar they do not have a common base class. Because of that
- we have to use a void* to pase these structs.
- @param nPage
- When the page number is given as 0xffff then it is replaced by
- the number of the page at the mouse position. If the mouse is
- not over a page then neither AcceptDrop() nor ExecuteDrop() are
- executed.
- */
- enum DropCommand { DC_ACCEPT, DC_EXECUTE };
- sal_Int8 ExecuteOrAcceptShapeDrop (
- DropCommand eCommand,
- const Point& rPosition,
- const void* pDropEvent ,
- DropTargetHelper& rTargetHelper,
- ::sd::Window* pTargetWindow,
- sal_uInt16 nPage,
- sal_uInt16 nLayer);
-
- /** Asynchronous part of DragFinished. The argument is the sal_Int8
- nDropAction, disguised as void*.
- */
- DECL_LINK(ProcessDragFinished, void*);
-};
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsCurrentSlideManager.hxx b/sd/source/ui/slidesorter/inc/controller/SlsCurrentSlideManager.hxx
deleted file mode 100644
index 6e3bb250e..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsCurrentSlideManager.hxx
+++ /dev/null
@@ -1,131 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_CURRENT_SLIDE_MANAGER_HXX
-#define SD_SLIDESORTER_CURRENT_SLIDE_MANAGER_HXX
-
-#include "model/SlsSharedPageDescriptor.hxx"
-#include <vcl/timer.hxx>
-#include <tools/link.hxx>
-#include <com/sun/star/drawing/XDrawPage.hpp>
-
-class SdPage;
-
-namespace sd { namespace slidesorter {
-class SlideSorter;
-} }
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-/** Manage the current slide. This includes setting the according flags at
- the PageDescriptor objects and setting the current slide at the main
- view shell.
-
- Switching pages is triggered only after a little delay. This allows
- fast travelling through a larger set of slides without having to wait
- for the edit view to update its content after every slide change.
-*/
-class CurrentSlideManager
-{
-public:
- /** Create a new CurrentSlideManager object that manages the current
- slide for the given SlideSorter.
- */
- CurrentSlideManager (SlideSorter& rSlideSorter);
-
- ~CurrentSlideManager (void);
-
- /** Call this when the current page of the main view shell has been
- switched. Use SwitchCurrentSlide() to initiate such a switch.
- */
- void NotifyCurrentSlideChange (const sal_Int32 nSlideIndex);
- void NotifyCurrentSlideChange (const SdPage* pPage);
-
- /** Call this method to switch the current page of the main view shell
- to the given slide. Use CurrentSlideHasChanged() when the current
- slide change has been initiated by someone else.
- @param nSlideIndex
- Zero based index in the range [0,number-of-slides).
- @param bUpdateSelection
- When <TRUE/> then the page selection is cleared and only the new
- current slide is selected.
- */
- void SwitchCurrentSlide (
- const sal_Int32 nSlideIndex,
- const bool bUpdateSelection = false);
- void SwitchCurrentSlide (
- const model::SharedPageDescriptor& rpSlide,
- const bool bUpdateSelection = false);
-
- /** Return the page descriptor for the current slide. Note, that when
- there is no current slide then the returned pointer is empty.
- */
- model::SharedPageDescriptor GetCurrentSlide (void);
-
- /** Release all references to model data.
- */
- void PrepareModelChange (void);
-
- /** Modify inner state in reaction to a change of the SlideSorterModel.
- */
- void HandleModelChange (void);
-
-private:
- SlideSorter& mrSlideSorter;
- sal_Int32 mnCurrentSlideIndex;
- model::SharedPageDescriptor mpCurrentSlide;
- /** Timer to control the delay after which to ask
- XController/ViewShellBase to switch to another slide.
- */
- Timer maSwitchPageDelayTimer;
-
- bool IsCurrentSlideIsValid (void);
- void SetCurrentSlideAtViewShellBase (const model::SharedPageDescriptor& rpSlide);
- void SetCurrentSlideAtTabControl (const model::SharedPageDescriptor& rpSlide);
- void SetCurrentSlideAtXController (const model::SharedPageDescriptor& rpSlide);
-
- /** When switching from one slide to a new current slide then this
- method releases all ties to the old slide.
- */
- void ReleaseCurrentSlide (void);
-
- /** When switching from one slide to a new current slide then this
- method connects to the new current slide.
- */
- void AcquireCurrentSlide (const sal_Int32 nSlideIndex);
-
- DECL_LINK(SwitchPageCallback,void*);
-};
-
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsFocusManager.hxx b/sd/source/ui/slidesorter/inc/controller/SlsFocusManager.hxx
deleted file mode 100644
index 05305d3b2..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsFocusManager.hxx
+++ /dev/null
@@ -1,236 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_FOCUS_MANAGER_HXX
-#define SD_SLIDESORTER_FOCUS_MANAGER_HXX
-
-#include <model/SlsSharedPageDescriptor.hxx>
-
-#include <sal/types.h>
-#include <tools/link.hxx>
-#include <vector>
-
-namespace sd { namespace slidesorter {
-class SlideSorter;
-} }
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-/** This class manages the focus of the slide sorter. There is the focus
- page which is or is not focused. Initialized to point to the first page
- it can be set to other pages by using the MoveFocus() method. The
- focused state of the focus page can be toggled with the ToggleFocus()
- method.
-*/
-class FocusManager
-{
-public:
- /** Create a new focus manager that operates on the pages of the model
- associated with the given controller. The focus page is set to the
- first page. Focused state is off.
- */
- FocusManager (SlideSorter& rSlideSorter);
-
- ~FocusManager (void);
-
- enum FocusMoveDirection
- {
- FMD_NONE,
- FMD_LEFT,
- FMD_RIGHT,
- FMD_UP,
- FMD_DOWN
- };
-
- /** Move the focus from the currently focused page to one that is
- displayed adjacent to it, either vertically or horizontally.
- @param eDirection
- Direction in which to move the focus. Wrap arround is done
- differently when moving vertically or horizontally. Vertical
- wrap arround takes place in the same column, i.e. when you are
- in the top row and move up you come out in the bottom row in the
- same column. Horizontal wrap arround moves to the next
- (FMD_RIGHT) or previous (FMD_LEFT) page. Moving to the right
- from the last page goes to the first page and vice versa.
- When FMD_NONE is given, the current page index is checked for
- being valid. If it is not, then it is set to the nearest valid
- page index.
- */
- void MoveFocus (FocusMoveDirection eDirection);
-
- /** Show the focus indicator of the current slide.
- @param bScrollToFocus
- When <TRUE/> (the default) then the view is scrolled so that the
- focus rectangle lies inside its visible area.
- */
- void ShowFocus (const bool bScrollToFocus = true);
-
- /** Hide the focus indicator.
- */
- void HideFocus (void);
-
- /** Toggle the focused state of the current slide.
- @return
- Returns the focused state of the focus page after the call.
- */
- bool ToggleFocus (void);
-
- /** Return whether the window managed by the called focus manager has
- the input focus of the application.
- */
- bool HasFocus (void) const;
-
- /** Return the descriptor of the page that currently has the focus.
- @return
- When there is no page that currently has the focus then NULL is
- returned.
- */
- model::SharedPageDescriptor GetFocusedPageDescriptor (void) const;
-
- /** Return the index of the page that currently has the focus as it is
- accepted by the slide sorter model.
- @return
- When there is no page that currently has the focus then -1 is
- returned.
- */
- sal_Int32 GetFocusedPageIndex (void) const;
-
- /** Set the focused page to the one described by the given page
- descriptor. The visibility of the focus indicator is not modified.
- @param rDescriptor
- One of the page descriptors that are currently managed by the
- SlideSorterModel.
- */
- void SetFocusedPage (const model::SharedPageDescriptor& rDescriptor);
-
- /** Set the focused page to the one described by the given page
- index. The visibility of the focus indicator is not modified.
- @param nPageIndex
- A valid page index that is understood by the SlideSorterModel.
- */
- void SetFocusedPage (sal_Int32 nPageIndex);
-
- void SetFocusedPageToCurrentPage (void);
-
- /** Return <TRUE/> when the focus inidcator is currently shown. A
- prerequisite is that the window managed by this focus manager has
- the input focus as indicated by a <TRUE/> return value of
- HasFocus(). It is not necessary that the focus indicator is
- visible. It may have been scrolled outside the visible area.
- */
- bool IsFocusShowing (void) const;
-
- /** Add a listener that is called when the focus is shown or hidden or
- set to another page object.
- @param rListener
- When this method is called multiple times for the same listener
- the second and all following calls are ignored. Each listener
- is added only once.
- */
- void AddFocusChangeListener (const Link& rListener);
-
- /** Remove a focus change listener.
- @param rListener
- It is save to pass a listener that was not added are has been
- removed previously. Such calls are ignored.
- */
- void RemoveFocusChangeListener (const Link& rListener);
-
- /** Move focus to sibling outside the actual slide sorter. This is
- typically the tool bar with the close button.
- */
- void SetFocusToToolBox (void);
-
- /** Create an instance of this class to temporarily hide the focus
- indicator. It is restored to its former visibility state when the
- FocusHider is destroyed.
- */
- class FocusHider
- {
- public:
- FocusHider (FocusManager&);
- ~FocusHider (void);
- private:
- bool mbFocusVisible;
- FocusManager& mrManager;
- };
-
-private:
- SlideSorter& mrSlideSorter;
-
- /** Index of the page that may be focused. It is -1 when the model
- contains no page.
- */
- sal_Int32 mnPageIndex;
-
- /** This flag indicates whether the page pointed to by mpFocusDescriptor
- has the focus.
- */
- bool mbPageIsFocused;
-
- ::std::vector<Link> maFocusChangeListeners;
-
- /** When vertical wrap is active then pressing UP in the top row moves
- the focus to the bottom row, DOWN in the bottom row moves the focus
- to the top row.
- */
- bool mbIsVerticalWrapActive;
-
- /** Reset the focus state of the given descriptor and request a repaint
- so that the focus indicator is hidden.
- @param pDescriptor
- When NULL is given then the call is ignored.
- */
- void HideFocusIndicator (const model::SharedPageDescriptor& rpDescriptor);
-
- /** Set the focus state of the given descriptor, scroll it into the
- visible area and request a repaint so that the focus indicator is
- made visible.
- @param pDescriptor
- When NULL is given then the call is ignored.
- @param bScrollToFocus
- When <TRUE/> (the default) then the view is scrolled so that the
- focus rectangle lies inside its visible area.
- */
- void ShowFocusIndicator (
- const model::SharedPageDescriptor& rpDescriptor,
- const bool bScrollToFocus);
-
- /** Call all currently registered listeners that a focus change has
- happended. The focus may be hidden or shown or moved from one page
- object to another.
- */
- void NotifyFocusChangeListeners (void) const;
-};
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsInsertionIndicatorHandler.hxx b/sd/source/ui/slidesorter/inc/controller/SlsInsertionIndicatorHandler.hxx
deleted file mode 100644
index 6c4026bac..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsInsertionIndicatorHandler.hxx
+++ /dev/null
@@ -1,153 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_INSERTION_INDICATOR_HANDLER_HXX
-#define SD_SLIDESORTER_INSERTION_INDICATOR_HANDLER_HXX
-
-#include "view/SlsInsertAnimator.hxx"
-
-#include "view/SlsLayouter.hxx"
-
-namespace sd { namespace slidesorter { class SlideSorter; } }
-namespace sd { namespace slidesorter { namespace model {
-class PageEnumeration;
-} } }
-namespace sd { namespace slidesorter { namespace view {
-class InsertAnimator;
-class InsertionIndicatorOverlay;
-} } }
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-class Transferable;
-
-
-/** Manage the visibility and location of the insertion indicator. Its
- actual display is controlled by the InsertionIndicatorOverlay.
-*/
-class InsertionIndicatorHandler
-{
-public:
- InsertionIndicatorHandler (SlideSorter& rSlideSorter);
- ~InsertionIndicatorHandler (void);
-
- enum Mode { CopyMode, MoveMode, UnknownMode };
- static Mode GetModeFromDndAction (const sal_Int8 nDndAction);
-
- /** Activate the insertion marker at the given coordinates.
- */
- void Start (const bool bIsOverSourceView);
-
- /** Deactivate the insertion marker.
- */
- void End (const controller::Animator::AnimationMode eMode);
-
- /** This context make sure that the insertion indicator is shown
- (provided that the clipboard is not empty) while the context is
- alive. Typically used while a context menu is displayed.
- */
- class ForceShowContext
- {
- public:
- ForceShowContext (const ::boost::shared_ptr<InsertionIndicatorHandler>& rpHandler);
- ~ForceShowContext (void);
- private:
- const ::boost::shared_ptr<InsertionIndicatorHandler> mpHandler;
- };
-
- /** Update the indicator icon from the current transferable (from the
- clipboard or an active drag and drop operation.)
- */
- void UpdateIndicatorIcon (const Transferable* pTransferable);
-
- /** Set the position of the insertion marker to the given coordinates.
- */
- void UpdatePosition (
- const Point& rMouseModelPosition,
- const Mode eMode);
- void UpdatePosition (
- const Point& rMouseModelPosition,
- const sal_Int8 nDndAction);
-
- /** Return whether the insertion marker is active.
- */
- bool IsActive (void) const;
-
- /** Return the insertion index that corresponds with the current
- graphical location of the insertion indicator.
- */
- sal_Int32 GetInsertionPageIndex (void) const;
-
- /** Determine whether moving the current selection to the current
- position of the insertion marker would alter the document. This
- would be the case when the selection is not consecutive or would be
- moved to a position outside and not adjacent to the selection.
- */
- bool IsInsertionTrivial (
- const sal_Int32 nInsertionIndex,
- const Mode eMode) const;
- /** This method is like the other variant. It operates implicitly
- on the current insertion index as would be returned by
- GetInsertionPageIndex().
- */
- bool IsInsertionTrivial (const sal_Int8 nDndAction);
-
-private:
- SlideSorter& mrSlideSorter;
- ::boost::shared_ptr<view::InsertAnimator> mpInsertAnimator;
- ::boost::shared_ptr<view::InsertionIndicatorOverlay> mpInsertionIndicatorOverlay;
- view::InsertPosition maInsertPosition;
- Mode meMode;
- bool mbIsInsertionTrivial;
- bool mbIsActive;
- bool mbIsReadOnly;
- bool mbIsOverSourceView;
- Size maIconSize;
- bool mbIsForcedShow;
-
- void SetPosition (
- const Point& rPoint,
- const Mode eMode);
- ::boost::shared_ptr<view::InsertAnimator> GetInsertAnimator (void);
-
- /** Make the insertion indicator visible (that is the show part) and
- keep it visible, even when the mouse leaves the window (that is the
- force part). We need this when a context menu is displayed (mouse
- over the popup menu triggers a mouse leave event) while the
- insertion indicator remains visible in the background.
-
- In effect all calls to End() are ignored until ForceEnd() is called.
- */
- void ForceShow (void);
- void ForceEnd (void);
-};
-
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsPageObjectFactory.hxx b/sd/source/ui/slidesorter/inc/controller/SlsPageObjectFactory.hxx
deleted file mode 100644
index fef75520c..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsPageObjectFactory.hxx
+++ /dev/null
@@ -1,99 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_PAGE_OBJECT_FACTORY_HEADER
-#define SD_SLIDESORTER_PAGE_OBJECT_FACTORY_HEADER
-
-#include <boost/shared_ptr.hpp>
-#include "model/SlsSharedPageDescriptor.hxx"
-
-class SdPage;
-
-namespace sdr { namespace contact {
-class ObjectContact;
-class ViewContact;
-class ViewObjectContact;
-} }
-
-namespace sd { namespace slidesorter { namespace view {
-class PageObject;
-} } }
-
-namespace sd { namespace slidesorter { namespace cache {
-class PageCache;
-} } }
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-class Properties;
-
-/** This class is a factory for the creation of objects that represent page
- objects (shapes). This includes the contact objects of the drawing
- layer.
-
- <p>The factory methods are called by the model::PageDescriptor and the
- standard implementations of the contact objects.</p>
-
- <p>The factory forwars the preview cache and Properties object to page
- objects and contact objects.</p>
-*/
-class PageObjectFactory
-{
-public:
- /** Create a new PageObjectFactory object that has references to the
- given cache and properties.
- */
- PageObjectFactory (
- const ::boost::shared_ptr<cache::PageCache>& rpCache,
- const ::boost::shared_ptr<controller::Properties>& rpProperties);
- PageObjectFactory (const ::boost::shared_ptr<cache::PageCache>& rpCache);
- virtual ~PageObjectFactory (void);
-
- virtual view::PageObject* CreatePageObject (
- SdPage* pPage,
- const model::SharedPageDescriptor& rpDescriptor) const;
-
- virtual ::sdr::contact::ViewContact* CreateViewContact (
- view::PageObject* pPageObject,
- const model::SharedPageDescriptor& rpDescriptor) const;
-
- virtual ::sdr::contact::ViewObjectContact* CreateViewObjectContact (
- ::sdr::contact::ObjectContact& rObjectContact,
- ::sdr::contact::ViewContact& rViewContact) const;
-
-private:
- ::boost::shared_ptr<cache::PageCache> mpPageCache;
- ::boost::shared_ptr<controller::Properties> mpProperties;
-};
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsPageSelector.hxx b/sd/source/ui/slidesorter/inc/controller/SlsPageSelector.hxx
deleted file mode 100644
index 11717f2da..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsPageSelector.hxx
+++ /dev/null
@@ -1,232 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_PAGE_SELECTOR_HXX
-#define SD_SLIDESORTER_PAGE_SELECTOR_HXX
-
-#include "model/SlsSharedPageDescriptor.hxx"
-
-#include <com/sun/star/drawing/XDrawPage.hpp>
-#include <vector>
-#include <memory>
-
-class SdPage;
-
-namespace sd { namespace slidesorter {
-class SlideSorter;
-} }
-
-namespace sd { namespace slidesorter { namespace model {
-class SlideSorterModel;
-} } }
-
-namespace sd { namespace slidesorter { namespace view {
-class SlideSorterView;
-} } }
-
-namespace sd { namespace slidesorter { namespace controller {
-
-class SlideSorterController;
-
-
-/** A sub-controller that handles page selection of the slide browser.
- Selecting a page does not make it the current page (of the main view)
- automatically as this would not be desired in a multi selection. This
- has to be done explicitly by calling the
- CurrentSlideManager::SetCurrentSlide() method.
-
- Indices of pages relate allways to the number of all pages in the model
- (as returned by GetPageCount()) not just the selected pages.
-*/
-class PageSelector
-{
-public:
- PageSelector (SlideSorter& rSlideSorter);
-
- void SelectAllPages (void);
- void DeselectAllPages (void);
-
- /** Update the selection state of all page descriptors to be the same as
- that of the corresponding pages of the SdPage objects and issue
- redraw requests where necessary.
- */
- void GetCoreSelection (void);
-
- /** Update the selection state of the SdPage objects to be the same as
- that of the correspinding page descriptors.
- */
- void SetCoreSelection (void);
-
- /** Select the specified descriptor. The selection state of the other
- descriptors is not affected.
- */
- void SelectPage (int nPageIndex);
- /** Select the descriptor that is associated with the given page. The
- selection state of the other descriptors is not affected.
- */
- void SelectPage (const SdPage* pPage);
- /** Select the specified descriptor. The selection state of the other
- descriptors is not affected.
- */
- void SelectPage (const model::SharedPageDescriptor& rpDescriptor);
-
- /** Return whether the specified page is selected. This convenience
- method is a subsitute for
- SlideSorterModel::GetPageDescriptor(i)->IsSelected() is included
- here to make this class more self contained.
- */
- bool IsPageSelected (int nPageIndex);
-
- /** Deselect the descriptor that is associated with the given page.
- @param bUpdateCurrentPage
- When <TRUE/> then the current page is updated to the first slide
- of the remaining selection.
- */
- void DeselectPage (
- int nPageIndex,
- const bool bUpdateCurrentPage = true);
- void DeselectPage (
- const SdPage* pPage,
- const bool bUpdateCurrentPage = true);
- void DeselectPage (
- const model::SharedPageDescriptor& rpDescriptor,
- const bool bUpdateCurrentPage = true);
-
- /** This convenience method returns the same number of pages that
- SlideSorterModel.GetPageCount() returns. It is included here so
- that it is self contained for iterating over all pages to select or
- deselect them.
- */
- int GetPageCount (void) const;
- int GetSelectedPageCount (void) const;
-
- /** Return the anchor for a range selection. This usually is the first
- selected page after all pages have been deselected.
- @return
- The returned anchor may be NULL.
- */
- model::SharedPageDescriptor GetSelectionAnchor (void) const;
-
-
- typedef ::std::vector<SdPage*> PageSelection;
-
- /** Return an object that describes the current selection. The caller
- can use that object to later restore the selection.
- @return
- The object returned describes the selection via indices. So
- even if pages are exchanged a later call to SetPageSelection()
- is valid.
- */
- ::boost::shared_ptr<PageSelection> GetPageSelection (void) const;
-
- /** Restore a page selection according to the given selection object.
- @param rSelection
- Typically obtained by calling GetPageSelection() this object
- is used to restore the selection. If pages were exchanged since
- the last call to GetPageSelection() it is still valid to call
- this method with the selection. When pages have been inserted
- or removed the result may be unexpected.
- @param bUpdateCurrentPage
- When <TRUE/> (the default value) then after setting the
- selection update the current page to the first page of the
- selection.
- When called from withing UpdateCurrentPage() then this flag is
- used to prevent a recursion loop.
- */
- void SetPageSelection (
- const ::boost::shared_ptr<PageSelection>& rSelection,
- const bool bUpdateCurrentPage = true);
-
- /** Call this method after the the model has changed to set the number
- of selected pages.
- */
- void CountSelectedPages (void);
-
- /** Use the UpdateLock whenever you do a complex selection, i.e. call
- more than one method in a row. An active lock prevents intermediate
- changes of the current slide.
- */
- class UpdateLock
- {
- public:
- UpdateLock (SlideSorter& rSlideSorter);
- UpdateLock (PageSelector& rPageSelector);
- ~UpdateLock (void);
- void Release (void);
- private:
- PageSelector* mpSelector;
- };
-
- class BroadcastLock
- {
- public:
- BroadcastLock (SlideSorter& rSlideSorter);
- BroadcastLock (PageSelector& rPageSelector);
- ~BroadcastLock (void);
- private:
- PageSelector& mrSelector;
- };
-
-private:
- model::SlideSorterModel& mrModel;
- SlideSorter& mrSlideSorter;
- SlideSorterController& mrController;
- int mnSelectedPageCount;
- int mnBroadcastDisableLevel;
- bool mbSelectionChangeBroadcastPending;
- model::SharedPageDescriptor mpMostRecentlySelectedPage;
- /// Anchor for a range selection.
- model::SharedPageDescriptor mpSelectionAnchor;
- model::SharedPageDescriptor mpCurrentPage;
- sal_Int32 mnUpdateLockCount;
- bool mbIsUpdateCurrentPagePending;
-
- /** Enable the broadcasting of selection change events. This calls the
- SlideSorterController::SelectionHasChanged() method to do the actual
- work. When EnableBroadcasting has been called as many times as
- DisableBroadcasting() was called before and the selection has been
- changed in the mean time, this change will be broadcasted.
- */
- void EnableBroadcasting (void);
-
- /** Disable the broadcasting of selection change events. Subsequent
- changes of the selection will set a flag that triggers the sending
- of events when EnableBroadcasting() is called.
- */
- void DisableBroadcasting (void);
-
- void UpdateCurrentPage (const bool bUpdateOnlyWhenPending = false);
-
- void CheckConsistency (void) const;
-};
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsProperties.hxx b/sd/source/ui/slidesorter/inc/controller/SlsProperties.hxx
deleted file mode 100644
index bbf01a8ec..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsProperties.hxx
+++ /dev/null
@@ -1,146 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_PROPERTIES_HEADER
-#define SD_SLIDESORTER_PROPERTIES_HEADER
-
-#include <tools/color.hxx>
-
-namespace sd { namespace slidesorter { namespace controller {
-
-/** An extensible set of properties used throughout the slide sorter.
-*/
-class Properties
-{
-public:
- Properties (void);
- ~Properties (void);
-
- /** Call this method after receiving a VCLEVENT_APPLICATION_DATACHANGED
- event.
- */
- void HandleDataChangeEvent (void);
-
- /** When this method returns <TRUE/> then the current slide is
- highlighted in the view. The default value is <FALSE/>.
- */
- bool IsHighlightCurrentSlide (void) const;
- void SetHighlightCurrentSlide (const bool bIsHighlightCurrentSlide);
-
- /** When this method returns <TRUE/> then the selection is indicated in
- the view (typically by drawing rectangles around the selected
- slides.) The default value is <TRUE/>.
- */
- bool IsShowSelection (void) const;
- void SetShowSelection (const bool bIsShowSelection);
-
- /** When this method returns <TRUE/> then the focusdselection is indicated in
- the view (typically by drawing dotted rectangles around the selected
- slides.) The default value is <TRUE/>.
- */
- bool IsShowFocus (void) const;
- void SetShowFocus (const bool bIsShowFocus);
-
- /** When this method returns <TRUE/> then on a selection change the
- visible area is adapted so that the selected slides are shown
- centered in the view. This can be used to center the current slide
- by selecting only the current slide. The default value is <FALSE/>.
- */
- bool IsCenterSelection (void) const;
- void SetCenterSelection (const bool bIsCenterSelection);
-
- /** When this mehod returns <TRUE/> then the view may try to change the
- visible area by scrolling it smoothly on the screen. Experimental.
- Default value is <FALSE/>.
- */
- bool IsSmoothSelectionScrolling (void) const;
- void SetSmoothSelectionScrolling (const bool bIsSmoothSelectionScrolling);
-
- /** When this method returns <TRUE/> then during a full screen
- presentation the previews in a slide sorter are not updated.
- Default value is <TRUE/>.
- */
- bool IsSuspendPreviewUpdatesDuringFullScreenPresentation (void) const;
- void SetSuspendPreviewUpdatesDuringFullScreenPresentation (const bool bFlag);
-
- /** Return the background color.
- */
- Color GetBackgroundColor (void) const;
- void SetBackgroundColor (const Color& rColor);
-
- /** Return the text color.
- */
- Color GetTextColor (void) const;
- void SetTextColor (const Color& rColor);
-
- /** Return the color in which selections are to be painted.
- */
- Color GetSelectionColor (void) const;
- void SetSelectionColor (const Color& rColor);
-
- /** Return the color used for highlighting e.g. the current slide.
- */
- Color GetHighlightColor (void) const;
- void SetHighlightColor (const Color& rColor);
-
- /** The UI can be set to be read only indepently from the model status.
- Used for instance in the presenter view.
- */
- bool IsUIReadOnly (void) const;
- void SetUIReadOnly (const bool bIsUIReadOnly);
-
- /** The mouse over effect (and whether a mouse motion starts a multi
- selection or a drag-and-drop) can be triggered by just the preview
- area or the whole page object area.
- */
- bool IsOnlyPreviewTriggersMouseOver (void) const;
- void SetOnlyPreviewTriggersMouseOver (const bool bFlag);
-
- bool IsHighContrastModeActive (void) const;
-
-private:
- bool mbIsHighlightCurrentSlide;
- bool mbIsShowSelection;
- bool mbIsShowFocus;
- bool mbIsCenterSelection;
- bool mbIsSmoothSelectionScrolling;
- bool mbIsSuspendPreviewUpdatesDuringFullScreenPresentation;
- Color maBackgroundColor;
- Color maTextColor;
- Color maSelectionColor;
- Color maHighlightColor;
- bool mbIsUIReadOnly;
- bool mbIsOnlyPreviewTriggersMouseOver;
- bool mbIsHighContrastModeActive;
-};
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsScrollBarManager.hxx b/sd/source/ui/slidesorter/inc/controller/SlsScrollBarManager.hxx
deleted file mode 100644
index 999d824f1..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsScrollBarManager.hxx
+++ /dev/null
@@ -1,286 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_SLIDE_SORTER_SCROLL_BAR_MANAGER_HXX
-#define SD_SLIDESORTER_SLIDE_SORTER_SCROLL_BAR_MANAGER_HXX
-
-#include "SlideSorter.hxx"
-
-#include <tools/link.hxx>
-#include <tools/gen.hxx>
-#include <vcl/timer.hxx>
-#include <boost/shared_ptr.hpp>
-#include <boost/function.hpp>
-
-class Point;
-class Rectangle;
-class ScrollBar;
-class ScrollBarBox;
-class Window;
-
-namespace sd {
-class Window;
-}
-
-namespace sd { namespace slidesorter {
- class SlideSorter;
-} }
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-/** Manage the horizontal and vertical scroll bars. Listen for events, set
- their sizes, place them in the window, determine their visibilities.
-
- <p>Handle auto scrolling, i.e. the scrolling of the window when the
- mouse comes near the window border while dragging a selection.</p>
-
- <p>In order to make the slide sorter be used in the task pane with its
- own vertical scrollbars the vertical scrollbar of the use of the slide
- sorter is optional. When using it the available area in a window is
- used and the vertical scrollbar is displayed when that area is not large
- enough. When the vertical scrollbar is not used then the available area
- is assumed to be modifiable. In that case the PlaceScrollBars() method
- may return an area larger than the one given.<p>
-*/
-class ScrollBarManager
-{
-public:
- /** Create a new scroll bar manager that manages three controls: the
- horizontal scroll bar, the vertical scroll bar, and the little
- window that fills the gap at the bottom right corner that is left
- between the two scroll bars. Call LateInitialization() after
- constructing a new object.
- */
- ScrollBarManager (SlideSorter& rSlideSorter);
-
- ~ScrollBarManager (void);
-
- /** Call this method after constructing a new object of this class.
- */
- void LateInitialization (void);
-
- /** Register listeners at the scroll bars. This method is called after
- startup of a new slide sorter object or after a reactivation of a
- slide sorter that for example is taken from a cache.
- */
- void Connect (void);
-
- /** Remove listeners from the scroll bars. This method is called whent
- the slide sorter is destroyed or when it is suspended, e.g. put
- into a cache for later reuse.
- */
- void Disconnect (void);
-
- /** Set up the scroll bar, i.e. thumb size and position. Call this
- method when the content of the browser window changed, i.e. pages
- were inserted or deleted, the layout or the zoom factor has
- changed.
- @param bResetThumbPosition
- When <TRUE/> then set the thumb position to position 0. This is
- done when e.g. switching between master page mode and draw mode.
- @param bScrollToCurrentPosition
- When <TRUE/> then scroll the window to the new offset that is
- defined by the scroll bars. Otherwise the new offset is simply
- set and the whole window is repainted.
- */
- void UpdateScrollBars (
- bool bResetThumbPosition = false,
- bool bScrollToCurrentPosition = true);
-
- /** Place the scroll bars inside the given area. When the available
- area is not large enough for the content to display the horizontal
- and/or vertical scroll bar is enabled.
- @param rAvailableArea
- The scroll bars will be placed inside this rectangle. It is
- expected to be given in pixel relative to its parent.
- @param bIsHorizontalScrollBarAllowed
- Only when this flag is <TRUE/> the horizontal scroll may be
- displayed.
- @param bIsVerticalScrollBarAllowed
- Only when this flag is <TRUE/> the horizontal scroll may be
- displayed.
- @return
- Returns the space that remains after the scroll bars are
- placed.
- */
- Rectangle PlaceScrollBars (
- const Rectangle& rAvailableArea,
- const bool bIsHorizontalScrollBarAllowed,
- const bool bIsVerticalScrollBarAllowed);
-
- /** Update the vertical and horizontal scroll bars so that the visible
- area has the given top and left values.
- */
- void SetTopLeft (const Point aNewTopLeft);
-
- sal_Int32 GetTop (void) const;
-
- sal_Int32 GetLeft (void) const;
-
- /** Return the width of the vertical scroll bar, which--when
- shown--should be fixed in contrast to its height.
- @return
- Returns 0 when the vertical scroll bar is not shown or does not
- exist, otherwise its width in pixel is returned.
- */
- int GetVerticalScrollBarWidth (void) const;
-
- /** Return the height of the horizontal scroll bar, which--when
- shown--should be fixed in contrast to its width.
- @return
- Returns 0 when the vertical scroll bar is not shown or does not
- exist, otherwise its height in pixel is returned.
- */
- int GetHorizontalScrollBarHeight (void) const;
-
- /** Call this method to scroll a window while the mouse is in dragging a
- selection. If the mouse is near the window border or is outside the
- window then scroll the window accordingly.
- @param rMouseWindowPosition
- The mouse position for which the scroll amount is calculated.
- @param rAutoScrollFunctor
- Every time when the window is scrolled then this functor is executed.
- @return
- When the window is scrolled then this method returns <TRUE/>.
- When the window is not changed then <FALSE/> is returned.
- */
- bool AutoScroll (
- const Point& rMouseWindowPosition,
- const ::boost::function<void(void)>& rAutoScrollFunctor);
-
- void StopAutoScroll (void);
-
- enum Orientation { Orientation_Horizontal, Orientation_Vertical };
- enum Unit { Unit_Pixel, Unit_Slide };
- /** Scroll the slide sorter by setting the thumbs of the scroll bars and
- by moving the content of the content window.
- @param eOrientation
- Defines whether to scroll horizontally or vertically.
- @param eUnit
- Defines whether the distance is a pixel value or the number of
- slides to scroll.
- */
- void Scroll(
- const Orientation eOrientation,
- const Unit eUnit,
- const sal_Int32 nDistance);
-
-private:
- SlideSorter& mrSlideSorter;
-
- /** The horizontal scroll bar. Note that is used but not owned by
- objects of this class. It is given to the constructor.
- */
- ::boost::shared_ptr<ScrollBar> mpHorizontalScrollBar;
-
- /** The vertical scroll bar. Note that is used but not owned by
- objects of this class. It is given to the constructor.
- */
- ::boost::shared_ptr<ScrollBar> mpVerticalScrollBar;
-
- /// Relative horizontal position of the visible area in the view.
- double mnHorizontalPosition;
- /// Relative vertical position of the visible area in the view.
- double mnVerticalPosition;
- /** The width and height of the border at the inside of the window which
- when entered while in drag mode leads to a scrolling of the window.
- */
- Size maScrollBorder;
- double mnHorizontalScrollFactor;
- double mnVerticalScrollFactor;
- /** The only task of this little window is to paint the little square at
- the bottom right corner left by the two scroll bars (when both are
- visible).
- */
- ::boost::shared_ptr<ScrollBarBox> mpScrollBarFiller;
-
- /** The auto scroll timer is used for keep scrolling the window when the
- mouse reaches its border while dragging a selection. When the mouse
- is not moved the timer issues events to keep scrolling.
- */
- Timer maAutoScrollTimer;
- Size maAutoScrollOffset;
- bool mbIsAutoScrollActive;
-
- /** The content window is the one whose view port is controlled by the
- scroll bars.
- */
- SharedSdWindow mpContentWindow;
-
- ::boost::function<void(void)> maAutoScrollFunctor;
-
- void SetWindowOrigin (
- double nHorizontalPosition,
- double nVerticalPosition);
-
- /** Determine the visibility of the scroll bars so that the window
- content is not clipped in any dimension without showing a scroll
- bar.
- @param rAvailableArea
- The area in which the scroll bars, the scroll bar filler, and
- the SlideSorterView will be placed.
- @return
- The area that is enclosed by the scroll bars is returned. It
- will be filled with the SlideSorterView.
- */
- Rectangle DetermineScrollBarVisibilities(
- const Rectangle& rAvailableArea,
- const bool bIsHorizontalScrollBarAllowed,
- const bool bIsVerticalScrollBarAllowed);
-
- /** Typically called by DetermineScrollBarVisibilities() this method
- tests a specific configuration of the two scroll bars being visible
- or hidden.
- @return
- When the window content can be shown with only being clipped in
- an orientation where the scroll bar would be shown then <TRUE/>
- is returned.
- */
- bool TestScrollBarVisibilities (
- bool bHorizontalScrollBarVisible,
- bool bVerticalScrollBarVisible,
- const Rectangle& rAvailableArea);
-
- void CalcAutoScrollOffset (const Point& rMouseWindowPosition);
- bool RepeatAutoScroll (void);
-
- DECL_LINK(HorizontalScrollBarHandler, ScrollBar*);
- DECL_LINK(VerticalScrollBarHandler, ScrollBar*);
- DECL_LINK(AutoScrollTimeoutHandler, Timer*);
-
- void PlaceHorizontalScrollBar (const Rectangle& aArea);
- void PlaceVerticalScrollBar (const Rectangle& aArea);
- void PlaceFiller (const Rectangle& aArea);
-};
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsSelectionFunction.hxx b/sd/source/ui/slidesorter/inc/controller/SlsSelectionFunction.hxx
deleted file mode 100644
index 34efc2280..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsSelectionFunction.hxx
+++ /dev/null
@@ -1,206 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_SELECTION_FUNCTION_HXX
-#define SD_SLIDESORTER_SELECTION_FUNCTION_HXX
-
-#include "model/SlsSharedPageDescriptor.hxx"
-#include "controller/SlsFocusManager.hxx"
-#include "controller/SlsInsertionIndicatorHandler.hxx"
-#include "fupoor.hxx"
-#include <svtools/transfer.hxx>
-#include <boost/noncopyable.hpp>
-#include <boost/scoped_ptr.hpp>
-
-class SdWindow;
-class SdDrawDocument;
-class Sound;
-
-namespace sd { namespace slidesorter {
-class SlideSorter;
-} }
-
-namespace sd { namespace slidesorter { namespace controller {
-
-class SlideSorterController;
-class DragAndDropContext;
-
-
-class SelectionFunction
- : public FuPoor,
- private ::boost::noncopyable
-{
-public:
- TYPEINFO();
-
- static FunctionReference Create( SlideSorter& rSlideSorter, SfxRequest& rRequest );
-
- // Mouse- & Key-Events
- virtual sal_Bool KeyInput(const KeyEvent& rKEvt);
- virtual sal_Bool MouseMove(const MouseEvent& rMEvt);
- virtual sal_Bool MouseButtonUp(const MouseEvent& rMEvt);
- virtual sal_Bool MouseButtonDown(const MouseEvent& rMEvt);
-
- virtual void Activate();
- virtual void Deactivate();
-
- virtual void ScrollStart();
- virtual void ScrollEnd();
-
- /// Forward to the clipboard manager.
- virtual void DoCut (void);
-
- /// Forward to the clipboard manager.
- virtual void DoCopy (void);
-
- /// Forward to the clipboard manager.
- virtual void DoPaste (void);
-
- /** is called when the current function should be aborted. <p>
- This is used when a function gets a KEY_ESCAPE but can also
- be called directly.
-
- @returns
- true if a active function was aborted
- */
- virtual bool cancel();
-
- void MouseDragged (
- const AcceptDropEvent& rEvent,
- const sal_Int8 nDragAction);
-
- /** Turn of substitution display and insertion indicator.
- */
- void NotifyDragFinished (void);
-
- /** Call when drag-and-drop or multi selection is started or stopped in
- order to update permission of mouse over indication.
- */
- void UpdateMouseOverIndicationPermission (void);
-
- class EventDescriptor;
- class ModeHandler;
- friend class ModeHandler;
- enum Mode
- {
- NormalMode,
- MultiSelectionMode,
- DragAndDropMode,
- ButtonMode
- };
- void SwitchToNormalMode (void);
- void SwitchToDragAndDropMode(const Point aMousePosition);
- void SwitchToMultiSelectionMode (const Point aMousePosition, const sal_uInt32 nEventCode);
- bool SwitchToButtonMode (void);
-
- void ResetShiftKeySelectionAnchor (void);
- /** Special case handling for when the context menu is hidden. This
- method will reinitialize the current mouse position to prevent the
- mouse motion during the time the context menu is displayed from
- being interpreted as drag-and-drop start.
- */
- void ResetMouseAnchor (void);
-
-protected:
- SlideSorter& mrSlideSorter;
- SlideSorterController& mrController;
-
- SelectionFunction (
- SlideSorter& rSlideSorter,
- SfxRequest& rRequest);
-
- virtual ~SelectionFunction();
-
-private:
-
- /// The rectangle of the mouse drag selection.
- Rectangle maDragSelectionRectangle;
- bool mbDragSelection;
-
- /// Box of the insert marker in model coordinates.
- Rectangle maInsertionMarkerBox;
-
- /** We use this flag to filter out the cases where MouseMotion() is called
- with a pressed mouse button but without a prior MouseButtonDown()
- call. This is an indication that the mouse button was pressed over
- another control, e.g. the view tab bar, and that a re-layout of the
- controls moved the slide sorter under the mouse.
- */
- bool mbProcessingMouseButtonDown;
-
- bool mbIsDeselectionPending;
-
- /** Remember the slide where the shift key was pressed and started a
- multiselection via keyboard.
- */
- sal_Int32 mnShiftKeySelectionAnchor;
-
- /** The selection function can be in one of several mutually
- exclusive modes.
- */
- ::boost::shared_ptr<ModeHandler> mpModeHandler;
-
- /** Make the slide nOffset slides away of the current one the new
- current slide. When the new index is outside the range of valid
- page numbers it is clipped to that range.
- @param nOffset
- When nOffset is negative then go back. When nOffset if positive go
- forward. When it is zero then ignore the call.
- */
- void GotoNextPage (int nOffset);
-
- /** Make the slide with the given index the new current slide.
- @param nIndex
- Index of the new current slide. When the new index is outside
- the range of valid page numbers it is clipped to that range.
- */
- void GotoPage (int nIndex);
-
- void ProcessMouseEvent (sal_uInt32 nEventType, const MouseEvent& rEvent);
- void ProcessKeyEvent (const KeyEvent& rEvent);
-
- // What follows are a couple of helper methods that are used by
- // ProcessMouseEvent().
-
- void ProcessEvent (EventDescriptor& rEvent);
-
- void MoveFocus (
- const FocusManager::FocusMoveDirection eDirection,
- const bool bIsShiftDown,
- const bool bIsControlDown);
-
- void StopDragAndDrop (void);
-
- void SwitchMode (const ::boost::shared_ptr<ModeHandler>& rpHandler);
-};
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsSelectionManager.hxx b/sd/source/ui/slidesorter/inc/controller/SlsSelectionManager.hxx
deleted file mode 100644
index ff120d544..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsSelectionManager.hxx
+++ /dev/null
@@ -1,170 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_CONTROLLER_SELECTION_MANAGER_HXX
-#define SD_SLIDESORTER_CONTROLLER_SELECTION_MANAGER_HXX
-
-#include "model/SlsSharedPageDescriptor.hxx"
-#include "controller/SlsAnimator.hxx"
-#include <sal/types.h>
-#include <tools/gen.hxx>
-#include <basegfx/range/b2irectangle.hxx>
-#include <vector>
-
-class Link;
-class SdPage;
-
-namespace sd { namespace slidesorter {
-class SlideSorter;
-} }
-
-namespace sd { namespace slidesorter { namespace controller {
-
-class SlideSorterController;
-class SelectionObserver;
-
-/** This class is a part of the controller and handles the selection of
- slides.
- <p>It has methods to modify the selected slides (delete them or
- move them to other places in the document), change the visible area so
- to make the selected slides visble, tell listeners when the selection
- changes.</p>
-*/
-class SelectionManager
-{
-public:
- /** Create a new SelectionManger for the given slide sorter.
- */
- SelectionManager (SlideSorter& rSlideSorter);
-
- ~SelectionManager (void);
-
- /** Delete the currently selected slides. When this method returns the
- selection is empty.
- @param bSelectFollowingPage
- When <TRUE/> then after deleting the selected pages make the
- slide after the last selected page the new current page.
- When <FALSE/> then make the first slide before the selected
- pages the new current slide.
- */
- void DeleteSelectedPages (const bool bSelectFollowingPage = true);
-
- /** Call this method after the selection has changed (possible several
- calls to the PageSelector) to invalidate the relevant slots and send
- appropriate events.
- */
- void SelectionHasChanged (const bool bMakeSelectionVisible = true);
-
- /** Add a listener that is called when the selection of the slide sorter
- changes.
- @param rListener
- When this method is called multiple times for the same listener
- the second and all following calls are ignored. Each listener
- is added only once.
- */
- void AddSelectionChangeListener (const Link& rListener);
-
- /** Remove a listener that was called when the selection of the slide
- sorter changes.
- @param rListener
- It is save to pass a listener that was not added are has been
- removed previously. Such calls are ignored.
- */
- void RemoveSelectionChangeListener (const Link& rListener);
-
- /** Return the position where to insert pasted slides based on the
- current selection. When there is a selection then the insert
- position is behind the last slide. When the selection is empty then
- most of the time the insert position is at the end of the document.
- There is an exception right after the display of a popup-menu. The
- position of the associated insertion marker is stored here and reset
- the next time the selection changes.
- */
- sal_Int32 GetInsertionPosition (void) const;
-
- /** Store an insertion position temporarily. It is reset when the
- selection changes the next time.
- */
- void SetInsertionPosition (const sal_Int32 nInsertionPosition);
-
- ::boost::shared_ptr<SelectionObserver> GetSelectionObserver (void) const;
-
-private:
- SlideSorter& mrSlideSorter;
- SlideSorterController& mrController;
-
- ::std::vector<Link> maSelectionChangeListeners;
-
- /** This array stores the indices of the selected page descriptors at
- the time when the edit mode is switched to EM_MASTERPAGE. With this
- we can restore the selection when switching back to EM_PAGE mode.
- */
- ::std::vector<SdPage*> maSelectionBeforeSwitch;
-
- /** When this flag is set then on the next call to Paint() the selection
- is moved into the visible area.
- */
- bool mbIsMakeSelectionVisiblePending;
-
- /** The insertion position is only temporarily valid. Negative values
- indicate that the explicit insertion position is not valid. In this
- case GetInsertionPosition() calculates it from the current selection.
- */
- sal_Int32 mnInsertionPosition;
-
- /** Animation id for a scroll animation the will eventually set the top
- and left of the visible area to maRequestedTopLeft.
- */
- Animator::AnimationId mnAnimationId;
- Point maRequestedTopLeft;
-
- class PageInsertionListener;
- ::boost::scoped_ptr<PageInsertionListener> mpPageInsertionListener;
-
- ::boost::shared_ptr<SelectionObserver> mpSelectionObserver;
-
- /** Delete the given list of normal pages. This method is a helper
- function for DeleteSelectedPages().
- @param rSelectedNormalPages
- A list of normal pages. Supplying master pages is an error.
- */
- void DeleteSelectedNormalPages (const ::std::vector<SdPage*>& rSelectedNormalPages);
-
- /** Delete the given list of master pages. This method is a helper
- function for DeleteSelectedPages().
- @param rSelectedMasterPages
- A list of master pages. Supplying normal pages is an error.
- */
- void DeleteSelectedMasterPages (const ::std::vector<SdPage*>& rSelectedMasterPages);
-};
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsSelectionObserver.hxx b/sd/source/ui/slidesorter/inc/controller/SlsSelectionObserver.hxx
deleted file mode 100644
index 07246bb4f..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsSelectionObserver.hxx
+++ /dev/null
@@ -1,85 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_CONTROLLER_SELECTION_OBSERVER_HXX
-#define SD_SLIDESORTER_CONTROLLER_SELECTION_OBSERVER_HXX
-
-#include <tools/gen.hxx>
-#include <vector>
-#include <boost/shared_ptr.hpp>
-
-namespace sd { namespace slidesorter {
-class SlideSorter;
-} }
-
-class SdDrawDocument;
-class SdrPage;
-
-namespace sd { namespace slidesorter { namespace controller {
-
-/** Observe insertions and deletions of pages between calls to
- StartObservation() and EndObservation(). When the later is called
- the selection is set to just the newly inserted pages.
-*/
-class SelectionObserver
-{
-public:
- SelectionObserver (SlideSorter& rSlideSorter);
- virtual ~SelectionObserver (void);
-
- void NotifyPageEvent (const SdrPage* pPage);
- void StartObservation (void);
- void AbortObservation (void);
- void EndObservation (void);
-
- /** Use this little class instead of calling StartObservation and
- EndObservation directly so that EndObservation is not forgotten or
- omitted due to an exception or some break or return in the middle of
- code.
- */
- class Context
- {
- public:
- Context (SlideSorter& rSlideSorter);
- ~Context(void);
- void Abort (void);
- private:
- ::boost::shared_ptr<SelectionObserver> mpSelectionObserver;
- };
-
-private:
- SlideSorter& mrSlideSorter;
- SdDrawDocument* mpDocument;
- bool mbIsOvservationActive;
-
- ::std::vector<const SdPage*> maInsertedPages;
- ::std::vector<sal_Int32> maDeletedPages;
-};
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsSlideFunction.hxx b/sd/source/ui/slidesorter/inc/controller/SlsSlideFunction.hxx
deleted file mode 100644
index 44df6672c..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsSlideFunction.hxx
+++ /dev/null
@@ -1,76 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_SLIDE_FUNCTION_HXX
-#define SD_SLIDESORTER_SLIDE_FUNCTION_HXX
-
-#include "fupoor.hxx"
-
-class SdDrawDocument;
-
-namespace sd { namespace slidesorter {
-class SlideSorter;
-} }
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-class SlideSorterController;
-
-
-/** Base class for functions of the slide sorter.
-*/
-class SlideFunction
- : public FuPoor
-{
-public:
- TYPEINFO();
-
- virtual sal_Bool MouseMove (const MouseEvent& rMEvt);
- virtual sal_Bool MouseButtonUp (const MouseEvent& rMEvt);
- virtual sal_Bool MouseButtonDown (const MouseEvent& rMEvt);
-
- /** Called from ForceScroll() before the actual scrolling.
- */
- virtual void ScrollStart (void);
-
- /** Called from ForceScroll() after the actual scrolling.
- */
- virtual void ScrollEnd (void);
-
-protected:
- SlideFunction (
- SlideSorter& rSlideSorter,
- SfxRequest& rRequest);
-};
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsSlotManager.hxx b/sd/source/ui/slidesorter/inc/controller/SlsSlotManager.hxx
deleted file mode 100644
index 3635355e3..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsSlotManager.hxx
+++ /dev/null
@@ -1,127 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-#ifndef SD_SLIDESORTER_SLOT_MANAGER_HXX
-#define SD_SLIDESORTER_SLOT_MANAGER_HXX
-
-#include "model/SlsSharedPageDescriptor.hxx"
-#include <tools/link.hxx>
-#include <memory>
-#include <queue>
-
-class AbstractSvxNameDialog;
-class SfxItemSet;
-class SfxRequest;
-class String;
-
-namespace sd { namespace slidesorter {
-class SlideSorter;
-} }
-
-
-namespace sd { namespace slidesorter { namespace controller {
-
-class Command;
-
-/** This manager takes over the work of handling slot calls from the
- controller of the slide sorter.
-*/
-class SlotManager
-{
-public:
- /** Create a new slot manager that handles slot calls for the controller
- of a slide sorter.
- @param rController
- The controller for which to handle the slot calls.
- */
- SlotManager (SlideSorter& rSlideSorter);
-
- ~SlotManager (void);
-
- void FuTemporary (SfxRequest& rRequest);
- void FuPermanent (SfxRequest& rRequest);
- void FuSupport (SfxRequest& rRequest);
- void GetMenuState (SfxItemSet &rSet);
- void GetClipboardState (SfxItemSet &rSet);
- void GetStatusBarState (SfxItemSet& rSet);
- void ExecCtrl (SfxRequest& rRequest);
- void GetAttrState (SfxItemSet& rSet);
-
- void ExecuteCommandAsynchronously (::std::auto_ptr<Command> pCommand);
-
- /** Exclude or include one slide or all selected slides.
- @param rpDescriptor
- When the pointer is empty then apply the new state to all
- selected pages. Otherwise apply the new state to just the
- specified state.
- */
- void ChangeSlideExclusionState (
- const model::SharedPageDescriptor& rpDescriptor,
- const bool bExcludeSlide);
-
- /** Call this after a change from normal mode to master mode or back.
- The affected slots are invalidated.
- */
- void NotifyEditModeChange (void);
-
-private:
- /// The controller for which we manage the slot calls.
- SlideSorter& mrSlideSorter;
-
- typedef ::std::queue<Command*> CommandQueue;
- CommandQueue maCommandQueue;
-
- /** Called by FuTemporary to show the slide show.
- */
- void ShowSlideShow (SfxRequest& rRequest);
-
- /** The implementation is a copy of the code for SID_RENAMEPAGE in
- drviews2.cxx.
- */
- void RenameSlide (void);
- DECL_LINK(RenameSlideHdl, AbstractSvxNameDialog*);
- bool RenameSlideFromDrawViewShell( sal_uInt16 nPageId, const String& rName);
-
- /** Handle SID_INSERTPAGE slot calls.
- */
- void InsertSlide (SfxRequest& rRequest);
-
- void DuplicateSelectedSlides (SfxRequest& rRequest);
-
- /** Use one of several ways to determine where to insert a new page.
- This can be the current selection or the insertion indicator.
- */
- sal_Int32 GetInsertionPosition (void);
-
- DECL_LINK(UserEventCallback, void*);
-};
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsTransferable.hxx b/sd/source/ui/slidesorter/inc/controller/SlsTransferable.hxx
deleted file mode 100644
index a29b53403..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsTransferable.hxx
+++ /dev/null
@@ -1,87 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_TRANSFERABLE_HXX
-#define SD_SLIDESORTER_TRANSFERABLE_HXX
-
-#include "sdxfer.hxx"
-
-class SdDrawDocument;
-namespace sd { namespace slidesorter {
-class SlideSorterViewShell;
-} }
-
-namespace sd { namespace slidesorter { namespace controller {
-
-
-/** This class exists to have DragFinished call the correct object: the
- SlideSorterViewShell instead of the old SlideView.
-*/
-class Transferable
- : public SdTransferable
-{
-public:
- class Representative
- {
- public:
- Representative (const Bitmap& rBitmap, const bool bIsExcluded)
- : maBitmap(rBitmap), mbIsExcluded(bIsExcluded) {}
- Representative (const Representative& rOther)
- : maBitmap(rOther.maBitmap), mbIsExcluded(rOther.mbIsExcluded) {}
- Representative operator= (Representative const& rOther)
- { if (&rOther != this) {maBitmap = rOther.maBitmap; mbIsExcluded = rOther.mbIsExcluded; }
- return *this;
- }
-
- Bitmap maBitmap;
- bool mbIsExcluded;
- };
-
-
- Transferable (
- SdDrawDocument* pSrcDoc,
- ::sd::View* pWorkView,
- sal_Bool bInitOnGetData,
- SlideSorterViewShell* pViewShell,
- const ::std::vector<Representative>& rRepresentatives);
-
- virtual ~Transferable (void);
-
- virtual void DragFinished (sal_Int8 nDropAction);
-
- const ::std::vector<Representative>& GetRepresentatives (void) const;
-
-private:
- SlideSorterViewShell* mpViewShell;
- const ::std::vector<Representative> maRepresentatives;
-
- virtual void Notify (SfxBroadcaster& rBroadcaster, const SfxHint& rHint);
-};
-
-} } } // end of namespace ::sd::slidesorter::controller
-
-#endif
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsVisibleAreaManager.hxx b/sd/source/ui/slidesorter/inc/controller/SlsVisibleAreaManager.hxx
deleted file mode 100644
index e4eb87c25..000000000
--- a/sd/source/ui/slidesorter/inc/controller/SlsVisibleAreaManager.hxx
+++ /dev/null
@@ -1,100 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_VISIBLE_AREA_MANAGER_HXX
-#define SD_SLIDESORTER_VISIBLE_AREA_MANAGER_HXX
-
-#include "controller/SlsAnimator.hxx"
-#include "model/SlsSharedPageDescriptor.hxx"
-#include <boost/noncopyable.hpp>
-#include <boost/optional.hpp>
-
-namespace sd { namespace slidesorter { namespace controller {
-
-
-/** Manage requests for scrolling page objects into view.
-*/
-class VisibleAreaManager
- : public ::boost::noncopyable
-{
-public:
- VisibleAreaManager (SlideSorter& rSlideSorter);
- ~VisibleAreaManager (void);
-
- void ActivateCurrentSlideTracking (void);
- void DeactivateCurrentSlideTracking (void);
-
- /** Request the current slide to be moved into the visible area.
- This request is only obeyed when the current slide tracking is
- active.
- @see ActivateCurrentSlideTracking() and DeactivateCurrentSlideTracking()
- */
- void RequestCurrentSlideVisible (void);
-
- /** Request to make the specified page object visible.
- */
- void RequestVisible (
- const model::SharedPageDescriptor& rpDescriptor,
- const bool bForce = false);
-
- /** Temporarily disable the update of the visible area.
- */
- class TemporaryDisabler
- {
- public:
- TemporaryDisabler (SlideSorter& rSlideSorter);
- ~TemporaryDisabler (void);
- private:
- VisibleAreaManager& mrVisibleAreaManager;
- };
-
-private:
- SlideSorter& mrSlideSorter;
-
- /** List of rectangle that someone wants to be moved into the visible
- area.
- Cleared on every call to ForgetVisibleRequests() and MakeVisible().
- */
- ::std::vector<Rectangle> maVisibleRequests;
-
- /** Animation id for a scroll animation that sets the top
- and left of the visible area to maRequestedVisibleTopLeft.
- */
- Animator::AnimationId mnScrollAnimationId;
- Point maRequestedVisibleTopLeft;
- Animator::AnimationMode meRequestedAnimationMode;
- bool mbIsCurrentSlideTrackingActive;
- int mnDisableCount;
-
- void MakeVisible (void);
- ::boost::optional<Point> GetRequestedTopLeft (void) const;
-};
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
diff --git a/sd/source/ui/slidesorter/inc/model/SlideSorterModel.hxx b/sd/source/ui/slidesorter/inc/model/SlideSorterModel.hxx
deleted file mode 100644
index 4b12659a5..000000000
--- a/sd/source/ui/slidesorter/inc/model/SlideSorterModel.hxx
+++ /dev/null
@@ -1,254 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_SLIDE_SORTER_MODEL_HXX
-#define SD_SLIDESORTER_SLIDE_SORTER_MODEL_HXX
-
-class SdDrawDocument;
-
-#include "model/SlsPageEnumeration.hxx"
-#include "model/SlsSharedPageDescriptor.hxx"
-
-#include "pres.hxx"
-#include <com/sun/star/drawing/XDrawPage.hpp>
-#include <osl/mutex.hxx>
-#include <vcl/region.hxx>
-
-#include <memory>
-#include <vector>
-#include <functional>
-
-namespace css = ::com::sun::star;
-
-class SdrPage;
-class SdPage;
-
-namespace sd { namespace slidesorter {
-class SlideSorter;
-} }
-
-namespace sd { namespace slidesorter { namespace controller {
-class PageObjectFactory;
-} } }
-
-namespace sd { namespace slidesorter { namespace model {
-
-class DocumentPageContainer;
-
-inline sal_Int32 FromCoreIndex (const sal_uInt16 nCoreIndex) { return (nCoreIndex-1)/2; }
-inline sal_uInt16 ToCoreIndex (const sal_Int32 nIndex) { return nIndex*2+1; }
-
-/** The model of the slide sorter gives access to the slides that are to be
- displayed in the slide sorter view. Via the SetDocumentSlides() method
- this set of slides can be modified (but do not call it directly, use
- SlideSorterController::SetDocumentSlides() instead.)
-*/
-class SlideSorterModel
-{
-public:
- SlideSorterModel (SlideSorter& rSlideSorter);
- void Init (void);
-
- virtual ~SlideSorterModel (void);
- void Dispose (void);
-
- /** This method is present to let the view create a ShowView for
- displaying slides.
- */
- SdDrawDocument* GetDocument (void);
-
- /** Set a new edit mode and return whether the edit mode really
- has been changed. When the edit mode is changed then the
- previous page descriptor list is replaced by a new one which
- has to be repainted.
- @return
- A return value of <TRUE/> indicates that the edit mode has
- changed and thus the page descriptor list has been set up
- to reflect that change. A repaint is necessary.
- */
- bool SetEditMode (EditMode eEditMode);
-
- /** Set the edit mode to that currently used by the controller.
- */
- bool SetEditModeFromController (void);
- EditMode GetEditMode (void) const;
- PageKind GetPageType (void) const;
-
- /** Return the number of slides in the document regardless of whether
- they are visible or not or whether they are hidden or not.
- The number of slides depends on the set of slides available through
- the XIndexAccess given to SetDocumentSlides().
- */
- sal_Int32 GetPageCount (void) const;
-
- /** Return a page descriptor for the page with the specified index.
- Page descriptors are created on demand. The page descriptor is
- found (or not found) in constant time.
- @param nPageIndex
- The index of the requested slide. The valid values
- are 0 to GetPageCount()-1.
- @param bCreate
- When <TRUE/> and the requested page descriptor is missing then
- it is created. When <FALSE/> then an empty reference is
- returned for missing descriptors.
- @return
- When the given index is not valid, i.e. lower then zero or
- larger than or equal to the number of pages then an empty
- reference is returned. Note that the page count may change
- between calls to GetPageCount() and GetPageDescriptor().
- */
- SharedPageDescriptor GetPageDescriptor (
- const sal_Int32 nPageIndex,
- const bool bCreate = true) const;
-
- /** Return a page descriptor for the given XDrawPage. Page descriptors
- are created on demand. The page descriptor is found (or not found)
- in (at most) linear time. Note that all page descriptors in front of
- the one associated with the given XDrawPage are created when not yet
- present. When the XDrawPage is not found then all descriptors are
- created.
- @return
- Returns the index to the requested page descriptor or -1 when
- there is no such page descriptor.
- */
- sal_Int32 GetIndex (
- const ::com::sun::star::uno::Reference<com::sun::star::drawing::XDrawPage>& rxSlide) const;
-
- /** Return a page descriptor for the given SdrPage. Page descriptors
- are created on demand. The page descriptor is found (or not found)
- in (at most) linear time. Note that all page descriptors in front of
- the one associated with the given XDrawPage are created when not yet
- present. When the SdrPage is not found then all descriptors are
- created.
- @return
- Returns the index to the requested page descriptor or -1 when
- there is no such page descriptor.
- */
- sal_Int32 GetIndex (const SdrPage* pPage) const;
-
- /** Return an index for accessing an SdrModel that corresponds to the
- given SlideSorterModel index. In many cases we just have to apply
- the n*2+1 magic. Only when a special model is set, like a custom
- slide show, then the returned value is different.
- */
- sal_uInt16 GetCoreIndex (const sal_Int32 nIndex) const;
-
- /** Call this method after the document has changed its structure. This
- will get the model in sync with the SdDrawDocument. This method
- tries not to throw away to much information already gathered. This
- is especially important for previews of complex pages that take some
- time to create.
- */
- void Resync (void);
-
- /** Delete all descriptors that currently are in the container. The size
- of the container, however, is not altered. Use the AdaptSize
- method for that.
- */
- void ClearDescriptorList (void);
-
- /** Set the selection of the document to exactly that of the called model.
- */
- void SynchronizeDocumentSelection (void);
-
- /** Set the selection of the called model to exactly that of the document.
- */
- void SynchronizeModelSelection (void);
-
- /** Return the mutex so that the caller can lock it and then safely
- access the model.
- */
- ::osl::Mutex& GetMutex (void);
-
- /** Set the XIndexAccess from which the called SlideSorterModel takes
- its pages.
- @param rxSlides
- The set of slides accessible through this XIndexAccess are not
- necessarily the same as the ones of the XModel of the
- XController (although it typically is a subset).
- */
- void SetDocumentSlides (const css::uno::Reference<css::container::XIndexAccess>& rxSlides);
-
- /** Return the set of pages that is currently displayed by the slide sorter.
- */
- css::uno::Reference<css::container::XIndexAccess> GetDocumentSlides (void) const;
-
- /** This method is called when the edit mode has changed. It calls
- SetDocumentSlides() with the set of slides or master pages obtained
- from the model of the XController.
- */
- void UpdatePageList (void);
-
- bool IsReadOnly (void) const;
-
- /** The current selection is saved by copying the ST_Selected state into
- ST_WasSelected for slides.
- */
- void SaveCurrentSelection (void);
-
- /** The current selection is restored from the ST_WasSelected state from
- the slides.
- @returns
- The returned region has to be repainted to reflect the updated
- selection states.
- */
- Region RestoreSelection (void);
-
- /** Typically called from controller::Listener this method handles the
- insertion and deletion of single pages.
- @return
- Returns <TRUE/> when the given page is relevant for the current
- page kind and edit mode.
- */
- bool NotifyPageEvent (const SdrPage* pPage);
-
-private:
- mutable ::osl::Mutex maMutex;
- SlideSorter& mrSlideSorter;
- ::com::sun::star::uno::Reference<com::sun::star::container::XIndexAccess> mxSlides;
- PageKind mePageKind;
- EditMode meEditMode;
- typedef ::std::vector<SharedPageDescriptor> DescriptorContainer;
- mutable DescriptorContainer maPageDescriptors;
-
- /** Resize the descriptor container according to current values of
- page kind and edit mode.
- */
- void AdaptSize (void);
-
- SdPage* GetPage (const sal_Int32 nCoreIndex) const;
- void InsertSlide (SdPage* pPage);
- void DeleteSlide (const SdPage* pPage);
- void UpdateIndices (const sal_Int32 nFirstIndex);
-};
-
-} } } // end of namespace ::sd::slidesorter::model
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/model/SlsEnumeration.hxx b/sd/source/ui/slidesorter/inc/model/SlsEnumeration.hxx
deleted file mode 100644
index ff3e45018..000000000
--- a/sd/source/ui/slidesorter/inc/model/SlsEnumeration.hxx
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_ENUMERATION_HXX
-#define SD_SLIDESORTER_ENUMERATION_HXX
-
-#include <memory>
-
-namespace sd { namespace slidesorter { namespace model {
-
-
-/** Interface to generic enumerations. Designed to operate on shared
- pointers. Therefore GetNextElement() returns T and not T&.
-*/
-template <class T>
-class Enumeration
-{
-public:
- virtual bool HasMoreElements (void) const = 0;
- /** Returns T instead of T& so that it can handle shared pointers.
- */
- virtual T GetNextElement (void) = 0;
- virtual void Rewind (void) = 0;
- virtual ::std::auto_ptr<Enumeration<T> > Clone (void) = 0;
-};
-
-} } } // end of namespace ::sd::slidesorter::model
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/model/SlsPageDescriptor.hxx b/sd/source/ui/slidesorter/inc/model/SlsPageDescriptor.hxx
deleted file mode 100644
index 31775b489..000000000
--- a/sd/source/ui/slidesorter/inc/model/SlsPageDescriptor.hxx
+++ /dev/null
@@ -1,166 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_PAGE_DESCRIPTOR_HXX
-#define SD_SLIDESORTER_PAGE_DESCRIPTOR_HXX
-
-#include "model/SlsVisualState.hxx"
-#include <com/sun/star/drawing/XDrawPage.hpp>
-#include <tools/gen.hxx>
-#include <tools/link.hxx>
-#include <vcl/bitmap.hxx>
-#include <sfx2/viewfrm.hxx>
-
-#include <memory>
-#include <boost/enable_shared_from_this.hpp>
-#include <boost/scoped_ptr.hpp>
-
-
-class SdPage;
-class SdrPage;
-
-namespace sd { namespace slidesorter { namespace model {
-
-class SlideRenderer;
-
-namespace css = ::com::sun::star;
-
-/** Each PageDescriptor object represents the preview of one draw page,
- slide, or master page of a Draw or Impress document as they are displayed
- in the slide sorter. This class gives access to some associated
- information like prerendered preview or position on the screen.
-
- <p>Bounding boxes of page objects come in four varieties:
- Model and screen/pixel coordinates and the bounding boxes of the actual
- page objects and the larger bounding boxes that include page names and
- fade symbol.</p>
-*/
-class PageDescriptor
- : public ::boost::enable_shared_from_this<PageDescriptor>
-{
-public:
- /** Create a PageDescriptor for the given SdPage object.
- @param rxPage
- The page that is represented by the new PageDescriptor object.
- @param pPage
- The page pointer can in some situations not be detected from
- rxPage, e.g. after undo of page deletion. Therefore supply it
- seperately.
- @param nIndex
- This index is displayed in the view as page number. It is not
- necessaryily the page index (not even when you add or subtract 1
- or use (x-1)/2 magic).
- */
- PageDescriptor (
- const css::uno::Reference<css::drawing::XDrawPage>& rxPage,
- SdPage* pPage,
- const sal_Int32 nIndex);
-
- ~PageDescriptor (void);
-
- /** Return the page that is represented by the descriptor as SdPage pointer .
- */
- SdPage* GetPage (void) const;
-
- /** Return the page that is represented by the descriptor as XDrawPage reference.
- */
- css::uno::Reference<css::drawing::XDrawPage> GetXDrawPage (void) const;
-
- /** Returns the index of the page as it is displayed in the view as page
- number. The value may differ from the index returned by the
- XDrawPage when there are hidden slides and the XIndexAccess used to
- access the model filters them out.
- */
- sal_Int32 GetPageIndex (void) const;
- void SetPageIndex (const sal_Int32 nIndex);
-
- bool UpdateMasterPage (void);
-
- enum State { ST_Visible, ST_Selected, ST_WasSelected,
- ST_Focused, ST_MouseOver, ST_Current, ST_Excluded };
-
- bool HasState (const State eState) const;
-
- bool SetState (const State eState, const bool bStateValue);
-
- /** Set the internal mbIsSelected flag to the selection state of the
- page. Use this method to synchronize a page descriptor with the
- page it describes and determine whether a redraw to update the
- selection indicator is necessary.
- @return
- When the two selection states were different <TRUE/> is
- returned. When they were the same this method returns
- <FALSE/>.
- */
- bool GetCoreSelection (void);
-
- /** Set the selection flags of the SdPage objects to the corresponding
- selection states of the page descriptors.
- */
- void SetCoreSelection (void);
-
- VisualState& GetVisualState (void);
-
- Rectangle GetBoundingBox (void) const;
- Point GetLocation (const bool bIgnoreLocation = false) const;
- void SetBoundingBox (const Rectangle& rBoundingBox);
-
-private:
- SdPage* mpPage;
- css::uno::Reference<css::drawing::XDrawPage> mxPage;
- SdrPage const* mpMasterPage;
-
- /** This index is displayed as page number in the view. It may or may
- not be the actual page index.
- */
- sal_Int32 mnIndex;
-
- Rectangle maBoundingBox;
- VisualState maVisualState;
-
- bool mbIsSelected : 1;
- bool mbWasSelected : 1;
- bool mbIsVisible : 1;
- bool mbIsFocused : 1;
- bool mbIsCurrent : 1;
- bool mbIsMouseOver : 1;
-
-
- // Do not use the copy constructor operator. It is not implemented.
- PageDescriptor (const PageDescriptor& rDescriptor);
-
- // Do not use the assignment operator. It is not implemented
- // (mrPage can not be assigned).
- PageDescriptor& operator= (const PageDescriptor& rDescriptor);
-};
-
-} } } // end of namespace ::sd::slidesorter::model
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/model/SlsPageEnumeration.hxx b/sd/source/ui/slidesorter/inc/model/SlsPageEnumeration.hxx
deleted file mode 100644
index abbd121c1..000000000
--- a/sd/source/ui/slidesorter/inc/model/SlsPageEnumeration.hxx
+++ /dev/null
@@ -1,130 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_PAGE_ENUMERATION_HXX
-#define SD_SLIDESORTER_PAGE_ENUMERATION_HXX
-
-#include "pres.hxx"
-
-
-#include "model/SlsEnumeration.hxx"
-#include "model/SlsSharedPageDescriptor.hxx"
-
-#include <boost/function.hpp>
-#include <memory>
-
-namespace sd { namespace slidesorter { namespace model {
-
-class SlideSorterModel;
-
-
-/** Public class of page enumerations that delegates its calls to an
- implementation object that can filter pages by using a given predicate.
-
- @see PageEnumerationProvider
- The PageEnumerationProvider has methods for creating different types
- of page enumerations.
-*/
-class PageEnumeration
- : public Enumeration<SharedPageDescriptor>
-{
-public:
- /** Create a new page enumeration that enumerates a subset of the pages
- of the given model.
- @param rModel
- The new page enumeration enumerates the pages of this model.
- @param rPredicate
- This predicate determines which pages to include in the
- enumeration. Pages for which rPredicate returns <FALSE/> are
- exclude.
- */
- typedef ::boost::function<bool(const SharedPageDescriptor&)> PagePredicate;
- static PageEnumeration Create (
- const SlideSorterModel& rModel,
- const PagePredicate& rPredicate);
-
- /** This copy constructor creates a copy of the given enumeration.
- */
- PageEnumeration (const PageEnumeration& rEnumeration);
-
- virtual ~PageEnumeration();
-
- /** Create a new enumeration object. The ownership of the
- implementation object goes to the new object. Use this copy
- constructor only when you know what you are doing. When in doubt,
- use the one argument version.
- @param bCloneImpl
- When <TRUE/> is given this constructor behaves exactly like its
- one argument version. When <FALSE/> is given then the
- implementation object is not copied but moved from the given
- enumeration to the newly created one. The given enumeration
- thus becomes empty.
- */
- PageEnumeration (PageEnumeration& rEnumeration, bool bCloneImpl);
-
- /** Create and return an exact copy of the called object.
- */
- virtual ::std::auto_ptr<Enumeration<SharedPageDescriptor> > Clone (void);
-
- PageEnumeration& operator= (const PageEnumeration& rEnumeration);
-
- /** Return <TRUE/> when the enumeration has more elements, i.e. it is
- save to call GetNextElement() at least one more time.
- */
- virtual bool HasMoreElements (void) const;
-
- /** Return the next element of the enumeration. Call the
- HasMoreElements() before to make sure that there exists at least one
- more element. Calling this method with HasMoreElements() returning
- <FALSE/> is an error.
- */
- virtual SharedPageDescriptor GetNextElement (void);
-
- /** Rewind the enumeration so that the next call to GetNextElement()
- will return its first element.
- */
- virtual void Rewind (void);
-
-private:
- /// Implementation object.
- ::std::auto_ptr<Enumeration<SharedPageDescriptor> > mpImpl;
-
- /** This constructor expects an implementation object that holds
- the predicate that filters the pages.
- */
- PageEnumeration (::std::auto_ptr<Enumeration<SharedPageDescriptor> > pImpl);
-
- // Default constructor not implemented.
- PageEnumeration (void);
-};
-
-} } } // end of namespace ::sd::slidesorter::model
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/model/SlsPageEnumerationProvider.hxx b/sd/source/ui/slidesorter/inc/model/SlsPageEnumerationProvider.hxx
deleted file mode 100644
index f587586e5..000000000
--- a/sd/source/ui/slidesorter/inc/model/SlsPageEnumerationProvider.hxx
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_PAGE_ENUMERATION_PROVIDER_HXX
-#define SD_SLIDESORTER_PAGE_ENUMERATION_PROVIDER_HXX
-
-#include "model/SlsPageEnumeration.hxx"
-
-namespace sd { namespace slidesorter { namespace model {
-
-class SlideSorterModel;
-
-/** Collection of methods that create enumeration of slides.
-*/
-class PageEnumerationProvider
-{
-public:
- /** The returned enumeration of slides iterates over all slides of the
- given model.
- */
- static PageEnumeration CreateAllPagesEnumeration (const SlideSorterModel& rModel);
-
- /** The returned enumeration of slides iterates over the currently
- selected slides of the given model.
- */
- static PageEnumeration CreateSelectedPagesEnumeration (const SlideSorterModel& rModel);
-
- /** The returned enumeration of slides iterates over the slides
- (partially) inside the visible area.
- */
- static PageEnumeration CreateVisiblePagesEnumeration (const SlideSorterModel& rModel);
-};
-
-} } } // end of namespace ::sd::slidesorter::model
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/model/SlsSharedPageDescriptor.hxx b/sd/source/ui/slidesorter/inc/model/SlsSharedPageDescriptor.hxx
deleted file mode 100644
index 746681530..000000000
--- a/sd/source/ui/slidesorter/inc/model/SlsSharedPageDescriptor.hxx
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_SHARED_PAGE_DESCRIPTOR_HXX
-#define SD_SLIDESORTER_SHARED_PAGE_DESCRIPTOR_HXX
-
-#include <boost/shared_ptr.hpp>
-
-namespace sd { namespace slidesorter { namespace model {
-
-class PageDescriptor;
-
-typedef ::boost::shared_ptr<PageDescriptor> SharedPageDescriptor;
-
-} } } // end of namespace ::sd::slidesorter::model
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/model/SlsVisualState.hxx b/sd/source/ui/slidesorter/inc/model/SlsVisualState.hxx
deleted file mode 100644
index 31a4e0eb0..000000000
--- a/sd/source/ui/slidesorter/inc/model/SlsVisualState.hxx
+++ /dev/null
@@ -1,101 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_VISUAL_STATE_HXX
-#define SD_SLIDESORTER_VISUAL_STATE_HXX
-
-#include <sal/types.h>
-#include <tools/gen.hxx>
-#include <boost/function.hpp>
-
-namespace sd { namespace slidesorter { namespace model {
-
-class PageDescriptor;
-
-/** This class gives access to values related to the visualization of page
- objects. This includes animation state when blending from one state to
- another.
-*/
-class VisualState
-{
-public:
- enum State {
- VS_Selected,
- VS_Focused,
- VS_Current,
- VS_Excluded,
- VS_None };
-
- VisualState (const sal_Int32 nPageId);
- ~VisualState (void);
-
- State GetCurrentVisualState (void) const;
- State GetOldVisualState (void) const;
- void SetVisualState (const State eState);
- double GetVisualStateBlend (void) const;
- void SetVisualStateBlend (const double nBlend);
-
- void UpdateVisualState (const PageDescriptor& rDescriptor);
-
- void SetMouseOverState (const bool bIsMouseOver);
-
- sal_Int32 GetStateAnimationId (void) const;
- void SetStateAnimationId (const sal_Int32 nAnimationId);
-
- Point GetLocationOffset (void) const;
- bool SetLocationOffset (const Point& rPoint);
- sal_Int32 GetLocationAnimationId (void) const;
- void SetLocationAnimationId (const sal_Int32 nAnimationId);
-
- double GetButtonAlpha (void) const;
- void SetButtonAlpha (const double nAlpha);
- double GetButtonBarAlpha (void) const;
- void SetButtonBarAlpha (const double nAlpha);
- sal_Int32 GetButtonAlphaAnimationId (void) const;
- void SetButtonAlphaAnimationId (const sal_Int32 nAnimationId);
-
- sal_Int32 mnPageId; // For debugging
-
-private:
- State meCurrentVisualState;
- State meOldVisualState;
- double mnVisualStateBlend;
- sal_Int32 mnStateAnimationId;
- bool mbOldMouseOverState;
- bool mbCurrentMouseOverState;
-
- Point maLocationOffset;
- sal_Int32 mnLocationAnimationId;
-
- double mnButtonAlpha;
- double mnButtonBarAlpha;
- sal_Int32 mnButtonAlphaAnimationId;
-};
-
-} } } // end of namespace ::sd::slidesorter::model
-
-#endif
diff --git a/sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx b/sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx
deleted file mode 100644
index 378311913..000000000
--- a/sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx
+++ /dev/null
@@ -1,304 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_SLIDE_SORTER_VIEW_HXX
-#define SD_SLIDESORTER_SLIDE_SORTER_VIEW_HXX
-
-#include "SlideSorter.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "model/SlsSharedPageDescriptor.hxx"
-#include "view/SlsLayouter.hxx"
-#include "view/SlsILayerPainter.hxx"
-
-#include "View.hxx"
-#include <sfx2/viewfrm.hxx>
-#include "pres.hxx"
-#include <tools/gen.hxx>
-#include <svx/svdmodel.hxx>
-#include <vcl/region.hxx>
-#include <vcl/outdev.hxx>
-#include <drawinglayer/primitive2d/baseprimitive2d.hxx>
-#include <memory>
-#include <boost/shared_ptr.hpp>
-#include <boost/noncopyable.hpp>
-
-class Point;
-
-namespace sd { namespace slidesorter { namespace controller {
-class SlideSorterController;
-class Properties;
-} } }
-
-namespace sd { namespace slidesorter { namespace cache {
-class PageCache;
-} } }
-
-namespace sd { namespace slidesorter { namespace model {
-class SlideSorterModel;
-} } }
-
-namespace sd { namespace slidesorter { namespace view {
-
-class ButtonBar;
-class LayeredDevice;
-class Layouter;
-class PageObjectPainter;
-class SelectionPainter;
-class ToolTip;
-
-
-class SlideSorterView
- : public sd::View,
- public ::boost::noncopyable
-{
-public:
- TYPEINFO ();
-
- /** Create a new view for the slide sorter.
- @param rViewShell
- This reference is simply passed to the base class and not used
- by this class.
-
- */
- SlideSorterView (SlideSorter& rSlideSorter);
- void Init (void);
-
- virtual ~SlideSorterView (void);
- void Dispose (void);
-
- /** Set the general way of layouting the page objects. Note that this
- method does not trigger any repaints or layouts.
- */
- bool SetOrientation (const Layouter::Orientation eOrientation);
- Layouter::Orientation GetOrientation (void) const;
-
- void RequestRepaint (void);
- void RequestRepaint (const model::SharedPageDescriptor& rDescriptor);
- void RequestRepaint (const Rectangle& rRepaintBox);
- void RequestRepaint (const Region& rRepaintRegion);
-
- Rectangle GetModelArea (void);
-
- /** Return the index of the page that is rendered at the given position.
- @param rPosition
- The position is expected to be in pixel coordinates.
- @return
- The returned index is -1 when there is no page object at the
- given position.
- */
- sal_Int32 GetPageIndexAtPoint (const Point& rPosition) const;
-
- view::Layouter& GetLayouter (void);
-
- virtual void ModelHasChanged (void);
-
- void LocalModelHasChanged(void);
-
- /** This method is typically called before a model change takes place.
- All references to model data are released. PostModelChange() has to
- be called to complete the handling of the model change. When the
- calls to Pre- and PostModelChange() are very close to each other you
- may call HandleModelChange() instead.
- */
- void PreModelChange (void);
-
- /** This method is typically called after a model change took place.
- References to model data are re-allocated. Call this method only
- after PreModelChange() has been called.
- */
- void PostModelChange (void);
-
- /** This method is a convenience function that simply calls
- PreModelChange() and then PostModelChange().
- */
- void HandleModelChange (void);
-
- void HandleDrawModeChange (void);
-
- virtual void Resize (void);
- virtual void CompleteRedraw (
- OutputDevice* pDevice,
- const Region& rPaintArea,
- sdr::contact::ViewObjectContactRedirector* pRedirector = NULL);
- void Paint (OutputDevice& rDevice, const Rectangle& rRepaintArea);
-
- virtual void ConfigurationChanged (
- utl::ConfigurationBroadcaster* pBroadcaster,
- sal_uInt32 nHint);
-
- void HandleDataChangeEvent (void);
-
- void Layout (void);
- /** This tells the view that it has to re-determine the visibility of
- the page objects before painting them the next time.
- */
- void InvalidatePageObjectVisibilities (void);
-
- /** Return the window to which this view renders its output.
- */
- // ::boost::shared_ptr<sd::Window> GetWindow (void) const;
-
- ::boost::shared_ptr<cache::PageCache> GetPreviewCache (void);
-
- /** Set the bounding box of the insertion marker in model coordinates.
-
- It will be painted as a dark rectangle that fills the given box.
- */
- void SetInsertionMarker (const Rectangle& rBBox);
-
- /** Specify whether the insertion marker will be painted or not.
- */
- void SetInsertionMarkerVisibility (bool bVisible);
-
- /** Set the size and position of the selection rectangle.
-
- It will be painted as a dashed rectangle.
- */
- void SetSelectionRectangle (const Rectangle& rBox);
-
- /** Specify whether the selection rectangle will be painted or not.
- */
- void SetSelectionRectangleVisibility (bool bVisible);
-
- /** Return the range of currently visible page objects including the
- first and last one in that range.
- @return
- The returned pair of page object indices is empty when the
- second index is lower than the first.
- */
- Pair GetVisiblePageRange (void);
-
- /** Add a shape to the page. Typically used from inside
- PostModelChange().
- */
- // void AddSdrObject (SdrObject& rObject);
-
- /** Add a listener that is called when the set of visible slides.
- @param rListener
- When this method is called multiple times for the same listener
- the second and all following calls are ignored. Each listener
- is added only once.
- */
- void AddVisibilityChangeListener (const Link& rListener);
-
- /** Remove a listener that is called when the set of visible slides changes.
- @param rListener
- It is save to pass a listener that was not added or has been
- removed previously. Such calls are ignored.
- */
- void RemoveVisibilityChangeListener (const Link& rListener);
-
- /** The page under the mouse is not highlighted in some contexts. Call
- this method on context changes.
- */
- void UpdatePageUnderMouse (bool bAnimate);
- void UpdatePageUnderMouse (
- const Point& rMousePosition,
- const bool bIsMouseButtonDown,
- const bool bAnimate = true);
- void UpdatePageUnderMouse (
- const model::SharedPageDescriptor& rpDescriptor,
- const Point& rMousePosition,
- const bool bIsMouseButtonDown,
- const bool bAnimate = true);
- void SetPageUnderMouse (
- const model::SharedPageDescriptor& rpDescriptor,
- const bool bAnimate = true);
-
- bool SetState (
- const model::SharedPageDescriptor& rpDescriptor,
- const model::PageDescriptor::State eState,
- const bool bStateValue,
- const bool bAnimate = true);
-
- void UpdateOrientation (void);
-
- ::boost::shared_ptr<PageObjectPainter> GetPageObjectPainter (void);
- ::boost::shared_ptr<LayeredDevice> GetLayeredDevice (void) const;
-
- class DrawLock
- {
- public:
- DrawLock (view::SlideSorterView& rView, const SharedSdWindow& rpWindow);
- DrawLock (SlideSorter& rSlideSorter);
- ~DrawLock (void);
- /** When the DrawLock is disposed then it will not request a repaint
- on destruction.
- */
- void Dispose (void);
- private:
- view::SlideSorterView& mrView;
- SharedSdWindow mpWindow;
- };
-
- ButtonBar& GetButtonBar (void) const;
- ToolTip& GetToolTip (void) const;
-
-protected:
- virtual void Notify (SfxBroadcaster& rBroadcaster, const SfxHint& rHint);
-
-private:
- SlideSorter& mrSlideSorter;
- model::SlideSorterModel& mrModel;
- bool mbIsDisposed;
- ::std::auto_ptr<Layouter> mpLayouter;
- bool mbPageObjectVisibilitiesValid;
- ::boost::shared_ptr<cache::PageCache> mpPreviewCache;
- ::boost::shared_ptr<LayeredDevice> mpLayeredDevice;
- Range maVisiblePageRange;
- bool mbModelChangedWhileModifyEnabled;
- Size maPreviewSize;
- bool mbPreciousFlagUpdatePending;
- Layouter::Orientation meOrientation;
- ::boost::shared_ptr<controller::Properties> mpProperties;
- model::SharedPageDescriptor mpPageUnderMouse;
- sal_Int32 mnButtonUnderMouse;
- ::boost::shared_ptr<PageObjectPainter> mpPageObjectPainter;
- ::boost::shared_ptr<SelectionPainter> mpSelectionPainter;
- Region maRedrawRegion;
- SharedILayerPainter mpBackgroundPainter;
- ::boost::scoped_ptr<ButtonBar> mpButtonBar;
- ::boost::scoped_ptr<ToolTip> mpToolTip;
- bool mbIsRearrangePending;
- ::std::vector<Link> maVisibilityChangeListeners;
-
- /** Determine the visibility of all page objects.
- */
- void DeterminePageObjectVisibilities (void);
-
- void UpdatePreciousFlags (void);
- void RequestRearrange (void);
- void Rearrange (void);
-};
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/view/SlsButtonBar.hxx b/sd/source/ui/slidesorter/inc/view/SlsButtonBar.hxx
deleted file mode 100644
index ff80027fb..000000000
--- a/sd/source/ui/slidesorter/inc/view/SlsButtonBar.hxx
+++ /dev/null
@@ -1,362 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_VIEW_BUTTON_BAR_HXX
-#define SD_SLIDESORTER_VIEW_BUTTON_BAR_HXX
-
-#include "model/SlsSharedPageDescriptor.hxx"
-#include <tools/gen.hxx>
-#include <rtl/ustring.hxx>
-#include <vcl/bitmapex.hxx>
-#include <vcl/bmpacc.hxx>
-#include <boost/scoped_ptr.hpp>
-
-namespace sd { namespace slidesorter {
-class SlideSorter;
-} }
-
-
-namespace sd { namespace slidesorter { namespace view {
-
-class Theme;
-
-class Button;
-typedef ::boost::shared_ptr<Button> SharedButton;
-
-/** This is a container of buttons and a coordinating controller.
- The last means that it receives mouse events and forwards them to
- the right button.
-*/
-class ButtonBar
-{
-public:
- ButtonBar (SlideSorter& rSlideSorter);
- ~ButtonBar (void);
-
- void ProcessButtonDownEvent (
- const model::SharedPageDescriptor& rpDescriptor,
- const Point aMouseModelLocation);
- void ProcessButtonUpEvent (
- const model::SharedPageDescriptor& rpDescriptor,
- const Point aMouseModelLocation);
- void ProcessMouseMotionEvent (
- const model::SharedPageDescriptor& rpDescriptor,
- const Point aMouseModelLocation,
- const bool bIsMouseButtonDown);
-
- void ResetPage (void);
-
- /** Return the number of buttons that are to be displayed in page
- objects which the mouse hovers over.
- @param bIsExcluded
- When this flag is <TRUE/> then return the number of
- buttons that is to be displayed for pages that are
- excluded from the slide show.
- */
- sal_Int32 GetButtonCount (const bool bIsExcluded) const;
-
- /** Return the specified button.
- @param nIndex
- Valid values lie in the range [0,GetButtonCount()).
- @param bIsExcluded
- When this flag is <TRUE/> then return a button that is to
- be displayed for pages that are excluded from the slide
- show.
- @return
- Returns an empty pointer when the given index is not valid.
- */
- ::boost::shared_ptr<Button> GetButton (
- const bool bIsExcluded,
- const sal_Int32 nIndex) const;
-
- bool IsMouseOverBar (void) const;
-
- /** Paint the specified page object. When this is not the same as the
- one under the mouse (mpDescriptor) then the buttons are all
- painted in their normal state.
- */
- void Paint (
- OutputDevice& rDevice,
- const model::SharedPageDescriptor& rpPageDescriptor);
-
- bool IsMouseOverButton (void) const;
-
- void RequestLayout (void);
-
- /** Return the help text for the button under the mouse.
- @return
- When the mouse is not over a button then an empty string
- is returned.
- */
- ::rtl::OUString GetButtonHelpText (void) const;
-
- /** Request the button bar to be shown.
- @param bAnimate
- This flag controls whether to just show the button bar (<FALSE/>)
- or to fade it in smoothly (<TRUE/>.)
- */
- void RequestFadeIn (
- const model::SharedPageDescriptor& rpDescriptor,
- const bool bAnimate);
-
- /** Request the button bar to be hidden.
- @param bAnimate
- This flag controls whether to just hide the button bar (<FALSE/>)
- or to fade it out smoothly (<TRUE/>.)
- */
- void RequestFadeOut (
- const model::SharedPageDescriptor& rpDescriptor,
- const bool bAnimate);
-
- /** Return whether the button bar is visible for the givn descriptor (or
- being faded in.)
- */
- bool IsVisible (const model::SharedPageDescriptor& rpDescriptor);
-
- void HandleDataChangeEvent (void);
-
- class BackgroundTheme;
-
- /** While at least one Lock object exists the button bar will not be
- displayed. Used, e.g. during a mouse multiselection to avoid
- confusing and unhelpfull visual signals.
- */
- class Lock
- {
- public:
- Lock (SlideSorter& rSlideSorter);
- ~Lock (void);
- private:
- ButtonBar& mrButtonBar;
- };
-
-private:
- SlideSorter& mrSlideSorter;
- Size maPageObjectSize;
- Rectangle maButtonBoundingBox;
- Point maBackgroundLocation;
- model::SharedPageDescriptor mpDescriptor;
- bool mbIsExcluded;
- boost::shared_ptr<Button> mpButtonUnderMouse;
- // The button on which the mouse button was pressed.
- boost::shared_ptr<Button> mpDownButton;
- ::std::vector<SharedButton> maRegularButtons;
- ::std::vector<SharedButton> maExcludedButtons;
- BitmapEx maNormalBackground;
- BitmapEx maButtonDownBackground;
- bool mbIsMouseOverBar;
- ::boost::scoped_ptr<BackgroundTheme> mpBackgroundTheme;
- int mnLockCount;
-
- /** Remember the specified page. If it differs from mpDescriptor then
- the buttons are placed anew.
- @return
- The returned flag indicates wether the mpDescriptor member
- is set to a new value.
- */
- bool SetPage (const model::SharedPageDescriptor& rpDescriptor);
- SharedButton GetButtonAt (const Point aModelLocation);
- bool SetButtonUnderMouse (const SharedButton& rButton = SharedButton());
- void PaintButtonBackground (
- OutputDevice& rDevice,
- const model::SharedPageDescriptor& rpPageDescriptor,
- const Point aOffset);
- void LayoutButtons (const Size aPageModelSize);
- bool LayoutButtons (void);
- BitmapEx CreateBackground (
- const OutputDevice& rTemplateDevice,
- const bool bIsButtonDown) const;
- bool IsMouseOverBar (const Point aModelLocation) const;
- void StartFadeAnimation (
- const model::SharedPageDescriptor& rpDescriptor,
- const double nTargetAlpha,
- const bool bFadeIn);
-
- void AcquireLock (void);
- void ReleaseLock (void);
-};
-
-
-
-
-class Button
-{
-public:
- Button (
- SlideSorter& rSlideSorter,
- const ::rtl::OUString& rsHelpText);
- virtual ~Button (void);
-
- enum State { State_Normal, State_Hover, State_Down };
- enum IconSize { IconSize_Large, IconSize_Medium, IconSize_Small };
-
- /** Set a new state.
- @return
- When the new state is different from the old state
- then <TRUE/> is returned.
- */
- bool SetState (const State eState);
- State GetState (void) const;
-
- virtual void Place (const Rectangle aButtonBarBox) = 0;
- virtual void Paint (
- OutputDevice& rDevice,
- const Point aOffset,
- const double nAlpha,
- const ::boost::shared_ptr<Theme>& rpTheme) const = 0;
- virtual void ProcessClick (const model::SharedPageDescriptor& rpDescriptor) = 0;
-
- /** Return the bounding box of the layouted button.
- */
- Rectangle GetBoundingBox (void) const;
- /** Return the minimum size required to completely paint the
- button.
- */
- virtual Size GetSize (void) const = 0;
- virtual Size GetSize (const IconSize eIconSize) const = 0;
- ::rtl::OUString GetHelpText (void) const;
- bool IsDown (void) const;
- void SetActiveState (const bool bIsActive);
- bool IsActive (void) const;
- void SetIconSize (const IconSize eIconSize);
- IconSize GetIconSize (void) const;
- /** By default a button is always enabled. Override to change this.
- */
- virtual bool IsEnabled (void) const;
-
-protected:
- SlideSorter& mrSlideSorter;
- State meState;
- Rectangle maBoundingBox;
- const ::rtl::OUString msHelpText;
- // Buttons that lie (partly) outside the button bar are deactivated.
- bool mbIsActive;
- IconSize meIconSize;
-};
-
-
-
-class TextButton : public Button
-{
-public:
- TextButton (
- SlideSorter& rSlideSorter,
- const ::rtl::OUString& rsText,
- const ::rtl::OUString& rsHelpText);
-
- virtual void Place (const Rectangle aButtonBarBox);
- virtual void Paint (
- OutputDevice& rDevice,
- const Point aOffset,
- const double nAlpha,
- const ::boost::shared_ptr<Theme>& rpTheme) const;
- virtual Size GetSize (void) const;
- virtual Size GetSize (const IconSize eIconSize) const;
-
-private:
- const ::rtl::OUString msText;
-};
-
-
-
-class ImageButton : public Button
-{
-public:
- ImageButton (
- SlideSorter& rSlideSorter,
- const BitmapEx& rLargeIcon,
- const BitmapEx& rLargeHoverIcon,
- const BitmapEx& rMediumIcon,
- const BitmapEx& rMediumHoverIcon,
- const BitmapEx& rSmallIcon,
- const BitmapEx& rSmallHoverIcon,
- const ::rtl::OUString& rsHelpText);
-
- virtual void Place (const Rectangle aButtonBarBox);
- virtual void Paint (
- OutputDevice& rDevice,
- const Point aOffset,
- const double nAlpha,
- const ::boost::shared_ptr<Theme>& rpTheme) const;
- virtual Size GetSize (void) const;
- virtual Size GetSize (const IconSize eIconSize) const;
-
-private:
- const BitmapEx maLargeIcon;
- const BitmapEx maLargeHoverIcon;
- const BitmapEx maMediumIcon;
- const BitmapEx maMediumHoverIcon;
- const BitmapEx maSmallIcon;
- const BitmapEx maSmallHoverIcon;
-};
-
-
-class UnhideButton : public ImageButton
-{
-public:
- UnhideButton (SlideSorter& rSlideSorter);
-
-protected:
- virtual void ProcessClick (const model::SharedPageDescriptor& rpDescriptor);
-};
-
-
-class StartShowButton : public ImageButton
-{
-public:
- StartShowButton (SlideSorter& rSlideSorter);
- virtual bool IsEnabled (void) const;
-
-protected:
- virtual void ProcessClick (const model::SharedPageDescriptor& rpDescriptor);
-};
-
-
-class HideButton : public ImageButton
-{
-public:
- HideButton (SlideSorter& rSlideSorter);
-
-protected:
- virtual void ProcessClick (const model::SharedPageDescriptor& rpDescriptor);
-};
-
-
-class DuplicateButton : public ImageButton
-{
-public:
- DuplicateButton (SlideSorter& rSlideSorter);
- virtual bool IsEnabled (void) const;
-
-protected:
- virtual void ProcessClick (const model::SharedPageDescriptor& rpDescriptor);
-};
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
diff --git a/sd/source/ui/slidesorter/inc/view/SlsFontProvider.hxx b/sd/source/ui/slidesorter/inc/view/SlsFontProvider.hxx
deleted file mode 100644
index bef3a05c5..000000000
--- a/sd/source/ui/slidesorter/inc/view/SlsFontProvider.hxx
+++ /dev/null
@@ -1,97 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_VIEW_FONT_PROVIDER_HXX
-#define SD_SLIDESORTER_VIEW_FONT_PROVIDER_HXX
-
-#include "tools/SdGlobalResourceContainer.hxx"
-
-#include <boost/shared_ptr.hpp>
-#include <vcl/mapmod.hxx>
-
-class Font;
-class OutputDevice;
-class VclWindowEvent;
-
-namespace sd { namespace slidesorter { namespace view {
-
-/** This simple singleton class provides fonts that are scaled so that they
- have a fixed height on the given device regardless of its map mode.
-*/
-class FontProvider
- : public SdGlobalResource
-{
-public:
- typedef ::boost::shared_ptr<Font> SharedFontPointer;
-
- /** Return the single instance of this class. Throws a RuntimeException
- when no instance can be created.
- */
- static FontProvider& Instance (void);
-
- /** Return a font that is scaled according to the current map mode of
- the given device. Repeated calls with a device, not necessarily the
- same device, with the same map mode will return the same font. The
- first call with a different map mode will release the old font and
- create a new one that is correctly scaled.
- */
- SharedFontPointer GetFont (const OutputDevice& rDevice);
-
- /** Call this method to tell an object to release its currently used
- font. The next call to GetFont() will then create a new one.
- Typically called after a DataChange event when for instance a system
- font has been modified.
- */
- void Invalidate (void);
-
-private:
- static FontProvider* mpInstance;
-
- /** The font that was created by a previous call to GetFont(). It is
- replaced by another one only when GetFont() is called with a device
- with a different map mode or by a call to Invalidate().
- */
- SharedFontPointer maFont;
- /** The mape mode for which maFont was created.
- */
- MapMode maMapMode;
-
- FontProvider (void);
- virtual ~FontProvider (void);
-
- // Copy constructor is not implemented.
- FontProvider (const FontProvider&);
- // Assignment operator is not implemented.
- FontProvider& operator= (const FontProvider&);
-};
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/view/SlsILayerPainter.hxx b/sd/source/ui/slidesorter/inc/view/SlsILayerPainter.hxx
deleted file mode 100644
index abc16a662..000000000
--- a/sd/source/ui/slidesorter/inc/view/SlsILayerPainter.hxx
+++ /dev/null
@@ -1,60 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_VIEW_LAYER_PAINTER_HXX
-#define SD_SLIDESORTER_VIEW_LAYER_PAINTER_HXX
-
-#include <boost/shared_ptr.hpp>
-#include <sal/types.h>
-
-class OutputDevice;
-class Rectangle;
-
-namespace sd { namespace slidesorter { namespace view {
-
-class ILayerInvalidator
-{
-public:
- virtual void Invalidate (const Rectangle& rInvalidationBox) = 0;
-};
-typedef ::boost::shared_ptr<ILayerInvalidator> SharedILayerInvalidator;
-
-class ILayerPainter
-{
-public:
- virtual void SetLayerInvalidator (
- const SharedILayerInvalidator& rpInvalidator) = 0;
- virtual void Paint (
- OutputDevice& rDevice,
- const Rectangle& rRepaintArea) = 0;
-};
-typedef ::boost::shared_ptr<ILayerPainter> SharedILayerPainter;
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
diff --git a/sd/source/ui/slidesorter/inc/view/SlsInsertAnimator.hxx b/sd/source/ui/slidesorter/inc/view/SlsInsertAnimator.hxx
deleted file mode 100644
index 39ce07486..000000000
--- a/sd/source/ui/slidesorter/inc/view/SlsInsertAnimator.hxx
+++ /dev/null
@@ -1,71 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_VIEW_INSERT_ANIMATOR_HXX
-#define SD_SLIDESORTER_VIEW_INSERT_ANIMATOR_HXX
-
-#include "controller/SlsAnimator.hxx"
-#include <boost/scoped_ptr.hpp>
-#include <boost/noncopyable.hpp>
-
-namespace sd { namespace slidesorter { namespace view {
-
-class InsertPosition;
-
-
-/** Animate the positions of page objects to make room at the insert
- position while a move or copy operation takes place.
-*/
-class InsertAnimator
- : private ::boost::noncopyable
-{
-public:
- InsertAnimator (SlideSorter& rSlideSorter);
-
- /** Set the position at which we have to make room for the display of an
- icon.
- */
- void SetInsertPosition (const InsertPosition& rInsertPosition);
-
- enum ResetMode { RM_Normal, RM_AbortAnimations };
- /** Restore the normal position of all page objects.
- @param eMode
- This flag controls wether to start an animation that ends in the
- normal positions of all slides (AM_Animated) or to restore the
- normal positions immediately (AM_Immediate).
- */
- void Reset (const controller::Animator::AnimationMode eMode);
-
-private:
- class Implementation;
- ::boost::shared_ptr<Implementation> mpImplementation;
-};
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
diff --git a/sd/source/ui/slidesorter/inc/view/SlsInsertionIndicatorOverlay.hxx b/sd/source/ui/slidesorter/inc/view/SlsInsertionIndicatorOverlay.hxx
deleted file mode 100644
index 4b082849a..000000000
--- a/sd/source/ui/slidesorter/inc/view/SlsInsertionIndicatorOverlay.hxx
+++ /dev/null
@@ -1,131 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_INSERTION_INDICATOR_OVERLAY_HXX
-#define SD_SLIDESORTER_INSERTION_INDICATOR_OVERLAY_HXX
-
-#include "model/SlsSharedPageDescriptor.hxx"
-#include "view/SlsILayerPainter.hxx"
-#include "controller/SlsTransferable.hxx"
-
-#include <tools/gen.hxx>
-#include <vcl/bitmapex.hxx>
-#include <boost/scoped_ptr.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include <vector>
-
-class OutputDevice;
-class SdPage;
-
-namespace sd { namespace slidesorter {
-class SlideSorter;
-} }
-
-namespace sd { namespace slidesorter { namespace model {
-class PageEnumeration;
-} } }
-
-namespace sd { namespace slidesorter { namespace controller {
-class Transferable;
-} } }
-
-namespace sd { namespace slidesorter { namespace view {
-
-class FramePainter;
-class LayeredDevice;
-
-/** The insertion indicator is painted as a vertical or horizonal bar
- in the space between slides.
-*/
-class InsertionIndicatorOverlay
- : public ILayerPainter,
- public ::boost::enable_shared_from_this<InsertionIndicatorOverlay>
-{
-public:
- InsertionIndicatorOverlay (SlideSorter& rSlideSorter);
- virtual ~InsertionIndicatorOverlay (void);
-
- virtual void SetLayerInvalidator (const SharedILayerInvalidator& rpInvalidator);
-
- void Create (const controller::Transferable* pTransferable);
-
- /** Given a position in model coordinates this method calculates the
- insertion marker both as an index in the document and as a location
- used for drawing the insertion indicator.
- */
- void SetLocation (const Point& rPosition);
-
- Size GetSize (void) const;
-
- virtual void Paint (
- OutputDevice& rDevice,
- const Rectangle& rRepaintArea);
-
- bool IsVisible (void) const;
- void Hide (void);
- void Show (void);
-
- Rectangle GetBoundingBox (void) const;
-
-private:
- SlideSorter& mrSlideSorter;
- bool mbIsVisible;
- const sal_Int32 mnLayerIndex;
- SharedILayerInvalidator mpLayerInvalidator;
- // Center of the insertion indicator.
- Point maLocation;
- BitmapEx maIcon;
- Point maIconOffset;
- ::boost::scoped_ptr<FramePainter> mpShadowPainter;
-
- void SetPositionAndSize (const Rectangle& rBoundingBox);
- void SelectRepresentatives (
- model::PageEnumeration& rSelection,
- ::std::vector<model::SharedPageDescriptor>& rDescriptors) const;
- Point PaintRepresentatives (
- OutputDevice& rContent,
- const Size aPreviewSize,
- const sal_Int32 nOffset,
- const ::std::vector<controller::Transferable::Representative>& rPages) const;
- void PaintPageCount (
- OutputDevice& rDevice,
- const sal_Int32 nSelectionCount,
- const Size aPreviewSize,
- const Point aFirstPageOffset) const;
- /** Setup the insertion indicator by creating the icon. It consists of
- scaled down previews of some of the selected pages.
- */
- void Create (
- const ::std::vector<controller::Transferable::Representative>& rPages,
- const sal_Int32 nSelectionCount);
-};
-
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
diff --git a/sd/source/ui/slidesorter/inc/view/SlsLayouter.hxx b/sd/source/ui/slidesorter/inc/view/SlsLayouter.hxx
deleted file mode 100644
index d1371a677..000000000
--- a/sd/source/ui/slidesorter/inc/view/SlsLayouter.hxx
+++ /dev/null
@@ -1,299 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_VIEW_LAYOUTER_HXX
-#define SD_SLIDESORTER_VIEW_LAYOUTER_HXX
-
-#include "SlideSorter.hxx"
-#include "view/SlsPageObjectLayouter.hxx"
-#include "view/SlsTheme.hxx"
-#include <sal/types.h>
-#include <tools/fract.hxx>
-#include <vcl/mapmod.hxx>
-#include <vector>
-#include <utility>
-
-
-class MapMode;
-class OutputDevice;
-class Size;
-
-namespace sd { namespace slidesorter { namespace view {
-
-class InsertPosition;
-
-
-
-/** Calculate the size and position of page objects displayed by a slide
- sorter. The layouter takes into account various input values:
- 1.) Size of the window in which the slide sorter is displayed.
- 2.) Desired and minimal and maximal widths of page objects.
- 3.) Minimal and maximal number of columns.
- 4.) Vertical and horizontal gaps between objects in adjacent columns.
- 5.) Borders arround every page object.
- 6.) Vertical and horizontal borders between enclosing page and outer
- page objects.
- From these it calculates various output values:
- 1.) The width of page objects.
- 2.) The number of columns.
- 3.) The size of the enclosing page.
-
- <p>Sizes and lengths are all in pixel except where explicitly stated
- otherwise.</p>
-
- <p>The GetIndex... methods may return indices that are larger than or
- equal to (zero based) the number of pages. This is so because the
- number of pages is not known to the class instances. Indices are
- calculated with reference to the general grid layout of page
- objects.</p>
-*/
-class Layouter
-{
-public:
- enum Orientation { HORIZONTAL, VERTICAL, GRID };
-
- Layouter (
- const SharedSdWindow& rpWindow,
- const ::boost::shared_ptr<Theme>& rpTheme);
- ~Layouter (void);
-
- ::boost::shared_ptr<PageObjectLayouter> GetPageObjectLayouter (void) const;
- /** Set the horizontal and vertical borders in pixel coordinates between
- the enclosing window and page objects. The borders may be painted
- larger then the given values when the space for the insertion marker
- is not sufficient.
- @param nLeftBorder
- Use a negative value to indicate that the left border size
- shall not be modified. A value of 10 is the default.
- @param nRightBorder
- Use a negative value to indicate that the right border size
- shall not be modified. A value of 10 is the default.
- @param nTopBorder
- Use a negative value to indicate that the top border size
- shall not be modified. A value of 10 is the default.
- @param nBottomBorder
- Use a negative value to indicate that the bottom border size
- shall not be modified. A value of 10 is the default.
- */
- void SetBorders (sal_Int32 nLeftBorder, sal_Int32 nRightBorder,
- sal_Int32 nTopBorder, sal_Int32 nBottomBorder);
-
- /** Set the interval of valid column counts. When nMinimalColumnCount
- <= nMaximalColumnCount is not fullfilled then the call is ignored.
- @param nMinimalColumnCount
- The default value is 1. The question whether higher values make
- any sense is left to the caller.
- @param nMaximalColumnCount
- The default value is 5.
- */
- void SetColumnCount (sal_Int32 nMinimalColumnCount,
- sal_Int32 nMaximalColumnCount);
-
- /** Central method of this class. It takes the input values and
- calculates the output values. Both given sizes must not be 0 in any
- dimension or the call is ignored.
- @param eOrientation
- This defines the generaly layout and specifies whether there may
- be more than one row or more than one column.
- @param rWindowSize
- The size of the window in pixels that the slide sorter is
- displayed in. This can differ from the size of mpWindow during
- detection of whether or not the scroll bars should be visible.
- @param rPreviewModelSize
- Size of each page in model coordinates.
- @param rpWindow
- The map mode of this window is adapted to the new layout of the
- page objects.
- @return
- The return value indicates whether the Get... methods can be
- used to obtain valid values (<TRUE/>).
- */
- bool Rearrange (
- const Orientation eOrientation,
- const Size& rWindowSize,
- const Size& rPreviewModelSize,
- const sal_uInt32 nPageCount);
-
- /** Change the zoom factor. This does not change the general layout
- (number of columns).
- */
- void _SetZoom (double nZoomFactor);
- void _SetZoom (Fraction nZoomFactor);
-
- /** Return the number of columns.
- */
- sal_Int32 GetColumnCount (void) const;
-
- sal_Int32 GetRowCount (void) const;
-
- sal_Int32 GetRow (const sal_Int32 nIndex) const;
-
- sal_Int32 GetColumn (const sal_Int32 nIndex) const;
-
- sal_Int32 GetIndex (const sal_Int32 nRow, const sal_Int32 nColumn) const;
-
- /** Return the scale factor that can be set at the map mode of the
- output window.
- */
- Fraction GetScaleFactor (void) const;
-
- Size GetPageObjectSize (void) const;
-
- /** Return the bounding box in window coordinates of the nIndex-th page
- object.
- */
- Rectangle GetPageObjectBox (
- const sal_Int32 nIndex,
- const bool bIncludeBorderAndGap = false) const;
-
- /** Return the bounding box in model coordinates of the page that
- contains the given amount of page objects.
- */
- Rectangle GetTotalBoundingBox (void) const;
-
- /** Return the index of the first fully or partially visible page
- object. This takes into account only the vertical dimension.
- @return
- The second index may be larger than the number of existing
- page objects.
- */
- Range GetRangeOfVisiblePageObjects (const Rectangle& rVisibleArea) const;
-
- /** Return the index of the page object that is rendered at the given
- point.
- @param rPosition
- The position is expected to be in model coordinates relative to
- the page origin.
- @param bIncludePageBorders
- When <TRUE/> then include the page borders into the calculation,
- i.e. when a point lies in the border of a page object but not on
- the actual page area the index of that page is returned;
- otherwise -1 would be returned to indicate that no page object
- has been hit.
- @param bClampToValidRange
- When <TRUE/> then values outside the valid range [0,mnPageCount)
- are mapped to 0 (when smaller than 0) or mnPageCount-1 when
- equal to or larger than mnPageCount.
- When <FALSE/> then -1 is returned for values outside the valid range.
- @return
- The returned index may be larger than the number of existing
- page objects.
- */
- sal_Int32 GetIndexAtPoint (
- const Point& rModelPosition,
- const bool bIncludePageBorders = false,
- const bool bClampToValidRange = true) const;
-
- /** Return an object that describes the logical and visual properties of
- where to do an insert operation when the user would release the the
- mouse button at the given position after a drag operation and of
- where and how to display an insertion indicator.
- @param rModelPosition
- The position in the model coordinate system for which to
- determine the insertion page index. The position does not have
- to be over a page object to return a valid value.
- @param rIndicatorSize
- The size of the insertion indicator. This size is used to adapt
- the location when at the left or right of a row or at the top or
- bottom of a column.
- @param rModel
- The model is used to get access to the selection states of the
- pages. This in turn is used to determine the visual bounding
- boxes.
- */
- InsertPosition GetInsertPosition (
- const Point& rModelPosition,
- const Size& rIndicatorSize,
- model::SlideSorterModel& rModel) const;
-
- Range GetValidHorizontalSizeRange (void) const;
- Range GetValidVerticalSizeRange (void) const;
-
- class Implementation;
-
-private:
- ::boost::scoped_ptr<Implementation> mpImplementation;
- SharedSdWindow mpWindow;
-};
-
-
-
-
-
-/** Collect all values concerning the logical and visual properties of the
- insertion position that is used for drag-and-drop and copy-and-past.
-*/
-class InsertPosition
-{
-public:
- InsertPosition (void);
- InsertPosition& operator= (const InsertPosition& rInsertPosition);
- bool operator== (const InsertPosition& rInsertPosition) const;
- bool operator!= (const InsertPosition& rInsertPosition) const;
-
- void SetLogicalPosition (
- const sal_Int32 nRow,
- const sal_Int32 nColumn,
- const sal_Int32 nIndex,
- const bool bIsAtRunStart,
- const bool bIsAtRunEnd,
- const bool bIsExtraSpaceNeeded);
- void SetGeometricalPosition(
- const Point aLocation,
- const Point aLeadingOffset,
- const Point aTrailingOffset);
-
- sal_Int32 GetRow (void) const { return mnRow; }
- sal_Int32 GetColumn (void) const { return mnColumn; }
- sal_Int32 GetIndex (void) const { return mnIndex; }
- Point GetLocation (void) const { return maLocation; }
- Point GetLeadingOffset (void) const { return maLeadingOffset; }
- Point GetTrailingOffset (void) const { return maTrailingOffset; }
- bool IsAtRunStart (void) const { return mbIsAtRunStart; }
- bool IsAtRunEnd (void) const { return mbIsAtRunEnd; }
- bool IsExtraSpaceNeeded (void) const { return mbIsExtraSpaceNeeded; }
-
-private:
- sal_Int32 mnRow;
- sal_Int32 mnColumn;
- sal_Int32 mnIndex;
- bool mbIsAtRunStart : 1;
- bool mbIsAtRunEnd : 1;
- bool mbIsExtraSpaceNeeded : 1;
- Point maLocation;
- Point maLeadingOffset;
- Point maTrailingOffset;
-};
-
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/view/SlsPageObject.hxx b/sd/source/ui/slidesorter/inc/view/SlsPageObject.hxx
deleted file mode 100644
index e58e48ca7..000000000
--- a/sd/source/ui/slidesorter/inc/view/SlsPageObject.hxx
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_PAGE_OBJECT_HXX
-#define SD_SLIDESORTER_PAGE_OBJECT_HXX
-
-#include "model/SlsSharedPageDescriptor.hxx"
-
-#include <svx/svdopage.hxx>
-
-namespace sd { namespace slidesorter { namespace view {
-
-
-/** This sub class of the SdrPageObject exists to create the view contact
- and indirectly to create view-object-contact objects.
-*/
-class PageObject
- : public SdrPageObj
-{
-public:
- PageObject (
- const Rectangle& rRect,
- SdrPage* pPage,
- const model::SharedPageDescriptor& rpDescriptor);
-
- virtual ~PageObject (void);
-
- model::SharedPageDescriptor GetDescriptor (void) const;
-
-private:
- model::SharedPageDescriptor mpDescriptor;
-
-protected:
- virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact();
-};
-
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx b/sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx
deleted file mode 100644
index e156a4ab5..000000000
--- a/sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx
+++ /dev/null
@@ -1,145 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_PAGE_OBJECT_LAYOUTER_HXX
-#define SD_SLIDESORTER_PAGE_OBJECT_LAYOUTER_HXX
-
-#include "SlideSorter.hxx"
-#include "model/SlsSharedPageDescriptor.hxx"
-#include "tools/gen.hxx"
-#include <vcl/image.hxx>
-
-namespace sd { namespace slidesorter { namespace view {
-
-
-/** In contrast to the Layouter that places page objects in the view, the
- PageObjectLayouter places the parts of individual page objects like page
- number area, borders, preview.
-*/
-class PageObjectLayouter
-{
-public:
- /** Create a new PageObjectLayouter object.
- @param rPageObjectSize
- In general either the width or the height will be 0 in order to
- signal that this size component has to be calculated from the other.
- This calculation will make the preview as large as possible.
- @param nPageCount
- The page count is used to determine how wide the page number
- area has to be, how many digits to except for the largest page number.
- */
- PageObjectLayouter(
- const ::boost::shared_ptr<Theme>& rpTheme,
- const Size& rPageObjectWindowSize,
- const Size& rPreviewModelSize,
- const SharedSdWindow& rpWindow,
- const sal_Int32 nPageCount);
- ~PageObjectLayouter(void);
-
- enum Part {
- // The focus indicator is painted outside the actual page object.
- FocusIndicator,
- // This is the outer bounding box that includes the preview, page
- // number, title.
- PageObject,
- // Bounding box of the actual preview.
- Preview,
- // Bounding box of the mouse indicator indicator frame.
- MouseOverIndicator,
- // Bounding box of the page number.
- PageNumber,
- // Bounding box of the pane name.
- Name,
- // Indicator whether or not there is a slide transition associated
- // with this slide.
- TransitionEffectIndicator
- };
- /** Two coordinate systems are supported. They differ only in
- translation not in scale. Both relate to pixel values in the window.
- A position in the model coordinate system does not change when the window content is
- scrolled up or down. In the window coordinate system (relative
- to the top left point of the window)scrolling leads to different values.
- */
- enum CoordinateSystem {
- WindowCoordinateSystem,
- ModelCoordinateSystem
- };
-
- /** Return the bounding box of the page object or one of its graphical
- parts.
- @param rWindow
- This device is used to translate between model and window
- coordinates.
- @param rpPageDescriptor
- The page for which to calculate the bounding box. This may be
- NULL. When it is NULL then a generic bounding box is calculated
- for the location (0,0).
- @param ePart
- The part of the page object for which to return the bounding
- box.
- @param eCoodinateSystem
- The bounding box can be returned in model and in pixel
- (window) coordinates.
- */
- Rectangle GetBoundingBox (
- const model::SharedPageDescriptor& rpPageDescriptor,
- const Part ePart,
- const CoordinateSystem eCoordinateSystem);
- Rectangle GetBoundingBox (
- const Point& rPageObjectLocation,
- const Part ePart,
- const CoordinateSystem eCoordinateSystem);
- Size GetSize (
- const Part ePart,
- const CoordinateSystem eCoordinateSystem);
-
- Image GetTransitionEffectIcon (void) const;
-
-private:
- SharedSdWindow mpWindow;
- Size maPageObjectSize;
- double mnModelToWindowScale;
- Rectangle maFocusIndicatorBoundingBox;
- Rectangle maPageObjectBoundingBox;
- Rectangle maPageNumberAreaBoundingBox;
- Rectangle maPreviewBoundingBox;
- Rectangle maTransitionEffectBoundingBox;
- const Image maTransitionEffectIcon;
- const ::boost::shared_ptr<Font> mpPageNumberFont;
-
- Size GetPageNumberAreaSize (const int nPageCount);
- Rectangle CalculatePreviewBoundingBox (
- Size& rPageObjectSize,
- const Size& rPreviewModelSize,
- const sal_Int32 nPageNumberAreaWidth,
- const sal_Int32 nFocusIndicatorWidth);
-};
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
diff --git a/sd/source/ui/slidesorter/inc/view/SlsPageObjectPainter.hxx b/sd/source/ui/slidesorter/inc/view/SlsPageObjectPainter.hxx
deleted file mode 100644
index 0fea81343..000000000
--- a/sd/source/ui/slidesorter/inc/view/SlsPageObjectPainter.hxx
+++ /dev/null
@@ -1,138 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_PAGE_OBJECT_PAINTER_HEADER
-#define SD_SLIDESORTER_PAGE_OBJECT_PAINTER_HEADER
-
-#include "SlideSorter.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "view/SlsLayouter.hxx"
-#include "view/SlsTheme.hxx"
-#include <boost/scoped_ptr.hpp>
-
-namespace sd { namespace slidesorter { namespace cache {
-class PageCache;
-} } }
-
-namespace sd { namespace slidesorter { namespace view {
-
-class ButtonBar;
-class Layouter;
-class PageObjectLayouter;
-class FramePainter;
-
-class PageObjectPainter
-{
-public:
- PageObjectPainter (const SlideSorter& rSlideSorter);
- ~PageObjectPainter (void);
-
- void PaintPageObject (
- OutputDevice& rDevice,
- const model::SharedPageDescriptor& rpDescriptor);
-
- void NotifyResize (const bool bForce = false);
-
- /** Called when the theme changes, either because it is replaced with
- another or because the system colors have changed. So, even when
- the given theme is the same object as the one already in use by this
- painter everything that depends on the theme is updated.
- */
- void SetTheme (const ::boost::shared_ptr<view::Theme>& rpTheme);
-
- /** Return a preview bitmap for the given page descriptor. When the
- page is excluded from the show then the preview is marked
- accordingly.
- @rpDescriptor
- Defines the page for which to return the preview.
- @pReferenceDevice
- When not <NULL/> then this reference device is used to created a
- compatible bitmap.
- @return
- The returned bitmap may have a different size then the preview area.
- */
- Bitmap GetPreviewBitmap (
- const model::SharedPageDescriptor& rpDescriptor,
- const OutputDevice* pReferenceDevice) const;
-
-private:
- const Layouter& mrLayouter;
- ::boost::shared_ptr<PageObjectLayouter> mpPageObjectLayouter;
- ::boost::shared_ptr<cache::PageCache> mpCache;
- ::boost::shared_ptr<controller::Properties> mpProperties;
- ::boost::shared_ptr<view::Theme> mpTheme;
- ::boost::shared_ptr<Font> mpPageNumberFont;
- ::boost::scoped_ptr<FramePainter> mpShadowPainter;
- ::boost::scoped_ptr<FramePainter> mpFocusBorderPainter;
- Bitmap maNormalBackground;
- Bitmap maSelectionBackground;
- Bitmap maFocusedSelectionBackground;
- Bitmap maFocusedBackground;
- Bitmap maMouseOverBackground;
- Bitmap maMouseOverFocusedBackground;
- Bitmap maMouseOverSelectedAndFocusedBackground;
- ::rtl::OUString msUnhideString;
- ButtonBar& mrButtonBar;
-
- void PaintBackground (
- OutputDevice& rDevice,
- const model::SharedPageDescriptor& rpDescriptor);
- void PaintPreview (
- OutputDevice& rDevice,
- const model::SharedPageDescriptor& rpDescriptor) const;
- void PaintPageNumber (
- OutputDevice& rDevice,
- const model::SharedPageDescriptor& rpDescriptor) const;
- void PaintTransitionEffect (
- OutputDevice& rDevice,
- const model::SharedPageDescriptor& rpDescriptor) const;
- void PaintBorder (
- OutputDevice& rDevice,
- const Theme::GradientColorType eColorType,
- const Rectangle& rBox) const;
- Bitmap& GetBackgroundForState (
- const model::SharedPageDescriptor& rpDescriptor,
- const OutputDevice& rTemplateDevice);
- Bitmap& GetBackground(
- Bitmap& rBackground,
- Theme::GradientColorType eType,
- const OutputDevice& rTemplateDevice,
- const bool bHasFocusBorder);
- Bitmap CreateBackgroundBitmap(
- const OutputDevice& rReferenceDevice,
- const Theme::GradientColorType eType,
- const bool bHasFocusBorder) const;
- Bitmap CreateMarkedPreview(
- const Size& rSize,
- const Bitmap& rPreview,
- const BitmapEx& rOverlay,
- const OutputDevice* pReferenceDevice) const;
-};
-
-} } } // end of namespace sd::slidesorter::view
-
-#endif
diff --git a/sd/source/ui/slidesorter/inc/view/SlsPageObjectViewContact.hxx b/sd/source/ui/slidesorter/inc/view/SlsPageObjectViewContact.hxx
deleted file mode 100644
index 59033cd10..000000000
--- a/sd/source/ui/slidesorter/inc/view/SlsPageObjectViewContact.hxx
+++ /dev/null
@@ -1,92 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_PAGE_OBJECT_VIEW_CONTACT_HXX
-#define SD_SLIDESORTER_PAGE_OBJECT_VIEW_CONTACT_HXX
-
-#include "model/SlsSharedPageDescriptor.hxx"
-#include <svx/sdtakitm.hxx>
-#include <svx/sdr/contact/viewcontactofpageobj.hxx>
-
-class SdrPageObj;
-
-namespace sdr {namespace contact {
-class ViewObjectContact;
-class ObjectContact;
-} }
-
-namespace sd { namespace slidesorter { namespace view {
-
-/** Details:
- This class has to provide the bounding box but can not determine it
- fully because it has no access to the output device. It therefore
- retrieves some of the necessary data, the border, from the
- PageDescriptor which acts here as persistent storage.
-*/
-class PageObjectViewContact
- : public ::sdr::contact::ViewContactOfPageObj
-{
-public:
- PageObjectViewContact (
- SdrPageObj& rPageObj,
- const model::SharedPageDescriptor& rpDescriptor);
- ~PageObjectViewContact (void);
-
- /** Create a ViewObjectContact object that buffers its output in a
- bitmap.
- @return
- Ownership of the new object passes to the caller.
- */
- virtual ::sdr::contact::ViewObjectContact&
- CreateObjectSpecificViewObjectContact(
- ::sdr::contact::ObjectContact& rObjectContact);
-
- const SdrPage* GetPage (void) const;
-
- SdrPageObj& GetPageObject (void) const;
-
- virtual void ActionChanged (void);
-
-protected:
- // create graphical visualisation data
- virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const;
-
-private:
- /** This flag is set to <TRUE/> when the destructor is called to
- indicate that further calls made to it must not call outside.
- */
- bool mbInDestructor;
-
- model::SharedPageDescriptor mpDescriptor;
-};
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/view/SlsPageObjectViewObjectContact.hxx b/sd/source/ui/slidesorter/inc/view/SlsPageObjectViewObjectContact.hxx
deleted file mode 100644
index df3d69f14..000000000
--- a/sd/source/ui/slidesorter/inc/view/SlsPageObjectViewObjectContact.hxx
+++ /dev/null
@@ -1,228 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_PAGE_OBJECT_VIEW_OBJECT_CONTACT_HXX
-#define SD_SLIDESORTER_PAGE_OBJECT_VIEW_OBJECT_CONTACT_HXX
-
-#include <svx/sdr/contact/viewobjectcontactofpageobj.hxx>
-#include "model/SlsSharedPageDescriptor.hxx"
-#include <svx/sdr/contact/viewobjectcontact.hxx>
-#include <vcl/bitmapex.hxx>
-#include <vcl/image.hxx>
-#include <sfx2/viewfrm.hxx>
-#include <memory>
-#include <boost/shared_ptr.hpp>
-
-class SdrPage;
-
-namespace sdr { namespace contact {
-class DisplayInfo;
-} }
-
-namespace sd { namespace slidesorter { namespace cache {
-class PageCache;
-} } }
-
-namespace sd { namespace slidesorter { namespace controller {
-class Properties;
-} } }
-
-namespace sd { namespace slidesorter { namespace view {
-
-class SlideSorterView;
-
-/** This object-view-contact of page objects maintains a preview bitmap for
- the page to speed up redraws of the same. It does so by colaborating
- with a cache of bitmaps (see ../cache).
-*/
-
-// needs to be derived from ViewObjectContactOfPageObj, else the calls to parent implementations
-// would use ViewObjectContact and thus not enable e.g. the correct primitive creation
-// for view-independent printer output
-// changed: ViewObjectContact -> ViewObjectContactOfPageObj
-
-class PageObjectViewObjectContact : public ::sdr::contact::ViewObjectContactOfPageObj
-{
-public:
- /** Create a new view-object-contact object for the given contact
- objects of both model and view.
- @param pCache
- The caller should provide a pointer to a preview cache, if
- available. If given then the cache is used to control when to
- create a preview and to store it. If NULL is given then the
- preview is created every time when requested.
- */
- PageObjectViewObjectContact (
- ::sdr::contact::ObjectContact& rObjectContact,
- ::sdr::contact::ViewContact& rViewContact,
- const ::boost::shared_ptr<cache::PageCache>& rpCache,
- const ::boost::shared_ptr<controller::Properties>& rpProperties);
- virtual ~PageObjectViewObjectContact (void);
-
- /** This method is primarily for releasing the current preview cache (by
- providing a NULL pointer.)
- */
- void SetCache (const ::boost::shared_ptr<cache::PageCache>& rpCache);
-
- /** Return the page that is painted by this object.
- */
- const SdrPage* GetPage (void) const;
-
- /** This fallback method is called when no preview cache is available.
- It creates a preview for the page.
- */
- BitmapEx CreatePreview (const sdr::contact::DisplayInfo& rDisplayInfo);
-
- /** Return the page descriptor of the slide sorter model that is
- associated with the same page object as this contact object is.
- */
- model::SharedPageDescriptor GetPageDescriptor (void) const;
-
- /** Return the border widths in the screen coordinate system of the
- border arround the page object. The border contains frames for
- selection, focus, the page name and number, and the indicator for
- the page transition.
- @param pDevice
- The output device is used to convert pixel coordinates into
- model coordinates. When NULL is given then the device dependent
- part is not re-calculated but taken from an earlier calculation
- or from the default values.
- @param nPageCount
- The total number of pages is used to determine the width of the
- box that contains the page number.
- */
- static SvBorder CalculatePageModelBorder (
- OutputDevice* pDevice,
- int nPageCount);
-
- /** Calculate the size of the page number area so that all page numbers
- including the given number fit in. Because this is device dependent
- we need the device as parameter. The result is returned and stored
- in maPageNumberAreaPixelSize so that it can be used later without
- access to the device or page count.
- */
- static Size CalculatePageNumberAreaModelSize (
- OutputDevice* pDevice,
- int nPageCount);
-
- /** Paint a mouse over effect.
- @param bVisible
- When bVisible is <FALSE/> then paint the area of the mouse over
- effect in the background color, i.e. erase it.
- */
- drawinglayer::primitive2d::Primitive2DSequence createMouseOverEffectPrimitive2DSequence();
-
- enum BoundingBoxType {
- // This is the outer bounding box that includes the preview, page
- // number, title.
- PageObjectBoundingBox,
- // Bounding box of the actual preview.
- PreviewBoundingBox,
- // Bounding box of the mouse indicator indicator frame.
- MouseOverIndicatorBoundingBox,
- // Bounding box of the focus indicator frame.
- FocusIndicatorBoundingBox,
- // Bounding box of the selection indicator frame.
- SelectionIndicatorBoundingBox,
- // Bounding box of the page number.
- PageNumberBoundingBox,
- // Bounding box of the pane name.
- NameBoundingBox,
- FadeEffectIndicatorBoundingBox
- };
- enum CoordinateSystem { ModelCoordinateSystem, PixelCoordinateSystem };
-
- /** Return the bounding box of the page object or one of its graphical
- parts.
- @param rDevice
- This device is used to translate between model and window
- coordinates.
- @param eType
- The part of the page object for which to return the bounding
- box.
- @param eCoodinateSystem
- The bounding box can be returned in model and in pixel
- (window) coordinates.
- */
- Rectangle GetBoundingBox (
- OutputDevice& rDevice,
- BoundingBoxType eType,
- CoordinateSystem eCoordinateSystem) const;
-
- // create the graphical visualisation data
- virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequence(const sdr::contact::DisplayInfo& rDisplayInfo) const;
-
- // access to the current page content primitive vector which may be used for visualisation
- const drawinglayer::primitive2d::Primitive2DSequence& getCurrentPageContents() const { return mxCurrentPageContents; }
-
- virtual void ActionChanged (void);
-
-private:
- /// Gap between border of page object and inside of selection rectangle.
- static const sal_Int32 mnSelectionIndicatorOffset;
- /// Thickness of the selection rectangle.
- static const sal_Int32 mnSelectionIndicatorThickness;
- /// Gap between border of page object and inside of focus rectangle.
- static const sal_Int32 mnFocusIndicatorOffset;
- /// Size of width and height of the fade effect indicator in pixels.
- static const sal_Int32 mnFadeEffectIndicatorSize;
- static const sal_Int32 mnFadeEffectIndicatorOffset;
- /// Gap between border of page object and number rectangle.
- static const sal_Int32 mnPageNumberOffset;
- /// Offset and thickness of the mouse over effect rectangle.
- static const sal_Int32 mnMouseOverEffectOffset;
- static const sal_Int32 mnMouseOverEffectThickness;
-
- /** This flag is set to <TRUE/> when the destructor is called to
- indicate that further calls made to it must not call outside.
- */
- bool mbInDestructor;
-
- /// The primitive sequence of the page contents, completely scaled
- /// and prepared for painiting
- drawinglayer::primitive2d::Primitive2DSequence mxCurrentPageContents;
-
- ::boost::shared_ptr<cache::PageCache> mpCache;
-
- ::boost::shared_ptr<controller::Properties> mpProperties;
-
- BitmapEx GetPreview (
- const sdr::contact::DisplayInfo& rDisplayInfo,
- const Rectangle& rNewSizePixel);
-
- /** Return the bounding box of where the page number is painted (when it
- is painted).
- */
- Rectangle GetPageNumberArea (OutputDevice& rDevice) const;
-};
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/inc/view/SlsResource.hrc b/sd/source/ui/slidesorter/inc/view/SlsResource.hrc
deleted file mode 100644
index 48a222306..000000000
--- a/sd/source/ui/slidesorter/inc/view/SlsResource.hrc
+++ /dev/null
@@ -1,111 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_ICONS_HRC
-#define SD_SLIDESORTER_ICONS_HRC
-
-#include "glob.hrc"
-
-#define IMAGE_COMMAND1_LARGE 1
-#define IMAGE_COMMAND1_LARGE_HOVER 2
-#define IMAGE_COMMAND1_MEDIUM 3
-#define IMAGE_COMMAND1_MEDIUM_HOVER 4
-#define IMAGE_COMMAND1_SMALL 5
-#define IMAGE_COMMAND1_SMALL_HOVER 6
-
-#define IMAGE_COMMAND1_LARGE_HC 7
-#define IMAGE_COMMAND1_LARGE_HOVER_HC 8
-#define IMAGE_COMMAND1_MEDIUM_HC 9
-#define IMAGE_COMMAND1_MEDIUM_HOVER_HC 10
-#define IMAGE_COMMAND1_SMALL_HC 11
-#define IMAGE_COMMAND1_SMALL_HOVER_HC 12
-
-
-#define IMAGE_COMMAND2_LARGE 20
-#define IMAGE_COMMAND2_LARGE_HOVER 21
-#define IMAGE_COMMAND2_MEDIUM 22
-#define IMAGE_COMMAND2_MEDIUM_HOVER 23
-#define IMAGE_COMMAND2_SMALL 24
-#define IMAGE_COMMAND2_SMALL_HOVER 25
-
-#define IMAGE_COMMAND2_LARGE_HC 26
-#define IMAGE_COMMAND2_LARGE_HOVER_HC 27
-#define IMAGE_COMMAND2_MEDIUM_HC 28
-#define IMAGE_COMMAND2_MEDIUM_HOVER_HC 29
-#define IMAGE_COMMAND2_SMALL_HC 30
-#define IMAGE_COMMAND2_SMALL_HOVER_HC 31
-
-#define IMAGE_COMMAND2B_LARGE 40
-#define IMAGE_COMMAND2B_LARGE_HOVER 41
-#define IMAGE_COMMAND2B_MEDIUM 42
-#define IMAGE_COMMAND2B_MEDIUM_HOVER 43
-#define IMAGE_COMMAND2B_SMALL 44
-#define IMAGE_COMMAND2B_SMALL_HOVER 45
-
-#define IMAGE_COMMAND2B_LARGE_HC 46
-#define IMAGE_COMMAND2B_LARGE_HOVER_HC 47
-#define IMAGE_COMMAND2B_MEDIUM_HC 48
-#define IMAGE_COMMAND2B_MEDIUM_HOVER_HC 49
-#define IMAGE_COMMAND2B_SMALL_HC 50
-#define IMAGE_COMMAND2B_SMALL_HOVER_HC 51
-
-
-#define IMAGE_COMMAND3_LARGE 60
-#define IMAGE_COMMAND3_LARGE_HOVER 61
-#define IMAGE_COMMAND3_MEDIUM 62
-#define IMAGE_COMMAND3_MEDIUM_HOVER 63
-#define IMAGE_COMMAND3_SMALL 64
-#define IMAGE_COMMAND3_SMALL_HOVER 65
-
-#define IMAGE_COMMAND3_LARGE_HC 66
-#define IMAGE_COMMAND3_LARGE_HOVER_HC 67
-#define IMAGE_COMMAND3_MEDIUM_HC 68
-#define IMAGE_COMMAND3_MEDIUM_HOVER_HC 69
-#define IMAGE_COMMAND3_SMALL_HC 70
-#define IMAGE_COMMAND3_SMALL_HOVER_HC 71
-
-#define IMAGE_BUTTONBAR_LARGE 80
-#define IMAGE_BUTTONBAR_LARGE_HC 81
-#define IMAGE_BUTTONBAR_MEDIUM 82
-#define IMAGE_BUTTONBAR_MEDIUM_HC 83
-#define IMAGE_BUTTONBAR_SMALL 84
-#define IMAGE_BUTTONBAR_SMALL_HC 85
-
-#define IMAGE_SHADOW 90
-#define IMAGE_INSERT_SHADOW 91
-#define IMAGE_HIDE_SLIDE_OVERLAY 92
-#define IMAGE_FOCUS_BORDER 93
-
-#define STRING_DRAG_AND_DROP_PAGES 101
-#define STRING_DRAG_AND_DROP_SLIDES 102
-
-#define STRING_COMMAND1 110
-#define STRING_COMMAND2_A 111
-#define STRING_COMMAND2_B 112
-#define STRING_COMMAND3 113
-
-#endif
diff --git a/sd/source/ui/slidesorter/inc/view/SlsTheme.hxx b/sd/source/ui/slidesorter/inc/view/SlsTheme.hxx
deleted file mode 100644
index 2444422e2..000000000
--- a/sd/source/ui/slidesorter/inc/view/SlsTheme.hxx
+++ /dev/null
@@ -1,236 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_VIEW_THEME_HXX
-#define SD_SLIDESORTER_VIEW_THEME_HXX
-
-#include "model/SlsVisualState.hxx"
-
-#include <vcl/bitmapex.hxx>
-#include <vcl/font.hxx>
-#include <vcl/gradient.hxx>
-#include <tools/color.hxx>
-
-#include <boost/shared_ptr.hpp>
-#include <boost/weak_ptr.hpp>
-
-
-namespace sd { namespace slidesorter { namespace controller {
-class Properties;
-} } }
-
-namespace sd { namespace slidesorter { namespace view {
-
-
-/** Collection of colors and styles that are used to paint the slide sorter
- view.
-*/
-class Theme
-{
-public:
- Theme (const ::boost::shared_ptr<controller::Properties>& rpProperties);
-
- /** Call this method to update some colors as response to a change of
- a system color change.
- */
- void Update (
- const ::boost::shared_ptr<controller::Properties>& rpProperties);
-
- // BitmapEx GetInsertIndicatorIcon (void) const;
-
- enum FontType {
- Font_PageNumber,
- Font_PageCount,
- Font_Button
- };
- static ::boost::shared_ptr<Font> GetFont (
- const FontType eType,
- const OutputDevice& rDevice);
-
- enum ColorType {
- Color_Background,
- Color_ButtonBackground,
- Color_ButtonText,
- Color_ButtonTextHover,
- Color_PageNumberDefault,
- Color_PageNumberHover,
- Color_PageNumberHighContrast,
- Color_PageNumberBrightBackground,
- Color_PageNumberDarkBackground,
- Color_Selection,
- Color_PreviewBorder,
- Color_PageCountFontColor,
- _ColorType_Size_
- };
- ColorData GetColor (const ColorType eType);
- void SetColor (const ColorType eType, const ColorData aColorData);
-
- enum GradientColorType {
- Gradient_NormalPage,
- Gradient_SelectedPage,
- Gradient_SelectedAndFocusedPage,
- Gradient_MouseOverPage,
- Gradient_MouseOverSelectedAndFocusedPage,
- Gradient_FocusedPage,
- Gradient_ButtonBackground,
- _GradientColorType_Size_
- };
- enum GradientColorClass {
- Border1,
- Border2,
- Fill1,
- Fill2,
- Base
- };
- ColorData GetGradientColor (
- const GradientColorType eType,
- const GradientColorClass eClass);
- sal_Int32 GetGradientOffset (
- const GradientColorType eType,
- const GradientColorClass eClass);
- void SetGradient (
- const GradientColorType eType,
- const ColorData aBaseColor,
- const sal_Int32 nSaturationOverride,
- const sal_Int32 nBrightnessOverride,
- const sal_Int32 nFillStartOffset,
- const sal_Int32 nFillEndOffset,
- const sal_Int32 nBorderStartOffset,
- const sal_Int32 nBorderEndOffset);
- sal_Int32 GetGradientSaturationOverride (const GradientColorType eType);
- sal_Int32 GetGradientBrightnessOverride (const GradientColorType eType);
- void SetGradientSaturationOverride (const GradientColorType eType, const sal_Int32 nValue);
- void SetGradientBrightnessOverride (const GradientColorType eType, const sal_Int32 nValue);
-
- enum IconType
- {
- Icon_RawShadow,
- Icon_RawInsertShadow,
- Icon_HideSlideOverlay,
- Icon_FocusBorder,
- Icon_ButtonBarLarge,
- Icon_ButtonBarMedium,
- Icon_ButtonBarSmall,
- Icon_Command1Large,
- Icon_Command1LargeHover,
- Icon_Command1Medium,
- Icon_Command1MediumHover,
- Icon_Command1Small,
- Icon_Command1SmallHover,
- Icon_Command2Large,
- Icon_Command2LargeHover,
- Icon_Command2Medium,
- Icon_Command2MediumHover,
- Icon_Command2Small,
- Icon_Command2SmallHover,
- Icon_Command2BLarge,
- Icon_Command2BLargeHover,
- Icon_Command2BMedium,
- Icon_Command2BMediumHover,
- Icon_Command2BSmall,
- Icon_Command2BSmallHover,
- Icon_Command3Large,
- Icon_Command3LargeHover,
- Icon_Command3Medium,
- Icon_Command3MediumHover,
- Icon_Command3Small,
- Icon_Command3SmallHover,
- _IconType_Size_
- };
- const BitmapEx& GetIcon (const IconType eType);
-
- enum IntegerValueType
- {
- Integer_ButtonCornerRadius,
- Integer_ButtonMaxAlpha,
- Integer_ButtonBarMaxAlpha,
- Integer_ButtonPaintType,
- Integer_ButtonBorder,
- Integer_ButtonGap,
- Integer_ButtonFadeInDelay,
- Integer_ButtonFadeInDuration,
- Integer_ButtonFadeOutDelay,
- Integer_ButtonFadeOutDuration,
- Integer_ToolTipDelay,
- Integer_FocusIndicatorWidth,
- _IntegerValueType_Size_
- };
- sal_Int32 GetIntegerValue (const IntegerValueType eType) const;
- void SetIntegerValue (const IntegerValueType eType, const sal_Int32 nValue);
-
- enum StringType
- {
- String_Unhide,
- String_DragAndDropPages,
- String_DragAndDropSlides,
- String_Command1,
- String_Command2,
- String_Command2B,
- String_Command3,
- _StringType_Size_
- };
- ::rtl::OUString GetString (const StringType eType) const;
-
-private:
- bool mbIsHighContrastMode;
- class GradientDescriptor
- {
- public:
- ColorData maBaseColor;
-
- sal_Int32 mnSaturationOverride;
- sal_Int32 mnBrightnessOverride;
-
- ColorData maFillColor1;
- ColorData maFillColor2;
- ColorData maBorderColor1;
- ColorData maBorderColor2;
-
- sal_Int32 mnFillOffset1;
- sal_Int32 mnFillOffset2;
- sal_Int32 mnBorderOffset1;
- sal_Int32 mnBorderOffset2;
- };
- ColorData maBackgroundColor;
- ColorData maPageBackgroundColor;
- ::std::vector<GradientDescriptor> maGradients;
- ::std::vector<BitmapEx> maIcons;
- ::std::vector<ColorData> maColor;
- ::std::vector<sal_Int32> maIntegerValues;
- ::std::vector<rtl::OUString> maStrings;
-
- GradientDescriptor& GetGradient (const GradientColorType eType);
- /** Guarded initialization of the specified icon in the maIcons
- container. Call only while a LocalResource object is active.
- */
- void InitializeIcon (const IconType eType, sal_uInt16 nResourceId);
-};
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
diff --git a/sd/source/ui/slidesorter/inc/view/SlsToolTip.hxx b/sd/source/ui/slidesorter/inc/view/SlsToolTip.hxx
deleted file mode 100644
index bd5537fba..000000000
--- a/sd/source/ui/slidesorter/inc/view/SlsToolTip.hxx
+++ /dev/null
@@ -1,97 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_VIEW_TOOL_TIP_HXX
-#define SD_SLIDESORTER_VIEW_TOOL_TIP_HXX
-
-#include "SlideSorter.hxx"
-#include "model/SlsSharedPageDescriptor.hxx"
-
-namespace sd { namespace slidesorter { namespace view {
-
-/** Manage the display of tool tips. The tool tip text changes when the
- mouse is moved from slide to slide or from button to button.
- After the mouse enters a slide the first display of the tool tip is
- delayed for a short time in order to not draw attention from the slide
- or its button bar.
-*/
-class ToolTip
-{
-public:
- ToolTip (SlideSorter& rSlideSorter);
- ~ToolTip (void);
-
- /** Set a new page. This modifies the default help text. After a page
- change a timer is started to delay the display of the tool tip for
- the new page.
- @param rpPage
- When this is empty then the tool tip is hidden.
- */
- void SetPage (const model::SharedPageDescriptor& rpPage);
-
- /** Set and show the default help text.
- */
- void ShowDefaultHelpText (const ::rtl::OUString& rsHelpText);
-
- /** Show a previously set default help text.
- */
- void ShowDefaultHelpText (void);
-
- /** Show a temporary help text.
- */
- void ShowHelpText (const ::rtl::OUString& rsHelpText);
-
- /** Hide the tool tip.
- @return
- Returns whether the tool tip was visible at the time this method
- was called.
- */
- bool Hide (void);
-
-private:
- SlideSorter& mrSlideSorter;
- model::SharedPageDescriptor mpDescriptor;
- ::rtl::OUString msDefaultHelpText;
- ::rtl::OUString msCurrentHelpText;
- sal_uLong mnHelpWindowHandle;
- Timer maTimer;
-
- /** Request to show the tool tip.
- @param bForce
- When <TRUE/> then the tool tip is show right away. Otherwise it
- is shown after a short delay.
- */
- void Show (const bool bForce);
- void DoShow (void);
-
- DECL_LINK(DelayTrigger, void*);
-};
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
diff --git a/sd/source/ui/slidesorter/model/SlideSorterModel.cxx b/sd/source/ui/slidesorter/model/SlideSorterModel.cxx
deleted file mode 100644
index 61d009b49..000000000
--- a/sd/source/ui/slidesorter/model/SlideSorterModel.cxx
+++ /dev/null
@@ -1,740 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "model/SlideSorterModel.hxx"
-
-#include "SlideSorter.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "model/SlsPageEnumerationProvider.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsProperties.hxx"
-#include "controller/SlsPageSelector.hxx"
-#include "controller/SlsCurrentSlideManager.hxx"
-#include "controller/SlsSlotManager.hxx"
-#include "view/SlideSorterView.hxx"
-#include "taskpane/SlideSorterCacheDisplay.hxx"
-#include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
-#include <com/sun/star/drawing/XMasterPagesSupplier.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/beans/UnknownPropertyException.hpp>
-
-#include "ViewShellBase.hxx"
-#include "DrawViewShell.hxx"
-#include "DrawDocShell.hxx"
-#include "drawdoc.hxx"
-#include "sdpage.hxx"
-#include "FrameView.hxx"
-
-#include <tools/diagnose_ex.h>
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-
-namespace sd { namespace slidesorter { namespace model {
-
-namespace {
- class CompareToXDrawPage
- {
- public:
- CompareToXDrawPage (const Reference<drawing::XDrawPage>& rxSlide) : mxSlide(rxSlide) {}
- bool operator() (const SharedPageDescriptor& rpDescriptor)
- { return rpDescriptor.get()!=NULL && rpDescriptor->GetXDrawPage()==mxSlide; }
- private:
- Reference<drawing::XDrawPage> mxSlide;
- };
-
- bool PrintModel (const SlideSorterModel& rModel)
- {
- for (sal_Int32 nIndex=0,nCount=rModel.GetPageCount(); nIndex<nCount; ++nIndex)
- {
- SharedPageDescriptor pDescriptor (rModel.GetPageDescriptor(nIndex));
- if (pDescriptor)
- {
- OSL_TRACE("%d %d %d %d %x",
- nIndex,
- pDescriptor->GetPageIndex(),
- pDescriptor->GetVisualState().mnPageId,
- FromCoreIndex(pDescriptor->GetPage()->GetPageNum()),
- pDescriptor->GetPage());
- }
- else
- {
- OSL_TRACE("%d", nIndex);
- }
- }
-
- return true;
- }
- bool CheckModel (const SlideSorterModel& rModel)
- {
- for (sal_Int32 nIndex=0,nCount=rModel.GetPageCount(); nIndex<nCount; ++nIndex)
- {
- SharedPageDescriptor pDescriptor (rModel.GetPageDescriptor(nIndex));
- if ( ! pDescriptor)
- {
- PrintModel(rModel);
- OSL_ASSERT(pDescriptor);
- return false;
- }
- if (nIndex != pDescriptor->GetPageIndex())
- {
- PrintModel(rModel);
- OSL_ASSERT(nIndex == pDescriptor->GetPageIndex());
- return false;
- }
- if (nIndex != pDescriptor->GetVisualState().mnPageId)
- {
- PrintModel(rModel);
- OSL_ASSERT(nIndex == pDescriptor->GetVisualState().mnPageId);
- return false;
- }
- }
-
- return true;
- }
-}
-
-
-
-
-SlideSorterModel::SlideSorterModel (SlideSorter& rSlideSorter)
- : maMutex(),
- mrSlideSorter(rSlideSorter),
- mxSlides(),
- mePageKind(PK_STANDARD),
- meEditMode(EM_PAGE),
- maPageDescriptors(0)
-{
-}
-
-
-
-
-SlideSorterModel::~SlideSorterModel (void)
-{
- ClearDescriptorList ();
-}
-
-
-
-
-void SlideSorterModel::Init (void)
-{
-}
-
-
-
-
-void SlideSorterModel::Dispose (void)
-{
- ClearDescriptorList ();
-}
-
-
-
-
-SdDrawDocument* SlideSorterModel::GetDocument (void)
-{
- if (mrSlideSorter.GetViewShellBase() != NULL)
- return mrSlideSorter.GetViewShellBase()->GetDocument();
- else
- return NULL;
-}
-
-
-
-
-bool SlideSorterModel::SetEditMode (EditMode eEditMode)
-{
- bool bEditModeChanged = false;
- if (meEditMode != eEditMode)
- {
- meEditMode = eEditMode;
- UpdatePageList();
- ClearDescriptorList();
- bEditModeChanged = true;
- }
- return bEditModeChanged;
-}
-
-
-
-
-EditMode SlideSorterModel::GetEditMode (void) const
-{
- return meEditMode;
-}
-
-
-
-
-PageKind SlideSorterModel::GetPageType (void) const
-{
- return mePageKind;
-}
-
-
-
-
-sal_Int32 SlideSorterModel::GetPageCount (void) const
-{
- return maPageDescriptors.size();
-}
-
-
-
-
-SharedPageDescriptor SlideSorterModel::GetPageDescriptor (
- const sal_Int32 nPageIndex,
- const bool bCreate) const
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- SharedPageDescriptor pDescriptor;
-
- if (nPageIndex>=0 && nPageIndex<GetPageCount())
- {
- pDescriptor = maPageDescriptors[nPageIndex];
- if (pDescriptor == NULL && bCreate && mxSlides.is())
- {
- SdPage* pPage = GetPage(nPageIndex);
- pDescriptor.reset(new PageDescriptor (
- Reference<drawing::XDrawPage>(mxSlides->getByIndex(nPageIndex),UNO_QUERY),
- pPage,
- nPageIndex));
- maPageDescriptors[nPageIndex] = pDescriptor;
- }
- }
-
- return pDescriptor;
-}
-
-
-
-
-sal_Int32 SlideSorterModel::GetIndex (const Reference<drawing::XDrawPage>& rxSlide) const
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- // First try to guess the right index.
- Reference<beans::XPropertySet> xSet (rxSlide, UNO_QUERY);
- if (xSet.is())
- {
- try
- {
- const Any aNumber (xSet->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Number"))));
- sal_Int16 nNumber (-1);
- aNumber >>= nNumber;
- nNumber -= 1;
- SharedPageDescriptor pDescriptor (GetPageDescriptor(nNumber, false));
- if (pDescriptor.get() != NULL
- && pDescriptor->GetXDrawPage() == rxSlide)
- {
- return nNumber;
- }
- }
- catch (uno::Exception&)
- {
- DBG_UNHANDLED_EXCEPTION();
- }
- }
-
- // Guess was wrong, iterate over all slides and search for the right
- // one.
- const sal_Int32 nCount (maPageDescriptors.size());
- for (sal_Int32 nIndex=0; nIndex<nCount; ++nIndex)
- {
- SharedPageDescriptor pDescriptor (maPageDescriptors[nIndex]);
-
- // Make sure that the descriptor exists. Without it the given slide
- // can not be found.
- if (pDescriptor.get() == NULL)
- {
- // Call GetPageDescriptor() to create the missing descriptor.
- pDescriptor = GetPageDescriptor(nIndex,true);
- }
-
- if (pDescriptor->GetXDrawPage() == rxSlide)
- return nIndex;
- }
-
- return -1;
-}
-
-
-
-
-sal_Int32 SlideSorterModel::GetIndex (const SdrPage* pPage) const
-{
- if (pPage == NULL)
- return -1;
-
- ::osl::MutexGuard aGuard (maMutex);
-
- // First try to guess the right index.
- sal_Int16 nNumber ((pPage->GetPageNum()-1)/2);
- SharedPageDescriptor pDescriptor (GetPageDescriptor(nNumber, false));
- if (pDescriptor.get() != NULL
- && pDescriptor->GetPage() == pPage)
- {
- return nNumber;
- }
-
- // Guess was wrong, iterate over all slides and search for the right
- // one.
- const sal_Int32 nCount (maPageDescriptors.size());
- for (sal_Int32 nIndex=0; nIndex<nCount; ++nIndex)
- {
- pDescriptor = maPageDescriptors[nIndex];
-
- // Make sure that the descriptor exists. Without it the given slide
- // can not be found.
- if (pDescriptor.get() == NULL)
- {
- // Call GetPageDescriptor() to create the missing descriptor.
- pDescriptor = GetPageDescriptor(nIndex, true);
- }
-
- if (pDescriptor->GetPage() == pPage)
- return nIndex;
- }
-
- return -1;
-}
-
-
-
-
-sal_uInt16 SlideSorterModel::GetCoreIndex (const sal_Int32 nIndex) const
-{
- SharedPageDescriptor pDescriptor (GetPageDescriptor(nIndex));
- if (pDescriptor)
- return pDescriptor->GetPage()->GetPageNum();
- else
- return mxSlides->getCount()*2+1;
-}
-
-
-
-
-/** For now this method uses a trivial algorithm: throw away all descriptors
- and create them anew (on demand). The main problem that we are facing
- when designing a better algorithm is that we can not compare pointers to
- pages stored in the PageDescriptor objects and those obtained from the
- document: pages may have been deleted and others may have been created
- at the exact same memory locations.
-*/
-void SlideSorterModel::Resync (void)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- // Check if document and this model really differ.
- bool bIsUpToDate (true);
- SdDrawDocument* pDocument = GetDocument();
- if (pDocument!=NULL && maPageDescriptors.size()==pDocument->GetSdPageCount(mePageKind))
- {
- for (sal_Int32 nIndex=0,nCount=maPageDescriptors.size(); nIndex<nCount; ++nIndex)
- {
- if (maPageDescriptors[nIndex]
- && maPageDescriptors[nIndex]->GetPage()
- != GetPage(nIndex))
- {
- OSL_TRACE("page %d differs\n", nIndex);
- bIsUpToDate = false;
- break;
- }
- }
- }
- else
- {
- bIsUpToDate = false;
- OSL_TRACE("models differ");
- }
-
- if ( ! bIsUpToDate)
- {
- SynchronizeDocumentSelection(); // Try to make the current selection persistent.
- ClearDescriptorList ();
- AdaptSize();
- SynchronizeModelSelection();
- mrSlideSorter.GetController().GetPageSelector().CountSelectedPages();
- }
- CheckModel(*this);
-}
-
-
-
-
-void SlideSorterModel::ClearDescriptorList (void)
-{
- DescriptorContainer aDescriptors;
-
- {
- ::osl::MutexGuard aGuard (maMutex);
- aDescriptors.swap(maPageDescriptors);
- }
-
- for (DescriptorContainer::iterator iDescriptor=aDescriptors.begin(), iEnd=aDescriptors.end();
- iDescriptor!=iEnd;
- ++iDescriptor)
- {
- if (iDescriptor->get() != NULL)
- {
- if ( ! iDescriptor->unique())
- {
- OSL_TRACE("SlideSorterModel::ClearDescriptorList: trying to delete page descriptor that is still used with count %d", iDescriptor->use_count());
- // No assertion here because that can hang the office when
- // opening a dialog from here.
- }
- iDescriptor->reset();
- }
- }
-}
-
-
-
-
-void SlideSorterModel::SynchronizeDocumentSelection (void)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- PageEnumeration aAllPages (PageEnumerationProvider::CreateAllPagesEnumeration(*this));
- while (aAllPages.HasMoreElements())
- {
- SharedPageDescriptor pDescriptor (aAllPages.GetNextElement());
- pDescriptor->GetPage()->SetSelected(pDescriptor->HasState(PageDescriptor::ST_Selected));
- }
-}
-
-
-
-
-void SlideSorterModel::SynchronizeModelSelection (void)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- PageEnumeration aAllPages (PageEnumerationProvider::CreateAllPagesEnumeration(*this));
- while (aAllPages.HasMoreElements())
- {
- SharedPageDescriptor pDescriptor (aAllPages.GetNextElement());
- pDescriptor->SetState(PageDescriptor::ST_Selected, pDescriptor->GetPage()->IsSelected());
- }
-}
-
-
-
-
-::osl::Mutex& SlideSorterModel::GetMutex (void)
-{
- return maMutex;
-}
-
-
-
-
-void SlideSorterModel::SetDocumentSlides (
- const Reference<container::XIndexAccess>& rxSlides)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- // Reset the current page so to cause everbody to release references to it.
- mrSlideSorter.GetController().GetCurrentSlideManager()->NotifyCurrentSlideChange(-1);
-
- mxSlides = rxSlides;
- Resync();
-
- ViewShell* pViewShell = mrSlideSorter.GetViewShell();
- if (pViewShell != NULL)
- {
- SdPage* pPage = pViewShell->getCurrentPage();
- if (pPage != NULL)
- mrSlideSorter.GetController().GetCurrentSlideManager()->NotifyCurrentSlideChange(
- pPage);
- else
- {
- // No current page. This can only be when the slide sorter is
- // the main view shell. Get current slide form frame view.
- const FrameView* pFrameView = pViewShell->GetFrameView();
- if (pFrameView != NULL)
- mrSlideSorter.GetController().GetCurrentSlideManager()->NotifyCurrentSlideChange(
- pFrameView->GetSelectedPage());
- else
- {
- // No frame view. As a last resort use the first slide as
- // current slide.
- mrSlideSorter.GetController().GetCurrentSlideManager()->NotifyCurrentSlideChange(
- sal_Int32(0));
- }
- }
- }
-
- mrSlideSorter.GetController().GetSlotManager()->NotifyEditModeChange();
-}
-
-
-
-
-Reference<container::XIndexAccess> SlideSorterModel::GetDocumentSlides (void) const
-{
- ::osl::MutexGuard aGuard (maMutex);
- return mxSlides;
-}
-
-
-
-
-void SlideSorterModel::UpdatePageList (void)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- Reference<container::XIndexAccess> xPages;
-
- // Get the list of pages according to the edit mode.
- Reference<frame::XController> xController (mrSlideSorter.GetXController());
- if (xController.is())
- {
- switch (meEditMode)
- {
- case EM_MASTERPAGE:
- {
- Reference<drawing::XMasterPagesSupplier> xSupplier (
- xController->getModel(), UNO_QUERY);
- if (xSupplier.is())
- {
- xPages = Reference<container::XIndexAccess>(
- xSupplier->getMasterPages(), UNO_QUERY);
- }
- }
- break;
-
- case EM_PAGE:
- {
- Reference<drawing::XDrawPagesSupplier> xSupplier (
- xController->getModel(), UNO_QUERY);
- if (xSupplier.is())
- {
- xPages = Reference<container::XIndexAccess>(
- xSupplier->getDrawPages(), UNO_QUERY);
- }
- }
- break;
-
- default:
- // We should never get here.
- OSL_ASSERT(false);
- break;
- }
- }
-
- mrSlideSorter.GetController().SetDocumentSlides(xPages);
-}
-
-
-
-
-void SlideSorterModel::AdaptSize (void)
-{
- if (mxSlides.is())
- maPageDescriptors.resize(mxSlides->getCount());
- else
- maPageDescriptors.resize(0);
-}
-
-
-
-
-bool SlideSorterModel::IsReadOnly (void) const
-{
- if (mrSlideSorter.GetViewShellBase() != NULL
- && mrSlideSorter.GetViewShellBase()->GetDocShell())
- return mrSlideSorter.GetViewShellBase()->GetDocShell()->IsReadOnly();
- else
- return true;
-}
-
-
-
-
-void SlideSorterModel::SaveCurrentSelection (void)
-{
- PageEnumeration aPages (PageEnumerationProvider::CreateAllPagesEnumeration(*this));
- while (aPages.HasMoreElements())
- {
- SharedPageDescriptor pDescriptor (aPages.GetNextElement());
- pDescriptor->SetState(
- PageDescriptor::ST_WasSelected,
- pDescriptor->HasState(PageDescriptor::ST_Selected));
- }
-}
-
-
-
-
-Region SlideSorterModel::RestoreSelection (void)
-{
- Region aRepaintRegion;
- PageEnumeration aPages (PageEnumerationProvider::CreateAllPagesEnumeration(*this));
- while (aPages.HasMoreElements())
- {
- SharedPageDescriptor pDescriptor (aPages.GetNextElement());
- if (pDescriptor->SetState(
- PageDescriptor::ST_Selected,
- pDescriptor->HasState(PageDescriptor::ST_WasSelected)))
- {
- aRepaintRegion.Union(pDescriptor->GetBoundingBox());
- }
- }
- return aRepaintRegion;
-}
-
-
-
-
-bool SlideSorterModel::NotifyPageEvent (const SdrPage* pSdrPage)
-{
- ::osl::MutexGuard aGuard (maMutex);
-
- SdPage* pPage = const_cast<SdPage*>(dynamic_cast<const SdPage*>(pSdrPage));
- if (pPage == NULL)
- return false;
-
- // We are only interested in pages that are currently served by this
- // model.
- if (pPage->GetPageKind() != mePageKind)
- return false;
- if (pPage->IsMasterPage() != (meEditMode==EM_MASTERPAGE))
- return false;
-
- if (pPage->IsInserted())
- InsertSlide(pPage);
- else
- DeleteSlide(pPage);
- CheckModel(*this);
-
- return true;
-}
-
-
-
-
-void SlideSorterModel::InsertSlide (SdPage* pPage)
-{
- // Find the index at which to insert the given page.
- sal_uInt16 nCoreIndex (pPage->GetPageNum());
- sal_Int32 nIndex (FromCoreIndex(nCoreIndex));
- if (pPage != GetPage(nIndex))
- return;
-
- // Check that the pages in the document before and after the given page
- // are present in this model.
- if (nIndex>0)
- if (GetPage(nIndex-1) != GetPageDescriptor(nIndex-1)->GetPage())
- return;
- if (size_t(nIndex)<maPageDescriptors.size()-1)
- if (GetPage(nIndex+1) != GetPageDescriptor(nIndex)->GetPage())
- return;
-
- // Insert the given page at index nIndex
- maPageDescriptors.insert(
- maPageDescriptors.begin()+nIndex,
- SharedPageDescriptor(
- new PageDescriptor (
- Reference<drawing::XDrawPage>(mxSlides->getByIndex(nIndex),UNO_QUERY),
- pPage,
- nIndex)));
-
- // Update page indices.
- UpdateIndices(nIndex+1);
- OSL_TRACE("page inserted");
-}
-
-
-
-
-void SlideSorterModel::DeleteSlide (const SdPage* pPage)
-{
- const sal_Int32 nIndex (GetIndex(pPage));
- if (maPageDescriptors[nIndex])
- if (maPageDescriptors[nIndex]->GetPage() != pPage)
- return;
-
- maPageDescriptors.erase(maPageDescriptors.begin()+nIndex);
- UpdateIndices(nIndex);
- OSL_TRACE("page removed");
-}
-
-
-
-
-void SlideSorterModel::UpdateIndices (const sal_Int32 nFirstIndex)
-{
- for (sal_Int32 nDescriptorIndex=0,nCount=maPageDescriptors.size();
- nDescriptorIndex<nCount;
- ++nDescriptorIndex)
- {
- SharedPageDescriptor& rpDescriptor (maPageDescriptors[nDescriptorIndex]);
- if (rpDescriptor)
- {
- if (nDescriptorIndex < nFirstIndex)
- {
- if (rpDescriptor->GetPageIndex()!=nDescriptorIndex)
- {
- OSL_ASSERT(rpDescriptor->GetPageIndex()==nDescriptorIndex);
- }
- }
- else
- {
- rpDescriptor->SetPageIndex(nDescriptorIndex);
- }
- }
- }
-}
-
-
-
-
-SdPage* SlideSorterModel::GetPage (const sal_Int32 nSdIndex) const
-{
- SdDrawDocument* pModel = const_cast<SlideSorterModel*>(this)->GetDocument();
- if (pModel != NULL)
- {
- if (meEditMode == EM_PAGE)
- return pModel->GetSdPage ((sal_uInt16)nSdIndex, mePageKind);
- else
- return pModel->GetMasterSdPage ((sal_uInt16)nSdIndex, mePageKind);
- }
- else
- return NULL;
-}
-
-
-} } } // end of namespace ::sd::slidesorter::model
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/model/SlsPageDescriptor.cxx b/sd/source/ui/slidesorter/model/SlsPageDescriptor.cxx
deleted file mode 100644
index 32224f38c..000000000
--- a/sd/source/ui/slidesorter/model/SlsPageDescriptor.cxx
+++ /dev/null
@@ -1,292 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include "model/SlsPageDescriptor.hxx"
-
-#include "sdpage.hxx"
-#include "drawdoc.hxx"
-
-#include <svx/svdopage.hxx>
-#include <svx/svdpagv.hxx>
-#include <svx/sdr/contact/viewcontact.hxx>
-#include <svx/sdr/contact/viewobjectcontact.hxx>
-
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star;
-
-namespace sd { namespace slidesorter { namespace model {
-
-
-PageDescriptor::PageDescriptor (
- const Reference<drawing::XDrawPage>& rxPage,
- SdPage* pPage,
- const sal_Int32 nIndex)
- : mpPage(pPage),
- mxPage(rxPage),
- mpMasterPage(NULL),
- mnIndex(nIndex),
- maBoundingBox(),
- maVisualState(nIndex),
- mbIsSelected(false),
- mbWasSelected(false),
- mbIsVisible(false),
- mbIsFocused(false),
- mbIsCurrent(false),
- mbIsMouseOver(false)
-{
- OSL_ASSERT(mpPage);
- OSL_ASSERT(mpPage == SdPage::getImplementation(rxPage));
- if (mpPage!=NULL && mpPage->TRG_HasMasterPage())
- mpMasterPage = &mpPage->TRG_GetMasterPage();
-}
-
-
-
-
-PageDescriptor::~PageDescriptor (void)
-{
-}
-
-
-
-
-SdPage* PageDescriptor::GetPage (void) const
-{
- return mpPage;
-}
-
-
-
-
-Reference<drawing::XDrawPage> PageDescriptor::GetXDrawPage (void) const
-{
- return mxPage;
-}
-
-
-
-
-sal_Int32 PageDescriptor::GetPageIndex (void) const
-{
- return mnIndex;
-}
-
-
-
-
-void PageDescriptor::SetPageIndex (const sal_Int32 nNewIndex)
-{
- mnIndex = nNewIndex;
- maVisualState.mnPageId = nNewIndex;
-}
-
-
-
-
-bool PageDescriptor::UpdateMasterPage (void)
-{
- const SdrPage* pMaster = NULL;
- if (mpPage!=NULL && mpPage->TRG_HasMasterPage())
- pMaster = &mpPage->TRG_GetMasterPage();
- if (mpMasterPage != pMaster)
- {
- mpMasterPage = pMaster;
- return true;
- }
- else
- return false;
-}
-
-
-
-
-bool PageDescriptor::HasState (const State eState) const
-{
- switch (eState)
- {
- case ST_Visible:
- return mbIsVisible;
-
- case ST_Selected:
- return mbIsSelected;
-
- case ST_WasSelected:
- return mbWasSelected;
-
- case ST_Focused:
- return mbIsFocused;
-
- case ST_MouseOver:
- return mbIsMouseOver;
-
- case ST_Current:
- return mbIsCurrent;
-
- case ST_Excluded:
- return mpPage!=NULL && mpPage->IsExcluded();
-
- default:
- OSL_ASSERT(false);
- return false;
- }
-}
-
-
-
-
-bool PageDescriptor::SetState (const State eState, const bool bNewStateValue)
-{
- bool bModified (false);
- switch (eState)
- {
- case ST_Visible:
- bModified = (bNewStateValue!=mbIsVisible);
- if (bModified)
- mbIsVisible = bNewStateValue;
- break;
-
- case ST_Selected:
- bModified = (bNewStateValue!=mbIsSelected);
- if (bModified)
- mbIsSelected = bNewStateValue;
- break;
-
- case ST_WasSelected:
- bModified = (bNewStateValue!=mbWasSelected);
- if (bModified)
- mbWasSelected = bNewStateValue;
- break;
-
- case ST_Focused:
- bModified = (bNewStateValue!=mbIsFocused);
- if (bModified)
- mbIsFocused = bNewStateValue;
- break;
-
- case ST_MouseOver:
- bModified = (bNewStateValue!=mbIsMouseOver);
- if (bModified)
- mbIsMouseOver = bNewStateValue;
- break;
-
- case ST_Current:
- bModified = (bNewStateValue!=mbIsCurrent);
- if (bModified)
- mbIsCurrent = bNewStateValue;
- break;
-
- case ST_Excluded:
- // This is a state of the page and has to be handled differently
- // from the view-only states.
- if (mpPage != NULL)
- if (bNewStateValue != (mpPage->IsExcluded()==sal_True))
- {
- mpPage->SetExcluded(bNewStateValue);
- bModified = true;
- }
- break;
- }
-
- if (bModified)
- maVisualState.UpdateVisualState(*this);
- return bModified;
-}
-
-
-
-
-VisualState& PageDescriptor::GetVisualState (void)
-{
- return maVisualState;
-}
-
-
-
-
-bool PageDescriptor::GetCoreSelection (void)
-{
- if (mpPage!=NULL && (mpPage->IsSelected()==sal_True) != mbIsSelected)
- return SetState(ST_Selected, !mbIsSelected);
- else
- return false;
-}
-
-
-
-
-void PageDescriptor::SetCoreSelection (void)
-{
- if (mpPage != NULL)
- if (HasState(ST_Selected))
- mpPage->SetSelected(sal_True);
- else
- mpPage->SetSelected(sal_False);
- else
- {
- OSL_ASSERT(mpPage!=NULL);
- }
-}
-
-
-
-
-Rectangle PageDescriptor::GetBoundingBox (void) const
-{
- Rectangle aBox (maBoundingBox);
- const Point aOffset (maVisualState.GetLocationOffset());
- aBox.Move(aOffset.X(), aOffset.Y());
- return aBox;
-}
-
-
-
-
-Point PageDescriptor::GetLocation (const bool bIgnoreOffset) const
-{
- if (bIgnoreOffset)
- return maBoundingBox.TopLeft();
- else
- return maBoundingBox.TopLeft() + maVisualState.GetLocationOffset();
-}
-
-
-
-
-void PageDescriptor::SetBoundingBox (const Rectangle& rBoundingBox)
-{
- maBoundingBox = rBoundingBox;
-}
-
-
-
-} } } // end of namespace ::sd::slidesorter::model
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/model/SlsPageEnumeration.cxx b/sd/source/ui/slidesorter/model/SlsPageEnumeration.cxx
deleted file mode 100644
index 797175cb8..000000000
--- a/sd/source/ui/slidesorter/model/SlsPageEnumeration.cxx
+++ /dev/null
@@ -1,286 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageDescriptor.hxx"
-
-using namespace ::sd::slidesorter;
-using namespace ::sd::slidesorter::model;
-
-namespace {
-
-class PageEnumerationImpl
- : public Enumeration<SharedPageDescriptor>
-{
-public:
- inline PageEnumerationImpl (
- const SlideSorterModel& rModel,
- const PageEnumeration::PagePredicate& rPredicate);
- virtual ~PageEnumerationImpl (void);
- /** Create a copy of the called enumeration object.
- */
- virtual inline ::std::auto_ptr<Enumeration<SharedPageDescriptor> > Clone (void);
-
- virtual inline bool HasMoreElements (void) const;
- virtual inline SharedPageDescriptor GetNextElement (void);
- virtual inline void Rewind (void);
-
-private:
- const SlideSorterModel& mrModel;
- const PageEnumeration::PagePredicate maPredicate;
- int mnIndex;
-
- /** This constructor sets the internal page index to the given value.
- It does not call AdvanceToNextValidElement() to skip elements that
- do not fullfill Predicate.
- */
- inline PageEnumerationImpl (
- const SlideSorterModel& rModel,
- const PageEnumeration::PagePredicate& rPredicate,
- int nIndex);
-
- /** Skip all elements that do not fullfill Predicate starting with the
- one pointed to by mnIndex.
- */
- inline void AdvanceToNextValidElement (void);
-
- // Default constructor not implemented.
- PageEnumerationImpl (void);
- // Assignment operator not implemented.
- PageEnumerationImpl& operator= (const PageEnumerationImpl&);
-};
-
-} // end of anonymouse namespace
-
-
-
-
-namespace sd { namespace slidesorter { namespace model {
-
-
-PageEnumeration PageEnumeration::Create (
- const SlideSorterModel& rModel,
- const PagePredicate& rPredicate)
-{
- return PageEnumeration(::std::auto_ptr<Enumeration<SharedPageDescriptor> >(
- new PageEnumerationImpl(rModel, rPredicate)));
-}
-
-
-
-
-PageEnumeration::PageEnumeration (
- ::std::auto_ptr<Enumeration<SharedPageDescriptor> > pImpl)
- : mpImpl(pImpl)
-{
-}
-
-
-
-
-PageEnumeration::PageEnumeration (
- PageEnumeration& rEnumeration,
- bool bCloneImpl)
-{
-
- if( bCloneImpl )
- {
- mpImpl = rEnumeration.mpImpl->Clone();
- }
- else
- {
- mpImpl = rEnumeration.mpImpl;
- }
-}
-
-
-
-
-PageEnumeration::PageEnumeration (const PageEnumeration& rEnumeration )
-: sd::slidesorter::model::Enumeration<sd::slidesorter::model::SharedPageDescriptor>()
-{
- mpImpl = rEnumeration.mpImpl->Clone();
-}
-
-
-
-
-PageEnumeration::~PageEnumeration (void)
-{
-}
-
-
-
-
-PageEnumeration& PageEnumeration::operator= (
- const PageEnumeration& rEnumeration)
-{
- mpImpl = rEnumeration.mpImpl->Clone();
- return *this;
-}
-
-
-
-
-::std::auto_ptr<Enumeration<SharedPageDescriptor> > PageEnumeration::Clone (void)
-{
- return ::std::auto_ptr<Enumeration<SharedPageDescriptor> >(
- new PageEnumeration (*this, true));
-}
-
-
-
-
-bool PageEnumeration::HasMoreElements (void) const
-{
- return mpImpl->HasMoreElements();
-}
-
-
-
-SharedPageDescriptor PageEnumeration::GetNextElement (void)
-{
- return mpImpl->GetNextElement();
-}
-
-
-
-
-void PageEnumeration::Rewind (void)
-{
- return mpImpl->Rewind();
-}
-
-} } } // end of namespace ::sd::slidesorter::model
-
-
-
-
-namespace {
-
-PageEnumerationImpl::PageEnumerationImpl (
- const SlideSorterModel& rModel,
- const PageEnumeration::PagePredicate& rPredicate)
- : mrModel(rModel),
- maPredicate(rPredicate),
- mnIndex(0)
-{
- Rewind();
-}
-
-
-
-
-PageEnumerationImpl::PageEnumerationImpl (
- const SlideSorterModel& rModel,
- const PageEnumeration::PagePredicate& rPredicate,
- int nIndex)
- : mrModel(rModel),
- maPredicate(rPredicate),
- mnIndex(nIndex)
-{
-}
-
-
-
-
-PageEnumerationImpl::~PageEnumerationImpl (void)
-{
-}
-
-
-
-
-::std::auto_ptr<Enumeration<SharedPageDescriptor> >
- PageEnumerationImpl::Clone (void)
-{
- return ::std::auto_ptr<Enumeration<SharedPageDescriptor> >(
- new PageEnumerationImpl(mrModel,maPredicate,mnIndex));
-}
-
-
-
-
-bool PageEnumerationImpl::HasMoreElements (void) const
-{
- return (mnIndex < mrModel.GetPageCount());
-}
-
-
-
-
-SharedPageDescriptor PageEnumerationImpl::GetNextElement (void)
-{
- SharedPageDescriptor pDescriptor (mrModel.GetPageDescriptor(mnIndex));
-
- // Go to the following valid element.
- mnIndex += 1;
- AdvanceToNextValidElement();
-
- return pDescriptor;
-}
-
-
-
-
-void PageEnumerationImpl::Rewind (void)
-{
- // Go to first valid element.
- mnIndex = 0;
- AdvanceToNextValidElement();
-}
-
-
-
-
-
-void PageEnumerationImpl::AdvanceToNextValidElement (void)
-{
- while (mnIndex < mrModel.GetPageCount())
- {
- SharedPageDescriptor pDescriptor (mrModel.GetPageDescriptor(mnIndex));
-
- // Test for the predicate being fullfilled.
- if (pDescriptor.get()!=NULL && maPredicate(pDescriptor))
- {
- // This predicate is valid.
- break;
- }
- else
- {
- // Advance to next predicate.
- mnIndex += 1;
- }
- }
-}
-
-} // end of anonymous namespace
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/model/SlsPageEnumerationProvider.cxx b/sd/source/ui/slidesorter/model/SlsPageEnumerationProvider.cxx
deleted file mode 100644
index fc62c3b58..000000000
--- a/sd/source/ui/slidesorter/model/SlsPageEnumerationProvider.cxx
+++ /dev/null
@@ -1,112 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "model/SlsPageEnumerationProvider.hxx"
-#include "model/SlsPageEnumeration.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include <boost/function.hpp>
-
-namespace sd { namespace slidesorter { namespace model {
-
-
-namespace {
-
-class AllPagesPredicate
-{
-public:
- bool operator() (const SharedPageDescriptor& rpDescriptor) const
- {
- (void)rpDescriptor;
- return true;
- }
-};
-
-
-
-
-
-class SelectedPagesPredicate
-{
-public:
- bool operator() (const SharedPageDescriptor& rpDescriptor)
- {
- return rpDescriptor->HasState(PageDescriptor::ST_Selected);
- }
-};
-
-
-
-
-class VisiblePagesPredicate
-{
-public:
- bool operator() (const SharedPageDescriptor& rpDescriptor)
- {
- return rpDescriptor->HasState(PageDescriptor::ST_Visible);
- }
-};
-
-}
-
-
-
-
-PageEnumeration PageEnumerationProvider::CreateAllPagesEnumeration (
- const SlideSorterModel& rModel)
-{
- return PageEnumeration::Create(rModel, AllPagesPredicate());
-}
-
-
-
-
-PageEnumeration PageEnumerationProvider::CreateSelectedPagesEnumeration (
- const SlideSorterModel& rModel)
-{
- return PageEnumeration::Create(
- rModel,
- SelectedPagesPredicate());
-}
-
-
-
-
-PageEnumeration PageEnumerationProvider::CreateVisiblePagesEnumeration (
- const SlideSorterModel& rModel)
-{
- return PageEnumeration::Create(
- rModel,
- VisiblePagesPredicate());
-}
-
-
-} } } // end of namespace ::sd::slidesorter::model
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/model/SlsVisualState.cxx b/sd/source/ui/slidesorter/model/SlsVisualState.cxx
deleted file mode 100644
index 20f3a4f08..000000000
--- a/sd/source/ui/slidesorter/model/SlsVisualState.cxx
+++ /dev/null
@@ -1,236 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "model/SlsVisualState.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "controller/SlsAnimator.hxx"
-
-namespace sd { namespace slidesorter { namespace model {
-
-VisualState::VisualState (const sal_Int32 nPageId)
- : mnPageId(nPageId),
- meCurrentVisualState(VS_None),
- meOldVisualState(VS_None),
- mnVisualStateBlend(1.0),
- mnStateAnimationId(controller::Animator::NotAnAnimationId),
- maLocationOffset(0,0),
- mnLocationAnimationId(controller::Animator::NotAnAnimationId),
- mnButtonAlpha(1.0),
- mnButtonBarAlpha(1.0),
- mnButtonAlphaAnimationId(controller::Animator::NotAnAnimationId)
-{
-}
-
-
-
-
-VisualState::~VisualState (void)
-{
- if (mnStateAnimationId != controller::Animator::NotAnAnimationId
- || mnLocationAnimationId != controller::Animator::NotAnAnimationId)
- {
- OSL_ASSERT(mnStateAnimationId == controller::Animator::NotAnAnimationId);
- OSL_ASSERT(mnLocationAnimationId == controller::Animator::NotAnAnimationId);
- }
-}
-
-
-
-
-VisualState::State VisualState::GetCurrentVisualState (void) const
-{
- return meCurrentVisualState;
-}
-
-
-
-
-VisualState::State VisualState::GetOldVisualState (void) const
-{
- return meOldVisualState;
-}
-
-
-
-
-void VisualState::SetVisualState (const State eState)
-{
- meOldVisualState = meCurrentVisualState;
- meCurrentVisualState = eState;
- mnVisualStateBlend = 1.0;
-}
-
-
-
-
-double VisualState::GetVisualStateBlend (void) const
-{
- return mnVisualStateBlend;
-}
-
-
-
-
-void VisualState::SetVisualStateBlend (const double nBlend)
-{
- mnVisualStateBlend = nBlend;
-}
-
-
-
-
-void VisualState::UpdateVisualState (const PageDescriptor& rDescriptor)
-{
- if (rDescriptor.HasState(PageDescriptor::ST_Excluded))
- SetVisualState(VS_Excluded);
- else if (rDescriptor.HasState(PageDescriptor::ST_Current))
- SetVisualState(VS_Current);
- else if (rDescriptor.HasState(PageDescriptor::ST_Focused))
- SetVisualState(VS_Focused);
- else if (rDescriptor.HasState(PageDescriptor::ST_Selected))
- SetVisualState(VS_Selected);
- else
- SetVisualState(VS_None);
-
- SetMouseOverState(rDescriptor.HasState(PageDescriptor::ST_MouseOver));
-}
-
-
-
-
-void VisualState::SetMouseOverState (const bool bIsMouseOver)
-{
- mbOldMouseOverState = mbCurrentMouseOverState;
- mbCurrentMouseOverState = bIsMouseOver;
-}
-
-
-
-
-sal_Int32 VisualState::GetStateAnimationId (void) const
-{
- return mnStateAnimationId;
-}
-
-
-
-
-void VisualState::SetStateAnimationId (const sal_Int32 nAnimationId)
-{
- mnStateAnimationId = nAnimationId;
-}
-
-
-
-
-Point VisualState::GetLocationOffset (void) const
-{
- return maLocationOffset;
-}
-
-
-
-
-bool VisualState::SetLocationOffset (const Point& rOffset)
-{
- if (maLocationOffset != rOffset)
- {
- maLocationOffset = rOffset;
- return true;
- }
- else
- return false;
-}
-
-
-
-
-sal_Int32 VisualState::GetLocationAnimationId (void) const
-{
- return mnLocationAnimationId;
-}
-
-
-
-
-void VisualState::SetLocationAnimationId (const sal_Int32 nAnimationId)
-{
- mnLocationAnimationId = nAnimationId;
-}
-
-
-
-
-double VisualState::GetButtonAlpha (void) const
-{
- return mnButtonAlpha;
-}
-
-
-
-
-void VisualState::SetButtonAlpha (const double nAlpha)
-{
- mnButtonAlpha = nAlpha;
-}
-
-
-
-
-double VisualState::GetButtonBarAlpha (void) const
-{
- return mnButtonBarAlpha;
-}
-
-
-
-
-void VisualState::SetButtonBarAlpha (const double nAlpha)
-{
- mnButtonBarAlpha = nAlpha;
-}
-
-
-
-
-sal_Int32 VisualState::GetButtonAlphaAnimationId (void) const
-{
- return mnButtonAlphaAnimationId;
-}
-
-
-
-
-void VisualState::SetButtonAlphaAnimationId (const sal_Int32 nAnimationId)
-{
- mnButtonAlphaAnimationId = nAnimationId;
-}
-
-
-} } } // end of namespace ::sd::slidesorter::model
diff --git a/sd/source/ui/slidesorter/shell/SlideSorter.cxx b/sd/source/ui/slidesorter/shell/SlideSorter.cxx
deleted file mode 100644
index 89d38a715..000000000
--- a/sd/source/ui/slidesorter/shell/SlideSorter.cxx
+++ /dev/null
@@ -1,703 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlideSorter.hxx"
-
-#include "SlideSorterChildWindow.hrc"
-#include "SlideSorterViewShell.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsScrollBarManager.hxx"
-#include "controller/SlsProperties.hxx"
-#include "controller/SlsAnimator.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsTheme.hxx"
-#include "model/SlideSorterModel.hxx"
-
-#include "glob.hrc"
-#include "DrawController.hxx"
-#include "ViewShellBase.hxx"
-#include "ViewShellManager.hxx"
-#include "Window.hxx"
-
-#include <vcl/scrbar.hxx>
-#include <vcl/svapp.hxx>
-
-#include <sfx2/dispatch.hxx>
-#include "sdresid.hxx"
-
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star;
-
-
-namespace sd { namespace slidesorter {
-
-namespace {
-class ContentWindow : public ::sd::Window
-{
-public:
- ContentWindow(::Window& rParent, SlideSorter& rSlideSorter);
- ~ContentWindow (void);
- void SetCurrentFunction (const FunctionReference& rpFunction);
- virtual void Paint(const Rectangle& rRect);
- virtual void KeyInput (const KeyEvent& rEvent);
- virtual void MouseMove (const MouseEvent& rEvent);
- virtual void MouseButtonUp (const MouseEvent& rEvent);
- virtual void MouseButtonDown (const MouseEvent& rEvent);
- virtual void Command (const CommandEvent& rEvent);
- virtual long Notify (NotifyEvent& rEvent);
-
-private:
- SlideSorter& mrSlideSorter;
- FunctionReference mpCurrentFunction;
-};
-}
-
-
-
-
-//===== SlideSorter ===========================================================
-
-::boost::shared_ptr<SlideSorter> SlideSorter::CreateSlideSorter(
- ViewShell& rViewShell,
- const ::boost::shared_ptr<sd::Window>& rpContentWindow,
- const ::boost::shared_ptr<ScrollBar>& rpHorizontalScrollBar,
- const ::boost::shared_ptr<ScrollBar>& rpVerticalScrollBar,
- const ::boost::shared_ptr<ScrollBarBox>& rpScrollBarBox)
-{
- ::boost::shared_ptr<SlideSorter> pSlideSorter(
- new SlideSorter(
- rViewShell,
- rpContentWindow,
- rpHorizontalScrollBar,
- rpVerticalScrollBar,
- rpScrollBarBox));
- pSlideSorter->Init();
- return pSlideSorter;
-}
-
-
-
-
-::boost::shared_ptr<SlideSorter> SlideSorter::CreateSlideSorter (
- ViewShellBase& rBase,
- ViewShell* pViewShell,
- ::Window& rParentWindow)
-{
- ::boost::shared_ptr<SlideSorter> pSlideSorter(
- new SlideSorter(
- rBase,
- pViewShell,
- rParentWindow));
- pSlideSorter->Init();
- return pSlideSorter;
-}
-
-
-
-
-SlideSorter::SlideSorter (
- ViewShell& rViewShell,
- const ::boost::shared_ptr<sd::Window>& rpContentWindow,
- const ::boost::shared_ptr<ScrollBar>& rpHorizontalScrollBar,
- const ::boost::shared_ptr<ScrollBar>& rpVerticalScrollBar,
- const ::boost::shared_ptr<ScrollBarBox>& rpScrollBarBox)
- : mbIsValid(false),
- mpSlideSorterController(),
- mpSlideSorterModel(),
- mpSlideSorterView(),
- mxControllerWeak(),
- mpViewShell(&rViewShell),
- mpViewShellBase(&rViewShell.GetViewShellBase()),
- mpContentWindow(rpContentWindow),
- mbOwnesContentWindow(false),
- mpHorizontalScrollBar(rpHorizontalScrollBar),
- mpVerticalScrollBar(rpVerticalScrollBar),
- mpScrollBarBox(rpScrollBarBox),
- mbLayoutPending(true),
- mpProperties(new controller::Properties()),
- mpTheme(new view::Theme(mpProperties))
-{
-}
-
-
-
-
-SlideSorter::SlideSorter (
- ViewShellBase& rBase,
- ViewShell* pViewShell,
- ::Window& rParentWindow)
- : mbIsValid(false),
- mpSlideSorterController(),
- mpSlideSorterModel(),
- mpSlideSorterView(),
- mxControllerWeak(),
- mpViewShell(pViewShell),
- mpViewShellBase(&rBase),
- mpContentWindow(new ContentWindow(rParentWindow,*this )),
- mbOwnesContentWindow(true),
- mpHorizontalScrollBar(new ScrollBar(&rParentWindow,WinBits(WB_HSCROLL | WB_DRAG))),
- mpVerticalScrollBar(new ScrollBar(&rParentWindow,WinBits(WB_VSCROLL | WB_DRAG))),
- mpScrollBarBox(new ScrollBarBox(&rParentWindow)),
- mbLayoutPending(true),
- mpProperties(new controller::Properties()),
- mpTheme(new view::Theme(mpProperties))
-{
-}
-
-
-
-
-void SlideSorter::Init (void)
-{
- if (mpViewShellBase != NULL)
- mxControllerWeak = mpViewShellBase->GetController();
-
- // Reinitialize colors in Properties with window specific values.
- if (mpContentWindow)
- {
- mpProperties->SetBackgroundColor(
- mpContentWindow->GetSettings().GetStyleSettings().GetWindowColor());
- mpProperties->SetTextColor(
- mpContentWindow->GetSettings().GetStyleSettings().GetWindowTextColor());
- mpProperties->SetSelectionColor(
- mpContentWindow->GetSettings().GetStyleSettings().GetMenuHighlightColor());
- mpProperties->SetHighlightColor(
- mpContentWindow->GetSettings().GetStyleSettings().GetMenuHighlightColor());
- }
-
- CreateModelViewController ();
-
- SetupListeners ();
-
- // Initialize the window.
- SharedSdWindow pContentWindow (GetContentWindow());
- if (pContentWindow)
- {
- ::Window* pParentWindow = pContentWindow->GetParent();
- if (pParentWindow != NULL)
- pParentWindow->SetBackground(Wallpaper());
- pContentWindow->SetBackground(Wallpaper());
- pContentWindow->SetViewOrigin (Point(0,0));
- // We do our own scrolling while dragging a page selection.
- pContentWindow->SetUseDropScroll (false);
- // Change the winbits so that the active window accepts the focus.
- pContentWindow->SetStyle ((pContentWindow->GetStyle() & ~WB_DIALOGCONTROL) | WB_TABSTOP);
- pContentWindow->Hide();
-
- // Set view pointer of base class.
- SetupControls(pParentWindow);
-
- mbIsValid = true;
- }
-}
-
-
-
-
-SlideSorter::~SlideSorter (void)
-{
- mbIsValid = false;
-
- ReleaseListeners();
-
- // Dispose model, view and controller to avoid calls between them when
- // they are being destructed and one or two of them are already gone.
- mpSlideSorterController->Dispose();
- mpSlideSorterView->Dispose();
- mpSlideSorterModel->Dispose();
-
- // Reset the auto pointers explicitly to control the order of destruction.
- mpSlideSorterController.reset();
- mpSlideSorterView.reset();
- mpSlideSorterModel.reset();
-
- mpHorizontalScrollBar.reset();
- mpVerticalScrollBar.reset();
- mpScrollBarBox.reset();
-
- if (mbOwnesContentWindow)
- {
- OSL_ASSERT(mpContentWindow.unique());
- }
- else
- {
- // Assume that outside this class only the owner holds a reference
- // to the content window.
- OSL_ASSERT(mpContentWindow.use_count()==2);
- }
- mpContentWindow.reset();
-}
-
-
-
-
-bool SlideSorter::IsValid (void) const
-{
- return mbIsValid;
-}
-
-
-
-
-::boost::shared_ptr<ScrollBar> SlideSorter::GetVerticalScrollBar (void) const
-{
- return mpVerticalScrollBar;
-}
-
-
-
-
-
-::boost::shared_ptr<ScrollBar> SlideSorter::GetHorizontalScrollBar (void) const
-{
- return mpHorizontalScrollBar;
-}
-
-
-
-
-::boost::shared_ptr<ScrollBarBox> SlideSorter::GetScrollBarFiller (void) const
-{
- return mpScrollBarBox;
-}
-
-
-
-
-model::SlideSorterModel& SlideSorter::GetModel (void) const
-{
- OSL_ASSERT(mpSlideSorterModel.get()!=NULL);
- return *mpSlideSorterModel;
-}
-
-
-
-
-view::SlideSorterView& SlideSorter::GetView (void) const
-{
- OSL_ASSERT(mpSlideSorterView.get()!=NULL);
- return *mpSlideSorterView;
-}
-
-
-
-
-controller::SlideSorterController& SlideSorter::GetController (void) const
-{
- OSL_ASSERT(mpSlideSorterController.get()!=NULL);
- return *mpSlideSorterController;
-}
-
-
-
-
-Reference<frame::XController> SlideSorter::GetXController (void) const
-{
- Reference<frame::XController> xController(mxControllerWeak);
- return xController;
-}
-
-
-
-
-void SlideSorter::Paint (const Rectangle& rRepaintArea)
-{
- GetController().Paint(
- rRepaintArea,
- GetContentWindow().get());
-}
-
-
-
-
-::SharedSdWindow SlideSorter::GetContentWindow (void) const
-{
- return mpContentWindow;
-}
-
-
-
-
-ViewShellBase* SlideSorter::GetViewShellBase (void) const
-{
- return mpViewShellBase;
-}
-
-
-
-
-ViewShell* SlideSorter::GetViewShell (void) const
-{
- return mpViewShell;
-}
-
-
-
-
-void SlideSorter::SetupControls (::Window* )
-{
- GetVerticalScrollBar()->Show();
- mpSlideSorterController->GetScrollBarManager().LateInitialization();
-}
-
-
-
-
-void SlideSorter::SetupListeners (void)
-{
- SharedSdWindow pWindow (GetContentWindow());
- if (pWindow)
- {
- ::Window* pParentWindow = pWindow->GetParent();
- if (pParentWindow != NULL)
- pParentWindow->AddEventListener(
- LINK(
- mpSlideSorterController.get(),
- controller::SlideSorterController,
- WindowEventHandler));
- pWindow->AddEventListener(
- LINK(
- mpSlideSorterController.get(),
- controller::SlideSorterController,
- WindowEventHandler));
- }
- Application::AddEventListener(
- LINK(
- mpSlideSorterController.get(),
- controller::SlideSorterController,
- WindowEventHandler));
-
- mpSlideSorterController->GetScrollBarManager().Connect();
-}
-
-
-
-
-void SlideSorter::ReleaseListeners (void)
-{
- mpSlideSorterController->GetScrollBarManager().Disconnect();
-
- SharedSdWindow pWindow (GetContentWindow());
- if (pWindow)
- {
- pWindow->RemoveEventListener(
- LINK(mpSlideSorterController.get(),
- controller::SlideSorterController,
- WindowEventHandler));
-
- ::Window* pParentWindow = pWindow->GetParent();
- if (pParentWindow != NULL)
- pParentWindow->RemoveEventListener(
- LINK(mpSlideSorterController.get(),
- controller::SlideSorterController,
- WindowEventHandler));
- }
- Application::RemoveEventListener(
- LINK(mpSlideSorterController.get(),
- controller::SlideSorterController,
- WindowEventHandler));
-}
-
-
-
-
-void SlideSorter::CreateModelViewController (void)
-{
- mpSlideSorterModel.reset(CreateModel());
- DBG_ASSERT (mpSlideSorterModel.get()!=NULL,
- "Can not create model for slide browser");
-
- mpSlideSorterView.reset(CreateView());
- DBG_ASSERT (mpSlideSorterView.get()!=NULL,
- "Can not create view for slide browser");
-
- mpSlideSorterController.reset(CreateController());
- DBG_ASSERT (mpSlideSorterController.get()!=NULL,
- "Can not create controller for slide browser");
-
- // Now that model, view, and controller are constructed, do the
- // initialization that relies on all three being in place.
- mpSlideSorterModel->Init();
- mpSlideSorterController->Init();
- mpSlideSorterView->Init();
-}
-
-
-
-
-model::SlideSorterModel* SlideSorter::CreateModel (void)
-{
- // Get pointers to the document.
- ViewShellBase* pViewShellBase = GetViewShellBase();
- if (pViewShellBase != NULL)
- {
- OSL_ASSERT (pViewShellBase->GetDocument() != NULL);
-
- return new model::SlideSorterModel(*this);
- }
- else
- return NULL;
-}
-
-
-
-
-view::SlideSorterView* SlideSorter::CreateView (void)
-{
- return new view::SlideSorterView (*this);
-}
-
-
-
-
-controller::SlideSorterController* SlideSorter::CreateController (void)
-{
- controller::SlideSorterController* pController
- = new controller::SlideSorterController (*this);
- return pController;
-}
-
-
-
-
-void SlideSorter::ArrangeGUIElements (
- const Point& rOffset,
- const Size& rSize)
-{
- Point aOrigin (rOffset);
-
- if (rSize.Width()>0
- && rSize.Height()>0
- && GetContentWindow()
- && GetContentWindow()->IsVisible())
- {
- // Prevent untimely redraws while the view is not yet correctly
- // resized.
- view::SlideSorterView::DrawLock aLock (*this);
- GetContentWindow()->EnablePaint (sal_False);
-
- mpSlideSorterController->Resize (Rectangle(aOrigin, rSize));
-
- GetContentWindow()->EnablePaint (sal_True);
-
- mbLayoutPending = false;
- }
-}
-
-
-
-
-SvBorder SlideSorter::GetBorder (void)
-{
- SvBorder aBorder;
-
- ::boost::shared_ptr<ScrollBar> pScrollBar = GetVerticalScrollBar();
- if (pScrollBar.get() != NULL && pScrollBar->IsVisible())
- aBorder.Right() = pScrollBar->GetOutputSizePixel().Width();
-
- pScrollBar = GetHorizontalScrollBar();
- if (pScrollBar.get() != NULL && pScrollBar->IsVisible())
- aBorder.Bottom() = pScrollBar->GetOutputSizePixel().Height();
-
- return aBorder;
-}
-
-
-
-
-bool SlideSorter::RelocateToWindow (::Window* pParentWindow)
-{
- // Stop all animations for they have been started for the old window.
- mpSlideSorterController->GetAnimator()->RemoveAllAnimations();
-
- ReleaseListeners();
-
- if (mpViewShell != NULL)
- mpViewShell->ViewShell::RelocateToParentWindow(pParentWindow);
-
- SetupControls(mpViewShell->GetParentWindow());
- SetupListeners();
-
- // For accessibility we have to shortly hide the content window. This
- // triggers the construction of a new accessibility object for the new
- // view shell. (One is created earlier while the construtor of the base
- // class is executed. But because at that time the correct
- // accessibility object can not be constructed we do that now.)
- if (mpContentWindow.get() !=NULL)
- {
- mpContentWindow->Hide();
- mpContentWindow->Show();
- }
-
- return true;
-}
-
-
-
-
-void SlideSorter::SetCurrentFunction (const FunctionReference& rpFunction)
-{
- if (GetViewShell() != NULL)
- {
- GetViewShell()->SetCurrentFunction(rpFunction);
- GetViewShell()->SetOldFunction(rpFunction);
- }
- else
- {
- ContentWindow* pWindow = dynamic_cast<ContentWindow*>(GetContentWindow().get());
- if (pWindow != NULL)
- pWindow->SetCurrentFunction(rpFunction);
- }
-}
-
-
-
-
-::boost::shared_ptr<controller::Properties> SlideSorter::GetProperties (void) const
-{
- OSL_ASSERT(mpProperties);
- return mpProperties;
-}
-
-
-
-
-::boost::shared_ptr<view::Theme> SlideSorter::GetTheme (void) const
-{
- OSL_ASSERT(mpTheme);
- return mpTheme;
-}
-
-
-
-
-//===== ContentWindow =========================================================
-
-namespace {
-
-ContentWindow::ContentWindow(
- ::Window& rParent,
- SlideSorter& rSlideSorter)
- : ::sd::Window(&rParent),
- mrSlideSorter(rSlideSorter),
- mpCurrentFunction()
-{
- SetDialogControlFlags(GetDialogControlFlags() & ~WINDOW_DLGCTRL_WANTFOCUS);
- SetStyle(GetStyle() | WB_NOPOINTERFOCUS);
-}
-
-
-
-
-ContentWindow::~ContentWindow (void)
-{
-}
-
-
-
-
-void ContentWindow::SetCurrentFunction (const FunctionReference& rpFunction)
-{
- mpCurrentFunction = rpFunction;
-}
-
-
-
-
-void ContentWindow::Paint (const Rectangle& rRect)
-{
- mrSlideSorter.Paint(rRect);
-}
-
-
-
-
-void ContentWindow::KeyInput (const KeyEvent& rEvent)
-{
- if (mpCurrentFunction.is())
- mpCurrentFunction->KeyInput(rEvent);
-}
-
-
-
-
-void ContentWindow::MouseMove (const MouseEvent& rEvent)
-{
- if (mpCurrentFunction.is())
- mpCurrentFunction->MouseMove(rEvent);
-}
-
-
-
-
-void ContentWindow::MouseButtonUp(const MouseEvent& rEvent)
-{
- if (mpCurrentFunction.is())
- mpCurrentFunction->MouseButtonUp(rEvent);
-}
-
-
-
-
-void ContentWindow::MouseButtonDown(const MouseEvent& rEvent)
-{
- if (mpCurrentFunction.is())
- mpCurrentFunction->MouseButtonDown(rEvent);
-}
-
-
-
-
-void ContentWindow::Command(const CommandEvent& rEvent)
-{
- if (mpCurrentFunction.is())
- mpCurrentFunction->Command(rEvent);
-}
-
-
-
-
-long ContentWindow::Notify (NotifyEvent& rEvent)
-{
- (void)rEvent;
- return 0;
-}
-
-
-
-} // end of anonymous namespace
-
-
-
-
-
-} } // end of namespace ::sd::slidesorter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/shell/SlideSorterChildWindow.cxx b/sd/source/ui/slidesorter/shell/SlideSorterChildWindow.cxx
deleted file mode 100644
index 9562e2b2c..000000000
--- a/sd/source/ui/slidesorter/shell/SlideSorterChildWindow.cxx
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include "SlideSorterChildWindow.hxx"
-
-#include "app.hrc"
-#include "sfx2/app.hxx"
-#include <sfx2/dockwin.hxx>
-
-#include "SlideSorter.hxx"
-
-namespace sd { namespace slidesorter {
-
-SlideSorterChildWindow::SlideSorterChildWindow (
- ::Window* pParentWindow,
- sal_uInt16 nId,
- SfxBindings* pBindings,
- SfxChildWinInfo* pInfo)
- : SfxChildWindow (pParentWindow, nId)
-{
- pWindow = new SlideSorter (
- pBindings,
- this,
- pParentWindow);
- eChildAlignment = SFX_ALIGN_LEFT;
- static_cast<SfxDockingWindow*>(pWindow)->Initialize (pInfo);
- // SetHideNotDelete (sal_True);
-}
-
-
-
-
-SlideSorterChildWindow::~SlideSorterChildWindow (void)
-{}
-
-
-SFX_IMPL_DOCKINGWINDOW(SlideSorterChildWindow, SID_SLIDE_BROWSER)
-
-} } // end of namespace ::sd::slidesorter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/shell/SlideSorterChildWindow.src b/sd/source/ui/slidesorter/shell/SlideSorterChildWindow.src
deleted file mode 100644
index 490e9dde1..000000000
--- a/sd/source/ui/slidesorter/shell/SlideSorterChildWindow.src
+++ /dev/null
@@ -1,52 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "app.hrc"
-#include "SlideSorterChildWindow.hrc"
-
-DockingWindow FLT_WIN_SLIDE_BROWSER
-{
- HelpID = SID_SLIDE_BROWSER;
- Border = TRUE ;
- Hide = FALSE ;
- SVLook = TRUE ;
- Sizeable = TRUE ;
- Moveable = TRUE ;
- Closeable = TRUE ;
- Zoomable = TRUE ;
- Dockable = TRUE ;
- EnableResizing = TRUE ;
- Size = MAP_APPFONT ( 140 , 120 ) ;
- Text = "Slide Browser" ;
-
- Control TOOLPANEL
- {
- Pos = MAP_APPFONT ( 0 , 0 ) ;
- Size = MAP_APPFONT ( 69, 150 ) ;
- Border = FALSE;
- };
-};
diff --git a/sd/source/ui/slidesorter/shell/SlideSorterService.cxx b/sd/source/ui/slidesorter/shell/SlideSorterService.cxx
deleted file mode 100644
index 3c4272a4e..000000000
--- a/sd/source/ui/slidesorter/shell/SlideSorterService.cxx
+++ /dev/null
@@ -1,646 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlideSorterService.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsProperties.hxx"
-#include "controller/SlsCurrentSlideManager.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsLayouter.hxx"
-#include "DrawController.hxx"
-#include <toolkit/helper/vclunohelper.hxx>
-#include <com/sun/star/beans/PropertyAttribute.hpp>
-#include <com/sun/star/lang/XUnoTunnel.hpp>
-#include <osl/mutex.hxx>
-#include <vcl/svapp.hxx>
-#include <cppuhelper/proptypehlp.hxx>
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::drawing::framework;
-using ::rtl::OUString;
-using ::sd::slidesorter::view::Layouter;
-
-namespace sd { namespace slidesorter {
-
-namespace {
- enum Properties
- {
- PropertyDocumentSlides,
- PropertyHighlightCurrentSlide,
- PropertyShowSelection,
- PropertyCenterSelection,
- PropertySuspendPreviewUpdatesDuringFullScreenPresentation,
- PropertyOrientationVertical
- };
-}
-
-
-
-
-//===== Service ===============================================================
-
-Reference<XInterface> SAL_CALL SlideSorterService_createInstance (
- const Reference<XComponentContext>& rxContext)
-{
- return Reference<XInterface>(static_cast<drawing::XDrawView*>(new SlideSorterService(rxContext)));
-}
-
-
-
-
-::rtl::OUString SlideSorterService_getImplementationName (void) throw(RuntimeException)
-{
- return OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.Draw.SlideSorter"));
-}
-
-
-
-
-Sequence<rtl::OUString> SAL_CALL SlideSorterService_getSupportedServiceNames (void)
- throw (RuntimeException)
-{
- static const ::rtl::OUString sServiceName(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.SlideSorter")));
- return Sequence<rtl::OUString>(&sServiceName, 1);
-}
-
-
-
-
-//===== SlideSorterService ==========================================================
-
-SlideSorterService::SlideSorterService (const Reference<XComponentContext>& rxContext)
- : SlideSorterServiceInterfaceBase(m_aMutex),
- mpSlideSorter(),
- mxParentWindow()
-{
- (void)rxContext;
-}
-
-
-
-
-SlideSorterService::~SlideSorterService (void)
-{
-}
-
-
-
-
-void SAL_CALL SlideSorterService::disposing (void)
-{
- mpSlideSorter.reset();
-
- if (mxParentWindow.is())
- {
- mxParentWindow->removeWindowListener(this);
- }
-}
-
-
-
-
-//----- XInitialization -------------------------------------------------------
-
-void SAL_CALL SlideSorterService::initialize (const Sequence<Any>& rArguments)
- throw (Exception, RuntimeException)
-{
- ThrowIfDisposed();
-
- if (rArguments.getLength() == 3)
- {
- try
- {
- mxViewId = Reference<XResourceId>(rArguments[0], UNO_QUERY_THROW);
-
- // Get the XController.
- Reference<frame::XController> xController (rArguments[1], UNO_QUERY_THROW);
-
- // Tunnel through the controller to obtain a ViewShellBase.
- ViewShellBase* pBase = NULL;
- Reference<lang::XUnoTunnel> xTunnel (xController, UNO_QUERY_THROW);
- ::sd::DrawController* pController = reinterpret_cast<sd::DrawController*>(
- xTunnel->getSomething(sd::DrawController::getUnoTunnelId()));
- if (pController != NULL)
- pBase = pController->GetViewShellBase();
-
- // Get the parent window.
- mxParentWindow = Reference<awt::XWindow>(rArguments[2], UNO_QUERY_THROW);
- ::Window* pParentWindow = VCLUnoHelper::GetWindow(mxParentWindow);
-
- mxParentWindow->addWindowListener(this);
-
- if (pBase != NULL && pParentWindow!=NULL)
- mpSlideSorter = SlideSorter::CreateSlideSorter(
- *pBase,
- NULL,
- *pParentWindow);
-
- Resize();
- }
- catch (RuntimeException&)
- {
- throw;
- }
- }
- else
- {
- throw RuntimeException(
- OUString(RTL_CONSTASCII_USTRINGPARAM("SlideSorterService: invalid number of arguments")),
- static_cast<drawing::XDrawView*>(this));
- }
-}
-
-
-
-
-//----- XView -----------------------------------------------------------------
-
-Reference<XResourceId> SAL_CALL SlideSorterService::getResourceId (void)
- throw (RuntimeException)
-{
- return mxViewId;
-}
-
-
-
-
-sal_Bool SAL_CALL SlideSorterService::isAnchorOnly (void)
- throw (RuntimeException)
-{
- return sal_False;
-}
-
-
-
-
-//----- XWindowListener -------------------------------------------------------
-
-void SAL_CALL SlideSorterService::windowResized (const awt::WindowEvent& rEvent)
- throw (RuntimeException)
-{
- (void)rEvent;
- ThrowIfDisposed();
-
- Resize();
-}
-
-
-
-
-
-void SAL_CALL SlideSorterService::windowMoved (const awt::WindowEvent& rEvent)
- throw (RuntimeException)
-{
- (void)rEvent;
-}
-
-
-
-
-void SAL_CALL SlideSorterService::windowShown (const lang::EventObject& rEvent)
- throw (RuntimeException)
-{
- (void)rEvent;
- ThrowIfDisposed();
- Resize();
-}
-
-
-
-
-void SAL_CALL SlideSorterService::windowHidden (const lang::EventObject& rEvent)
- throw (RuntimeException)
-{
- (void)rEvent;
- ThrowIfDisposed();
-}
-
-
-
-
-//----- lang::XEventListener --------------------------------------------------
-
-void SAL_CALL SlideSorterService::disposing (const lang::EventObject& rEvent)
- throw (RuntimeException)
-{
- if (rEvent.Source == mxParentWindow)
- mxParentWindow = NULL;
-}
-
-
-
-
-//----- XDrawView -------------------------------------------------------------
-
-void SAL_CALL SlideSorterService::setCurrentPage(const Reference<drawing::XDrawPage>& rxSlide)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() != NULL)
- mpSlideSorter->GetController().GetCurrentSlideManager()->NotifyCurrentSlideChange(
- mpSlideSorter->GetModel().GetIndex(rxSlide));
-}
-
-
-
-
-Reference<drawing::XDrawPage> SAL_CALL SlideSorterService::getCurrentPage (void)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() != NULL)
- return mpSlideSorter->GetController().GetCurrentSlideManager()->GetCurrentSlide()->GetXDrawPage();
- else
- return NULL;
-}
-
-
-
-
-//----- attributes ------------------------------------------------------------
-
-
-Reference<container::XIndexAccess> SAL_CALL SlideSorterService::getDocumentSlides (void)
- throw (RuntimeException)
-{
- return mpSlideSorter->GetModel().GetDocumentSlides();
-}
-
-
-
-
-void SAL_CALL SlideSorterService::setDocumentSlides (
- const Reference<container::XIndexAccess >& rxSlides)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() != NULL && mpSlideSorter->IsValid())
- mpSlideSorter->GetController().SetDocumentSlides(rxSlides);
-}
-
-
-
-
-sal_Bool SAL_CALL SlideSorterService::getIsHighlightCurrentSlide (void)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() == NULL || ! mpSlideSorter->IsValid())
- return false;
- else
- return mpSlideSorter->GetProperties()->IsHighlightCurrentSlide();
-}
-
-
-
-
-void SAL_CALL SlideSorterService::setIsHighlightCurrentSlide (sal_Bool bValue)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() != NULL && mpSlideSorter->IsValid())
- {
- mpSlideSorter->GetProperties()->SetHighlightCurrentSlide(bValue);
- controller::SlideSorterController::ModelChangeLock aLock (mpSlideSorter->GetController());
- mpSlideSorter->GetController().HandleModelChange();
- }
-}
-
-
-
-
-sal_Bool SAL_CALL SlideSorterService::getIsShowSelection (void)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() == NULL || ! mpSlideSorter->IsValid())
- return false;
- else
- return mpSlideSorter->GetProperties()->IsShowSelection();
-}
-
-
-
-
-void SAL_CALL SlideSorterService::setIsShowSelection (sal_Bool bValue)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() != NULL && mpSlideSorter->IsValid())
- mpSlideSorter->GetProperties()->SetShowSelection(bValue);
-}
-
-
-
-
-sal_Bool SAL_CALL SlideSorterService::getIsShowFocus (void)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() == NULL || ! mpSlideSorter->IsValid())
- return false;
- else
- return mpSlideSorter->GetProperties()->IsShowFocus();
-}
-
-
-
-
-void SAL_CALL SlideSorterService::setIsShowFocus (sal_Bool bValue)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() != NULL && mpSlideSorter->IsValid())
- mpSlideSorter->GetProperties()->SetShowFocus(bValue);
-}
-
-
-
-
-sal_Bool SAL_CALL SlideSorterService::getIsCenterSelection (void)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() == NULL || ! mpSlideSorter->IsValid())
- return false;
- else
- return mpSlideSorter->GetProperties()->IsCenterSelection();
-}
-
-
-
-
-void SAL_CALL SlideSorterService::setIsCenterSelection (sal_Bool bValue)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() != NULL && mpSlideSorter->IsValid())
- mpSlideSorter->GetProperties()->SetCenterSelection(bValue);
-}
-
-
-
-
-sal_Bool SAL_CALL SlideSorterService::getIsSuspendPreviewUpdatesDuringFullScreenPresentation (void)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() == NULL || ! mpSlideSorter->IsValid())
- return true;
- else
- return mpSlideSorter->GetProperties()
- ->IsSuspendPreviewUpdatesDuringFullScreenPresentation();
-}
-
-
-
-
-void SAL_CALL SlideSorterService::setIsSuspendPreviewUpdatesDuringFullScreenPresentation (
- sal_Bool bValue)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() != NULL && mpSlideSorter->IsValid())
- mpSlideSorter->GetProperties()
- ->SetSuspendPreviewUpdatesDuringFullScreenPresentation(bValue);
-}
-
-
-
-
-sal_Bool SAL_CALL SlideSorterService::getIsOrientationVertical (void)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() == NULL || ! mpSlideSorter->IsValid())
- return true;
- else
- return mpSlideSorter->GetView().GetOrientation() != Layouter::HORIZONTAL;
-}
-
-
-
-
-void SAL_CALL SlideSorterService::setIsOrientationVertical (sal_Bool bValue)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() != NULL && mpSlideSorter->IsValid())
- mpSlideSorter->GetView().SetOrientation(bValue
- ? Layouter::GRID
- : Layouter::HORIZONTAL);
-}
-
-
-
-
-sal_Bool SAL_CALL SlideSorterService::getIsSmoothScrolling (void)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() == NULL || ! mpSlideSorter->IsValid())
- return false;
- else
- return mpSlideSorter->GetProperties()->IsSmoothSelectionScrolling();
-}
-
-
-
-
-void SAL_CALL SlideSorterService::setIsSmoothScrolling (sal_Bool bValue)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() != NULL && mpSlideSorter->IsValid())
- mpSlideSorter->GetProperties()->SetSmoothSelectionScrolling(bValue);
-}
-
-
-
-
-util::Color SAL_CALL SlideSorterService::getBackgroundColor (void)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() == NULL || ! mpSlideSorter->IsValid())
- return util::Color();
- else
- return util::Color(
- mpSlideSorter->GetProperties()->GetBackgroundColor().GetColor());
-}
-
-
-
-
-void SAL_CALL SlideSorterService::setBackgroundColor (util::Color aBackgroundColor)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() != NULL && mpSlideSorter->IsValid())
- mpSlideSorter->GetProperties()->SetBackgroundColor(Color(aBackgroundColor));
-}
-
-
-
-
-util::Color SAL_CALL SlideSorterService::getTextColor (void)
- throw (css::uno::RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() == NULL || ! mpSlideSorter->IsValid())
- return util::Color();
- else
- return util::Color(
- mpSlideSorter->GetProperties()->GetTextColor().GetColor());
-}
-
-
-
-
-void SAL_CALL SlideSorterService::setTextColor (util::Color aTextColor)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() != NULL && mpSlideSorter->IsValid())
- mpSlideSorter->GetProperties()->SetTextColor(Color(aTextColor));
-}
-
-
-
-
-util::Color SAL_CALL SlideSorterService::getSelectionColor (void)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() == NULL || ! mpSlideSorter->IsValid())
- return util::Color();
- else
- return util::Color(
- mpSlideSorter->GetProperties()->GetSelectionColor().GetColor());
-}
-
-
-
-
-void SAL_CALL SlideSorterService::setSelectionColor (util::Color aSelectionColor)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() != NULL && mpSlideSorter->IsValid())
- mpSlideSorter->GetProperties()->SetSelectionColor(Color(aSelectionColor));
-}
-
-
-
-
-util::Color SAL_CALL SlideSorterService::getHighlightColor (void)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() == NULL || ! mpSlideSorter->IsValid())
- return util::Color();
- else
- return util::Color(
- mpSlideSorter->GetProperties()->GetHighlightColor().GetColor());
-}
-
-
-
-
-void SAL_CALL SlideSorterService::setHighlightColor (util::Color aHighlightColor)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() != NULL && mpSlideSorter->IsValid())
- mpSlideSorter->GetProperties()->SetHighlightColor(Color(aHighlightColor));
-}
-
-
-
-sal_Bool SAL_CALL SlideSorterService::getIsUIReadOnly (void)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() == NULL || ! mpSlideSorter->IsValid())
- return true;
- else
- return mpSlideSorter->GetProperties()->IsUIReadOnly();
-}
-
-
-
-
-void SAL_CALL SlideSorterService::setIsUIReadOnly (sal_Bool bIsUIReadOnly)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- if (mpSlideSorter.get() != NULL && mpSlideSorter->IsValid())
- mpSlideSorter->GetProperties()->SetUIReadOnly(bIsUIReadOnly);
-}
-
-
-
-
-//-----------------------------------------------------------------------------
-
-void SlideSorterService::Resize (void)
-{
- if (mxParentWindow.is())
- {
- awt::Rectangle aWindowBox = mxParentWindow->getPosSize();
- mpSlideSorter->ArrangeGUIElements(
- Point(0,0),
- Size(aWindowBox.Width, aWindowBox.Height));
- }
-}
-
-
-
-
-void SlideSorterService::ThrowIfDisposed (void)
- throw (::com::sun::star::lang::DisposedException)
-{
- if (SlideSorterServiceInterfaceBase::rBHelper.bDisposed || SlideSorterServiceInterfaceBase::rBHelper.bInDispose)
- {
- throw lang::DisposedException (
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "SlideSorterService object has already been disposed")),
- static_cast<drawing::XDrawView*>(this));
- }
-}
-
-
-} } // end of namespace ::sd::presenter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/shell/SlideSorterService.hxx b/sd/source/ui/slidesorter/shell/SlideSorterService.hxx
deleted file mode 100644
index cbbee0e1c..000000000
--- a/sd/source/ui/slidesorter/shell/SlideSorterService.hxx
+++ /dev/null
@@ -1,219 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_SLIDE_SORTER_SERVICE_HXX
-#define SD_SLIDESORTER_SLIDE_SORTER_SERVICE_HXX
-
-#include "SlideSorter.hxx"
-
-#include "tools/PropertySet.hxx"
-#include <com/sun/star/awt/XWindowListener.hpp>
-#include <com/sun/star/drawing/SlideSorter.hpp>
-#include <com/sun/star/drawing/XDrawView.hpp>
-#include <com/sun/star/drawing/framework/XView.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <cppuhelper/basemutex.hxx>
-#include <cppuhelper/compbase3.hxx>
-#include <cppuhelper/propshlp.hxx>
-#include <boost/noncopyable.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/scoped_ptr.hpp>
-
-namespace css = ::com::sun::star;
-
-namespace sd { namespace slidesorter {
-
-namespace {
- typedef ::cppu::WeakComponentImplHelper3 <
- css::drawing::XSlideSorterBase,
- css::lang::XInitialization,
- css::awt::XWindowListener
- > SlideSorterServiceInterfaceBase;
-}
-
-
-/** Implementation of the com.sun.star.drawing.SlideSorter service.
-*/
-class SlideSorterService
- : private ::boost::noncopyable,
- protected ::cppu::BaseMutex,
- public SlideSorterServiceInterfaceBase
-{
-public:
- explicit SlideSorterService (
- const css::uno::Reference<css::uno::XComponentContext>& rxContext);
- virtual ~SlideSorterService (void);
- virtual void SAL_CALL disposing (void);
-
-
- // XInitialization
-
- virtual void SAL_CALL initialize (const css::uno::Sequence<css::uno::Any>& rArguments)
- throw (css::uno::Exception, css::uno::RuntimeException);
-
-
- // XResourceId
-
- css::uno::Reference<css::drawing::framework::XResourceId> SAL_CALL getResourceId (void)
- throw (css::uno::RuntimeException);
-
- sal_Bool SAL_CALL isAnchorOnly (void)
- throw (css::uno::RuntimeException);
-
-
- // XWindowListener
-
- virtual void SAL_CALL windowResized (const css::awt::WindowEvent& rEvent)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL windowMoved (const css::awt::WindowEvent& rEvent)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL windowShown (const css::lang::EventObject& rEvent)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL windowHidden (const css::lang::EventObject& rEvent)
- throw (css::uno::RuntimeException);
-
-
- // lang::XEventListener
- virtual void SAL_CALL disposing (const css::lang::EventObject& rEvent)
- throw (css::uno::RuntimeException);
-
-
- // XDrawView
-
- virtual void SAL_CALL setCurrentPage(
- const css::uno::Reference<css::drawing::XDrawPage>& rxSlide)
- throw (css::uno::RuntimeException);
-
- virtual css::uno::Reference<css::drawing::XDrawPage> SAL_CALL getCurrentPage (void)
- throw (css::uno::RuntimeException);
-
-
- // Attributes
-
- virtual css::uno::Reference<css::container::XIndexAccess> SAL_CALL getDocumentSlides (void)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL setDocumentSlides (
- const css::uno::Reference<css::container::XIndexAccess >& rxSlides)
- throw (css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL getIsHighlightCurrentSlide (void)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL setIsHighlightCurrentSlide (::sal_Bool bIsHighlightCurrentSlide)
- throw (css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL getIsShowSelection (void)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL setIsShowSelection (sal_Bool bIsShowSelection)
- throw (css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL getIsCenterSelection (void)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL setIsCenterSelection (sal_Bool bIsCenterSelection)
- throw (css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL getIsSuspendPreviewUpdatesDuringFullScreenPresentation (void)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL setIsSuspendPreviewUpdatesDuringFullScreenPresentation (
- sal_Bool bIsSuspendPreviewUpdatesDuringFullScreenPresentation)
- throw (css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL getIsOrientationVertical (void)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL setIsOrientationVertical (sal_Bool bIsOrientationVertical)
- throw (css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL getIsSmoothScrolling (void)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL setIsSmoothScrolling (sal_Bool bIsOrientationVertical)
- throw (css::uno::RuntimeException);
-
- virtual css::util::Color SAL_CALL getBackgroundColor (void)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL setBackgroundColor (css::util::Color aBackgroundColor)
- throw (css::uno::RuntimeException);
-
- virtual css::util::Color SAL_CALL getTextColor (void)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL setTextColor (css::util::Color aTextColor)
- throw (css::uno::RuntimeException);
-
- virtual css::util::Color SAL_CALL getSelectionColor (void)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL setSelectionColor (css::util::Color aSelectionColor)
- throw (css::uno::RuntimeException);
-
- virtual css::util::Color SAL_CALL getHighlightColor (void)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL setHighlightColor (css::util::Color aHighlightColor)
- throw (css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL getIsUIReadOnly (void)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL setIsUIReadOnly (sal_Bool bIsUIReadOnly)
- throw (css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL getIsShowFocus (void)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL setIsShowFocus (sal_Bool bIsShowFocus)
- throw (css::uno::RuntimeException);
-
-private:
- ::boost::shared_ptr<SlideSorter> mpSlideSorter;
- css::uno::Reference<css::drawing::framework::XResourceId> mxViewId;
- css::uno::Reference<css::awt::XWindow> mxParentWindow;
- ::boost::scoped_ptr<cppu::IPropertyArrayHelper> mpPropertyArrayHelper;
-
- void Resize (void);
-
- /** This method throws a DisposedException when the object has already been
- disposed.
- */
- void ThrowIfDisposed (void) throw (css::lang::DisposedException);
-};
-
-} } // end of namespace ::sd::slidesorter
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx b/sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx
deleted file mode 100644
index b0902a6fa..000000000
--- a/sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx
+++ /dev/null
@@ -1,826 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlideSorterViewShell.hxx"
-#include "ViewShellImplementation.hxx"
-
-#include "SlideSorter.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsClipboard.hxx"
-#include "controller/SlsFocusManager.hxx"
-#include "controller/SlsScrollBarManager.hxx"
-#include "controller/SlsPageSelector.hxx"
-#include "controller/SlsSlotManager.hxx"
-#include "controller/SlsCurrentSlideManager.hxx"
-#include "controller/SlsSelectionManager.hxx"
-#include "controller/SlsSelectionFunction.hxx"
-#include "controller/SlsProperties.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsLayouter.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageEnumeration.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "framework/FrameworkHelper.hxx"
-#include "ViewShellBase.hxx"
-#include "drawdoc.hxx"
-#include "app.hrc"
-#include "glob.hrc"
-#include "sdattr.hrc"
-#include "sdresid.hxx"
-#include "AccessibleSlideSorterView.hxx"
-#include "DrawDocShell.hxx"
-#include "FrameView.hxx"
-#include "SdUnoSlideView.hxx"
-#include "ViewShellManager.hxx"
-#include "Window.hxx"
-#include <sfx2/app.hxx>
-#include <sfx2/msg.hxx>
-#include <sfx2/objface.hxx>
-#include <sfx2/viewfrm.hxx>
-#include <sfx2/bindings.hxx>
-#include <sfx2/dispatch.hxx>
-#include <sfx2/request.hxx>
-#include <svx/svxids.hrc>
-#include <com/sun/star/drawing/framework/XControllerManager.hpp>
-#include <com/sun/star/drawing/framework/ResourceId.hpp>
-#include <cppuhelper/bootstrap.hxx>
-#include <comphelper/processfactory.hxx>
-
-using namespace ::sd::slidesorter;
-#define SlideSorterViewShell
-#include "sdslots.hxx"
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::drawing::framework;
-
-using ::sd::framework::FrameworkHelper;
-
-namespace sd { namespace slidesorter {
-
-
-SFX_IMPL_INTERFACE(SlideSorterViewShell, SfxShell, SdResId(STR_SLIDESORTERVIEWSHELL))
-{
-}
-
-
-
-TYPEINIT1(SlideSorterViewShell, ViewShell);
-
-
-
-::boost::shared_ptr<SlideSorterViewShell> SlideSorterViewShell::Create (
- SfxViewFrame* pFrame,
- ViewShellBase& rViewShellBase,
- ::Window* pParentWindow,
- FrameView* pFrameViewArgument,
- const bool bIsCenterPane)
-{
- (void)bIsCenterPane;
-
- ::boost::shared_ptr<SlideSorterViewShell> pViewShell;
- try
- {
- pViewShell.reset(
- new SlideSorterViewShell(pFrame,rViewShellBase,pParentWindow,pFrameViewArgument));
- pViewShell->Initialize();
- if (pViewShell->mpSlideSorter.get() == NULL)
- pViewShell.reset();
- }
- catch(Exception&)
- {
- pViewShell.reset();
- }
- return pViewShell;
-}
-
-
-
-
-SlideSorterViewShell::SlideSorterViewShell (
- SfxViewFrame* pFrame,
- ViewShellBase& rViewShellBase,
- ::Window* pParentWindow,
- FrameView* pFrameViewArgument)
- : ViewShell (pFrame, pParentWindow, rViewShellBase),
- mpSlideSorter(),
- mbIsArrangeGUIElementsPending(true)
-{
- meShellType = ST_SLIDE_SORTER;
-
- if (pFrameViewArgument != NULL)
- mpFrameView = pFrameViewArgument;
- else
- mpFrameView = new FrameView(GetDoc());
- GetFrameView()->Connect();
-
- SetName (String (RTL_CONSTASCII_USTRINGPARAM("SlideSorterViewShell")));
-
- pParentWindow->SetStyle(pParentWindow->GetStyle() | WB_DIALOGCONTROL);
-}
-
-
-
-
-SlideSorterViewShell::~SlideSorterViewShell (void)
-{
- DisposeFunctions();
-
- try
- {
- ::sd::Window* pWindow = GetActiveWindow();
- if (pWindow!=NULL)
- {
- ::com::sun::star::uno::Reference<
- ::com::sun::star::lang::XComponent> xComponent (
- pWindow->GetAccessible(false),
- ::com::sun::star::uno::UNO_QUERY);
- if (xComponent.is())
- xComponent->dispose();
- }
- }
- catch( ::com::sun::star::uno::Exception& e )
- {
- (void)e;
- OSL_FAIL("sd::SlideSorterViewShell::~SlideSorterViewShell(), exception caught!" );
- }
- GetFrameView()->Disconnect();
-}
-
-
-
-
-
-void SlideSorterViewShell::Initialize (void)
-{
- mpSlideSorter = SlideSorter::CreateSlideSorter(
- *this,
- mpContentWindow,
- mpHorizontalScrollBar,
- mpVerticalScrollBar,
- mpScrollBarBox);
- mpView = &mpSlideSorter->GetView();
-
- ViewShell::doShow();
-
- SetPool( &GetDoc()->GetPool() );
- SetUndoManager( GetDoc()->GetDocSh()->GetUndoManager() );
-
- // For accessibility we have to shortly hide the content window.
- // This triggers the construction of a new accessibility object for
- // the new view shell. (One is created earlier while the construtor
- // of the base class is executed. At that time the correct
- // accessibility object can not be constructed.)
- SharedSdWindow pWindow (mpSlideSorter->GetContentWindow());
- if (pWindow)
- {
- pWindow->Hide();
- pWindow->Show();
- }
-}
-
-
-
-
-void SlideSorterViewShell::Init (bool bIsMainViewShell)
-{
- ViewShell::Init(bIsMainViewShell);
-
- mpSlideSorter->GetModel().UpdatePageList();
-
- if (mpContentWindow.get() != NULL)
- mpContentWindow->SetViewShell(this);
-}
-
-
-
-
-SlideSorterViewShell* SlideSorterViewShell::GetSlideSorter (ViewShellBase& rBase)
-{
- SlideSorterViewShell* pViewShell = NULL;
-
- // Test the center, left, and then the right pane for showing a slide sorter.
- ::rtl::OUString aPaneURLs[] = {
- FrameworkHelper::msCenterPaneURL,
- FrameworkHelper::msFullScreenPaneURL,
- FrameworkHelper::msLeftImpressPaneURL,
- FrameworkHelper::msRightPaneURL,
- ::rtl::OUString()};
-
- try
- {
- ::boost::shared_ptr<FrameworkHelper> pFrameworkHelper (FrameworkHelper::Instance(rBase));
- if (pFrameworkHelper->IsValid())
- for (int i=0; pViewShell==NULL && aPaneURLs[i].getLength()>0; ++i)
- {
- pViewShell = dynamic_cast<SlideSorterViewShell*>(
- pFrameworkHelper->GetViewShell(aPaneURLs[i]).get());
- }
- }
- catch (RuntimeException&)
- {}
-
- return pViewShell;
-}
-
-
-
-
-Reference<drawing::XDrawSubController> SlideSorterViewShell::CreateSubController (void)
-{
- Reference<drawing::XDrawSubController> xSubController;
-
- if (IsMainViewShell())
- {
- // Create uno controller for the main view shell.
- xSubController = Reference<drawing::XDrawSubController>(
- new SdUnoSlideView (
- GetViewShellBase().GetDrawController(),
- *mpSlideSorter,
- *GetView()));
- }
-
- return xSubController;
-}
-
-
-
-
-/** If there is a valid controller then create a new instance of
- <type>AccessibleSlideSorterView</type>. Otherwise delegate this call
- to the base class to return a default object (probably an empty
- reference).
-*/
-::com::sun::star::uno::Reference<
- ::com::sun::star::accessibility::XAccessible>
- SlideSorterViewShell::CreateAccessibleDocumentView (::sd::Window* pWindow)
-{
- // When the view is not set then the initialization is not yet complete
- // and we can not yet provide an accessibility object.
- if (mpView == NULL || mpSlideSorter.get() == NULL)
- return NULL;
-
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
-
- ::accessibility::AccessibleSlideSorterView *pAccessibleView =
- new ::accessibility::AccessibleSlideSorterView(
- *mpSlideSorter.get(),
- pWindow->GetAccessibleParentWindow()->GetAccessible(),
- pWindow);
-
- ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> xRet(pAccessibleView);
-
- pAccessibleView->Init();
-
- return xRet;
-}
-
-
-
-
-SlideSorter& SlideSorterViewShell::GetSlideSorter (void) const
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- return *mpSlideSorter;
-}
-
-
-
-
-bool SlideSorterViewShell::RelocateToParentWindow (::Window* pParentWindow)
-{
- OSL_ASSERT(mpSlideSorter);
- if ( ! mpSlideSorter)
- return false;
-
- if (pParentWindow == NULL)
- WriteFrameViewData();
- const bool bSuccess (mpSlideSorter->RelocateToWindow(pParentWindow));
- if (pParentWindow != NULL)
- ReadFrameViewData(mpFrameView);
-
- return bSuccess;
-}
-
-
-
-
-::svl::IUndoManager* SlideSorterViewShell::ImpGetUndoManager (void) const
-{
- SfxShell* pObjectBar = GetViewShellBase().GetViewShellManager()->GetTopShell();
- if (pObjectBar != NULL)
- {
- // When it exists then return the undo manager of the currently
- // active object bar. The object bar is missing when the
- // SlideSorterViewShell is not the main view shell.
- return pObjectBar->GetUndoManager();
- }
- else
- {
- // Return the undo manager of this shell when there is no object or
- // tool bar.
- return const_cast<SlideSorterViewShell*>(this)->GetUndoManager();
- }
-}
-
-
-
-
-void SlideSorterViewShell::GetFocus (void)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->GetController().GetFocusManager().ShowFocus();
-}
-
-
-
-
-void SlideSorterViewShell::LoseFocus (void)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->GetController().GetFocusManager().HideFocus();
-}
-
-
-
-
-SdPage* SlideSorterViewShell::getCurrentPage(void) const
-{
- // since SlideSorterViewShell::GetActualPage() currently also
- // returns master pages, which is a wrong behaviour for GetActualPage(),
- // we can just use that for now
- return const_cast<SlideSorterViewShell*>(this)->GetActualPage();
-}
-
-
-
-
-SdPage* SlideSorterViewShell::GetActualPage (void)
-{
- SdPage* pCurrentPage = NULL;
-
- // 1. Try to get the current page from the view shell in the center pane
- // (if we are that not ourself).
- if ( ! IsMainViewShell())
- {
- ::boost::shared_ptr<ViewShell> pMainViewShell = GetViewShellBase().GetMainViewShell();
- if (pMainViewShell.get() != NULL)
- pCurrentPage = pMainViewShell->GetActualPage();
- }
-
- if (pCurrentPage == NULL)
- {
- model::SharedPageDescriptor pDescriptor (
- mpSlideSorter->GetController().GetCurrentSlideManager()->GetCurrentSlide());
- if (pDescriptor.get() != NULL)
- pCurrentPage = pDescriptor->GetPage();
- }
-
- if (pCurrentPage == NULL)
- {
-
- }
-
- return pCurrentPage;
-}
-
-
-
-
-void SlideSorterViewShell::GetMenuState ( SfxItemSet& rSet)
-{
- ViewShell::GetMenuState(rSet);
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->GetController().GetSlotManager()->GetMenuState(rSet);
-}
-
-
-
-
-void SlideSorterViewShell::GetClipboardState ( SfxItemSet& rSet)
-{
- ViewShell::GetMenuState(rSet);
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->GetController().GetSlotManager()->GetClipboardState(rSet);
-}
-
-
-
-
-void SlideSorterViewShell::ExecCtrl (SfxRequest& rRequest)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->GetController().ExecCtrl(rRequest);
-}
-
-
-
-
-void SlideSorterViewShell::GetCtrlState (SfxItemSet& rSet)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->GetController().GetCtrlState(rSet);
-}
-
-
-
-
-void SlideSorterViewShell::FuSupport (SfxRequest& rRequest)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->GetController().FuSupport(rRequest);
-}
-
-
-
-
-/** We have to handle those slot calls here that need to have access to
- private or protected members and methods of this class.
-*/
-void SlideSorterViewShell::FuTemporary (SfxRequest& rRequest)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- switch (rRequest.GetSlot())
- {
- case SID_MODIFYPAGE:
- {
- SdPage* pCurrentPage = GetActualPage();
- if (pCurrentPage != NULL)
- mpImpl->ProcessModifyPageSlot (
- rRequest,
- pCurrentPage,
- mpSlideSorter->GetModel().GetPageType());
- Cancel();
- rRequest.Done ();
- }
- break;
-
- default:
- mpSlideSorter->GetController().FuTemporary(rRequest);
- break;
- }
-}
-
-
-
-
-void SlideSorterViewShell::GetStatusBarState (SfxItemSet& rSet)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->GetController().GetStatusBarState(rSet);
-}
-
-
-
-
-void SlideSorterViewShell::FuPermanent (SfxRequest& rRequest)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->GetController().FuPermanent(rRequest);
-}
-
-
-
-
-void SlideSorterViewShell::GetAttrState (SfxItemSet& rSet)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->GetController().GetAttrState(rSet);
-}
-
-
-
-
-void SlideSorterViewShell::ExecStatusBar (SfxRequest& rRequest)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->GetController().ExecStatusBar(rRequest);
-}
-
-
-
-
-void SlideSorterViewShell::Paint (
- const Rectangle& rBBox,
- ::sd::Window* pWindow)
-{
- SetActiveWindow (pWindow);
- OSL_ASSERT(mpSlideSorter);
- if (mpSlideSorter)
- mpSlideSorter->GetController().Paint(rBBox,pWindow);
-}
-
-
-
-
-void SlideSorterViewShell::ArrangeGUIElements (void)
-{
- if (IsActive())
- {
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->ArrangeGUIElements(maViewPos, maViewSize);
- mbIsArrangeGUIElementsPending = false;
- }
- else
- mbIsArrangeGUIElementsPending = true;
-}
-
-
-
-
-void SlideSorterViewShell::Activate (sal_Bool bIsMDIActivate)
-{
- ViewShell::Activate(bIsMDIActivate);
- if (mbIsArrangeGUIElementsPending)
- ArrangeGUIElements();
-}
-
-
-
-
-SvBorder SlideSorterViewShell::GetBorder (bool )
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- return mpSlideSorter->GetBorder();
-}
-
-
-
-
-void SlideSorterViewShell::Command (
- const CommandEvent& rEvent,
- ::sd::Window* pWindow)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- if ( ! mpSlideSorter->GetController().Command (rEvent, pWindow))
- ViewShell::Command (rEvent, pWindow);
-}
-
-
-
-
-void SlideSorterViewShell::ReadFrameViewData (FrameView* pFrameView)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- if (pFrameView != NULL)
- {
- view::SlideSorterView& rView (mpSlideSorter->GetView());
-
- sal_uInt16 nSlidesPerRow (pFrameView->GetSlidesPerRow());
- if (nSlidesPerRow > 0
- && rView.GetOrientation() == view::Layouter::GRID
- && IsMainViewShell())
- {
- rView.GetLayouter().SetColumnCount(nSlidesPerRow,nSlidesPerRow);
- }
- if (IsMainViewShell())
- mpSlideSorter->GetController().GetCurrentSlideManager()->NotifyCurrentSlideChange(
- mpFrameView->GetSelectedPage());
- mpSlideSorter->GetController().Rearrange(true);
-
- // DrawMode for 'main' window
- if (GetActiveWindow()->GetDrawMode() != pFrameView->GetDrawMode() )
- GetActiveWindow()->SetDrawMode( pFrameView->GetDrawMode() );
- }
-
- // When this slide sorter is not displayed in the main window then we do
- // not share the same frame view and have to find other ways to acquire
- // certain values.
- if ( ! IsMainViewShell())
- {
- ::boost::shared_ptr<ViewShell> pMainViewShell = GetViewShellBase().GetMainViewShell();
- if (pMainViewShell.get() != NULL)
- mpSlideSorter->GetController().GetCurrentSlideManager()->NotifyCurrentSlideChange(
- pMainViewShell->getCurrentPage());
- }
-}
-
-
-
-
-void SlideSorterViewShell::WriteFrameViewData (void)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- if (mpFrameView != NULL)
- {
- view::SlideSorterView& rView (mpSlideSorter->GetView());
- mpFrameView->SetSlidesPerRow((sal_uInt16)rView.GetLayouter().GetColumnCount());
-
- // DrawMode for 'main' window
- if( mpFrameView->GetDrawMode() != GetActiveWindow()->GetDrawMode() )
- mpFrameView->SetDrawMode( GetActiveWindow()->GetDrawMode() );
-
- SdPage* pActualPage = GetActualPage();
- if (pActualPage != NULL)
- {
- if (IsMainViewShell())
- mpFrameView->SetSelectedPage((pActualPage->GetPageNum()- 1) / 2);
- // else
- // The slide sorter is not expected to switch the current page
- // other then by double clicks. That is handled seperatly.
- }
- else
- {
- // We have no current page to set but at least we can make sure
- // that the index of the frame view has a legal value.
- if (mpFrameView->GetSelectedPage() >= mpSlideSorter->GetModel().GetPageCount())
- mpFrameView->SetSelectedPage((sal_uInt16)mpSlideSorter->GetModel().GetPageCount()-1);
- }
- }
-}
-
-
-
-
-void SlideSorterViewShell::SetZoom (long int )
-{
- // Ignored.
- // The zoom scale is adapted internally to fit a number of columns in
- // the window.
-}
-
-
-
-
-void SlideSorterViewShell::SetZoomRect (const Rectangle& rZoomRect)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- Size aPageSize (mpSlideSorter->GetView().GetLayouter().GetPageObjectSize());
-
- Rectangle aRect(rZoomRect);
-
- if (aRect.GetWidth() < aPageSize.Width())
- {
- long nWidthDiff = (aPageSize.Width() - aRect.GetWidth()) / 2;
-
- aRect.Left() -= nWidthDiff;
- aRect.Right() += nWidthDiff;
-
- if (aRect.Left() < 0)
- {
- aRect.SetPos(Point(0, aRect.Top()));
- }
- }
-
- if (aRect.GetHeight() < aPageSize.Height())
- {
- long nHeightDiff = (aPageSize.Height() - aRect.GetHeight()) / 2;
-
- aRect.Top() -= nHeightDiff;
- aRect.Bottom() += nHeightDiff;
-
- if (aRect.Top() < 0)
- {
- aRect.SetPos(Point(aRect.Left(), 0));
- }
- }
-
- ViewShell::SetZoomRect(aRect);
-
- GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOM );
- GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOMSLIDER );
-}
-
-
-
-
-void SlideSorterViewShell::UpdateScrollBars (void)
-{
- // Do not call the overwritten method of the base class: We do all the
- // scroll bar setup by ourselves.
- mpSlideSorter->GetController().GetScrollBarManager().UpdateScrollBars (false);
-}
-
-
-
-
-void SlideSorterViewShell::StartDrag (
- const Point& rDragPt,
- ::Window* pWindow )
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->GetController().GetClipboard().StartDrag (
- rDragPt,
- pWindow);
-}
-
-
-
-
-void SlideSorterViewShell::DragFinished (
- sal_Int8 nDropAction)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->GetController().GetClipboard().DragFinished (nDropAction);
-}
-
-
-
-
-sal_Int8 SlideSorterViewShell::AcceptDrop (
- const AcceptDropEvent& rEvt,
- DropTargetHelper& rTargetHelper,
- ::sd::Window* pTargetWindow,
- sal_uInt16 nPage,
- sal_uInt16 nLayer)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- return mpSlideSorter->GetController().GetClipboard().AcceptDrop (
- rEvt,
- rTargetHelper,
- pTargetWindow,
- nPage,
- nLayer);
-}
-
-
-
-
-sal_Int8 SlideSorterViewShell::ExecuteDrop (
- const ExecuteDropEvent& rEvt,
- DropTargetHelper& rTargetHelper,
- ::sd::Window* pTargetWindow,
- sal_uInt16 nPage,
- sal_uInt16 nLayer)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- return mpSlideSorter->GetController().GetClipboard().ExecuteDrop (
- rEvt,
- rTargetHelper,
- pTargetWindow,
- nPage,
- nLayer);
-}
-
-
-
-
-::boost::shared_ptr<SlideSorterViewShell::PageSelection>
- SlideSorterViewShell::GetPageSelection (void) const
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- return mpSlideSorter->GetController().GetPageSelector().GetPageSelection();
-}
-
-
-
-
-void SlideSorterViewShell::SetPageSelection (
- const ::boost::shared_ptr<PageSelection>& rSelection)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->GetController().GetPageSelector().SetPageSelection(rSelection);
-}
-
-
-
-
-void SlideSorterViewShell::AddSelectionChangeListener (
- const Link& rCallback)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->GetController().GetSelectionManager()->AddSelectionChangeListener(rCallback);
-}
-
-
-
-
-void SlideSorterViewShell::RemoveSelectionChangeListener (
- const Link& rCallback)
-{
- OSL_ASSERT(mpSlideSorter.get()!=NULL);
- mpSlideSorter->GetController().GetSelectionManager()->RemoveSelectionChangeListener(rCallback);
-}
-
-
-
-} } // end of namespace ::sd::slidesorter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/view/SlideSorterView.cxx b/sd/source/ui/slidesorter/view/SlideSorterView.cxx
deleted file mode 100644
index ce2b3a641..000000000
--- a/sd/source/ui/slidesorter/view/SlideSorterView.cxx
+++ /dev/null
@@ -1,1135 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "view/SlideSorterView.hxx"
-
-#include "ViewShellBase.hxx"
-#include "SlideSorter.hxx"
-#include "SlideSorterViewShell.hxx"
-#include "ViewShell.hxx"
-#include "SlsViewCacheContext.hxx"
-#include "SlsLayeredDevice.hxx"
-#include "view/SlsLayouter.hxx"
-#include "view/SlsPageObjectLayouter.hxx"
-#include "view/SlsPageObjectPainter.hxx"
-#include "view/SlsILayerPainter.hxx"
-#include "view/SlsButtonBar.hxx"
-#include "view/SlsToolTip.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsProperties.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageEnumerationProvider.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "cache/SlsPageCache.hxx"
-#include "cache/SlsPageCacheManager.hxx"
-#include "cache/SlsCacheContext.hxx"
-#include "taskpane/SlideSorterCacheDisplay.hxx"
-#include "DrawDocShell.hxx"
-#include "PaneDockingWindow.hxx"
-
-#include "drawdoc.hxx"
-#include "sdpage.hxx"
-#include "Window.hxx"
-#include "sdresid.hxx"
-#include "glob.hrc"
-
-#include <svl/itempool.hxx>
-#include <svx/svdpagv.hxx>
-#include <svx/svdopage.hxx>
-#include <svx/xlndsit.hxx>
-#include <svx/xlnclit.hxx>
-#include <vcl/svapp.hxx>
-#include <vcl/scrbar.hxx>
-#include <tools/poly.hxx>
-#include <vcl/lineinfo.hxx>
-#include <algorithm>
-#include <svx/sdrpagewindow.hxx>
-#include <svl/itempool.hxx>
-#include <basegfx/matrix/b2dhommatrix.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-#include <canvas/elapsedtime.hxx>
-
-//#define DEBUG_TIMING
-#include <svl/itempool.hxx>
-#ifdef DEBUG_TIMING
-#include <vector>
-#endif
-#include <boost/foreach.hpp>
-
-
-using namespace std;
-using namespace ::sd::slidesorter::model;
-using namespace ::drawinglayer::primitive2d;
-
-
-namespace sd { namespace slidesorter { namespace view {
-
-namespace {
- /** Wrapper around the SlideSorterView that supports the IPainter
- interface and that allows the LayeredDevice to hold the
- SlideSorterView (held as scoped_ptr by the SlideSorter) as
- shared_ptr.
- */
- class Painter : public ILayerPainter
- {
- public:
- Painter (SlideSorterView& rView) : mrView(rView) {}
- virtual ~Painter (void) {}
-
- virtual void Paint (OutputDevice& rDevice, const Rectangle& rRepaintArea)
- {
- mrView.Paint(rDevice,rRepaintArea);
- }
-
- virtual void SetLayerInvalidator (const SharedILayerInvalidator&) {}
-
- private:
- SlideSorterView& mrView;
- };
-}
-
-
-
-class BackgroundPainter
- : public ILayerPainter,
- public ::boost::noncopyable
-{
-public:
- BackgroundPainter (const Color aBackgroundColor) : maBackgroundColor(aBackgroundColor) {}
- virtual ~BackgroundPainter (void) {}
-
- virtual void Paint (OutputDevice& rDevice, const Rectangle& rRepaintArea)
- {
- rDevice.SetFillColor(maBackgroundColor);
- rDevice.SetLineColor();
- rDevice.DrawRect(rRepaintArea);
- }
-
- virtual void SetLayerInvalidator (const SharedILayerInvalidator&) {}
-
- void SetColor (const Color aColor) { maBackgroundColor = aColor; }
-
-private:
- Color maBackgroundColor;
-};
-
-
-
-TYPEINIT1(SlideSorterView, ::sd::View);
-
-SlideSorterView::SlideSorterView (SlideSorter& rSlideSorter)
- : ::sd::View (
- rSlideSorter.GetModel().GetDocument(),
- rSlideSorter.GetContentWindow().get(),
- rSlideSorter.GetViewShell()),
- mrSlideSorter(rSlideSorter),
- mrModel(rSlideSorter.GetModel()),
- mbIsDisposed(false),
- mpLayouter (new Layouter(rSlideSorter.GetContentWindow(), rSlideSorter.GetTheme())),
- mbPageObjectVisibilitiesValid (false),
- mpPreviewCache(),
- mpLayeredDevice(new LayeredDevice(rSlideSorter.GetContentWindow())),
- maVisiblePageRange(-1,-1),
- mbModelChangedWhileModifyEnabled(true),
- maPreviewSize(0,0),
- mbPreciousFlagUpdatePending(true),
- meOrientation(Layouter::GRID),
- mpProperties(rSlideSorter.GetProperties()),
- mpPageUnderMouse(),
- mnButtonUnderMouse(-1),
- mpPageObjectPainter(),
- mpSelectionPainter(),
- mpBackgroundPainter(
- new BackgroundPainter(mrSlideSorter.GetTheme()->GetColor(Theme::Color_Background))),
- mpButtonBar(new ButtonBar(mrSlideSorter)),
- mpToolTip(new ToolTip(mrSlideSorter)),
- mbIsRearrangePending(true),
- maVisibilityChangeListeners()
-{
- // Hide the page that contains the page objects.
- SetPageVisible (sal_False);
-
-
- // Register the background painter on level 1 to avoid the creation of a
- // background buffer.
- mpLayeredDevice->RegisterPainter(mpBackgroundPainter, 1);
-
- // Wrap a shared_ptr-held-wrapper around this view and register it as
- // painter at the layered device. There is no explicit destruction: in
- // the SlideSorterView destructor the layered device is destroyed and
- // with it the only reference to the wrapper which therefore is also
- // destroyed.
- SharedILayerPainter pPainter (new Painter(*this));
-
- // The painter is placed on level 1 to avoid buffering. This should be
- // a little faster during animations because the previews are painted
- // directly into the window, not via the buffer.
- mpLayeredDevice->RegisterPainter(pPainter, 1);
-}
-
-
-
-
-SlideSorterView::~SlideSorterView (void)
-{
- if ( ! mbIsDisposed)
- {
- OSL_ASSERT(mbIsDisposed);
- Dispose();
- }
-}
-
-
-
-
-void SlideSorterView::Init (void)
-{
- HandleModelChange();
-}
-
-
-
-
-void SlideSorterView::Dispose (void)
-{
- mpSelectionPainter.reset();
-
- mpLayeredDevice->Dispose();
- mpPreviewCache.reset();
-
- SetPageUnderMouse(SharedPageDescriptor(),false);
-
- // Hide the page to avoid problems in the view when deleting
- // visualized objects
- HideSdrPage();
-
- // Deletion of the objects and the page will be done in SdrModel
- // destructor (as long as objects and pages are added)
-
- OSL_ASSERT(mpLayeredDevice.unique());
- mpLayeredDevice.reset();
-
- mbIsDisposed = true;
-}
-
-
-
-
-sal_Int32 SlideSorterView::GetPageIndexAtPoint (const Point& rWindowPosition) const
-{
- sal_Int32 nIndex (-1);
-
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- if (pWindow)
- {
- nIndex = mpLayouter->GetIndexAtPoint(pWindow->PixelToLogic(rWindowPosition), false, false);
-
- // Clip the page index against the page count.
- if (nIndex >= mrModel.GetPageCount())
- nIndex = -1;
- }
-
- return nIndex;
-}
-
-
-
-
-Layouter& SlideSorterView::GetLayouter (void)
-{
- return *mpLayouter.get();
-}
-
-
-
-
-void SlideSorterView::ModelHasChanged (void)
-{
- // Ignore this call. Rely on hints sent by the model to get informed of
- // model changes.
-}
-
-
-
-
-void SlideSorterView::LocalModelHasChanged(void)
-{
- mbModelChangedWhileModifyEnabled = false;
-
- // First call our base class.
- View::ModelHasChanged ();
-}
-
-
-
-
-void SlideSorterView::PreModelChange (void)
-{
- // Reset the slide under the mouse. It will be re-set in PostModelChange().
- SetPageUnderMouse(SharedPageDescriptor());
-}
-
-
-
-
-void SlideSorterView::PostModelChange (void)
-{
- // In PreModelChange() the page objects have been released. Here we
- // create new ones.
- ::osl::MutexGuard aGuard (mrModel.GetMutex());
-
- model::PageEnumeration aPageEnumeration (
- model::PageEnumerationProvider::CreateAllPagesEnumeration(mrModel));
-
- // The new page objects have to be scaled and positioned.
- RequestRearrange();
- RequestRepaint();
-}
-
-
-
-
-/** At the moment for every model change all page objects are destroyed and
- re-created again. This can be optimized by accepting hints that
- describe the type of change so that existing page objects can be
- reused.
-*/
-void SlideSorterView::HandleModelChange (void)
-{
- PreModelChange ();
- PostModelChange();
-}
-
-
-
-
-void SlideSorterView::HandleDrawModeChange (void)
-{
- // Replace the preview cache with a new and empty one. The
- // PreviewRenderer that is used by the cache is replaced by this as
- // well.
- mpPreviewCache.reset();
- GetPreviewCache()->InvalidateCache(true);
-
- RequestRepaint();
-}
-
-
-
-
-void SlideSorterView::HandleDataChangeEvent (void)
-{
- GetPageObjectPainter()->SetTheme(mrSlideSorter.GetTheme());
-
- // Update the color used by the background painter.
- ::boost::shared_ptr<BackgroundPainter> pPainter (
- ::boost::dynamic_pointer_cast<BackgroundPainter>(mpBackgroundPainter));
- if (pPainter)
- pPainter->SetColor(mrSlideSorter.GetTheme()->GetColor(Theme::Color_Background));
-
- if (mpButtonBar)
- mpButtonBar->HandleDataChangeEvent();
-
- RequestRepaint();
-}
-
-
-
-
-void SlideSorterView::Resize (void)
-{
- UpdateOrientation();
-
- mpLayeredDevice->Resize();
- RequestRearrange();
-}
-
-
-
-
-void SlideSorterView::RequestRearrange (void)
-{
- mbIsRearrangePending = true;
- Rearrange();
-}
-
-
-
-
-void SlideSorterView::Rearrange (void)
-{
- if ( ! mbIsRearrangePending)
- return;
- if (mrModel.GetPageCount() <= 0)
- return;
-
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- if ( ! pWindow)
- return;
- const Size aWindowSize (pWindow->GetSizePixel());
- if (aWindowSize.Width()<=0 || aWindowSize.Height()<=0)
- return;
-
- const bool bRearrangeSuccess (
- mpLayouter->Rearrange (
- meOrientation,
- aWindowSize,
- mrModel.GetPageDescriptor(0)->GetPage()->GetSize(),
- mrModel.GetPageCount()));
- if (bRearrangeSuccess)
- {
- mbIsRearrangePending = false;
- Layout();
- UpdatePageUnderMouse(false);
- // RequestRepaint();
- }
-}
-
-
-
-
-void SlideSorterView::UpdateOrientation (void)
-{
- // The layout of slides depends on whether the slide sorter is
- // displayed in the center or the side pane.
- if (mrSlideSorter.GetViewShell()->IsMainViewShell())
- SetOrientation(Layouter::GRID);
- else
- {
- // Get access to the docking window.
- ::Window* pWindow = mrSlideSorter.GetContentWindow().get();
- PaneDockingWindow* pDockingWindow = NULL;
- while (pWindow!=NULL && pDockingWindow==NULL)
- {
- pDockingWindow = dynamic_cast<PaneDockingWindow*>(pWindow);
- pWindow = pWindow->GetParent();
- }
-
- if (pDockingWindow != NULL)
- {
- const long nScrollBarSize (
- Application::GetSettings().GetStyleSettings().GetScrollBarSize());
- switch (pDockingWindow->GetOrientation())
- {
- case PaneDockingWindow::HorizontalOrientation:
- if (SetOrientation(Layouter::HORIZONTAL))
- {
- const Range aRange (mpLayouter->GetValidVerticalSizeRange());
- pDockingWindow->SetValidSizeRange(Range(
- aRange.Min() + nScrollBarSize,
- aRange.Max() + nScrollBarSize));
- }
- break;
-
- case PaneDockingWindow::VerticalOrientation:
- if (SetOrientation(Layouter::VERTICAL))
- {
- const Range aRange (mpLayouter->GetValidHorizontalSizeRange());
- pDockingWindow->SetValidSizeRange(Range(
- aRange.Min() + nScrollBarSize,
- aRange.Max() + nScrollBarSize));
- }
- break;
-
- case PaneDockingWindow::UnknownOrientation:
- if (SetOrientation(Layouter::GRID))
- {
- const sal_Int32 nAdditionalSize (10);
- pDockingWindow->SetMinOutputSizePixel(Size(
- mpLayouter->GetValidHorizontalSizeRange().Min()
- + nScrollBarSize
- + nAdditionalSize,
- mpLayouter->GetValidVerticalSizeRange().Min()
- + nScrollBarSize
- + nAdditionalSize));
- }
- return;
- }
- }
- else
- {
- // We are not placed in a docking window. One possible reason
- // is that the slide sorter is temporarily into a cache and was
- // reparented to a non-docking window.
- SetOrientation(Layouter::GRID);
- }
- }
-}
-
-
-
-
-void SlideSorterView::Layout ()
-{
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- if (pWindow)
- {
- // Set the model area, i.e. the smallest rectangle that includes all
- // page objects.
- const Rectangle aViewBox (mpLayouter->GetTotalBoundingBox());
- pWindow->SetViewOrigin (aViewBox.TopLeft());
- pWindow->SetViewSize (aViewBox.GetSize());
-
- ::boost::shared_ptr<PageObjectLayouter> pPageObjectLayouter(
- mpLayouter->GetPageObjectLayouter());
- if (pPageObjectLayouter)
- {
- const Size aNewPreviewSize (mpLayouter->GetPageObjectLayouter()->GetSize(
- PageObjectLayouter::Preview,
- PageObjectLayouter::WindowCoordinateSystem));
- if (maPreviewSize != aNewPreviewSize && GetPreviewCache())
- {
- mpPreviewCache->ChangeSize(aNewPreviewSize, true);
- maPreviewSize = aNewPreviewSize;
- }
- }
-
- // Iterate over all page objects and place them relative to the
- // containing page.
- model::PageEnumeration aPageEnumeration (
- model::PageEnumerationProvider::CreateAllPagesEnumeration(mrModel));
- while (aPageEnumeration.HasMoreElements())
- {
- model::SharedPageDescriptor pDescriptor (aPageEnumeration.GetNextElement());
- pDescriptor->SetBoundingBox(mpLayouter->GetPageObjectBox(pDescriptor->GetPageIndex()));
- }
-
- GetPageObjectPainter()->NotifyResize();
- }
-
- InvalidatePageObjectVisibilities ();
-}
-
-
-
-
-void SlideSorterView::InvalidatePageObjectVisibilities (void)
-{
- mbPageObjectVisibilitiesValid = false;
-}
-
-
-
-
-void SlideSorterView::DeterminePageObjectVisibilities (void)
-{
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- if (pWindow)
- {
- // Set this flag to true here so that an invalidate during the
- // visibility calculation can correctly invalidate it again.
- mbPageObjectVisibilitiesValid = true;
-
- Rectangle aViewArea (pWindow->PixelToLogic(Rectangle(Point(0,0),pWindow->GetSizePixel())));
- const Range aRange (mpLayouter->GetRangeOfVisiblePageObjects(aViewArea));
- const Range aUnion(
- ::std::min(maVisiblePageRange.Min(), aRange.Min()),
- ::std::max(maVisiblePageRange.Max(), aRange.Max()));
-
- // For page objects that just dropped off the visible area we
- // decrease the priority of pending requests for preview bitmaps.
- if (maVisiblePageRange != aRange)
- mbPreciousFlagUpdatePending |= true;
-
- model::SharedPageDescriptor pDescriptor;
- for (int nIndex=aUnion.Min(); nIndex<=aUnion.Max(); nIndex++)
- {
- pDescriptor = mrModel.GetPageDescriptor(nIndex);
- if (pDescriptor.get() != NULL)
- SetState(
- pDescriptor,
- PageDescriptor::ST_Visible,
- aRange.IsInside(nIndex));
- }
-
- // Broadcast a change of the set of visible page objects.
- if (maVisiblePageRange != aRange)
- {
- maVisiblePageRange = aRange;
-
- // Tell the listeners that the visibility of some objects has
- // changed.
- ::std::vector<Link>& aChangeListeners (maVisibilityChangeListeners);
- for (::std::vector<Link>::const_iterator
- iLink(aChangeListeners.begin()),
- iEnd(aChangeListeners.end());
- iLink!=iEnd;
- ++iLink)
- {
- iLink->Call(NULL);
- }
- }
-
-
- // Restore the mouse over state.
- UpdatePageUnderMouse(true);
- }
-}
-
-
-
-
-void SlideSorterView::UpdatePreciousFlags (void)
-{
- if (mbPreciousFlagUpdatePending)
- {
- mbPreciousFlagUpdatePending = false;
-
- model::SharedPageDescriptor pDescriptor;
- ::boost::shared_ptr<cache::PageCache> pCache = GetPreviewCache();
- sal_Int32 nPageCount (mrModel.GetPageCount());
-
- for (int nIndex=0; nIndex<=nPageCount; ++nIndex)
- {
- pDescriptor = mrModel.GetPageDescriptor(nIndex);
- if (pDescriptor.get() != NULL)
- {
- pCache->SetPreciousFlag(
- pDescriptor->GetPage(),
- maVisiblePageRange.IsInside(nIndex));
- SSCD_SET_VISIBILITY(mrModel.GetDocument(), nIndex,
- maVisiblePageRange.IsInside(nIndex));
- }
- else
- {
- // At least one cache entry can not be updated. Remember to
- // repeat the whole updating later and leave the loop now.
- mbPreciousFlagUpdatePending = true;
- break;
- }
- }
- }
-}
-
-
-
-
-bool SlideSorterView::SetOrientation (const Layouter::Orientation eOrientation)
-{
- if (meOrientation != eOrientation)
- {
- meOrientation = eOrientation;
- return true;
- }
- else
- return false;
-}
-
-
-
-
-Layouter::Orientation SlideSorterView::GetOrientation (void) const
-{
- return meOrientation;
-}
-
-
-
-
-void SlideSorterView::RequestRepaint (void)
-{
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- if (pWindow)
- {
- mpLayeredDevice->InvalidateAllLayers(
- Rectangle(
- pWindow->PixelToLogic(Point(0,0)),
- pWindow->PixelToLogic(pWindow->GetSizePixel())));
- pWindow->Invalidate();
- }
-}
-
-
-
-
-void SlideSorterView::RequestRepaint (const model::SharedPageDescriptor& rpDescriptor)
-{
- if (rpDescriptor)
- RequestRepaint(rpDescriptor->GetBoundingBox());
-}
-
-
-
-
-void SlideSorterView::RequestRepaint (const Rectangle& rRepaintBox)
-{
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- if (pWindow)
- {
- mpLayeredDevice->InvalidateAllLayers(rRepaintBox);
- pWindow->Invalidate(rRepaintBox);
- }
-}
-
-
-
-void SlideSorterView::RequestRepaint (const Region& rRepaintRegion)
-{
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- if (pWindow)
- {
- mpLayeredDevice->InvalidateAllLayers(rRepaintRegion);
- pWindow->Invalidate(rRepaintRegion);
- }
-}
-
-
-
-
-Rectangle SlideSorterView::GetModelArea (void)
-{
- return mpLayouter->GetTotalBoundingBox();
-}
-
-
-#ifdef DEBUG_TIMING
-static ::canvas::tools::ElapsedTime gaTimer;
-static const size_t gFrameTimeCount (10);
-static size_t gFrameTimeIndex (0);
-static ::std::vector<double> gFrameTimes (gFrameTimeCount, 0);
-static double gFrameTimeSum (0);
-static const Rectangle gFrameTimeBox (10,10,150,20);
-static double gnLastFrameStart = 0;
-#endif
-
-void SlideSorterView::CompleteRedraw (
- OutputDevice* pDevice,
- const Region& rPaintArea,
- sdr::contact::ViewObjectContactRedirector* pRedirector)
-{
- (void)pRedirector;
-#ifdef DEBUG_TIMING
- const double nStartTime (gaTimer.getElapsedTime());
- OSL_TRACE("SlideSorterView::CompleteRedraw start at %f, %s",
- nStartTime,
- mnLockRedrawSmph ? "locked" : "");
-#endif
-
- if (pDevice == NULL || pDevice!=mrSlideSorter.GetContentWindow().get())
- return;
-
- // The parent implementation of CompleteRedraw is called only when
- // painting is locked. We do all the painting ourself. When painting
- // is locked the parent implementation keeps track of the repaint
- // requests and later, when painting is unlocked, calls CompleteRedraw
- // for all missed repaints.
-
- if (mnLockRedrawSmph == 0)
- {
- mrSlideSorter.GetContentWindow()->IncrementLockCount();
- if (mpLayeredDevice->HandleMapModeChange())
- DeterminePageObjectVisibilities();
- mpLayeredDevice->Repaint(rPaintArea);
- mrSlideSorter.GetContentWindow()->DecrementLockCount();
- }
- else
- {
- maRedrawRegion.Union(rPaintArea);
- }
-
-#ifdef DEBUG_TIMING
- const double nEndTime (gaTimer.getElapsedTime());
- OSL_TRACE("SlideSorterView::CompleteRedraw end at %f after %fms", nEndTime, (nEndTime-nStartTime)*1000);
- gFrameTimeSum -= gFrameTimes[gFrameTimeIndex];
- gFrameTimes[gFrameTimeIndex] = nStartTime - gnLastFrameStart;
- gnLastFrameStart = nStartTime;
- gFrameTimeSum += gFrameTimes[gFrameTimeIndex];
- gFrameTimeIndex = (gFrameTimeIndex+1) % gFrameTimeCount;
-
-
- mrSlideSorter.GetContentWindow()->SetFillColor(COL_BLUE);
- mrSlideSorter.GetContentWindow()->DrawRect(gFrameTimeBox);
- mrSlideSorter.GetContentWindow()->SetTextColor(COL_WHITE);
- mrSlideSorter.GetContentWindow()->DrawText(
- gFrameTimeBox,
- ::rtl::OUString::valueOf(1 / (gFrameTimeSum / gFrameTimeCount)),
- TEXT_DRAW_RIGHT | TEXT_DRAW_VCENTER);
- // mrSlideSorter.GetContentWindow()->Invalidate(gFrameTimeBox);
-#endif
-}
-
-
-
-
-void SlideSorterView::Paint (
- OutputDevice& rDevice,
- const Rectangle& rRepaintArea)
-{
- if ( ! mpPageObjectPainter)
- if ( ! GetPageObjectPainter())
- return;
-
- // Update the page visibilities when they have been invalidated.
- if ( ! mbPageObjectVisibilitiesValid)
- DeterminePageObjectVisibilities();
-
- if (mbPreciousFlagUpdatePending)
- UpdatePreciousFlags();
-
- if (mbIsRearrangePending)
- Rearrange();
-
- // Paint all page objects that are fully or partially inside the
- // repaint region.
- const Range aRange (mpLayouter->GetRangeOfVisiblePageObjects(rRepaintArea));
- for (sal_Int32 nIndex=aRange.Min(); nIndex<=aRange.Max(); ++nIndex)
- {
- model::SharedPageDescriptor pDescriptor (mrModel.GetPageDescriptor(nIndex));
- if (!pDescriptor || ! pDescriptor->HasState(PageDescriptor::ST_Visible))
- continue;
-
- mpPageObjectPainter->PaintPageObject(rDevice, pDescriptor);
- }
-}
-
-
-
-
-void SlideSorterView::ConfigurationChanged (
- utl::ConfigurationBroadcaster* pBroadcaster,
- sal_uInt32 nHint)
-{
- // Some changes of the configuration (some of the colors for example)
- // may affect the previews. Throw away the old ones and create new ones.
- cache::PageCacheManager::Instance()->InvalidateAllCaches();
-
- ::sd::View::ConfigurationChanged(pBroadcaster, nHint);
- RequestRepaint();
-
-}
-
-
-
-
-::boost::shared_ptr<cache::PageCache> SlideSorterView::GetPreviewCache (void)
-{
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- if (pWindow && mpPreviewCache.get() == NULL)
- {
- mpPreviewCache.reset(
- new cache::PageCache(
- mpLayouter->GetPageObjectSize(),
- false,
- cache::SharedCacheContext(new ViewCacheContext(mrSlideSorter))));
- }
-
- return mpPreviewCache;
-}
-
-
-
-
-Pair SlideSorterView::GetVisiblePageRange (void)
-{
- if ( ! mbPageObjectVisibilitiesValid)
- DeterminePageObjectVisibilities();
- return maVisiblePageRange;
-}
-
-
-
-
-void SlideSorterView::AddVisibilityChangeListener (const Link& rListener)
-{
- if (::std::find (
- maVisibilityChangeListeners.begin(),
- maVisibilityChangeListeners.end(),
- rListener) == maVisibilityChangeListeners.end())
- {
- maVisibilityChangeListeners.push_back(rListener);
- }
-}
-
-
-
-
-void SlideSorterView::RemoveVisibilityChangeListener(const Link&rListener)
-{
- maVisibilityChangeListeners.erase (
- ::std::find (
- maVisibilityChangeListeners.begin(),
- maVisibilityChangeListeners.end(),
- rListener));
-}
-
-
-
-
-ButtonBar& SlideSorterView::GetButtonBar (void) const
-{
- OSL_ASSERT(mpButtonBar);
- return *mpButtonBar;
-}
-
-
-
-
-ToolTip& SlideSorterView::GetToolTip (void) const
-{
- OSL_ASSERT(mpToolTip);
- return *mpToolTip;
-}
-
-
-
-
-void SlideSorterView::Notify (SfxBroadcaster& rBroadcaster, const SfxHint& rHint)
-{
- ::sd::DrawDocShell* pDocShell = mrModel.GetDocument()->GetDocSh();
- if (pDocShell!=NULL && pDocShell->IsEnableSetModified())
- mbModelChangedWhileModifyEnabled = true;
-
- ::sd::View::Notify(rBroadcaster, rHint);
-}
-
-
-
-
-void SlideSorterView::UpdatePageUnderMouse (bool bAnimate)
-{
- ::boost::shared_ptr<ScrollBar> pVScrollBar (mrSlideSorter.GetVerticalScrollBar());
- ::boost::shared_ptr<ScrollBar> pHScrollBar (mrSlideSorter.GetHorizontalScrollBar());
- if ((pVScrollBar && pVScrollBar->IsVisible() && pVScrollBar->IsTracking())
- || (pHScrollBar && pHScrollBar->IsVisible() && pHScrollBar->IsTracking()))
- {
- // One of the scroll bars is tracking mouse movement. Do not
- // highlight the slide under the mouse in this case.
- SetPageUnderMouse(SharedPageDescriptor(),false);
- return;
- }
-
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- if (pWindow && pWindow->IsVisible() && ! pWindow->IsMouseCaptured())
- {
- const Window::PointerState aPointerState (pWindow->GetPointerState());
- const Rectangle aWindowBox (pWindow->GetPosPixel(), pWindow->GetSizePixel());
- if (aWindowBox.IsInside(aPointerState.maPos))
- {
- UpdatePageUnderMouse (
- aPointerState.maPos,
- (aPointerState.mnState & MOUSE_LEFT)!=0,
- bAnimate);
- return;
- }
- }
-
- SetPageUnderMouse(SharedPageDescriptor(),false);
-}
-
-
-
-
-void SlideSorterView::UpdatePageUnderMouse (
- const Point& rMousePosition,
- const bool bIsMouseButtonDown,
- const bool bAnimate)
-{
- UpdatePageUnderMouse(
- mrSlideSorter.GetController().GetPageAt(rMousePosition),
- rMousePosition,
- bIsMouseButtonDown,
- bAnimate);
-}
-
-
-
-
-void SlideSorterView::UpdatePageUnderMouse (
- const model::SharedPageDescriptor& rpDescriptor,
- const Point& rMousePosition,
- const bool bIsMouseButtonDown,
- const bool bAnimate)
-{
- // Update the page under the mouse.
- SetPageUnderMouse(rpDescriptor, bAnimate);
-
- // Tell the button bar about the new mouse position.
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- const Point aMouseModelPosition (pWindow->PixelToLogic(rMousePosition));
-
- ::boost::shared_ptr<ViewShell> pMainViewShell (mrSlideSorter.GetViewShellBase()->GetMainViewShell());
- if (pMainViewShell
- && pMainViewShell->GetShellType()!=ViewShell::ST_DRAW)
- {
- const bool bIsMouseOverButtonBar (GetButtonBar().IsMouseOverBar());
- GetButtonBar().ProcessMouseMotionEvent(rpDescriptor, aMouseModelPosition, bIsMouseButtonDown);
- // Set the help text of the slide when the mouse was moved from the
- // button bar back over the preview.
- if (rpDescriptor
- && GetButtonBar().IsMouseOverBar() != bIsMouseOverButtonBar
- && bIsMouseOverButtonBar)
- {
- mpToolTip->ShowDefaultHelpText();
- }
- }
-}
-
-
-
-
-void SlideSorterView::SetPageUnderMouse (
- const model::SharedPageDescriptor& rpDescriptor,
- const bool bAnimate)
-{
- if (mpPageUnderMouse != rpDescriptor)
- {
- if (mpPageUnderMouse)
- SetState(mpPageUnderMouse, PageDescriptor::ST_MouseOver, false, bAnimate);
-
- mpPageUnderMouse = rpDescriptor;
-
- if (mpPageUnderMouse)
- SetState(mpPageUnderMouse, PageDescriptor::ST_MouseOver, true, bAnimate);
-
- // Change the quick help text to display the name of the page under
- // the mouse.
- mpToolTip->SetPage(rpDescriptor);
- }
-}
-
-
-
-
-bool SlideSorterView::SetState (
- const model::SharedPageDescriptor& rpDescriptor,
- const PageDescriptor::State eState,
- const bool bStateValue,
- const bool bAnimate)
-{
- model::SharedPageDescriptor pDescriptor (rpDescriptor);
- if ( ! pDescriptor)
- return false;
-
- const bool bModified (pDescriptor->SetState(eState, bStateValue));
- if ( ! bModified)
- return false;
-
- // When the page object is not visible (i.e. not on the screen then
- // nothing has to be painted.
- if (pDescriptor->HasState(PageDescriptor::ST_Visible))
- {
- // For most states a change of that state leads to visible
- // difference and we have to request a repaint.
- if (eState != PageDescriptor::ST_WasSelected)
- RequestRepaint(pDescriptor);
- }
-
- ::boost::shared_ptr<ViewShell> pMainViewShell(mrSlideSorter.GetViewShellBase()->GetMainViewShell());
- if (pMainViewShell
- && pMainViewShell->GetShellType()!=ViewShell::ST_DRAW)
- {
- // Fade in or out the buttons.
- if (eState == PageDescriptor::ST_MouseOver)
- {
- if (bStateValue)
- GetButtonBar().RequestFadeIn(rpDescriptor, bAnimate);
- else
- GetButtonBar().RequestFadeOut(rpDescriptor, bAnimate);
- }
- }
-
- return bModified;
-}
-
-
-
-
-::boost::shared_ptr<PageObjectPainter> SlideSorterView::GetPageObjectPainter (void)
-{
- if ( ! mpPageObjectPainter)
- mpPageObjectPainter.reset(new PageObjectPainter(mrSlideSorter));
- return mpPageObjectPainter;
-}
-
-
-
-
-::boost::shared_ptr<LayeredDevice> SlideSorterView::GetLayeredDevice (void) const
-{
- return mpLayeredDevice;
-}
-
-
-
-
-//===== SlideSorterView::DrawLock =============================================
-
-SlideSorterView::DrawLock::DrawLock (
- view::SlideSorterView& rView,
- const SharedSdWindow& rpWindow)
- : mrView(rView),
- mpWindow(rpWindow)
-{
- if (mrView.mnLockRedrawSmph == 0)
- mrView.maRedrawRegion.SetEmpty();
- ++mrView.mnLockRedrawSmph;
-}
-
-
-
-
-SlideSorterView::DrawLock::DrawLock (SlideSorter& rSlideSorter)
- : mrView(rSlideSorter.GetView()),
- mpWindow(rSlideSorter.GetContentWindow())
-{
- if (mrView.mnLockRedrawSmph == 0)
- mrView.maRedrawRegion.SetEmpty();
- ++mrView.mnLockRedrawSmph;
-}
-
-
-
-
-SlideSorterView::DrawLock::~DrawLock (void)
-{
- OSL_ASSERT(mrView.mnLockRedrawSmph>0);
- --mrView.mnLockRedrawSmph;
- if (mrView.mnLockRedrawSmph == 0)
- if (mpWindow)
- {
- mpWindow->Invalidate(mrView.maRedrawRegion);
- mpWindow->Update();
- }
-}
-
-
-
-
-void SlideSorterView::DrawLock::Dispose (void)
-{
- mpWindow.reset();
-}
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/view/SlsButtonBar.cxx b/sd/source/ui/slidesorter/view/SlsButtonBar.cxx
deleted file mode 100644
index 5c0adf49a..000000000
--- a/sd/source/ui/slidesorter/view/SlsButtonBar.cxx
+++ /dev/null
@@ -1,1558 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "view/SlsButtonBar.hxx"
-
-#include "SlideSorter.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "view/SlsTheme.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsToolTip.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsSlotManager.hxx"
-#include "controller/SlsCurrentSlideManager.hxx"
-#include "controller/SlsPageSelector.hxx"
-#include "controller/SlsAnimator.hxx"
-#include "controller/SlsAnimationFunction.hxx"
-#include "app.hrc"
-#include "drawdoc.hxx"
-#include <svx/svxids.hrc>
-#include <sfx2/dispatch.hxx>
-#include <vcl/bmpacc.hxx>
-#include <vcl/virdev.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <com/sun/star/presentation/XPresentation2.hpp>
-#include <boost/bind.hpp>
-
-using ::com::sun::star::uno::Any;
-using ::com::sun::star::uno::Reference;
-using ::com::sun::star::uno::Sequence;
-using ::com::sun::star::beans::PropertyValue;
-using ::com::sun::star::presentation::XPresentation2;
-
-namespace sd { namespace slidesorter { namespace view {
-
-/** Base class for the painter of the background bar onto which the buttons
- are painted. It also provides some size information.
-*/
-class ButtonBar::BackgroundTheme
-{
-public:
- BackgroundTheme(
- const ::boost::shared_ptr<Theme>& rpTheme,
- const ::std::vector<SharedButton>& rButtons);
- /** Set the preview bounding box, the maximal area in which to display
- buttons. A call to this method triggers a call to Layout().
- */
- void SetPreviewBoundingBox (const Rectangle& rPreviewBoundingBox);
- Button::IconSize GetIconSize (void) const;
-
- virtual BitmapEx CreateBackground (
- const OutputDevice& rTemplateDevice,
- const bool bIsButtonDown) const = 0;
- virtual Point GetBackgroundLocation (void) = 0;
- virtual Rectangle GetButtonArea (void) = 0;
-
-protected:
- ::boost::shared_ptr<Theme> mpTheme;
- Rectangle maPreviewBoundingBox;
- Size maMinimumLargeButtonAreaSize;
- Size maMinimumMediumButtonAreaSize;
- Size maMinimumSmallButtonAreaSize;
- Button::IconSize meIconSize;
-
- virtual void Layout (void) = 0;
-
-private:
- void UpdateMinimumIconSizes(const ::std::vector<SharedButton>& rButtons);
-};
-
-
-namespace {
- /** Rectangular button bar that covers the whole width of the preview.
- */
- class RectangleBackgroundTheme : public ButtonBar::BackgroundTheme
- {
- public:
- RectangleBackgroundTheme(
- const ::boost::shared_ptr<Theme>& rpTheme,
- const ::std::vector<SharedButton>& rButtons);
- virtual BitmapEx CreateBackground (
- const OutputDevice& rTemplateDevice,
- const bool bIsButtonDown) const;
- virtual Point GetBackgroundLocation (void);
- virtual Rectangle GetButtonArea (void);
- protected:
- virtual void Layout (void);
- private:
- sal_Int32 mnBarHeight;
- };
-
- /** Button bar is composed of three images, the left and right end of
- the bar and the center image. Buttons are only placed over the
- center image. The center image is painted as is, it is not scaled.
- */
- class BitmapBackgroundTheme : public ButtonBar::BackgroundTheme
- {
- public:
- BitmapBackgroundTheme(
- const ::boost::shared_ptr<Theme>& rpTheme,
- const ::std::vector<SharedButton>& rButtons);
- virtual BitmapEx CreateBackground (
- const OutputDevice& rTemplateDevice,
- const bool bIsButtonDown) const;
- virtual Point GetBackgroundLocation (void);
- virtual Rectangle GetButtonArea (void);
- protected:
- virtual void Layout (void);
- private:
- Rectangle maButtonArea;
- Point maBackgroundLocation;
- };
-
- /** The source mask is essentially multiplied with the given alpha value.
- The result is writen to the result mask.
- */
- void AdaptTransparency (AlphaMask& rMask, const AlphaMask& rSourceMask, const double nAlpha)
- {
- BitmapWriteAccess* pBitmap = rMask.AcquireWriteAccess();
- const BitmapReadAccess* pSourceBitmap = const_cast<AlphaMask&>(rSourceMask).AcquireReadAccess();
-
- if (pBitmap!=NULL && pSourceBitmap!=NULL)
- {
- const sal_Int32 nWidth (pBitmap->Width());
- const sal_Int32 nHeight (pBitmap->Height());
-
- for (sal_Int32 nY = 0; nY<nHeight; ++nY)
- for (sal_Int32 nX = 0; nX<nWidth; ++nX)
- {
- const sal_uInt8 nValue (255 - pSourceBitmap->GetPixel(nY, nX).GetBlueOrIndex());
- const sal_uInt8 nNewValue (static_cast<sal_uInt8>(nValue * (1-nAlpha)));
- pBitmap->SetPixel(nY, nX, 255-nNewValue);
- }
- }
- }
-
-} // end of anonymous namespace
-
-
-//===== ButtonBar::Lock =======================================================
-
-ButtonBar::Lock::Lock (SlideSorter& rSlideSorter)
- : mrButtonBar(rSlideSorter.GetView().GetButtonBar())
-{
- mrButtonBar.AcquireLock();
-}
-
-
-
-
-ButtonBar::Lock::~Lock (void)
-{
- mrButtonBar.ReleaseLock();
-}
-
-
-
-
-//===== ButtonBar =============================================================
-
-ButtonBar::ButtonBar (SlideSorter& rSlideSorter)
- : mrSlideSorter(rSlideSorter),
- maPageObjectSize(0,0),
- maButtonBoundingBox(),
- maBackgroundLocation(),
- mpDescriptor(),
- mbIsExcluded(false),
- mpButtonUnderMouse(),
- mpDownButton(),
- maRegularButtons(),
- maExcludedButtons(),
- maNormalBackground(),
- maButtonDownBackground(),
- mbIsMouseOverBar(false),
- mpBackgroundTheme(),
- mnLockCount(0)
-{
- HandleDataChangeEvent();
-}
-
-
-
-
-ButtonBar::~ButtonBar (void)
-{
-}
-
-
-
-
-void ButtonBar::ProcessButtonDownEvent (
- const model::SharedPageDescriptor& rpDescriptor,
- const Point aMouseModelLocation)
-{
- SetButtonUnderMouse(GetButtonAt(aMouseModelLocation));
- if (mpButtonUnderMouse)
- mpButtonUnderMouse->SetState(Button::State_Down);
- mpDownButton = mpButtonUnderMouse;
-
- mrSlideSorter.GetView().RequestRepaint(rpDescriptor);
-}
-
-
-
-
-void ButtonBar::ProcessButtonUpEvent (
- const model::SharedPageDescriptor& rpDescriptor,
- const Point aMouseModelLocation)
-{
- SetButtonUnderMouse(GetButtonAt(aMouseModelLocation));
- if (mpButtonUnderMouse)
- {
- mpButtonUnderMouse->SetState(Button::State_Hover);
- if (mpButtonUnderMouse == mpDownButton)
- {
- // This is done only when the buttons are sufficiently visible.
- if (mpDescriptor->GetVisualState().GetButtonAlpha()<0.7)
- {
- mpButtonUnderMouse->ProcessClick(mpDescriptor);
- mbIsExcluded = mpDescriptor->HasState(model::PageDescriptor::ST_Excluded);
- ProcessMouseMotionEvent (rpDescriptor, aMouseModelLocation, false);
- }
- }
- }
- mpDownButton.reset();
- mrSlideSorter.GetView().RequestRepaint(rpDescriptor);
-}
-
-
-
-
-void ButtonBar::ProcessMouseMotionEvent (
- const model::SharedPageDescriptor& rpDescriptor,
- const Point aMouseModelLocation,
- const bool bIsMouseButtonDown)
-{
- model::SharedPageDescriptor pOldDescriptor (mpDescriptor);
- bool bPageHasChanged (false);
- bool bButtonHasChanged (false);
- bool bButtonStateHasChanged (false);
-
- // Update the page object for which to manage the buttons.
- bPageHasChanged = SetPage(rpDescriptor);
- mbIsMouseOverBar = IsMouseOverBar(aMouseModelLocation);
-
- // Update button under mouse.
- if (rpDescriptor)
- {
- bButtonHasChanged = SetButtonUnderMouse(GetButtonAt(aMouseModelLocation));
-
- if (mpButtonUnderMouse)
- {
- // When the mouse button is down, mark the button under the
- // mouse only as pressed when it is the same button the mouse
- // button was pressed over, and where the button release would
- // lead to a click action.
- if (bIsMouseButtonDown)
- {
- if (mpButtonUnderMouse==mpDownButton)
- bButtonStateHasChanged = mpButtonUnderMouse->SetState(Button::State_Down);
- }
- else
- bButtonStateHasChanged = mpButtonUnderMouse->SetState(Button::State_Hover);
- }
- }
-
- // Show a quick help text when the mouse is over a button.
- if (bButtonHasChanged)
- {
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- if (pWindow)
- {
- if (mpButtonUnderMouse)
- mrSlideSorter.GetView().GetToolTip().ShowHelpText(mpButtonUnderMouse->GetHelpText());
- else
- mrSlideSorter.GetView().GetToolTip().ShowDefaultHelpText();
- }
- }
-
- if (bPageHasChanged || bButtonHasChanged || bButtonStateHasChanged)
- {
- if (pOldDescriptor)
- mrSlideSorter.GetView().RequestRepaint(pOldDescriptor);
- if (mpDescriptor && pOldDescriptor!=mpDescriptor)
- mrSlideSorter.GetView().RequestRepaint(mpDescriptor);
- }
-}
-
-
-
-
-void ButtonBar::ResetPage (void)
-{
- SetPage(model::SharedPageDescriptor());
-}
-
-
-
-
-bool ButtonBar::SetPage (const model::SharedPageDescriptor& rpDescriptor)
-{
- if (mpDescriptor != rpDescriptor)
- {
- mpDescriptor = rpDescriptor;
-
- if (mpDescriptor)
- mbIsExcluded = mpDescriptor->HasState(model::PageDescriptor::ST_Excluded);
- else
- mbIsExcluded = false;
- SetButtonUnderMouse();
- mpDownButton.reset();
-
- return true;
- }
- else
- return false;
-}
-
-
-
-
-sal_Int32 ButtonBar::GetButtonCount (const bool bIsExcluded) const
-{
- if (bIsExcluded)
- return maExcludedButtons.size();
- else
- return maRegularButtons.size();
-}
-
-
-
-
-::boost::shared_ptr<Button> ButtonBar::GetButton (
- const bool bIsExcluded,
- const sal_Int32 nIndex) const
-{
- const ::std::vector<boost::shared_ptr<Button> >& rButtons (bIsExcluded
- ? maExcludedButtons
- : maRegularButtons);
-
- if (nIndex<0 || sal_uInt32(nIndex)>=rButtons.size())
- {
- OSL_ASSERT(nIndex<0 || sal_uInt32(nIndex)>=rButtons.size());
- return ::boost::shared_ptr<Button>();
- }
- else
- return rButtons[sal_uInt32(nIndex)];
-}
-
-
-
-
-SharedButton ButtonBar::GetButtonAt (const Point aModelLocation)
-{
- if (IsMouseOverBar(aModelLocation))
- {
- const Point aLocalLocation (aModelLocation - mpDescriptor->GetBoundingBox().TopLeft());
- ::std::vector<SharedButton>& rButtons (
- mbIsExcluded ? maExcludedButtons : maRegularButtons);
- for (sal_uInt32 nIndex=0; nIndex<rButtons.size(); ++nIndex)
- {
- if (rButtons[sal_uInt32(nIndex)]->GetBoundingBox().IsInside(aLocalLocation))
- {
- if (rButtons[sal_uInt32(nIndex)]->IsEnabled())
- return rButtons[sal_uInt32(nIndex)];
- else
- return SharedButton();
- }
- }
- }
-
- return SharedButton();
-}
-
-
-
-
-bool ButtonBar::IsMouseOverBar (void) const
-{
- return mbIsMouseOverBar;
-}
-
-
-
-
-bool ButtonBar::SetButtonUnderMouse (const SharedButton& rButton)
-{
- if (mpButtonUnderMouse != rButton)
- {
- if (mpButtonUnderMouse)
- mpButtonUnderMouse->SetState(Button::State_Normal);
-
- mpButtonUnderMouse = rButton;
-
- return true;
- }
- else
- return false;
-}
-
-
-
-
-void ButtonBar::Paint (
- OutputDevice& rDevice,
- const model::SharedPageDescriptor& rpDescriptor)
-{
- if ( ! rpDescriptor)
- return;
-
- const double nButtonBarAlpha (rpDescriptor->GetVisualState().GetButtonBarAlpha());
- if (nButtonBarAlpha >= 1)
- return;
-
- LayoutButtons(rpDescriptor->GetBoundingBox().GetSize());
-
- const Point aOffset (rpDescriptor->GetBoundingBox().TopLeft());
-
- // Paint the background.
- PaintButtonBackground(rDevice, rpDescriptor, aOffset);
-
- // Paint the buttons.
- const ::std::vector<SharedButton>& rButtons (
- rpDescriptor->HasState(model::PageDescriptor::ST_Excluded)
- ? maExcludedButtons
- : maRegularButtons);
-
-
- const double nButtonAlpha (rpDescriptor->GetVisualState().GetButtonAlpha());
- for (sal_uInt32 nIndex=0; nIndex<rButtons.size(); ++nIndex)
- rButtons[nIndex]->Paint(
- rDevice,
- aOffset,
- nButtonAlpha,
- mrSlideSorter.GetTheme());
-}
-
-
-
-
-bool ButtonBar::IsMouseOverButton (void) const
-{
- return mpButtonUnderMouse;
-}
-
-
-
-
-void ButtonBar::PaintButtonBackground (
- OutputDevice& rDevice,
- const model::SharedPageDescriptor& rpDescriptor,
- const Point aOffset)
-{
- BitmapEx* pBitmap = NULL;
- if (maButtonDownBackground.IsEmpty() || maNormalBackground.IsEmpty())
- {
- if (mpBackgroundTheme)
- {
- maButtonDownBackground = mpBackgroundTheme->CreateBackground(rDevice, true);
- maNormalBackground = mpBackgroundTheme->CreateBackground(rDevice, false);
- }
- }
- if (mpButtonUnderMouse && mpButtonUnderMouse->IsDown())
- pBitmap = &maButtonDownBackground;
- else
- pBitmap = &maNormalBackground;
- if (pBitmap != NULL)
- {
- AlphaMask aMask (pBitmap->GetSizePixel());
- AdaptTransparency(
- aMask,
- pBitmap->GetAlpha(),
- rpDescriptor->GetVisualState().GetButtonBarAlpha());
- rDevice.DrawBitmapEx(maBackgroundLocation+aOffset, BitmapEx(pBitmap->GetBitmap(), aMask));
- }
-}
-
-
-
-
-bool ButtonBar::IsMouseOverBar (const Point aModelLocation) const
-{
- if ( ! mpDescriptor || ! mpDescriptor->GetBoundingBox().IsInside(aModelLocation))
- return false;
-
- if ( ! maButtonBoundingBox.IsInside(aModelLocation - mpDescriptor->GetBoundingBox().TopLeft()))
- return false;
-
- return true;
-}
-
-
-
-
-void ButtonBar::RequestLayout (void)
-{
- maPageObjectSize = Size(0,0);
-}
-
-
-
-
-void ButtonBar::LayoutButtons (const Size aPageObjectSize)
-{
- if (maPageObjectSize != aPageObjectSize)
- {
- maPageObjectSize = aPageObjectSize;
-
- if (mpBackgroundTheme)
- {
- mpBackgroundTheme->SetPreviewBoundingBox(
- mrSlideSorter.GetView().GetLayouter().GetPageObjectLayouter()->GetBoundingBox(
- Point(0,0),
- PageObjectLayouter::Preview,
- PageObjectLayouter::ModelCoordinateSystem));
- LayoutButtons();
- }
-
- // Release the background bitmaps so that on the next paint
- // they are created anew in the right size.
- maNormalBackground.SetEmpty();
- maButtonDownBackground.SetEmpty();
- }
-}
-
-
-
-
-bool ButtonBar::LayoutButtons (void)
-{
- const sal_Int32 nGap (mrSlideSorter.GetTheme()->GetIntegerValue(Theme::Integer_ButtonGap));
- const sal_Int32 nBorder (mrSlideSorter.GetTheme()->GetIntegerValue(Theme::Integer_ButtonBorder));
-
- const Button::IconSize eIconSize (mpBackgroundTheme->GetIconSize());
-
- // Tell buttons which size they are.
- for (sal_uInt32 nIndex=0; nIndex<maExcludedButtons.size(); ++nIndex)
- maExcludedButtons[nIndex]->SetIconSize(eIconSize);
- for (sal_uInt32 nIndex=0; nIndex<maRegularButtons.size(); ++nIndex)
- maRegularButtons[nIndex]->SetIconSize(eIconSize);
-
- // Determine maximal height and total width of the buttons.
- // Start with the buttons used for the excluded state.
- sal_Int32 nMaximumHeight (0);
- sal_Int32 nExcludedTotalWidth ((maExcludedButtons.size()-1) * nGap + 2*nBorder);
- for (sal_uInt32 nIndex=0; nIndex<maExcludedButtons.size(); ++nIndex)
- {
- const Size aSize (maExcludedButtons[nIndex]->GetSize());
- if (aSize.Height() > nMaximumHeight)
- nMaximumHeight = aSize.Height();
- nExcludedTotalWidth += aSize.Width();
- }
-
- // Do the same for the regular buttons.
- sal_Int32 nRegularTotalWidth ((maRegularButtons.size()-1) * nGap + 2*nBorder);
- for (sal_uInt32 nIndex=0; nIndex<maRegularButtons.size(); ++nIndex)
- {
- const Size aSize (maRegularButtons[nIndex]->GetSize());
- if (aSize.Height() > nMaximumHeight)
- nMaximumHeight = aSize.Height();
- nRegularTotalWidth += aSize.Width();
- }
- nMaximumHeight += 2*nBorder;
-
- // Set up the bounding box of the button bar.
- maButtonBoundingBox = mpBackgroundTheme->GetButtonArea();
- maBackgroundLocation = mpBackgroundTheme->GetBackgroundLocation();
- if (mrSlideSorter.GetTheme()->GetIntegerValue(Theme::Integer_ButtonPaintType) == 1)
- {
- // Center the buttons.
- maButtonBoundingBox.Left() += (maButtonBoundingBox.GetWidth() - nRegularTotalWidth)/2;
- maButtonBoundingBox.Right() = maButtonBoundingBox.Left() + nRegularTotalWidth - 1;
- }
-
- // Place the buttons.
- Rectangle aBox (maButtonBoundingBox);
- aBox.Right() -= nBorder;
- for (sal_Int32 nIndex=maRegularButtons.size()-1; nIndex>=0; --nIndex)
- {
- maRegularButtons[nIndex]->Place(aBox);
- aBox.Right() = maRegularButtons[nIndex]->GetBoundingBox().Left() - nGap;
- }
-
- // For slides excluded from the show there is only one icon placed
- // exactly like the second of the regular icons.
- if (maRegularButtons.size()>=2 && maExcludedButtons.size()>=1)
- {
- aBox = maRegularButtons[1]->GetBoundingBox();
- maExcludedButtons[0]->Place(aBox);
- }
-
- // We return true only when there is no inactive button.
- for (sal_uInt32 nIndex=0; nIndex<maExcludedButtons.size(); ++nIndex)
- if ( ! maExcludedButtons[nIndex]->IsActive())
- return false;
- for (sal_uInt32 nIndex=0; nIndex<maRegularButtons.size(); ++nIndex)
- if ( ! maRegularButtons[nIndex]->IsActive())
- return false;
-
- return true;
-}
-
-
-
-
-void ButtonBar::RequestFadeIn (
- const model::SharedPageDescriptor& rpDescriptor,
- const bool bAnimate)
-{
- if ( ! rpDescriptor)
- return;
- if (mnLockCount > 0)
- return;
-
- const double nMinAlpha (0);
- if ( ! bAnimate)
- {
- rpDescriptor->GetVisualState().SetButtonAlpha(nMinAlpha);
- rpDescriptor->GetVisualState().SetButtonBarAlpha(nMinAlpha);
- }
- else
- StartFadeAnimation(rpDescriptor, nMinAlpha, true);
-}
-
-
-
-
-void ButtonBar::RequestFadeOut (
- const model::SharedPageDescriptor& rpDescriptor,
- const bool bAnimate)
-{
- if ( ! rpDescriptor)
- return;
- if (mnLockCount > 0)
- return;
-
- const double nMaxAlpha (1);
- if ( ! bAnimate)
- {
- rpDescriptor->GetVisualState().SetButtonAlpha(nMaxAlpha);
- rpDescriptor->GetVisualState().SetButtonBarAlpha(nMaxAlpha);
- }
- else
- StartFadeAnimation(rpDescriptor, nMaxAlpha, false);
-}
-
-
-
-
-bool ButtonBar::IsVisible (const model::SharedPageDescriptor& rpDescriptor)
-{
- const double nMaxAlpha (1);
- return rpDescriptor && rpDescriptor->GetVisualState().GetButtonBarAlpha() < nMaxAlpha;
-}
-
-
-
-
-void ButtonBar::HandleDataChangeEvent (void)
-{
- maExcludedButtons.clear();
- maExcludedButtons.push_back(::boost::shared_ptr<Button>(new UnhideButton(mrSlideSorter)));
-
- maRegularButtons.clear();
- maRegularButtons.push_back(::boost::shared_ptr<Button>(new StartShowButton(mrSlideSorter)));
- maRegularButtons.push_back(::boost::shared_ptr<Button>(new HideButton(mrSlideSorter)));
- maRegularButtons.push_back(::boost::shared_ptr<Button>(new DuplicateButton(mrSlideSorter)));
-
- mpBackgroundTheme.reset(
- new BitmapBackgroundTheme(
- mrSlideSorter.GetTheme(),
- maRegularButtons));
-
- // Force layout on next Paint().
- maPageObjectSize = Size(0,0);
-}
-
-
-
-
-void ButtonBar::StartFadeAnimation (
- const model::SharedPageDescriptor& rpDescriptor,
- const double nTargetAlpha,
- const bool bFadeIn)
-{
- model::SharedPageDescriptor pDescriptor (rpDescriptor);
-
- const double nCurrentButtonAlpha (pDescriptor->GetVisualState().GetButtonAlpha());
- const double nCurrentButtonBarAlpha (pDescriptor->GetVisualState().GetButtonBarAlpha());
-
- // Stop a running animation.
- const controller::Animator::AnimationId nId (
- pDescriptor->GetVisualState().GetButtonAlphaAnimationId());
- if (nId != controller::Animator::NotAnAnimationId)
- mrSlideSorter.GetController().GetAnimator()->RemoveAnimation(nId);
-
- // Prepare the blending functors that translate [0,1] animation
- // times into alpha values of buttons and button bar.
- const ::boost::function<double(double)> aButtonBlendFunctor (
- ::boost::bind(
- controller::AnimationFunction::Blend,
- nCurrentButtonAlpha,
- nTargetAlpha,
- ::boost::bind(controller::AnimationFunction::Linear, _1)));
- const ::boost::function<double(double)> aButtonBarBlendFunctor (
- ::boost::bind(
- controller::AnimationFunction::Blend,
- nCurrentButtonBarAlpha,
- nTargetAlpha,
- ::boost::bind(controller::AnimationFunction::Linear, _1)));
-
- // Delay the fade in a little bit when the buttons are not visible at
- // all so that we do not leave a trail of half-visible buttons when the
- // mouse is moved across the screen. No delay on fade out or when the
- // buttons are already showing. Fade out is faster than fade in.
- const double nDelay (nCurrentButtonBarAlpha>0 && nCurrentButtonBarAlpha<1
- ? 0
- : (mrSlideSorter.GetTheme()->GetIntegerValue(bFadeIn
- ? Theme::Integer_ButtonFadeInDelay
- : Theme::Integer_ButtonFadeOutDelay)));
- const double nDuration (mrSlideSorter.GetTheme()->GetIntegerValue(bFadeIn
- ? Theme::Integer_ButtonFadeInDuration
- : Theme::Integer_ButtonFadeOutDuration));
- pDescriptor->GetVisualState().SetButtonAlphaAnimationId(
- mrSlideSorter.GetController().GetAnimator()->AddAnimation(
- ::boost::bind(
- controller::AnimationFunction::ApplyButtonAlphaChange,
- pDescriptor,
- ::boost::ref(mrSlideSorter.GetView()),
- ::boost::bind(aButtonBlendFunctor, _1),
- ::boost::bind(aButtonBarBlendFunctor, _1)),
- static_cast<sal_Int32>(nDelay),
- static_cast<sal_Int32>(nDuration),
- ::boost::bind(
- &model::VisualState::SetButtonAlphaAnimationId,
- ::boost::ref(pDescriptor->GetVisualState()),
- controller::Animator::NotAnAnimationId)
- ));
-}
-
-
-
-
-void ButtonBar::AcquireLock (void)
-{
- if (mnLockCount == 0 && mpDescriptor)
- RequestFadeOut(mpDescriptor, true);
-
- ++mnLockCount;
-}
-
-
-
-
-void ButtonBar::ReleaseLock (void)
-{
- --mnLockCount;
-
- if (mnLockCount == 0 && mpDescriptor)
- RequestFadeIn(mpDescriptor, true);
-}
-
-
-
-
-//===== BackgroundTheme =====================================================
-
-ButtonBar::BackgroundTheme::BackgroundTheme (
- const ::boost::shared_ptr<Theme>& rpTheme,
- const ::std::vector<SharedButton>& rButtons)
- : mpTheme(rpTheme)
-{
- UpdateMinimumIconSizes(rButtons);
-}
-
-
-
-
-void ButtonBar::BackgroundTheme::SetPreviewBoundingBox (const Rectangle& rPreviewBoundingBox)
-{
- maPreviewBoundingBox = rPreviewBoundingBox;
- Layout();
-}
-
-
-
-
-void ButtonBar::BackgroundTheme::UpdateMinimumIconSizes (
- const ::std::vector<SharedButton>& rButtons)
-{
- OSL_ASSERT(mpTheme);
-
- sal_Int32 nMaximumHeightLarge (0);
- sal_Int32 nMaximumHeightMedium (0);
- sal_Int32 nMaximumHeightSmall (0);
- const sal_Int32 nGap (mpTheme->GetIntegerValue(Theme::Integer_ButtonGap));
- const sal_Int32 nBorder (mpTheme->GetIntegerValue(Theme::Integer_ButtonBorder));
- sal_Int32 nTotalWidthLarge ((rButtons.size()-1) * nGap + 2*nBorder);
- sal_Int32 nTotalWidthMedium ((rButtons.size()-1) * nGap + 2*nBorder);
- sal_Int32 nTotalWidthSmall ((rButtons.size()-1) * nGap + 2*nBorder);
- for (sal_uInt32 nIndex=0; nIndex<rButtons.size(); ++nIndex)
- {
- // Update large size.
- Size aSize = rButtons[nIndex]->GetSize(Button::IconSize_Large);
- if (aSize.Height() > nMaximumHeightLarge)
- nMaximumHeightLarge = aSize.Height();
- nTotalWidthLarge += aSize.Width();
-
- // Update medium size.
- aSize = rButtons[nIndex]->GetSize(Button::IconSize_Medium);
- if (aSize.Height() > nMaximumHeightMedium)
- nMaximumHeightMedium = aSize.Height();
- nTotalWidthMedium += aSize.Width();
-
- // Update small size.
- aSize = rButtons[nIndex]->GetSize(Button::IconSize_Small);
- if (aSize.Height() > nMaximumHeightSmall)
- nMaximumHeightSmall = aSize.Height();
- nTotalWidthSmall += aSize.Width();
- }
- maMinimumLargeButtonAreaSize = Size(nTotalWidthLarge, nMaximumHeightLarge+2*nBorder);
- maMinimumMediumButtonAreaSize = Size(nTotalWidthMedium, nMaximumHeightMedium+2*nBorder);
- maMinimumSmallButtonAreaSize = Size(nTotalWidthSmall, nMaximumHeightSmall+2*nBorder);
-}
-
-
-
-
-Button::IconSize ButtonBar::BackgroundTheme::GetIconSize (void) const
-{
- return meIconSize;
-}
-
-
-
-
-//===== RectangleBackgroundTheme ============================================
-
-RectangleBackgroundTheme::RectangleBackgroundTheme (
- const ::boost::shared_ptr<Theme>& rpTheme,
- const ::std::vector<SharedButton>& rButtons)
- : BackgroundTheme(rpTheme, rButtons),
- mnBarHeight(0)
-{
-}
-
-
-
-
-BitmapEx RectangleBackgroundTheme::CreateBackground (
- const OutputDevice& rTemplateDevice,
- const bool bIsButtonDown) const
-{
- OSL_ASSERT(mpTheme);
-
- // Setup background color.
- Color aTopFillColor (mpTheme->GetGradientColor(
- Theme::Gradient_ButtonBackground,
- Theme::Fill1));
- Color aTopBorderColor (mpTheme->GetGradientColor(
- Theme::Gradient_ButtonBackground,
- Theme::Border1));
- Color aBottomFillColor (mpTheme->GetGradientColor(
- Theme::Gradient_ButtonBackground,
- Theme::Fill2));
- Color aBottomBorderColor (mpTheme->GetGradientColor(
- Theme::Gradient_ButtonBackground,
- Theme::Border2));
- if (bIsButtonDown)
- {
- aTopFillColor.DecreaseLuminance(50);
- aTopBorderColor.DecreaseLuminance(50);
- aBottomFillColor.DecreaseLuminance(50);
- aBottomBorderColor.DecreaseLuminance(50);
- }
-
- const int nWidth (maPreviewBoundingBox.GetWidth()+2);
- const int nHeight (mnBarHeight);
- const int nCenter (nHeight / 2);
-
- VirtualDevice aDevice (rTemplateDevice, 0, 8);
- aDevice.SetOutputSizePixel(Size(nWidth,nHeight));
-
- // Fill upper and lower half.
- aDevice.SetLineColor();
- aDevice.SetFillColor(aTopFillColor);
- aDevice.DrawRect(Rectangle(0,0,nWidth-1,nCenter));
- aDevice.SetFillColor(aBottomFillColor);
- aDevice.DrawRect(Rectangle(0,nCenter,nWidth-1,nHeight-1));
-
- // Draw border.
- aDevice.SetFillColor();
- aDevice.SetLineColor(aTopBorderColor);
- aDevice.DrawLine(Point(0,nCenter),Point(0,0));
- aDevice.DrawLine(Point(0,0), Point(nWidth-1,0));
- aDevice.DrawLine(Point(nWidth-1,0),Point(nWidth-1,nCenter));
- aDevice.SetLineColor(aBottomBorderColor);
- aDevice.DrawLine(Point(0,nCenter),Point(0,nHeight-1));
- aDevice.DrawLine(Point(0,nHeight-1), Point(nWidth-1,nHeight-1));
- aDevice.DrawLine(Point(nWidth-1,nHeight-1),Point(nWidth-1,nCenter));
-
- return aDevice.GetBitmapEx(Point(0,0), Size(nWidth,nHeight));
-}
-
-
-
-
-Point RectangleBackgroundTheme::GetBackgroundLocation (void)
-{
- return Point(
- maPreviewBoundingBox.Left()-1,
- maPreviewBoundingBox.Bottom() - mnBarHeight + 2);
-}
-
-
-
-
-Rectangle RectangleBackgroundTheme::GetButtonArea (void)
-{
- return Rectangle(
- maPreviewBoundingBox.Left(),
- maPreviewBoundingBox.Bottom() - mnBarHeight + 2,
- maPreviewBoundingBox.Right(),
- maPreviewBoundingBox.Bottom());
-}
-
-
-
-
-void RectangleBackgroundTheme::Layout (void)
-{
- if (maPreviewBoundingBox.GetWidth() < maMinimumLargeButtonAreaSize.Width())
- if (maPreviewBoundingBox.GetWidth() < maMinimumMediumButtonAreaSize.Width())
- {
- meIconSize = Button::IconSize_Small;
- mnBarHeight = maMinimumSmallButtonAreaSize.Height();
- }
- else
- {
- meIconSize = Button::IconSize_Medium;
- mnBarHeight = maMinimumMediumButtonAreaSize.Height();
- }
- else
- {
- meIconSize = Button::IconSize_Large;
- mnBarHeight = maMinimumLargeButtonAreaSize.Height();
- }
-}
-
-
-
-
-//===== BitmapBackgroundTheme =================================================
-
-BitmapBackgroundTheme::BitmapBackgroundTheme (
- const ::boost::shared_ptr<Theme>& rpTheme,
- const ::std::vector<SharedButton>& rButtons)
- : BackgroundTheme(rpTheme, rButtons),
- maButtonArea(),
- maBackgroundLocation()
-{
-}
-
-
-
-
-BitmapEx BitmapBackgroundTheme::CreateBackground (
- const OutputDevice& rTemplateDevice,
- const bool bIsButtonDown) const
-{
- (void)rTemplateDevice;
- (void)bIsButtonDown;
-
- OSL_ASSERT(mpTheme);
-
- // Get images.
- switch (meIconSize)
- {
- case Button::IconSize_Large:
- default:
- return mpTheme->GetIcon(Theme::Icon_ButtonBarLarge);
-
- case Button::IconSize_Medium:
- return mpTheme->GetIcon(Theme::Icon_ButtonBarMedium);
-
- case Button::IconSize_Small:
- return mpTheme->GetIcon(Theme::Icon_ButtonBarSmall);
- }
-}
-
-
-
-
-Point BitmapBackgroundTheme::GetBackgroundLocation (void)
-{
- return maBackgroundLocation;
-}
-
-
-
-
-Rectangle BitmapBackgroundTheme::GetButtonArea (void)
-{
- return maButtonArea;
-}
-
-
-
-
-void BitmapBackgroundTheme::Layout (void)
-{
- Size aImageSize (mpTheme->GetIcon(Theme::Icon_ButtonBarLarge).GetSizePixel());
- if (aImageSize.Width() >= maPreviewBoundingBox.GetWidth())
- {
- aImageSize = mpTheme->GetIcon(Theme::Icon_ButtonBarMedium).GetSizePixel();
- if (aImageSize.Width() >= maPreviewBoundingBox.GetWidth())
- {
- meIconSize = Button::IconSize_Small;
- aImageSize = mpTheme->GetIcon(Theme::Icon_ButtonBarSmall).GetSizePixel();
- }
- else
- meIconSize = Button::IconSize_Medium;
- }
- else
- {
- meIconSize = Button::IconSize_Large;
- }
-
- maBackgroundLocation = Point(
- maPreviewBoundingBox.Left()
- + (maPreviewBoundingBox.GetWidth()-aImageSize.Width())/2,
- maPreviewBoundingBox.Bottom() - aImageSize.Height());
- maButtonArea = Rectangle(maBackgroundLocation, aImageSize);
-}
-
-
-
-
-//===== Button ================================================================
-
-Button::Button (
- SlideSorter& rSlideSorter,
- const ::rtl::OUString& rsHelpText)
- : mrSlideSorter(rSlideSorter),
- meState(State_Normal),
- maBoundingBox(),
- msHelpText(rsHelpText),
- mbIsActive(false),
- meIconSize(IconSize_Large)
-{
-}
-
-
-
-
-Button::~Button (void)
-{
-}
-
-
-
-
-bool Button::SetState (const State eState)
-{
- if (meState != eState)
- {
- meState = eState;
- return true;
- }
- else
- return false;
-}
-
-
-
-
-Button::State Button::GetState (void) const
-{
- return meState;
-}
-
-
-
-
-Rectangle Button::GetBoundingBox (void) const
-{
- if (mbIsActive)
- return maBoundingBox;
- else
- return Rectangle();
-}
-
-
-
-
-::rtl::OUString Button::GetHelpText (void) const
-{
- if (mbIsActive)
- return msHelpText;
- else
- return ::rtl::OUString();
-}
-
-
-
-
-bool Button::IsDown (void) const
-{
- return mbIsActive && meState==State_Down;
-}
-
-
-
-
-void Button::SetActiveState (const bool bIsActive)
-{
- mbIsActive = bIsActive;
-}
-
-
-
-
-bool Button::IsActive (void) const
-{
- return mbIsActive;
-}
-
-
-
-
-void Button::SetIconSize (const IconSize eIconSize)
-{
- meIconSize = eIconSize;
-}
-
-
-
-
-Button::IconSize Button::GetIconSize (void) const
-{
- return meIconSize;
-}
-
-
-
-
-bool Button::IsEnabled (void) const
-{
- return true;
-}
-
-
-
-
-//===== TextButton ============================================================
-
-TextButton::TextButton (
- SlideSorter& rSlideSorter,
- const ::rtl::OUString& rsText,
- const ::rtl::OUString& rsHelpText)
- : Button(rSlideSorter, rsHelpText),
- msText(rsText)
-{
-}
-
-
-
-
-void TextButton::Place (const Rectangle aButtonBarBox)
-{
- maBoundingBox = aButtonBarBox;
- SetActiveState(true);
-}
-
-
-
-
-void TextButton::Paint (
- OutputDevice& rDevice,
- const Point aOffset,
- const double nAlpha,
- const ::boost::shared_ptr<Theme>& rpTheme) const
-{
- (void)nAlpha;
-
- if (mbIsActive)
- {
- // Paint text over the button background.
- if (meState == State_Normal)
- rDevice.SetTextColor(rpTheme->GetColor(Theme::Color_ButtonText));
- else
- rDevice.SetTextColor(rpTheme->GetColor(Theme::Color_ButtonTextHover));
- Rectangle aBox (maBoundingBox);
- aBox += aOffset;
- rDevice.DrawText(aBox, msText, TEXT_DRAW_CENTER | TEXT_DRAW_VCENTER);
- }
-}
-
-
-
-
-Size TextButton::GetSize (void) const
-{
- return Size();
-}
-
-
-
-
-Size TextButton::GetSize (const Button::IconSize) const
-{
- return Size();
-}
-
-
-
-
-//===== ImageButon ============================================================
-
-ImageButton::ImageButton (
- SlideSorter& rSlideSorter,
- const BitmapEx& rLargeIcon,
- const BitmapEx& rLargeHoverIcon,
- const BitmapEx& rMediumIcon,
- const BitmapEx& rMediumHoverIcon,
- const BitmapEx& rSmallIcon,
- const BitmapEx& rSmallHoverIcon,
- const ::rtl::OUString& rsHelpText)
- : Button(rSlideSorter, rsHelpText),
- maLargeIcon(rLargeIcon),
- maLargeHoverIcon(rLargeHoverIcon.IsEmpty() ? rLargeIcon : rLargeHoverIcon),
- maMediumIcon(rMediumIcon),
- maMediumHoverIcon(rMediumHoverIcon.IsEmpty() ? rMediumIcon : rMediumHoverIcon),
- maSmallIcon(rSmallIcon),
- maSmallHoverIcon(rSmallHoverIcon.IsEmpty() ? rSmallIcon : rSmallHoverIcon)
-{
-}
-
-
-
-
-void ImageButton::Place (const Rectangle aButtonBarBox)
-{
- const sal_Int32 nWidth (GetSize().Width());
- maBoundingBox = Rectangle(
- aButtonBarBox.Right() - nWidth,
- aButtonBarBox.Top(),
- aButtonBarBox.Right(),
- aButtonBarBox.Bottom());
- SetActiveState(aButtonBarBox.IsInside(maBoundingBox));
-}
-
-
-
-
-void ImageButton::Paint (
- OutputDevice& rDevice,
- const Point aOffset,
- const double nAlpha,
- const ::boost::shared_ptr<Theme>& rpTheme) const
-{
- (void)rpTheme;
-
- if ( ! mbIsActive)
- return;
-
- const sal_uInt16 nSavedAntialiasingMode (rDevice.GetAntialiasing());
- rDevice.SetAntialiasing(nSavedAntialiasingMode | ANTIALIASING_ENABLE_B2DDRAW);
-
- rDevice.SetLineColor();
-
- // Choose icon.
- BitmapEx aIcon;
- switch (meIconSize)
- {
- case IconSize_Large:
- default:
- if (meState == State_Normal)
- aIcon = maLargeIcon;
- else
- aIcon = maLargeHoverIcon;
- break;
-
- case IconSize_Medium:
- if (meState == State_Normal)
- aIcon = maMediumIcon;
- else
- aIcon = maMediumHoverIcon;
- break;
-
- case IconSize_Small:
- if (meState == State_Normal)
- aIcon = maSmallIcon;
- else
- aIcon = maSmallHoverIcon;
- break;
- }
-
- // Paint icon.
- if ( ! aIcon.IsEmpty())
- {
- AlphaMask aMask (aIcon.GetSizePixel());
- AdaptTransparency(aMask, aIcon.GetAlpha(), nAlpha);
- rDevice.DrawBitmapEx(
- Point(
- maBoundingBox.Left()
- + aOffset.X()
- + (maBoundingBox.GetWidth()-aIcon.GetSizePixel().Width())/2,
- maBoundingBox.Top()
- + aOffset.Y()
- + (maBoundingBox.GetHeight()-aIcon.GetSizePixel().Height())/2),
- BitmapEx(aIcon.GetBitmap(), aMask));
- }
-
- rDevice.SetAntialiasing(nSavedAntialiasingMode);
-}
-
-
-
-
-Size ImageButton::GetSize (void) const
-{
- return GetSize(meIconSize);
-}
-
-
-
-
-Size ImageButton::GetSize (const Button::IconSize eIconSize) const
-{
- switch (eIconSize)
- {
- case IconSize_Large:
- default:
- return maLargeIcon.GetSizePixel();
-
- case IconSize_Medium:
- return maMediumIcon.GetSizePixel();
-
- case IconSize_Small:
- return maSmallIcon.GetSizePixel();
- }
-}
-
-
-
-
-//===== UnhideButton ==========================================================
-
-UnhideButton::UnhideButton (SlideSorter& rSlideSorter)
- : ImageButton(
- rSlideSorter,
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command2BLarge),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command2BLargeHover),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command2BMedium),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command2BMediumHover),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command2BSmall),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command2BSmallHover),
- rSlideSorter.GetTheme()->GetString(Theme::String_Command2B))
-{
-}
-
-
-
-
-void UnhideButton::ProcessClick (const model::SharedPageDescriptor& rpDescriptor)
-{
- if ( ! rpDescriptor)
- return;
- mrSlideSorter.GetController().GetSlotManager()->ChangeSlideExclusionState(
- (rpDescriptor->HasState(model::PageDescriptor::ST_Selected)
- ? model::SharedPageDescriptor()
- : rpDescriptor),
- false);
-}
-
-
-
-
-//===== StartSlideShowButton ==================================================
-
-StartShowButton::StartShowButton (SlideSorter& rSlideSorter)
- : ImageButton(
- rSlideSorter,
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command1Large),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command1LargeHover),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command1Medium),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command1MediumHover),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command1Small),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command1SmallHover),
- rSlideSorter.GetTheme()->GetString(Theme::String_Command1))
-{
-}
-
-
-
-
-bool StartShowButton::IsEnabled (void) const
-{
- ViewShell* pViewShell = mrSlideSorter.GetViewShell();
- if (pViewShell == NULL)
- return false;
- SfxDispatcher* pDispatcher = pViewShell->GetDispatcher();
- if (pDispatcher == NULL)
- return false;
-
- const SfxPoolItem* pState = NULL;
- const SfxItemState eState (pDispatcher->QueryState(SID_PRESENTATION, pState));
- return (eState & SFX_ITEM_DISABLED) == 0;
-}
-
-
-
-
-void StartShowButton::ProcessClick (const model::SharedPageDescriptor& rpDescriptor)
-{
- // Hide the tool tip early, while the slide show still intializes.
- mrSlideSorter.GetView().GetToolTip().SetPage(model::SharedPageDescriptor());
-
- Reference< XPresentation2 > xPresentation(
- mrSlideSorter.GetModel().GetDocument()->getPresentation());
- if (xPresentation.is())
- {
- Sequence<PropertyValue> aProperties (1);
- aProperties[0].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FirstPage"));
- const ::rtl::OUString sName (rpDescriptor->GetPage()->GetName());
- aProperties[0].Value = Any(sName);
- xPresentation->startWithArguments(aProperties);
- }
-}
-
-
-
-
-//===== HideButton ============================================================
-
-HideButton::HideButton (SlideSorter& rSlideSorter)
- : ImageButton(
- rSlideSorter,
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command2Large),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command2LargeHover),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command2Medium),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command2MediumHover),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command2Small),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command2SmallHover),
- rSlideSorter.GetTheme()->GetString(Theme::String_Command2))
-{
-}
-
-
-
-
-void HideButton::ProcessClick (const model::SharedPageDescriptor& rpDescriptor)
-{
- if ( ! rpDescriptor)
- return;
- mrSlideSorter.GetController().GetSlotManager()->ChangeSlideExclusionState(
- (rpDescriptor->HasState(model::PageDescriptor::ST_Selected)
- ? model::SharedPageDescriptor()
- : rpDescriptor),
- true);
-}
-
-
-
-
-//===== DuplicateButton =======================================================
-
-DuplicateButton::DuplicateButton (SlideSorter& rSlideSorter)
- : ImageButton(
- rSlideSorter,
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command3Large),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command3LargeHover),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command3Medium),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command3MediumHover),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command3Small),
- rSlideSorter.GetTheme()->GetIcon(Theme::Icon_Command3SmallHover),
- rSlideSorter.GetTheme()->GetString(Theme::String_Command3))
-{
-}
-
-
-
-
-bool DuplicateButton::IsEnabled (void) const
-{
- ViewShell* pViewShell = mrSlideSorter.GetViewShell();
- if (pViewShell == NULL)
- return false;
- SfxDispatcher* pDispatcher = pViewShell->GetDispatcher();
- if (pDispatcher == NULL)
- return false;
-
- const SfxPoolItem* pState = NULL;
- const SfxItemState eState (pDispatcher->QueryState(
- SID_DUPLICATE_PAGE,
- pState));
- return (eState & SFX_ITEM_DISABLED) == 0;
-}
-
-
-
-
-void DuplicateButton::ProcessClick (const model::SharedPageDescriptor& rpDescriptor)
-{
- if ( ! rpDescriptor)
- return;
-
- mrSlideSorter.GetView().SetPageUnderMouse(model::SharedPageDescriptor(),false);
-
- // When the page under the button is not selected then set the
- // selection to just this page.
- if ( ! rpDescriptor->HasState(model::PageDescriptor::ST_Selected))
- {
- mrSlideSorter.GetController().GetPageSelector().DeselectAllPages();
- mrSlideSorter.GetController().GetPageSelector().SelectPage(rpDescriptor);
- }
- // Duplicate the selected pages. Insert the new pages right
- // after the current selection and select them
- if (mrSlideSorter.GetViewShell() != NULL
- && mrSlideSorter.GetViewShell()->GetDispatcher() != NULL)
- {
- mrSlideSorter.GetViewShell()->GetDispatcher()->Execute(
- SID_DUPLICATE_PAGE,
- SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
- }
-}
-
-
-
-} } } // end of namespace ::sd::slidesorter::view
diff --git a/sd/source/ui/slidesorter/view/SlsFontProvider.cxx b/sd/source/ui/slidesorter/view/SlsFontProvider.cxx
deleted file mode 100644
index c7d7d2c34..000000000
--- a/sd/source/ui/slidesorter/view/SlsFontProvider.cxx
+++ /dev/null
@@ -1,135 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include "view/SlsFontProvider.hxx"
-
-#include "controller/SlideSorterController.hxx"
-
-#include <sfx2/app.hxx>
-#include <com/sun/star/uno/RuntimeException.hpp>
-
-
-using namespace ::sd::slidesorter;
-
-namespace sd { namespace slidesorter { namespace view {
-
-FontProvider* FontProvider::mpInstance = NULL;
-
-FontProvider& FontProvider::Instance (void)
-{
- if (mpInstance == NULL)
- {
- ::osl::GetGlobalMutex aMutexFunctor;
- ::osl::MutexGuard aGuard (aMutexFunctor());
- if (mpInstance == NULL)
- {
- // Create an instance of the class and register it at the
- // SdGlobalResourceContainer so that it is eventually released.
- FontProvider* pInstance = new FontProvider();
- SdGlobalResourceContainer::Instance().AddResource (
- ::std::auto_ptr<SdGlobalResource>(pInstance));
- OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER();
- mpInstance = pInstance;
- }
- }
- else
- {
- OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER();
- }
-
- // We throw an exception when for some strange reason no instance of
- // this class exists.
- if (mpInstance == NULL)
- throw ::com::sun::star::uno::RuntimeException(::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.IndexedPropertyValues")),
- NULL);
-
- return *mpInstance;
-}
-
-
-
-
-FontProvider::FontProvider (void)
- : maFont(),
- maMapMode()
-{
-}
-
-
-
-
-FontProvider::~FontProvider (void)
-{
-}
-
-
-
-
-void FontProvider::Invalidate (void)
-{
- maFont.reset();
-}
-
-
-
-
-FontProvider::SharedFontPointer FontProvider::GetFont (const OutputDevice& rDevice)
-{
- // Reset the font when the map mode has changed since its creation.
- if (maMapMode != rDevice.GetMapMode())
- maFont.reset();
-
- if (maFont.get() == NULL)
- {
- // Initialize the font from the application style settings.
- maFont.reset(new Font (Application::GetSettings().GetStyleSettings().GetAppFont()));
- maFont->SetTransparent(sal_True);
- maFont->SetWeight(WEIGHT_NORMAL);
-
- // Transform the point size to pixel size.
- MapMode aFontMapMode (MAP_POINT);
- Size aFontSize (rDevice.LogicToPixel(maFont->GetSize(), aFontMapMode));
-
- // Transform the font size to the logical coordinates of the device.
- maFont->SetSize (rDevice.PixelToLogic(aFontSize));
-
- // Remember the map mode of the given device to detect different
- // devices or modified zoom scales on future calls.
- maMapMode = rDevice.GetMapMode();
- }
-
- return maFont;
-}
-
-} } } // end of namespace ::sd::slidesorter::view
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/view/SlsFramePainter.cxx b/sd/source/ui/slidesorter/view/SlsFramePainter.cxx
deleted file mode 100644
index 3f1e6c3f6..000000000
--- a/sd/source/ui/slidesorter/view/SlsFramePainter.cxx
+++ /dev/null
@@ -1,265 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlsFramePainter.hxx"
-#include <vcl/outdev.hxx>
-#include <vcl/bmpacc.hxx>
-
-
-namespace sd { namespace slidesorter { namespace view {
-
-FramePainter::FramePainter (const BitmapEx& rShadowBitmap)
- : maTopLeft(rShadowBitmap,-1,-1),
- maTop(rShadowBitmap,0,-1),
- maTopRight(rShadowBitmap,+1,-1),
- maLeft(rShadowBitmap,-1,0),
- maRight(rShadowBitmap,+1,0),
- maBottomLeft(rShadowBitmap,-1,+1),
- maBottom(rShadowBitmap,0,+1),
- maBottomRight(rShadowBitmap,+1,+1),
- maCenter(rShadowBitmap,0,0),
- mbIsValid(false)
-{
- if (rShadowBitmap.GetSizePixel().Width() == rShadowBitmap.GetSizePixel().Height()
- && (rShadowBitmap.GetSizePixel().Width()-1)%2 == 0
- && ((rShadowBitmap.GetSizePixel().Width()-1)/2)%2 == 1)
- {
- mbIsValid = true;
- }
- else
- {
- OSL_ASSERT(rShadowBitmap.GetSizePixel().Width() == rShadowBitmap.GetSizePixel().Height());
- OSL_ASSERT((rShadowBitmap.GetSizePixel().Width()-1)%2 == 0);
- OSL_ASSERT(((rShadowBitmap.GetSizePixel().Width()-1)/2)%2 == 1);
- }
-}
-
-
-
-
-FramePainter::~FramePainter (void)
-{
-}
-
-
-
-
-void FramePainter::PaintFrame (
- OutputDevice& rDevice,
- const Rectangle aBox) const
-{
- if ( ! mbIsValid)
- return;
-
- // Paint the shadow.
- maTopLeft.PaintCorner(rDevice, aBox.TopLeft());
- maTopRight.PaintCorner(rDevice, aBox.TopRight());
- maBottomLeft.PaintCorner(rDevice, aBox.BottomLeft());
- maBottomRight.PaintCorner(rDevice, aBox.BottomRight());
- maLeft.PaintSide(rDevice, aBox.TopLeft(), aBox.BottomLeft(), maTopLeft, maBottomLeft);
- maRight.PaintSide(rDevice, aBox.TopRight(), aBox.BottomRight(), maTopRight, maBottomRight);
- maTop.PaintSide(rDevice, aBox.TopLeft(), aBox.TopRight(), maTopLeft, maTopRight);
- maBottom.PaintSide(rDevice, aBox.BottomLeft(), aBox.BottomRight(), maBottomLeft, maBottomRight);
- maCenter.PaintCenter(rDevice,aBox);
-}
-
-
-
-
-void FramePainter::AdaptColor (
- const Color aNewColor,
- const bool bEraseCenter)
-{
- // Get the source color.
- if (maCenter.maBitmap.IsEmpty())
- return;
- BitmapReadAccess* pReadAccess = maCenter.maBitmap.GetBitmap().AcquireReadAccess();
- if (pReadAccess == NULL)
- return;
- const Color aSourceColor = pReadAccess->GetColor(0,0);
- maCenter.maBitmap.GetBitmap().ReleaseAccess(pReadAccess);
-
- // Erase the center bitmap.
- if (bEraseCenter)
- maCenter.maBitmap.SetEmpty();
-
- // Replace the color in all bitmaps.
- maTopLeft.maBitmap.Replace(aSourceColor, aNewColor, 0);
- maTop.maBitmap.Replace(aSourceColor, aNewColor, 0);
- maTopRight.maBitmap.Replace(aSourceColor, aNewColor, 0);
- maLeft.maBitmap.Replace(aSourceColor, aNewColor, 0);
- maCenter.maBitmap.Replace(aSourceColor, aNewColor, 0);
- maRight.maBitmap.Replace(aSourceColor, aNewColor, 0);
- maBottomLeft.maBitmap.Replace(aSourceColor, aNewColor, 0);
- maBottom.maBitmap.Replace(aSourceColor, aNewColor, 0);
- maBottomRight.maBitmap.Replace(aSourceColor, aNewColor, 0);
-}
-
-
-
-
-//===== FramePainter::OffsetBitmap ============================================
-
-FramePainter::OffsetBitmap::OffsetBitmap (
- const BitmapEx& rBitmap,
- const sal_Int32 nHorizontalPosition,
- const sal_Int32 nVerticalPosition)
- : maBitmap(),
- maOffset()
-{
- OSL_ASSERT(nHorizontalPosition>=-1 && nHorizontalPosition<=+1);
- OSL_ASSERT(nVerticalPosition>=-1 && nVerticalPosition<=+1);
-
- const sal_Int32 nS (1);
- const sal_Int32 nC (::std::max<sal_Int32>(0,(rBitmap.GetSizePixel().Width()-nS)/2));
- const sal_Int32 nO (nC/2);
-
- const Point aOrigin(
- nHorizontalPosition<0 ? 0 : (nHorizontalPosition == 0 ? nC : nC+nS),
- nVerticalPosition<0 ? 0 : (nVerticalPosition == 0 ? nC : nC+nS));
- const Size aSize(
- nHorizontalPosition==0 ? nS : nC,
- nVerticalPosition==0 ? nS : nC);
- maBitmap = BitmapEx(rBitmap, aOrigin, aSize);
- if (maBitmap.IsEmpty())
- return;
- maOffset = Point(
- nHorizontalPosition<0 ? -nO : nHorizontalPosition>0 ? -nO : 0,
- nVerticalPosition<0 ? -nO : nVerticalPosition>0 ? -nO : 0);
-
- // Enlarge the side bitmaps so that painting the frame requires less
- // paint calls.
- const sal_Int32 nSideBitmapSize (64);
- if (nHorizontalPosition == 0 && nVerticalPosition == 0)
- {
- maBitmap.Scale(Size(nSideBitmapSize,nSideBitmapSize), BMP_SCALE_FAST);
- }
- else if (nHorizontalPosition == 0)
- {
- maBitmap.Scale(Size(nSideBitmapSize,aSize.Height()), BMP_SCALE_FAST);
- }
- else if (nVerticalPosition == 0)
- {
- maBitmap.Scale(Size(maBitmap.GetSizePixel().Width(), nSideBitmapSize), BMP_SCALE_FAST);
- }
-}
-
-
-
-
-void FramePainter::OffsetBitmap::PaintCorner (
- OutputDevice& rDevice,
- const Point& rAnchor) const
-{
- if ( ! maBitmap.IsEmpty())
- rDevice.DrawBitmapEx(rAnchor+maOffset, maBitmap);
-}
-
-
-
-
-void FramePainter::OffsetBitmap::PaintSide (
- OutputDevice& rDevice,
- const Point& rAnchor1,
- const Point& rAnchor2,
- const OffsetBitmap& rCornerBitmap1,
- const OffsetBitmap& rCornerBitmap2) const
-{
- if (maBitmap.IsEmpty())
- return;
-
- const Size aBitmapSize (maBitmap.GetSizePixel());
- if (rAnchor1.Y() == rAnchor2.Y())
- {
- // Side is horizontal.
- const sal_Int32 nY (rAnchor1.Y() + maOffset.Y());
- const sal_Int32 nLeft (
- rAnchor1.X()
- + rCornerBitmap1.maBitmap.GetSizePixel().Width()
- + rCornerBitmap1.maOffset.X());
- const sal_Int32 nRight (
- rAnchor2.X()
- + rCornerBitmap2.maOffset.X()\
- - 1);
- for (sal_Int32 nX=nLeft; nX<=nRight; nX+=aBitmapSize.Width())
- {
- rDevice.DrawBitmapEx(
- Point(nX,nY),
- Size(std::min(aBitmapSize.Width(),static_cast<long>(nRight-nX+1)),aBitmapSize.Height()),
- maBitmap);
- }
- }
- else if (rAnchor1.X() == rAnchor2.X())
- {
- // Side is vertical.
- const sal_Int32 nX (rAnchor1.X() + maOffset.X());
- const sal_Int32 nTop (
- rAnchor1.Y()
- + rCornerBitmap1.maBitmap.GetSizePixel().Height()
- + rCornerBitmap1.maOffset.Y());
- const sal_Int32 nBottom (
- rAnchor2.Y()
- + rCornerBitmap2.maOffset.Y()
- - 1);
- for (sal_Int32 nY=nTop; nY<=nBottom; nY+=aBitmapSize.Height())
- {
- rDevice.DrawBitmapEx(
- Point(nX,nY),
- Size(aBitmapSize.Width(), std::min(aBitmapSize.Height(), static_cast<long>(nBottom-nY+1))),
- maBitmap);
- }
- }
- else
- {
- // Diagonal sides indicatee an error.
- OSL_ASSERT(false);
- }
-}
-
-
-
-
-void FramePainter::OffsetBitmap::PaintCenter (
- OutputDevice& rDevice,
- const Rectangle& rBox) const
-{
- const Size aBitmapSize (maBitmap.GetSizePixel());
- for (sal_Int32 nY=rBox.Top(); nY<=rBox.Bottom(); nY+=aBitmapSize.Height())
- for (sal_Int32 nX=rBox.Left(); nX<=rBox.Right(); nX+=aBitmapSize.Width())
- rDevice.DrawBitmapEx(
- Point(nX,nY),
- Size(
- ::std::min(aBitmapSize.Width(), rBox.Right()-nX+1),
- std::min(aBitmapSize.Height(), rBox.Bottom()-nY+1)),
- maBitmap);
-}
-
-
-
-} } } // end of namespace sd::slidesorter::view
diff --git a/sd/source/ui/slidesorter/view/SlsFramePainter.hxx b/sd/source/ui/slidesorter/view/SlsFramePainter.hxx
deleted file mode 100644
index c029684aa..000000000
--- a/sd/source/ui/slidesorter/view/SlsFramePainter.hxx
+++ /dev/null
@@ -1,121 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_VIEW_FRAME_PAINTER_HXX
-#define SD_SLIDESORTER_VIEW_FRAME_PAINTER_HXX
-
-#include <vcl/bitmapex.hxx>
-
-
-namespace sd { namespace slidesorter { namespace view {
-
-class FramePainter
-{
-public:
- FramePainter (const BitmapEx& rBitmap);
- ~FramePainter (void);
-
- /** Paint a border around the given box by using a set of bitmaps for
- the corners and sides.
- */
- void PaintFrame (OutputDevice&rDevice, const Rectangle aBox) const;
-
- /** Special functionality that takes the color from the center
- bitmap and replaces that color in all bitmaps by the given new
- color. Alpha values are not modified.
- @param bClearCenterBitmap
- When <TRUE/> then the center bitmap is erased.
- */
- void AdaptColor (const Color aNewColor, const bool bClearCenterBitmap);
-
-private:
- /** Bitmap with offset that is used when the bitmap is painted. The bitmap
- */
- class OffsetBitmap {
- public:
- BitmapEx maBitmap;
- Point maOffset;
-
- /** Create one of the eight shadow bitmaps from one that combines
- them all. This larger bitmap is expected to have dimension NxN
- with N=1+2*M. Of this larger bitmap there are created four
- corner bitmaps of size 2*M x 2*M and four side bitmaps of sizes
- 1xM (top and bottom) and Mx1 (left and right). The corner
- bitmaps have each one quadrant of size MxM that is painted under
- the interior of the frame.
- @param rBitmap
- The larger bitmap of which the eight shadow bitmaps are cut
- out from.
- @param nHorizontalPosition
- Valid values are -1 (left), 0 (center), and +1 (right).
- @param nVerticalPosition
- Valid values are -1 (top), 0 (center), and +1 (bottom).
- */
- OffsetBitmap (
- const BitmapEx& rBitmap,
- const sal_Int32 nHorizontalPosition,
- const sal_Int32 nVerticalPosition);
-
- /** Use the given device to paint the bitmap at the location that is
- the sum of the given anchor and the internal offset.
- */
- void PaintCorner (OutputDevice& rDevice, const Point& rAnchor) const;
-
- /** Use the given device to paint the bitmap stretched between the
- two given locations. Offsets of the adjacent corner bitmaps and
- the offset of the side bitmap are used to determine the area
- that is to be filled with the side bitmap.
- */
- void PaintSide (
- OutputDevice& rDevice,
- const Point& rAnchor1,
- const Point& rAnchor2,
- const OffsetBitmap& rCornerBitmap1,
- const OffsetBitmap& rCornerBitmap2) const;
-
- /** Fill the given rectangle with the bitmap.
- */
- void PaintCenter (
- OutputDevice& rDevice,
- const Rectangle& rBox) const;
- };
- OffsetBitmap maTopLeft;
- OffsetBitmap maTop;
- OffsetBitmap maTopRight;
- OffsetBitmap maLeft;
- OffsetBitmap maRight;
- OffsetBitmap maBottomLeft;
- OffsetBitmap maBottom;
- OffsetBitmap maBottomRight;
- OffsetBitmap maCenter;
- bool mbIsValid;
-};
-
-
-} } } // end of namespace sd::slidesorter::view
-
-#endif
diff --git a/sd/source/ui/slidesorter/view/SlsInsertAnimator.cxx b/sd/source/ui/slidesorter/view/SlsInsertAnimator.cxx
deleted file mode 100644
index 6cd455730..000000000
--- a/sd/source/ui/slidesorter/view/SlsInsertAnimator.cxx
+++ /dev/null
@@ -1,537 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "view/SlsInsertAnimator.hxx"
-#include "controller/SlideSorterController.hxx"
-#include "controller/SlsAnimationFunction.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsLayouter.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageEnumerationProvider.hxx"
-
-#include <set>
-#include <boost/bind.hpp>
-#include <boost/enable_shared_from_this.hpp>
-
-namespace sd { namespace slidesorter { namespace view {
-
-namespace {
-
-class PageObjectRun;
-
-class AnimatorAccess
-{
-public:
- virtual void AddRun (const ::boost::shared_ptr<PageObjectRun> pRun) = 0;
- virtual void RemoveRun (const ::boost::shared_ptr<PageObjectRun> pRun) = 0;
- virtual model::SlideSorterModel& GetModel (void) const = 0;
- virtual view::SlideSorterView& GetView (void) const = 0;
- virtual ::boost::shared_ptr<controller::Animator> GetAnimator (void) = 0;
- virtual SharedSdWindow GetContentWindow (void) = 0;
-};
-
-
-/** Controller of the position offsets of all page objects in one row or one
- column.
-*/
-class PageObjectRun : public ::boost::enable_shared_from_this<PageObjectRun>
-{
-public:
- PageObjectRun (
- AnimatorAccess& rAnimatorAccess,
- const sal_Int32 nRunIndex,
- const sal_Int32 nStartIndex,
- const sal_Int32 nEndIndex);
- ~PageObjectRun (void);
-
- void operator () (const double nTime);
-
- void UpdateOffsets(
- const InsertPosition& rInsertPosition,
- const view::Layouter& GetLayouter);
- void ResetOffsets (const controller::Animator::AnimationMode eMode);
-
- /// Index of the row or column that this run represents.
- sal_Int32 mnRunIndex;
- /// The index at which to make place for the insertion indicator (-1 for
- /// no indicator).
- sal_Int32 mnLocalInsertIndex;
- /// Index of the first page in the run.
- sal_Int32 mnStartIndex;
- /// Index of the last page in the run.
- sal_Int32 mnEndIndex;
- /// Offset of each item in the run at the start of the current animation.
- ::std::vector<Point> maStartOffset;
- /// Target offset of each item in the run at the end of the current animation.
- ::std::vector<Point> maEndOffset;
- /// Time at which the current animation started.
- double mnStartTime;
-
- class Comparator
- {
- public: bool operator() (
- const ::boost::shared_ptr<PageObjectRun>& rpRunA,
- const ::boost::shared_ptr<PageObjectRun>& rpRunB) const
- {
- return rpRunA->mnRunIndex < rpRunB->mnRunIndex;
- }
- };
-private:
- controller::Animator::AnimationId mnAnimationId;
- AnimatorAccess& mrAnimatorAccess;
- ::boost::function<double(double)> maAccelerationFunction;
-
- Rectangle GetInnerBoundingBox (
- const view::Layouter& rLayouter,
- const sal_Int32 nIndex) const;
- void RestartAnimation (void);
-};
-typedef ::boost::shared_ptr<PageObjectRun> SharedPageObjectRun;
-
-
-Point Blend (const Point& rPointA, const Point& rPointB, const double nT)
-{
- return Point(
- sal_Int32(rPointA.X() * (1-nT) + rPointB.X() * nT),
- sal_Int32(rPointA.Y() * (1-nT) + rPointB.Y() * nT));
-}
-
-} // end of anonymous namespace
-
-
-
-class InsertAnimator::Implementation : public AnimatorAccess
-{
-public:
- Implementation (SlideSorter& rSlideSorter);
- virtual ~Implementation (void);
-
- void SetInsertPosition (
- const InsertPosition& rInsertPosition,
- const controller::Animator::AnimationMode eAnimationMode);
-
- virtual void AddRun (const ::boost::shared_ptr<PageObjectRun> pRun);
- virtual void RemoveRun (const ::boost::shared_ptr<PageObjectRun> pRun);
-
- virtual model::SlideSorterModel& GetModel (void) const { return mrModel; }
- virtual view::SlideSorterView& GetView (void) const { return mrView; }
- virtual ::boost::shared_ptr<controller::Animator> GetAnimator (void) { return mpAnimator; }
- virtual SharedSdWindow GetContentWindow (void) { return mrSlideSorter.GetContentWindow(); }
-
-private:
- model::SlideSorterModel& mrModel;
- view::SlideSorterView& mrView;
- SlideSorter& mrSlideSorter;
- ::boost::shared_ptr<controller::Animator> mpAnimator;
- typedef ::std::set<SharedPageObjectRun, PageObjectRun::Comparator> RunContainer;
- RunContainer maRuns;
- InsertPosition maInsertPosition;
-
- void StopAnimation (void);
- SharedPageObjectRun GetRun (
- view::Layouter& rLayouter,
- const InsertPosition& rInsertPosition,
- const bool bCreate = true);
- RunContainer::const_iterator FindRun (const sal_Int32 nRunIndex) const;
-};
-
-
-
-
-
-//===== InsertAnimator ========================================================
-
-InsertAnimator::InsertAnimator (SlideSorter& rSlideSorter)
- : mpImplementation(new Implementation(rSlideSorter))
-{
-}
-
-
-
-
-void InsertAnimator::SetInsertPosition (const InsertPosition& rInsertPosition)
-{
- mpImplementation->SetInsertPosition(rInsertPosition, controller::Animator::AM_Animated);
-}
-
-
-
-
-void InsertAnimator::Reset (const controller::Animator::AnimationMode eMode)
-{
- mpImplementation->SetInsertPosition(InsertPosition(), eMode);
-}
-
-
-
-
-//===== InsertAnimator::Implementation ========================================
-
-InsertAnimator::Implementation::Implementation (SlideSorter& rSlideSorter)
- : mrModel(rSlideSorter.GetModel()),
- mrView(rSlideSorter.GetView()),
- mrSlideSorter(rSlideSorter),
- mpAnimator(rSlideSorter.GetController().GetAnimator()),
- maRuns(),
- maInsertPosition()
-{
-}
-
-
-
-
-InsertAnimator::Implementation::~Implementation (void)
-{
- SetInsertPosition(InsertPosition(), controller::Animator::AM_Immediate);
-}
-
-
-
-
-void InsertAnimator::Implementation::SetInsertPosition (
- const InsertPosition& rInsertPosition,
- const controller::Animator::AnimationMode eMode)
-{
- if (maInsertPosition == rInsertPosition)
- return;
-
- SharedPageObjectRun pOldRun (GetRun(mrView.GetLayouter(), maInsertPosition));
- SharedPageObjectRun pCurrentRun (GetRun(mrView.GetLayouter(), rInsertPosition));
- maInsertPosition = rInsertPosition;
-
- // When the new insert position is in a different run then move the page
- // objects in the old run to their default positions.
- if (pOldRun != pCurrentRun)
- {
- if (pOldRun)
- pOldRun->ResetOffsets(eMode);
- }
-
- if (pCurrentRun)
- {
- pCurrentRun->UpdateOffsets(rInsertPosition, mrView.GetLayouter());
- }
-}
-
-
-
-
-SharedPageObjectRun InsertAnimator::Implementation::GetRun (
- view::Layouter& rLayouter,
- const InsertPosition& rInsertPosition,
- const bool bCreate)
-{
- const sal_Int32 nRow (rInsertPosition.GetRow());
- if (nRow < 0)
- return SharedPageObjectRun();
-
- RunContainer::const_iterator iRun (maRuns.end());
- if (rLayouter.GetColumnCount() == 1)
- {
- // There is only one run that contains all slides.
- if (maRuns.empty() && bCreate)
- maRuns.insert(SharedPageObjectRun(new PageObjectRun(
- *this,
- 0,
- 0,
- mrModel.GetPageCount()-1)));
- iRun = maRuns.begin();
- }
- else
- {
- iRun = FindRun(nRow);
- if (iRun == maRuns.end() && bCreate)
- {
- // Create a new run.
- const sal_Int32 nStartIndex (rLayouter.GetIndex(nRow, 0));
- const sal_Int32 nEndIndex (rLayouter.GetIndex(nRow, rLayouter.GetColumnCount()-1));
- if (nStartIndex <= nEndIndex)
- {
- iRun = maRuns.insert(SharedPageObjectRun(new PageObjectRun(
- *this,
- nRow,
- nStartIndex,
- nEndIndex))).first;
- OSL_ASSERT(iRun != maRuns.end());
- }
- }
- }
-
- if (iRun != maRuns.end())
- return *iRun;
- else
- return SharedPageObjectRun();
-}
-
-
-
-
-InsertAnimator::Implementation::RunContainer::const_iterator
- InsertAnimator::Implementation::FindRun (const sal_Int32 nRunIndex) const
-{
- return std::find_if(
- maRuns.begin(),
- maRuns.end(),
- ::boost::bind(
- ::std::equal_to<sal_Int32>(),
- ::boost::bind(&PageObjectRun::mnRunIndex, _1),
- nRunIndex));
-}
-
-
-
-
-void InsertAnimator::Implementation::AddRun (const ::boost::shared_ptr<PageObjectRun> pRun)
-{
- if (pRun)
- {
- maRuns.insert(pRun);
- }
- else
- {
- OSL_ASSERT(pRun);
- }
-}
-
-
-
-
-
-void InsertAnimator::Implementation::RemoveRun (const ::boost::shared_ptr<PageObjectRun> pRun)
-{
- if (pRun)
- {
- // Do not remove runs that show the space for the insertion indicator.
- if (pRun->mnLocalInsertIndex == -1)
- {
- InsertAnimator::Implementation::RunContainer::const_iterator iRun (FindRun(pRun->mnRunIndex));
- if (iRun != maRuns.end())
- {
- OSL_ASSERT(*iRun == pRun);
- maRuns.erase(iRun);
- }
- }
- }
- else
- {
- OSL_ASSERT(pRun);
- }
-}
-
-
-
-
-
-//===== PageObjectRun =========================================================
-
-PageObjectRun::PageObjectRun (
- AnimatorAccess& rAnimatorAccess,
- const sal_Int32 nRunIndex,
- const sal_Int32 nStartIndex,
- const sal_Int32 nEndIndex)
- : mnRunIndex(nRunIndex),
- mnLocalInsertIndex(-1),
- mnStartIndex(nStartIndex),
- mnEndIndex(nEndIndex),
- maStartOffset(),
- maEndOffset(),
- mnStartTime(-1),
- mnAnimationId(controller::Animator::NotAnAnimationId),
- mrAnimatorAccess(rAnimatorAccess),
- maAccelerationFunction(
- controller::AnimationParametricFunction(
- controller::AnimationBezierFunction (0.1,0.7)))
-{
- maStartOffset.resize(nEndIndex - nStartIndex + 1);
- maEndOffset.resize(nEndIndex - nStartIndex + 1);
-}
-
-
-
-
-PageObjectRun::~PageObjectRun (void)
-{
-}
-
-
-
-
-Rectangle PageObjectRun::GetInnerBoundingBox (
- const view::Layouter& rLayouter,
- const sal_Int32 nIndex) const
-{
- model::SharedPageDescriptor pDescriptor (
- mrAnimatorAccess.GetModel().GetPageDescriptor(nIndex));
- if (pDescriptor)
- if (pDescriptor->HasState(model::PageDescriptor::ST_Selected))
- return rLayouter.GetPageObjectLayouter()->GetBoundingBox(
- pDescriptor,
- PageObjectLayouter::PageObject,
- PageObjectLayouter::ModelCoordinateSystem);
- else
- return rLayouter.GetPageObjectLayouter()->GetBoundingBox(
- pDescriptor,
- PageObjectLayouter::Preview,
- PageObjectLayouter::ModelCoordinateSystem);
- else
- return Rectangle();
-}
-
-
-
-
-void PageObjectRun::UpdateOffsets(
- const InsertPosition& rInsertPosition,
- const view::Layouter& rLayouter)
-{
- const bool bIsVertical (rLayouter.GetColumnCount()==1);
- const sal_Int32 nLocalInsertIndex(bIsVertical
- ? rInsertPosition.GetRow()
- : rInsertPosition.GetColumn());
- if (nLocalInsertIndex != mnLocalInsertIndex)
- {
- mnLocalInsertIndex = nLocalInsertIndex;
-
- model::SlideSorterModel& rModel (mrAnimatorAccess.GetModel());
- const sal_Int32 nRunLength (mnEndIndex - mnStartIndex + 1);
- for (sal_Int32 nIndex=0; nIndex<nRunLength; ++nIndex)
- {
- model::SharedPageDescriptor pDescriptor(rModel.GetPageDescriptor(nIndex+mnStartIndex));
- if (pDescriptor)
- maStartOffset[nIndex] = pDescriptor->GetVisualState().GetLocationOffset();
- maEndOffset[nIndex] = nIndex < mnLocalInsertIndex
- ? rInsertPosition.GetLeadingOffset()
- : rInsertPosition.GetTrailingOffset();
- if (bIsVertical)
- maEndOffset[nIndex].X() = 0;
- else
- maEndOffset[nIndex].Y() = 0;
- }
- RestartAnimation();
- }
-}
-
-
-
-
-void PageObjectRun::ResetOffsets (const controller::Animator::AnimationMode eMode)
-{
- mnLocalInsertIndex = -1;
- const sal_Int32 nRunLength (mnEndIndex - mnStartIndex + 1);
- model::SlideSorterModel& rModel (mrAnimatorAccess.GetModel());
- view::SlideSorterView& rView (mrAnimatorAccess.GetView());
- for (sal_Int32 nIndex=0; nIndex<nRunLength; ++nIndex)
- {
- model::SharedPageDescriptor pDescriptor(rModel.GetPageDescriptor(nIndex+mnStartIndex));
- if (pDescriptor)
- {
- if (eMode == controller::Animator::AM_Animated)
- maStartOffset[nIndex] = pDescriptor->GetVisualState().GetLocationOffset();
- else
- {
- const Rectangle aOldBoundingBox (pDescriptor->GetBoundingBox());
- pDescriptor->GetVisualState().SetLocationOffset(Point(0,0));
- rView.RequestRepaint(aOldBoundingBox);
- rView.RequestRepaint(pDescriptor);
- }
- }
- maEndOffset[nIndex] = Point(0,0);
- }
- if (eMode == controller::Animator::AM_Animated)
- RestartAnimation();
- else
- mrAnimatorAccess.RemoveRun(shared_from_this());
-}
-
-
-
-
-void PageObjectRun::RestartAnimation (void)
-{
- // Stop the current animation.
- if (mnAnimationId != controller::Animator::NotAnAnimationId)
- {
- mrAnimatorAccess.GetAnimator()->RemoveAnimation(mnAnimationId);
- }
-
- // Restart the animation.
- mrAnimatorAccess.AddRun(shared_from_this());
- mnAnimationId = mrAnimatorAccess.GetAnimator()->AddAnimation(
- ::boost::ref(*this),
- 0,
- 300,
- ::boost::bind(
- &AnimatorAccess::RemoveRun,
- ::boost::ref(mrAnimatorAccess),
- shared_from_this()));
-}
-
-
-
-
-void PageObjectRun::operator () (const double nGlobalTime)
-{
- if (mnStartTime < 0)
- mnStartTime = nGlobalTime;
-
- double nLocalTime (nGlobalTime - mnStartTime);
- if (nLocalTime > 1.0)
- nLocalTime = 1.0;
- nLocalTime = maAccelerationFunction(nLocalTime);
-
- model::SlideSorterModel& rModel (mrAnimatorAccess.GetModel());
- view::SlideSorterView& rView (mrAnimatorAccess.GetView());
- for (sal_Int32 nIndex=mnStartIndex; nIndex<=mnEndIndex; ++nIndex)
- {
- model::SharedPageDescriptor pDescriptor (rModel.GetPageDescriptor(nIndex));
- if ( ! pDescriptor)
- continue;
- const Rectangle aOldBoundingBox (pDescriptor->GetBoundingBox());
- pDescriptor->GetVisualState().SetLocationOffset(
- Blend(
- maStartOffset[nIndex-mnStartIndex],
- maEndOffset[nIndex-mnStartIndex],
- nLocalTime));
-
- // Request a repaint of the old and new bounding box (which largely overlap.)
- rView.RequestRepaint(aOldBoundingBox);
- rView.RequestRepaint(pDescriptor);
- }
-
- // Call Flush to make
- // a) animations a bit more smooth and
- // b) on Mac without the Flush a Reset of the page locations is not properly
- // visualized when the mouse leaves the window during drag-and-drop.
- mrAnimatorAccess.GetContentWindow()->Flush();
-}
-
-
-
-
-} } } // end of namespace ::sd::slidesorter::view
diff --git a/sd/source/ui/slidesorter/view/SlsInsertionIndicatorOverlay.cxx b/sd/source/ui/slidesorter/view/SlsInsertionIndicatorOverlay.cxx
deleted file mode 100644
index a18704233..000000000
--- a/sd/source/ui/slidesorter/view/SlsInsertionIndicatorOverlay.cxx
+++ /dev/null
@@ -1,448 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "view/SlsInsertionIndicatorOverlay.hxx"
-
-#include "SlideSorter.hxx"
-#include "model/SlsPageEnumeration.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsLayouter.hxx"
-#include "view/SlsPageObjectLayouter.hxx"
-#include "view/SlsTheme.hxx"
-#include "cache/SlsPageCache.hxx"
-#include "SlsFramePainter.hxx"
-#include "SlsLayeredDevice.hxx"
-#include "DrawDocShell.hxx"
-#include "drawdoc.hxx"
-#include "sdpage.hxx"
-#include "sdmod.hxx"
-
-#include <vcl/virdev.hxx>
-#include <basegfx/range/b2drectangle.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-
-
-namespace {
-
-
-static const double gnPreviewOffsetScale = 1.0 / 8.0;
-
-
-
-Rectangle GrowRectangle (const Rectangle& rBox, const sal_Int32 nOffset)
-{
- return Rectangle (
- rBox.Left() - nOffset,
- rBox.Top() - nOffset,
- rBox.Right() + nOffset,
- rBox.Bottom() + nOffset);
-}
-
-sal_Int32 RoundToInt (const double nValue) { return sal_Int32(::rtl::math::round(nValue)); }
-
-} // end of anonymous namespace
-
-
-namespace sd { namespace slidesorter { namespace view {
-
-
-//===== InsertionIndicatorOverlay ===========================================
-
-const static sal_Int32 gnShadowBorder = 3;
-const static sal_Int32 gnSuperScaleFactor = 1;
-
-InsertionIndicatorOverlay::InsertionIndicatorOverlay (SlideSorter& rSlideSorter)
- : mrSlideSorter(rSlideSorter),
- mbIsVisible(false),
- mnLayerIndex(2),
- mpLayerInvalidator(),
- maLocation(),
- maIcon(),
- maIconOffset(),
- mpShadowPainter(
- new FramePainter(mrSlideSorter.GetTheme()->GetIcon(Theme::Icon_RawInsertShadow)))
-{
-}
-
-
-
-
-InsertionIndicatorOverlay::~InsertionIndicatorOverlay (void)
-{
- Hide();
-}
-
-
-
-
-void InsertionIndicatorOverlay::Create (const controller::Transferable* pTransferable)
-{
- if (pTransferable == NULL)
- return;
-
- sal_Int32 nSelectionCount (0);
- if (pTransferable->HasPageBookmarks())
- nSelectionCount = pTransferable->GetPageBookmarks().Count();
- else
- {
- DrawDocShell* pDataDocShell = dynamic_cast<DrawDocShell*>(&pTransferable->GetDocShell());
- if (pDataDocShell != NULL)
- {
- SdDrawDocument* pDataDocument = pDataDocShell->GetDoc();
- if (pDataDocument != NULL)
- nSelectionCount = pDataDocument->GetSdPageCount(PK_STANDARD);
- }
- }
- Create(pTransferable->GetRepresentatives(), nSelectionCount);
-}
-
-
-
-
-void InsertionIndicatorOverlay::Create (
- const ::std::vector<controller::Transferable::Representative>& rRepresentatives,
- const sal_Int32 nSelectionCount)
-{
- view::Layouter& rLayouter (mrSlideSorter.GetView().GetLayouter());
- ::boost::shared_ptr<view::PageObjectLayouter> pPageObjectLayouter (
- rLayouter.GetPageObjectLayouter());
- ::boost::shared_ptr<view::Theme> pTheme (mrSlideSorter.GetTheme());
- const Size aOriginalPreviewSize (pPageObjectLayouter->GetSize(
- PageObjectLayouter::Preview,
- PageObjectLayouter::WindowCoordinateSystem));
-
- const double nPreviewScale (0.5);
- const Size aPreviewSize (
- RoundToInt(aOriginalPreviewSize.Width()*nPreviewScale),
- RoundToInt(aOriginalPreviewSize.Height()*nPreviewScale));
- const sal_Int32 nOffset (
- RoundToInt(Min(aPreviewSize.Width(),aPreviewSize.Height()) * gnPreviewOffsetScale));
-
- // Determine size and offset depending on the number of previews.
- sal_Int32 nCount (rRepresentatives.size());
- if (nCount > 0)
- --nCount;
- Size aIconSize(
- aPreviewSize.Width() + 2 * gnShadowBorder + nCount*nOffset,
- aPreviewSize.Height() + 2 * gnShadowBorder + nCount*nOffset);
- maIconOffset = Point(gnShadowBorder, gnShadowBorder);
-
- // Create virtual devices for bitmap and mask whose bitmaps later be
- // combined to form the BitmapEx of the icon.
- VirtualDevice aContent (
- *mrSlideSorter.GetContentWindow(),
- 0,
- 0);
- aContent.SetOutputSizePixel(aIconSize);
-
- aContent.SetFillColor();
- aContent.SetLineColor(pTheme->GetColor(Theme::Color_PreviewBorder));
- const Point aOffset = PaintRepresentatives(aContent, aPreviewSize, nOffset, rRepresentatives);
-
- PaintPageCount(aContent, nSelectionCount, aPreviewSize, aOffset);
-
- maIcon = aContent.GetBitmapEx(Point(0,0), aIconSize);
- maIcon.Scale(aIconSize);
-}
-
-
-
-
-void InsertionIndicatorOverlay::SelectRepresentatives (
- model::PageEnumeration& rSelection,
- ::std::vector<model::SharedPageDescriptor>& rDescriptors) const
-{
- sal_Int32 nCount (0);
- while (rSelection.HasMoreElements())
- {
- if (nCount++ >= 3)
- break;
- rDescriptors.push_back(rSelection.GetNextElement());
- }
-}
-
-
-
-
-Point InsertionIndicatorOverlay::PaintRepresentatives (
- OutputDevice& rContent,
- const Size aPreviewSize,
- const sal_Int32 nOffset,
- const ::std::vector<controller::Transferable::Representative>& rRepresentatives) const
-{
- const Point aOffset (0,rRepresentatives.size()==1 ? -nOffset : 0);
-
- // Paint the pages.
- Point aPageOffset (0,0);
- double nTransparency (0);
- const BitmapEx aExclusionOverlay (mrSlideSorter.GetTheme()->GetIcon(Theme::Icon_HideSlideOverlay));
- for (sal_Int32 nIndex=2; nIndex>=0; --nIndex)
- {
- if (rRepresentatives.size() <= sal_uInt32(nIndex))
- continue;
- switch(nIndex)
- {
- case 0 :
- aPageOffset = Point(0, nOffset);
- nTransparency = 0.85;
- break;
- case 1:
- aPageOffset = Point(nOffset, 0);
- nTransparency = 0.75;
- break;
- case 2:
- aPageOffset = Point(2*nOffset, 2*nOffset);
- nTransparency = 0.65;
- break;
- }
- aPageOffset += aOffset;
- aPageOffset.X() += gnShadowBorder;
- aPageOffset.Y() += gnShadowBorder;
-
- // Paint the preview.
- Bitmap aPreview (rRepresentatives[nIndex].maBitmap);
- const Size aSuperSampleSize(
- aPreviewSize.Width()*gnSuperScaleFactor,
- aPreviewSize.Height()*gnSuperScaleFactor);
- aPreview.Scale(aPreviewSize, BMP_SCALE_INTERPOLATE);
- rContent.DrawBitmapEx(aPageOffset, aPreview);
-
- // When the page is marked as excluded from the slide show then
- // paint an overlay that visualizes this.
- if (rRepresentatives[nIndex].mbIsExcluded)
- {
- const Region aSavedClipRegion (rContent.GetClipRegion());
- rContent.IntersectClipRegion(Rectangle(aPageOffset, aPreviewSize));
- // Paint bitmap tiled over the preview to mark it as excluded.
- const sal_Int32 nIconWidth (aExclusionOverlay.GetSizePixel().Width());
- const sal_Int32 nIconHeight (aExclusionOverlay.GetSizePixel().Height());
- if (nIconWidth>0 && nIconHeight>0)
- {
- for (sal_Int32 nX=0; nX<aPreviewSize.Width(); nX+=nIconWidth)
- for (sal_Int32 nY=0; nY<aPreviewSize.Height(); nY+=nIconHeight)
- rContent.DrawBitmapEx(Point(nX,nY)+aPageOffset, aExclusionOverlay);
- }
- rContent.SetClipRegion(aSavedClipRegion);
- }
-
- // Tone down the bitmap. The further back the darker it becomes.
- Rectangle aBox (
- aPageOffset.X(),
- aPageOffset.Y(),
- aPageOffset.X()+aPreviewSize.Width()-1,
- aPageOffset.Y()+aPreviewSize.Height()-1);
- rContent.SetFillColor(COL_BLACK);
- rContent.SetLineColor();
- rContent.DrawTransparent(
- ::basegfx::B2DPolyPolygon(::basegfx::tools::createPolygonFromRect(
- ::basegfx::B2DRectangle(aBox.Left(), aBox.Top(), aBox.Right()+1, aBox.Bottom()+1),
- 0,
- 0)),
- nTransparency);
-
- // Draw border around preview.
- Rectangle aBorderBox (GrowRectangle(aBox, 1));
- rContent.SetLineColor(COL_GRAY);
- rContent.SetFillColor();
- rContent.DrawRect(aBorderBox);
-
- // Draw shadow around preview.
- mpShadowPainter->PaintFrame(rContent, aBorderBox);
- }
-
- return aPageOffset;
-}
-
-
-
-
-void InsertionIndicatorOverlay::PaintPageCount (
- OutputDevice& rDevice,
- const sal_Int32 nSelectionCount,
- const Size aPreviewSize,
- const Point aFirstPageOffset) const
-{
- // Paint the number of slides.
- ::boost::shared_ptr<view::Theme> pTheme (mrSlideSorter.GetTheme());
- ::boost::shared_ptr<Font> pFont(Theme::GetFont(Theme::Font_PageCount, rDevice));
- if (pFont)
- {
- ::rtl::OUString sNumber (::rtl::OUString::valueOf(nSelectionCount));
-
- // Determine the size of the (painted) text and create a bounding
- // box that centers the text on the first preview.
- rDevice.SetFont(*pFont);
- Rectangle aTextBox;
- rDevice.GetTextBoundRect(aTextBox, sNumber);
- Point aTextOffset (aTextBox.TopLeft());
- Size aTextSize (aTextBox.GetSize());
- // Place text inside the first page preview.
- Point aTextLocation(aFirstPageOffset);
- // Center the text.
- aTextLocation += Point(
- (aPreviewSize.Width()-aTextBox.GetWidth())/2,
- (aPreviewSize.Height()-aTextBox.GetHeight())/2);
- aTextBox = Rectangle(aTextLocation, aTextSize);
-
- // Paint background, border and text.
- static const sal_Int32 nBorder = 5;
- rDevice.SetFillColor(pTheme->GetColor(Theme::Color_Selection));
- rDevice.SetLineColor(pTheme->GetColor(Theme::Color_Selection));
- rDevice.DrawRect(GrowRectangle(aTextBox, nBorder));
-
- rDevice.SetFillColor();
- rDevice.SetLineColor(pTheme->GetColor(Theme::Color_PageCountFontColor));
- rDevice.DrawRect(GrowRectangle(aTextBox, nBorder-1));
-
- rDevice.SetTextColor(pTheme->GetColor(Theme::Color_PageCountFontColor));
- rDevice.DrawText(aTextBox.TopLeft()-aTextOffset, sNumber);
- }
-}
-
-
-
-
-void InsertionIndicatorOverlay::SetLocation (const Point& rLocation)
-{
- const Point aTopLeft (
- rLocation - Point(
- maIcon.GetSizePixel().Width()/2,
- maIcon.GetSizePixel().Height()/2));
- if (maLocation != aTopLeft)
- {
- const Rectangle aOldBoundingBox (GetBoundingBox());
-
- maLocation = aTopLeft;
-
- if (mpLayerInvalidator && IsVisible())
- {
- mpLayerInvalidator->Invalidate(aOldBoundingBox);
- mpLayerInvalidator->Invalidate(GetBoundingBox());
- }
- }
-}
-
-
-
-
-void InsertionIndicatorOverlay::Paint (
- OutputDevice& rDevice,
- const Rectangle& rRepaintArea)
-{
- (void)rRepaintArea;
-
- if ( ! IsVisible())
- return;
-
- rDevice.DrawImage(maLocation, maIcon);
-}
-
-
-
-
-void InsertionIndicatorOverlay::SetLayerInvalidator (const SharedILayerInvalidator& rpInvalidator)
-{
- mpLayerInvalidator = rpInvalidator;
-
- if (mbIsVisible && mpLayerInvalidator)
- mpLayerInvalidator->Invalidate(GetBoundingBox());
-}
-
-
-
-
-bool InsertionIndicatorOverlay::IsVisible (void) const
-{
- return mbIsVisible;
-}
-
-
-
-
-void InsertionIndicatorOverlay::Show (void)
-{
- if ( ! mbIsVisible)
- {
- mbIsVisible = true;
-
- ::boost::shared_ptr<LayeredDevice> pLayeredDevice (
- mrSlideSorter.GetView().GetLayeredDevice());
- if (pLayeredDevice)
- {
- pLayeredDevice->RegisterPainter(shared_from_this(), mnLayerIndex);
- if (mpLayerInvalidator)
- mpLayerInvalidator->Invalidate(GetBoundingBox());
- }
- }
-}
-
-
-
-
-void InsertionIndicatorOverlay::Hide (void)
-{
- if (mbIsVisible)
- {
- mbIsVisible = false;
-
- ::boost::shared_ptr<LayeredDevice> pLayeredDevice (
- mrSlideSorter.GetView().GetLayeredDevice());
- if (pLayeredDevice)
- {
- if (mpLayerInvalidator)
- mpLayerInvalidator->Invalidate(GetBoundingBox());
- pLayeredDevice->RemovePainter(shared_from_this(), mnLayerIndex);
- }
- }
-}
-
-
-
-
-Rectangle InsertionIndicatorOverlay::GetBoundingBox (void) const
-{
- return Rectangle(maLocation, maIcon.GetSizePixel());
-}
-
-
-
-
-Size InsertionIndicatorOverlay::GetSize (void) const
-{
- return Size(
- maIcon.GetSizePixel().Width() + 10,
- maIcon.GetSizePixel().Height() + 10);
-}
-
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
diff --git a/sd/source/ui/slidesorter/view/SlsLayeredDevice.cxx b/sd/source/ui/slidesorter/view/SlsLayeredDevice.cxx
deleted file mode 100644
index 1168e2c64..000000000
--- a/sd/source/ui/slidesorter/view/SlsLayeredDevice.cxx
+++ /dev/null
@@ -1,565 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlsLayeredDevice.hxx"
-
-#include <vcl/window.hxx>
-#include <vcl/virdev.hxx>
-
-#include <boost/bind.hpp>
-#include <boost/function.hpp>
-
-
-namespace sd { namespace slidesorter { namespace view {
-
-namespace {
-static const sal_Int32 gnMaximumLayerCount = 8;
-
-class LayerInvalidator : public ILayerInvalidator
-{
-public:
- LayerInvalidator (
- const ::boost::shared_ptr<LayeredDevice>& rpLayeredDevice,
- const SharedSdWindow& rpTargetWindow,
- const int nLayer)
- : mpLayeredDevice(rpLayeredDevice),
- mpTargetWindow(rpTargetWindow),
- mnLayer(nLayer)
- {
- }
-
- virtual void Invalidate (const Rectangle& rInvalidationBox)
- {
- mpLayeredDevice->Invalidate(rInvalidationBox, mnLayer);
- mpTargetWindow->Invalidate(rInvalidationBox);
- }
-
-private:
- const ::boost::shared_ptr<LayeredDevice> mpLayeredDevice;
- SharedSdWindow mpTargetWindow;
- const int mnLayer;
-};
-
-void DeviceCopy (
- OutputDevice& rTargetDevice,
- OutputDevice& rSourceDevice,
- const Rectangle& rBox)
-{
- rTargetDevice.DrawOutDev(
- rBox.TopLeft(),
- rBox.GetSize(),
- rBox.TopLeft(),
- rBox.GetSize(),
- rSourceDevice);
-}
-
-
-void ForAllRectangles (const Region& rRegion, ::boost::function<void(const Rectangle&)> aFunction)
-{
- OSL_ASSERT(aFunction);
-
- if (rRegion.GetRectCount() <= 1)
- {
- aFunction(rRegion.GetBoundRect());
- }
- else
- {
- Region aMutableRegionCopy (rRegion);
- RegionHandle aHandle(aMutableRegionCopy.BeginEnumRects());
- Rectangle aBox;
- while (aMutableRegionCopy.GetNextEnumRect(aHandle, aBox))
- aFunction(aBox);
- aMutableRegionCopy.EndEnumRects(aHandle);
- }
-}
-
-class Layer : private ::boost::noncopyable
-{
-public:
- Layer (void);
- ~Layer (void);
-
- void Initialize (const SharedSdWindow& rpTargetWindow);
- void InvalidateRectangle (const Rectangle& rInvalidationBox);
- void InvalidateRegion (const Region& rInvalidationRegion);
- void Validate (const MapMode& rMapMode);
- void Repaint (
- OutputDevice& rTargetDevice,
- const Rectangle& rRepaintRectangle);
- void Resize (const Size& rSize);
- void AddPainter (const SharedILayerPainter& rpPainter);
- void RemovePainter (const SharedILayerPainter& rpPainter);
- bool HasPainter (void) const;
- void Dispose (void);
-
-private:
- ::boost::shared_ptr<VirtualDevice> mpLayerDevice;
- ::std::vector<SharedILayerPainter> maPainters;
- Region maInvalidationRegion;
-
- void ValidateRectangle (const Rectangle& rBox);
-};
-typedef ::boost::shared_ptr<Layer> SharedLayer;
-
-
-} // end of anonymous namespace
-
-
-class LayeredDevice::LayerContainer : public ::std::vector<SharedLayer>
-{
-public:
- LayerContainer (void) {}
- ~LayerContainer (void) {}
-};
-
-
-
-
-//===== LayeredDevice =========================================================
-
-LayeredDevice::LayeredDevice (const SharedSdWindow& rpTargetWindow)
- : mpTargetWindow(rpTargetWindow),
- mpLayers(new LayerContainer()),
- mpBackBuffer(new VirtualDevice(*mpTargetWindow)),
- maSavedMapMode(rpTargetWindow->GetMapMode())
-{
- mpBackBuffer->SetOutputSizePixel(mpTargetWindow->GetSizePixel());
-}
-
-
-
-
-LayeredDevice::~LayeredDevice (void)
-{
-}
-
-
-
-
-void LayeredDevice::Invalidate (
- const Rectangle& rInvalidationArea,
- const sal_Int32 nLayer)
-{
- if (nLayer<0 || size_t(nLayer)>=mpLayers->size())
- {
- OSL_ASSERT(nLayer>=0 && size_t(nLayer)<mpLayers->size());
- return;
- }
-
- (*mpLayers)[nLayer]->InvalidateRectangle(rInvalidationArea);
-}
-
-
-
-
-void LayeredDevice::InvalidateAllLayers (const Rectangle& rInvalidationArea)
-{
- for (sal_uInt32 nLayer=0; nLayer<mpLayers->size(); ++nLayer)
- (*mpLayers)[nLayer]->InvalidateRectangle(rInvalidationArea);
-}
-
-
-
-
-void LayeredDevice::InvalidateAllLayers (const Region& rInvalidationRegion)
-{
- for (sal_uInt32 nLayer=0; nLayer<mpLayers->size(); ++nLayer)
- (*mpLayers)[nLayer]->InvalidateRegion(rInvalidationRegion);
-}
-
-
-
-
-void LayeredDevice::RegisterPainter (
- const SharedILayerPainter& rpPainter,
- const sal_Int32 nLayer)
-{
- OSL_ASSERT(mpLayers);
- if ( ! rpPainter)
- {
- OSL_ASSERT(rpPainter);
- return;
- }
- if (nLayer<0 || nLayer>=gnMaximumLayerCount)
- {
- OSL_ASSERT(nLayer>=0 && nLayer<gnMaximumLayerCount);
- return;
- }
-
- // Provide the layers.
- if (sal_uInt32(nLayer) >= mpLayers->size())
- {
- const sal_Int32 nOldLayerCount (mpLayers->size());
- mpLayers->resize(nLayer+1);
-
- for (size_t nIndex=nOldLayerCount; nIndex<mpLayers->size(); ++nIndex)
- (*mpLayers)[nIndex].reset(new Layer());
- }
-
- (*mpLayers)[nLayer]->AddPainter(rpPainter);
- if (nLayer == 0)
- (*mpLayers)[nLayer]->Initialize(mpTargetWindow);
-
- rpPainter->SetLayerInvalidator(
- SharedILayerInvalidator(new LayerInvalidator(shared_from_this(),mpTargetWindow,nLayer)));
-}
-
-
-
-
-void LayeredDevice::RemovePainter (
- const SharedILayerPainter& rpPainter,
- const sal_Int32 nLayer)
-{
- if ( ! rpPainter)
- {
- OSL_ASSERT(rpPainter);
- return;
- }
- if (nLayer<0 || size_t(nLayer)>=mpLayers->size())
- {
- OSL_ASSERT(nLayer>=0 && size_t(nLayer)<mpLayers->size());
- return;
- }
-
- rpPainter->SetLayerInvalidator(SharedILayerInvalidator());
-
- (*mpLayers)[nLayer]->RemovePainter(rpPainter);
-
- // Remove top most layers that do not contain any painters.
- while ( ! mpLayers->empty() && ! mpLayers->back()->HasPainter())
- mpLayers->erase(mpLayers->end()-1);
-}
-
-
-
-
-bool LayeredDevice::HasPainter (const sal_Int32 nLayer)
-{
- return nLayer>=0
- && sal_uInt32(nLayer)<mpLayers->size()
- && (*mpLayers)[nLayer]->HasPainter();
-}
-
-
-
-
-void LayeredDevice::Repaint (const Region& rRepaintRegion)
-{
- // Validate the contents of all layers (that have their own devices.)
- ::std::for_each(
- mpLayers->begin(),
- mpLayers->end(),
- ::boost::bind(&Layer::Validate, _1, mpTargetWindow->GetMapMode()));
-
- ForAllRectangles(rRepaintRegion, ::boost::bind(&LayeredDevice::RepaintRectangle, this, _1));
-}
-
-
-
-
-void LayeredDevice::RepaintRectangle (const Rectangle& rRepaintRectangle)
-{
- if (mpLayers->size() == 0)
- return;
- else if (mpLayers->size() == 1)
- {
- // Just copy the main layer into the target device.
- (*mpLayers)[0]->Repaint(*mpTargetWindow, rRepaintRectangle);
- }
- else
- {
- // Paint all layers first into the back buffer (to avoid flickering
- // due to synchronous paints) and then copy that into the target
- // device.
- mpBackBuffer->SetMapMode(mpTargetWindow->GetMapMode());
- ::std::for_each(
- mpLayers->begin(),
- mpLayers->end(),
- ::boost::bind(&Layer::Repaint, _1, ::boost::ref(*mpBackBuffer), rRepaintRectangle));
-
- DeviceCopy(*mpTargetWindow, *mpBackBuffer, rRepaintRectangle);
- }
-}
-
-
-
-
-void LayeredDevice::Resize (void)
-{
- const Size aSize (mpTargetWindow->GetSizePixel());
- mpBackBuffer->SetOutputSizePixel(aSize);
- ::std::for_each(mpLayers->begin(), mpLayers->end(), ::boost::bind(&Layer::Resize, _1, aSize));
-}
-
-
-
-
-void LayeredDevice::Dispose (void)
-{
- ::std::for_each(mpLayers->begin(), mpLayers->end(), ::boost::bind(&Layer::Dispose, _1));
- mpLayers->clear();
-}
-
-
-
-
-bool LayeredDevice::HandleMapModeChange (void)
-{
- const MapMode& rMapMode (mpTargetWindow->GetMapMode());
- if (maSavedMapMode == rMapMode)
- return false;
-
- const Rectangle aLogicWindowBox (
- mpTargetWindow->PixelToLogic(Rectangle(Point(0,0), mpTargetWindow->GetSizePixel())));
- if (maSavedMapMode.GetScaleX() != rMapMode.GetScaleX()
- || maSavedMapMode.GetScaleY() != rMapMode.GetScaleY()
- || maSavedMapMode.GetMapUnit() != rMapMode.GetMapUnit())
- {
- // When the scale has changed then we have to paint everything.
- InvalidateAllLayers(aLogicWindowBox);
- }
- else if (maSavedMapMode.GetOrigin() != rMapMode.GetOrigin())
- {
- // Window has been scrolled. Adapt contents of backbuffers and
- // layer devices.
- const Point aDelta (rMapMode.GetOrigin() - maSavedMapMode.GetOrigin());
- mpBackBuffer->CopyArea(
- aLogicWindowBox.TopLeft(),
- mpTargetWindow->PixelToLogic(Point(0,0), maSavedMapMode),
- aLogicWindowBox.GetSize());
-
- // Invalidate the area(s) that have been exposed.
- const Rectangle aWindowBox (Point(0,0), mpTargetWindow->GetSizePixel());
- if (aDelta.Y() < 0)
- InvalidateAllLayers(mpTargetWindow->PixelToLogic(Rectangle(
- aWindowBox.Left(),
- aWindowBox.Bottom()+aDelta.Y(),
- aWindowBox.Right(),
- aWindowBox.Bottom())));
- else if (aDelta.Y() > 0)
- InvalidateAllLayers(mpTargetWindow->PixelToLogic(Rectangle(
- aWindowBox.Left(),
- aWindowBox.Top(),
- aWindowBox.Right(),
- aWindowBox.Top()+aDelta.Y())));
- if (aDelta.X() < 0)
- InvalidateAllLayers(mpTargetWindow->PixelToLogic(Rectangle(
- aWindowBox.Right()+aDelta.X(),
- aWindowBox.Top(),
- aWindowBox.Right(),
- aWindowBox.Bottom())));
- else if (aDelta.X() > 0)
- InvalidateAllLayers(mpTargetWindow->PixelToLogic(Rectangle(
- aWindowBox.Left(),
- aWindowBox.Top(),
- aWindowBox.Left()+aDelta.X(),
- aWindowBox.Bottom())));
- }
- else
- {
- // Can this happen? Lets trigger a warning when it does.
- OSL_ASSERT(false);
- }
-
- maSavedMapMode = rMapMode;
-
- return true;
-}
-
-
-
-
-//===== Layer =================================================================
-
-Layer::Layer (void)
- : mpLayerDevice(),
- maPainters(),
- maInvalidationRegion()
-{
-}
-
-
-
-
-Layer::~Layer (void)
-{
-}
-
-
-
-
-void Layer::Initialize (const SharedSdWindow& rpTargetWindow)
-{
-#if 0
- (void)rpTargetWindow;
-#else
- if ( ! mpLayerDevice)
- {
- mpLayerDevice.reset(new VirtualDevice(*rpTargetWindow));
- mpLayerDevice->SetOutputSizePixel(rpTargetWindow->GetSizePixel());
- }
-#endif
-}
-
-
-
-
-void Layer::InvalidateRectangle (const Rectangle& rInvalidationBox)
-{
- maInvalidationRegion.Union(rInvalidationBox);
-}
-
-
-
-
-void Layer::InvalidateRegion (const Region& rInvalidationRegion)
-{
- maInvalidationRegion.Union(rInvalidationRegion);
-}
-
-
-
-
-void Layer::Validate (const MapMode& rMapMode)
-{
- if (mpLayerDevice && ! maInvalidationRegion.IsEmpty())
- {
- Region aRegion (maInvalidationRegion);
- maInvalidationRegion.SetEmpty();
-
- mpLayerDevice->SetMapMode(rMapMode);
- ForAllRectangles(
- aRegion,
- ::boost::bind(&Layer::ValidateRectangle, this, _1));
- }
-}
-
-
-
-
-void Layer::ValidateRectangle (const Rectangle& rBox)
-{
- if ( ! mpLayerDevice)
- return;
- const Region aSavedClipRegion (mpLayerDevice->GetClipRegion());
- mpLayerDevice->IntersectClipRegion(rBox);
-
- for (::std::vector<SharedILayerPainter>::const_iterator
- iPainter(maPainters.begin()),
- iEnd(maPainters.end());
- iPainter!=iEnd;
- ++iPainter)
- {
- (*iPainter)->Paint(*mpLayerDevice, rBox);
- }
-
- mpLayerDevice->SetClipRegion(aSavedClipRegion);
-}
-
-
-
-
-void Layer::Repaint (
- OutputDevice& rTargetDevice,
- const Rectangle& rRepaintRectangle)
-{
- if (mpLayerDevice)
- {
- DeviceCopy(rTargetDevice, *mpLayerDevice, rRepaintRectangle);
- }
- else
- {
- ::std::for_each(
- maPainters.begin(),
- maPainters.end(),
- ::boost::bind(&ILayerPainter::Paint,
- _1,
- ::boost::ref(rTargetDevice),
- rRepaintRectangle));
- }
-}
-
-
-
-
-void Layer::Resize (const Size& rSize)
-{
- if (mpLayerDevice)
- {
- mpLayerDevice->SetOutputSizePixel(rSize);
- maInvalidationRegion = Rectangle(Point(0,0), rSize);
- }
-}
-
-
-
-
-void Layer::AddPainter (const SharedILayerPainter& rpPainter)
-{
- OSL_ASSERT(::std::find(maPainters.begin(), maPainters.end(), rpPainter) == maPainters.end());
-
- maPainters.push_back(rpPainter);
-}
-
-
-
-
-void Layer::RemovePainter (const SharedILayerPainter& rpPainter)
-{
- const ::std::vector<SharedILayerPainter>::iterator iPainter (
- ::std::find(maPainters.begin(), maPainters.end(), rpPainter));
- if (iPainter != maPainters.end())
- {
- maPainters.erase(iPainter);
- }
- else
- {
- DBG_ASSERT(false,"LayeredDevice::RemovePainter called for painter that is not registered");
- }
-}
-
-
-
-
-bool Layer::HasPainter (void) const
-{
- return !maPainters.empty();
-}
-
-
-
-
-void Layer::Dispose (void)
-{
- maPainters.clear();
-}
-
-
-} } } // end of namespace ::sd::slidesorter::view
diff --git a/sd/source/ui/slidesorter/view/SlsLayeredDevice.hxx b/sd/source/ui/slidesorter/view/SlsLayeredDevice.hxx
deleted file mode 100644
index 66a405823..000000000
--- a/sd/source/ui/slidesorter/view/SlsLayeredDevice.hxx
+++ /dev/null
@@ -1,99 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_VIEW_LAYERED_DEVICE_HXX
-#define SD_SLIDESORTER_VIEW_LAYERED_DEVICE_HXX
-
-#include "view/SlsILayerPainter.hxx"
-#include "SlideSorter.hxx"
-
-#include <tools/gen.hxx>
-#include <vcl/region.hxx>
-#include <vcl/virdev.hxx>
-
-#include <boost/noncopyable.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include <vector>
-
-class Window;
-
-namespace sd { namespace slidesorter { namespace view {
-
-/** A simple wrapper around an OutputDevice that provides support for
- independent layers and buffering.
- Each layer may contain any number of painters.
-*/
-class LayeredDevice
- : public ::boost::enable_shared_from_this<LayeredDevice>
-
-{
-public:
- LayeredDevice (const SharedSdWindow& rpTargetWindow);
- ~LayeredDevice (void);
-
- void Invalidate (
- const Rectangle& rInvalidationBox,
- const sal_Int32 nLayer);
- void InvalidateAllLayers (
- const Rectangle& rInvalidationBox);
- void InvalidateAllLayers (
- const Region& rInvalidationRegion);
-
- void RegisterPainter (
- const SharedILayerPainter& rPainter,
- const sal_Int32 nLayer);
-
- void RemovePainter (
- const SharedILayerPainter& rPainter,
- const sal_Int32 nLayer);
-
- bool HasPainter (const sal_Int32 nLayer);
-
- bool HandleMapModeChange (void);
- void Repaint (const Region& rRepaintRegion);
-
- void Resize (void);
-
- void Dispose (void);
-
-private:
- SharedSdWindow mpTargetWindow;
- class LayerContainer;
- ::boost::scoped_ptr<LayerContainer> mpLayers;
- ::boost::scoped_ptr<VirtualDevice> mpBackBuffer;
- MapMode maSavedMapMode;
-
- void RepaintRectangle (const Rectangle& rRepaintRectangle);
-};
-
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
diff --git a/sd/source/ui/slidesorter/view/SlsLayouter.cxx b/sd/source/ui/slidesorter/view/SlsLayouter.cxx
deleted file mode 100644
index 19ec3bc64..000000000
--- a/sd/source/ui/slidesorter/view/SlsLayouter.cxx
+++ /dev/null
@@ -1,1555 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "view/SlsLayouter.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "Window.hxx"
-#include <rtl/math.hxx>
-#include <basegfx/numeric/ftools.hxx>
-
-namespace {
- sal_Int32 RoundToInt (const double nValue)
- {
- return sal_Int32(::rtl::math::round(nValue));
- }
-}
-
-
-namespace sd { namespace slidesorter { namespace view {
-
-class Layouter::Implementation
-{
-public:
- SharedSdWindow mpWindow;
- sal_Int32 mnRequestedLeftBorder;
- sal_Int32 mnRequestedRightBorder;
- sal_Int32 mnRequestedTopBorder;
- sal_Int32 mnRequestedBottomBorder;
- sal_Int32 mnLeftBorder;
- sal_Int32 mnRightBorder;
- sal_Int32 mnTopBorder;
- sal_Int32 mnBottomBorder;
- sal_Int32 mnVerticalGap;
- sal_Int32 mnHorizontalGap;
- Size maMinimalSize;
- Size maPreferredSize;
- Size maMaximalSize;
- sal_Int32 mnMinimalColumnCount;
- sal_Int32 mnMaximalColumnCount;
- sal_Int32 mnPageCount;
- sal_Int32 mnColumnCount;
- sal_Int32 mnRowCount;
- /// The maximum number of columns. Can only be larger than the current
- /// number of columns when there are not enough pages to fill all
- /// available columns.
- sal_Int32 mnMaxColumnCount;
- /// The maximum number of rows. Can only be larger than the current
- /// number of rows when there are not enough pages to fill all available
- /// rows.
- sal_Int32 mnMaxRowCount;
- Size maPageObjectSize;
- ::boost::shared_ptr<PageObjectLayouter> mpPageObjectLayouter;
- ::boost::shared_ptr<view::Theme> mpTheme;
-
- /** Specify how the gap between two page objects is associated with the
- page objects.
- */
- enum GapMembership {
- GM_NONE, // Gap is not associated with any page object.
- GM_PREVIOUS, // The whole gap is associated with the previous page
- // object (left or above the gap.)
- GM_BOTH, // Half of the gap is associated with previous, half
- // with the next page object.
- GM_NEXT, // The whole gap is associated with the next page
- // object (right or below the gap.)
- GM_PAGE_BORDER
- };
-
- static Implementation* Create (
- const Implementation& rImplementation,
- const Layouter::Orientation eOrientation);
-
- virtual Layouter::Orientation GetOrientation (void) const = 0;
-
- bool Rearrange (
- const Size& rWindowSize,
- const Size& rPreviewModelSize,
- const sal_uInt32 nPageCount);
-
- /** Calculate the row that the point with the given vertical coordinate
- is over. The horizontal component is ignored.
- @param nYPosition
- Vertical position in model coordinates.
- @param bIncludeBordersAndGaps
- When this flag is <TRUE/> then the area of borders and gaps are
- interpreted as belonging to one of the rows.
- @param eGapMembership
- Specifies to what row the gap areas belong. Here GM_NONE
- corresponds to bIncludeBordersAndGaps being <FALSE/>. When
- GM_BOTH is given then the upper half is associated to the row
- above and the lower half to the row below. Values of
- GM_PREVIOUS and GM_NEXT associate the whole gap area with the
- row above or below respectively.
- */
- sal_Int32 GetRowAtPosition (
- sal_Int32 nYPosition,
- bool bIncludeBordersAndGaps,
- GapMembership eGapMembership = GM_NONE) const;
-
- /** Calculate the column that the point with the given horizontal
- coordinate is over. The verical component is ignored.
- @param nXPosition
- Horizontal position in model coordinates.
- @param bIncludeBordersAndGaps
- When this flag is <TRUE/> then the area of borders and gaps are
- interpreted as belonging to one of the columns.
- @param eGapMembership
- Specifies to what column the gap areas belong.
- */
- sal_Int32 GetColumnAtPosition (
- sal_Int32 nXPosition,
- bool bIncludeBordersAndGaps,
- GapMembership eGapMembership = GM_NONE) const;
-
- /** This method is typically called from GetRowAtPosition() and
- GetColumnAtPosition() to handle a position that lies inside the gap
- between two adjacent rows or columns.
- @param nDistanceIntoGap
- Vertical distance from the bottom of the upper row down into the
- gap or or horizontal distance from the right edge right into the
- gap.
- @param eGapMemberhship
- This value decides what areas in the gap belong to which (or no)
- row or column.
- @param nIndex
- The row index of the upper row or the column index of the left
- column.
- @param nGap
- Width or height of the gap in model coordiantes between the
- page borders.
- @return
- Returns either the index of the upper row (as given as nRow), the
- index of the lower row (nRow+1) or -1 to indicate that the
- position belongs to no row.
- */
- sal_Int32 ResolvePositionInGap (
- sal_Int32 nDistanceIntoGap,
- GapMembership eGapMembership,
- sal_Int32 nIndex,
- sal_Int32 nGap) const;
-
- /** Calculate the logical part of the insert position, i.e. the page
- after whicht to insert.
- */
- virtual void CalculateLogicalInsertPosition (
- const Point& rModelPosition,
- InsertPosition& rPosition) const = 0;
-
- /** Calculate the geometrical part of the insert position, i.e. the
- location of where to display the insertion indicator and the
- distances about which the leading and trailing pages have to be
- moved to make room for the indicator.
- */
- void CalculateGeometricPosition (
- InsertPosition& rPosition,
- const Size& rIndicatorSize,
- const bool bIsVertical,
- model::SlideSorterModel& rModel) const;
-
- /** Return the bounding box of the preview or, when selected, of the page
- object. Thus, it returns something like a visual bounding box.
- */
- Rectangle GetInnerBoundingBox (
- model::SlideSorterModel& rModel,
- const sal_Int32 nIndex) const;
-
- Range GetValidHorizontalSizeRange (void) const;
- Range GetValidVerticalSizeRange (void) const;
-
- Range GetRangeOfVisiblePageObjects (const Rectangle& aVisibleArea) const;
- sal_Int32 GetIndex (
- const sal_Int32 nRow,
- const sal_Int32 nColumn,
- const bool bClampToValidRange) const;
-
- Rectangle GetPageObjectBox (
- const sal_Int32 nIndex,
- const bool bIncludeBorderAndGap = false) const;
-
- Rectangle GetPageObjectBox (
- const sal_Int32 nRow,
- const sal_Int32 nColumn) const;
-
- Rectangle AddBorderAndGap (
- const Rectangle& rBoundingBox,
- const sal_Int32 nRow,
- const sal_Int32 nColumn) const;
-
- Rectangle GetTotalBoundingBox (void) const;
-
- virtual ~Implementation (void);
-
-protected:
- Implementation (
- const SharedSdWindow& rpWindow,
- const ::boost::shared_ptr<view::Theme>& rpTheme);
- Implementation (const Implementation& rImplementation);
-
- virtual void CalculateRowAndColumnCount (const Size& rWindowSize) = 0;
- virtual void CalculateMaxRowAndColumnCount (const Size& rWindowSize) = 0;
- virtual Size CalculateTargetSize (
- const Size& rWindowSize,
- const Size& rPreviewModelSize) const = 0;
- Size GetTargetSize (
- const Size& rWindowSize,
- const Size& rPreviewModelSize,
- const bool bCalculateWidth,
- const bool bCalculateHeight) const;
- void CalculateVerticalLogicalInsertPosition (
- const Point& rModelPosition,
- InsertPosition& rPosition) const;
-};
-
-
-/** The vertical layouter has one column and as many rows as there are
- pages.
-*/
-class VerticalImplementation : public Layouter::Implementation
-{
-public:
- VerticalImplementation (
- const SharedSdWindow& rpWindow,
- const ::boost::shared_ptr<view::Theme>& rpTheme);
- VerticalImplementation (const Implementation& rImplementation);
-
- virtual Layouter::Orientation GetOrientation (void) const;
-
- void CalculateLogicalInsertPosition (
- const Point& rModelPosition,
- InsertPosition& rPosition) const;
-
-protected:
- virtual void CalculateRowAndColumnCount (const Size& rWindowSize);
- virtual void CalculateMaxRowAndColumnCount (const Size& rWindowSize);
- virtual Size CalculateTargetSize (
- const Size& rWindowSize,
- const Size& rPreviewModelSize) const;
-};
-
-
-/** The horizontal layouter has one row and as many columns as there are
- pages.
-*/
-class HorizontalImplementation : public Layouter::Implementation
-{
-public:
- HorizontalImplementation (
- const SharedSdWindow& rpWindow,
- const ::boost::shared_ptr<view::Theme>& rpTheme);
- HorizontalImplementation (const Implementation& rImplementation);
-
- virtual Layouter::Orientation GetOrientation (void) const;
-
- void CalculateLogicalInsertPosition (
- const Point& rModelPosition,
- InsertPosition& rPosition) const;
-
-protected:
- virtual void CalculateRowAndColumnCount (const Size& rWindowSize);
- virtual void CalculateMaxRowAndColumnCount (const Size& rWindowSize);
- virtual Size CalculateTargetSize (
- const Size& rWindowSize,
- const Size& rPreviewModelSize) const;
-};
-
-
-/** The number of columns of the grid layouter is defined via a control in
- the slide sorter tool bar. The number of rows is calculated from the
- number of columns and the number of pages.
-*/
-class GridImplementation : public Layouter::Implementation
-{
-public:
- GridImplementation (
- const SharedSdWindow& rpWindow,
- const ::boost::shared_ptr<view::Theme>& rpTheme);
- GridImplementation (const Implementation& rImplementation);
-
- virtual Layouter::Orientation GetOrientation (void) const;
-
- void CalculateLogicalInsertPosition (
- const Point& rModelPosition,
- InsertPosition& rPosition) const;
-
-protected:
- virtual void CalculateRowAndColumnCount (const Size& rWindowSize);
- virtual void CalculateMaxRowAndColumnCount (const Size& rWindowSize);
- virtual Size CalculateTargetSize (
- const Size& rWindowSize,
- const Size& rPreviewModelSize) const;
-};
-
-
-
-
-//===== Layouter ==============================================================
-
-Layouter::Layouter (
- const SharedSdWindow& rpWindow,
- const ::boost::shared_ptr<Theme>& rpTheme)
- : mpImplementation(new GridImplementation(rpWindow, rpTheme)),
- mpWindow(rpWindow)
-{
-}
-
-
-
-
-Layouter::~Layouter (void)
-{
-}
-
-
-
-
-::boost::shared_ptr<PageObjectLayouter> Layouter::GetPageObjectLayouter (void) const
-{
- return mpImplementation->mpPageObjectLayouter;
-}
-
-
-
-
-void Layouter::SetBorders (
- sal_Int32 nLeftBorder,
- sal_Int32 nRightBorder,
- sal_Int32 nTopBorder,
- sal_Int32 nBottomBorder)
-{
- if (nLeftBorder >= 0)
- mpImplementation->mnRequestedLeftBorder = nLeftBorder;
- if (nRightBorder >= 0)
- mpImplementation->mnRequestedRightBorder = nRightBorder;
- if (nTopBorder >= 0)
- mpImplementation->mnRequestedTopBorder = nTopBorder;
- if (nBottomBorder >= 0)
- mpImplementation->mnRequestedBottomBorder = nBottomBorder;
-}
-
-
-
-
-void Layouter::SetColumnCount (
- sal_Int32 nMinimalColumnCount,
- sal_Int32 nMaximalColumnCount)
-{
- if (nMinimalColumnCount <= nMaximalColumnCount)
- {
- mpImplementation->mnMinimalColumnCount = nMinimalColumnCount;
- mpImplementation->mnMaximalColumnCount = nMaximalColumnCount;
- }
-}
-
-
-
-
-bool Layouter::Rearrange (
- const Orientation eOrientation,
- const Size& rWindowSize,
- const Size& rPageSize,
- const sal_uInt32 nPageCount)
-{
- OSL_ASSERT(mpWindow);
-
- if (eOrientation != mpImplementation->GetOrientation())
- mpImplementation.reset(Implementation::Create(*mpImplementation, eOrientation));
-
- return mpImplementation->Rearrange(rWindowSize, rPageSize, nPageCount);
-}
-
-
-
-
-void Layouter::_SetZoom (double nZoomFactor)
-{
- _SetZoom(Fraction(nZoomFactor));
-}
-
-
-
-
-void Layouter::_SetZoom (Fraction nZoomFactor)
-{
- OSL_ASSERT(mpWindow);
-
- MapMode aMapMode (mpWindow->GetMapMode());
- aMapMode.SetScaleX (nZoomFactor);
- aMapMode.SetScaleY (nZoomFactor);
- mpWindow->SetMapMode (aMapMode);
-}
-
-
-
-
-sal_Int32 Layouter::GetColumnCount (void) const
-{
- return mpImplementation->mnColumnCount;
-}
-
-
-
-
-sal_Int32 Layouter::GetRowCount (void) const
-{
- return mpImplementation->mnRowCount;
-}
-
-
-
-
-sal_Int32 Layouter::GetRow (const sal_Int32 nIndex) const
-{
- return nIndex / mpImplementation->mnColumnCount;
-}
-
-
-
-
-sal_Int32 Layouter::GetColumn (const sal_Int32 nIndex) const
-{
- return nIndex % mpImplementation->mnColumnCount;
-}
-
-
-
-
-sal_Int32 Layouter::GetIndex (const sal_Int32 nRow, const sal_Int32 nColumn) const
-{
- return mpImplementation->GetIndex(nRow,nColumn,true);
-}
-
-
-
-
-Size Layouter::GetPageObjectSize (void) const
-{
- return mpImplementation->maPageObjectSize;
-}
-
-
-
-
-Rectangle Layouter::GetPageObjectBox (
- const sal_Int32 nIndex,
- const bool bIncludeBorderAndGap) const
-{
- return mpImplementation->GetPageObjectBox(nIndex, bIncludeBorderAndGap);
-}
-
-
-
-
-Rectangle Layouter::GetTotalBoundingBox (void) const
-{
- return mpImplementation->GetTotalBoundingBox();
-}
-
-
-
-
-InsertPosition Layouter::GetInsertPosition (
- const Point& rModelPosition,
- const Size& rIndicatorSize,
- model::SlideSorterModel& rModel) const
-{
- InsertPosition aPosition;
- mpImplementation->CalculateLogicalInsertPosition(
- rModelPosition,
- aPosition);
- mpImplementation->CalculateGeometricPosition(
- aPosition,
- rIndicatorSize,
- GetColumnCount()==1,
- rModel);
- return aPosition;
-}
-
-
-
-
-Range Layouter::GetValidHorizontalSizeRange (void) const
-{
- return mpImplementation->GetValidHorizontalSizeRange();
-}
-
-
-
-
-Range Layouter::GetValidVerticalSizeRange (void) const
-{
- return mpImplementation->GetValidVerticalSizeRange();
-}
-
-
-
-
-Range Layouter::GetRangeOfVisiblePageObjects (const Rectangle& aVisibleArea) const
-{
- return mpImplementation->GetRangeOfVisiblePageObjects(aVisibleArea);
-}
-
-
-
-
-sal_Int32 Layouter::GetIndexAtPoint (
- const Point& rPosition,
- const bool bIncludePageBorders,
- const bool bClampToValidRange) const
-{
- const sal_Int32 nRow (
- mpImplementation->GetRowAtPosition (
- rPosition.Y(),
- bIncludePageBorders,
- bIncludePageBorders ? Implementation::GM_PAGE_BORDER : Implementation::GM_NONE));
- const sal_Int32 nColumn (
- mpImplementation->GetColumnAtPosition (
- rPosition.X(),
- bIncludePageBorders,
- bIncludePageBorders ? Implementation::GM_PAGE_BORDER : Implementation::GM_NONE));
-
- return mpImplementation->GetIndex(nRow,nColumn,bClampToValidRange);
-}
-
-
-
-
-//===== Layouter::Implementation ==============================================
-
-Layouter::Implementation* Layouter::Implementation::Create (
- const Implementation& rImplementation,
- const Layouter::Orientation eOrientation)
-{
- switch (eOrientation)
- {
- case HORIZONTAL: return new HorizontalImplementation(rImplementation);
- case VERTICAL: return new VerticalImplementation(rImplementation);
- case GRID:
- default: return new GridImplementation(rImplementation);
- }
-}
-
-
-
-
-Layouter::Implementation::Implementation (
- const SharedSdWindow& rpWindow,
- const ::boost::shared_ptr<view::Theme>& rpTheme)
- : mpWindow(rpWindow),
- mnRequestedLeftBorder(5),
- mnRequestedRightBorder(5),
- mnRequestedTopBorder(5),
- mnRequestedBottomBorder(5),
- mnLeftBorder(5),
- mnRightBorder(5),
- mnTopBorder(5),
- mnBottomBorder(5),
- mnVerticalGap (10 - 2*rpTheme->GetIntegerValue(Theme::Integer_FocusIndicatorWidth)),
- mnHorizontalGap(10 - 2*rpTheme->GetIntegerValue(Theme::Integer_FocusIndicatorWidth)),
- maMinimalSize(132,98),
- maPreferredSize(200,150),
- maMaximalSize(300,200),
- mnMinimalColumnCount(1),
- mnMaximalColumnCount(15),
- mnPageCount(0),
- mnColumnCount(1),
- mnRowCount(0),
- mnMaxColumnCount(0),
- mnMaxRowCount(0),
- maPageObjectSize(1,1),
- mpPageObjectLayouter(),
- mpTheme(rpTheme)
-{
-}
-
-
-
-
-Layouter::Implementation::Implementation (const Implementation& rImplementation)
- : mpWindow(rImplementation.mpWindow),
- mnRequestedLeftBorder(rImplementation.mnRequestedLeftBorder),
- mnRequestedRightBorder(rImplementation.mnRequestedRightBorder),
- mnRequestedTopBorder(rImplementation.mnRequestedTopBorder),
- mnRequestedBottomBorder(rImplementation.mnRequestedBottomBorder),
- mnLeftBorder(rImplementation.mnLeftBorder),
- mnRightBorder(rImplementation.mnRightBorder),
- mnTopBorder(rImplementation.mnTopBorder),
- mnBottomBorder(rImplementation.mnBottomBorder),
- mnVerticalGap(rImplementation.mnVerticalGap),
- mnHorizontalGap(rImplementation.mnHorizontalGap),
- maMinimalSize(rImplementation.maMinimalSize),
- maPreferredSize(rImplementation.maPreferredSize),
- maMaximalSize(rImplementation.maMaximalSize),
- mnMinimalColumnCount(rImplementation.mnMinimalColumnCount),
- mnMaximalColumnCount(rImplementation.mnMaximalColumnCount),
- mnPageCount(rImplementation.mnPageCount),
- mnColumnCount(rImplementation.mnColumnCount),
- mnRowCount(rImplementation.mnRowCount),
- mnMaxColumnCount(rImplementation.mnMaxColumnCount),
- mnMaxRowCount(rImplementation.mnMaxRowCount),
- maPageObjectSize(rImplementation.maPageObjectSize),
- mpPageObjectLayouter(),
- mpTheme(rImplementation.mpTheme)
-{
-}
-
-
-
-
-Layouter::Implementation::~Implementation (void)
-{
-}
-
-
-
-
-bool Layouter::Implementation::Rearrange (
- const Size& rWindowSize,
- const Size& rPreviewModelSize,
- const sal_uInt32 nPageCount)
-{
- mnPageCount = nPageCount;
-
- // Return early when the window or the model have not yet been initialized.
- if (rWindowSize.Width()<=0 || rWindowSize.Height()<=0)
- return false;
- if (rPreviewModelSize.Width()<=0 || rPreviewModelSize.Height()<=0)
- return false;
-
- CalculateRowAndColumnCount(rWindowSize);
-
- // Update the border values.
- mnLeftBorder = mnRequestedLeftBorder;
- mnTopBorder = mnRequestedTopBorder;
- mnRightBorder = mnRequestedRightBorder;
- mnBottomBorder = mnRequestedBottomBorder;
- if (mnColumnCount > 1)
- {
- int nMinimumBorderWidth = mnHorizontalGap/2;
- if (mnLeftBorder < nMinimumBorderWidth)
- mnLeftBorder = nMinimumBorderWidth;
- if (mnRightBorder < nMinimumBorderWidth)
- mnRightBorder = nMinimumBorderWidth;
- }
- else
- {
- int nMinimumBorderHeight = mnVerticalGap/2;
- if (mnTopBorder < nMinimumBorderHeight)
- mnTopBorder = nMinimumBorderHeight;
- if (mnBottomBorder < nMinimumBorderHeight)
- mnBottomBorder = nMinimumBorderHeight;
- }
-
- mpPageObjectLayouter.reset(
- new PageObjectLayouter(
- mpTheme,
- CalculateTargetSize(rWindowSize, rPreviewModelSize),
- rPreviewModelSize,
- mpWindow,
- mnPageCount));
- maPageObjectSize = mpPageObjectLayouter->GetSize(
- PageObjectLayouter::FocusIndicator,
- PageObjectLayouter::WindowCoordinateSystem);
-
- CalculateMaxRowAndColumnCount(rWindowSize);
-
- return true;
-}
-
-
-
-
-sal_Int32 Layouter::Implementation::GetRowAtPosition (
- sal_Int32 nYPosition,
- bool bIncludeBordersAndGaps,
- GapMembership eGapMembership) const
-{
- sal_Int32 nRow = -1;
-
- const sal_Int32 nY = nYPosition - mnTopBorder;
- if (nY >= 0)
- {
- // Vertical distance from one row to the next.
- const sal_Int32 nRowOffset (maPageObjectSize.Height() + mnVerticalGap);
-
- // Calculate row consisting of page objects and gap below.
- nRow = nY / nRowOffset;
-
- const sal_Int32 nDistanceIntoGap ((nY - nRow*nRowOffset) - maPageObjectSize.Height());
- // When inside the gap below then nYPosition is not over a page
- // object.
- if (nDistanceIntoGap > 0)
- nRow = ResolvePositionInGap (
- nDistanceIntoGap,
- eGapMembership,
- nRow,
- mnVerticalGap);
- }
- else if (bIncludeBordersAndGaps)
- {
- // We are in the top border area. Set nRow to the first row when
- // the top border shall be considered to belong to the first row.
- nRow = 0;
- }
-
- return nRow;
-}
-
-
-
-
-sal_Int32 Layouter::Implementation::GetColumnAtPosition (
- sal_Int32 nXPosition,
- bool bIncludeBordersAndGaps,
- GapMembership eGapMembership) const
-{
- sal_Int32 nColumn = -1;
-
- sal_Int32 nX = nXPosition - mnLeftBorder;
- if (nX >= 0)
- {
- // Horizontal distance from one column to the next.
- const sal_Int32 nColumnOffset (maPageObjectSize.Width() + mnHorizontalGap);
-
- // Calculate row consisting of page objects and gap below.
- nColumn = nX / nColumnOffset;
- if (nColumn < 0)
- nColumn = 0;
- else if (nColumn >= mnColumnCount)
- nColumn = mnColumnCount-1;
-
- const sal_Int32 nDistanceIntoGap ((nX - nColumn*nColumnOffset) - maPageObjectSize.Width());
- // When inside the gap at the right then nXPosition is not over a
- // page object.
- if (nDistanceIntoGap > 0)
- nColumn = ResolvePositionInGap (
- nDistanceIntoGap,
- eGapMembership,
- nColumn,
- mnHorizontalGap);
- }
- else if (bIncludeBordersAndGaps)
- {
- // We are in the left border area. Set nColumn to the first column
- // when the left border shall be considered to belong to the first
- // column.
- nColumn = 0;
- }
- return nColumn;
-}
-
-
-
-
-sal_Int32 Layouter::Implementation::ResolvePositionInGap (
- sal_Int32 nDistanceIntoGap,
- GapMembership eGapMembership,
- sal_Int32 nIndex,
- sal_Int32 nGap) const
-{
- switch (eGapMembership)
- {
- case GM_NONE:
- // The gap is no man's land.
- nIndex = -1;
- break;
-
- case GM_BOTH:
- {
- // The lower half of the gap belongs to the next row or column.
- sal_Int32 nFirstHalfGapWidth = nGap / 2;
- if (nDistanceIntoGap > nFirstHalfGapWidth)
- nIndex ++;
- break;
- }
-
- case GM_PREVIOUS:
- // Row or column already at correct value.
- break;
-
- case GM_NEXT:
- // The complete gap belongs to the next row or column.
- nIndex ++;
- break;
-
- case GM_PAGE_BORDER:
- if (nDistanceIntoGap > 0)
- {
- if (nDistanceIntoGap > nGap)
- {
- // Inside the border of the next row or column.
- nIndex ++;
- }
- else
- {
- // Inside the gap between the page borders.
- nIndex = -1;
- }
- }
- break;
-
- default:
- nIndex = -1;
- }
-
- return nIndex;
-}
-
-
-
-
-void Layouter::Implementation::CalculateGeometricPosition (
- InsertPosition& rPosition,
- const Size& rIndicatorSize,
- const bool bIsVertical,
- model::SlideSorterModel& rModel) const
-{
- // 1. Determine right/bottom of the leading page and the left/top of the
- // trailing page object and how to distribute the missing space.
- sal_Int32 nLeadingLocation (0);
- sal_Int32 nTrailingLocation (0);
- bool bIsLeadingFixed (false);
- bool bIsTrailingFixed (false);
- sal_Int32 nSecondaryLocation (0);
- const sal_Int32 nIndex (rPosition.GetIndex());
-
- if (rPosition.IsAtRunStart())
- {
- // Place indicator at the top of the column.
- const Rectangle aOuterBox (GetPageObjectBox(nIndex));
- const Rectangle aInnerBox (GetInnerBoundingBox(rModel, nIndex));
- if (bIsVertical)
- {
- nLeadingLocation = aOuterBox.Top();
- nTrailingLocation = aInnerBox.Top();
- nSecondaryLocation = aInnerBox.Center().X();
- }
- else
- {
- nLeadingLocation = aOuterBox.Left();
- nTrailingLocation = aInnerBox.Left();
- nSecondaryLocation = aInnerBox.Center().Y();
- }
- bIsLeadingFixed = true;
- }
- else if (rPosition.IsAtRunEnd())
- {
- // Place indicator at the bottom/right of the column/row.
-
- const Rectangle aOuterBox (GetPageObjectBox(nIndex-1));
- const Rectangle aInnerBox (GetInnerBoundingBox(rModel, nIndex-1));
- if (bIsVertical)
- {
- nLeadingLocation = aInnerBox.Bottom();
- nTrailingLocation = aOuterBox.Bottom();
- nSecondaryLocation = aInnerBox.Center().X();
- }
- else
- {
- nLeadingLocation = aInnerBox.Right();
- nTrailingLocation = aOuterBox.Right();
- nSecondaryLocation = aInnerBox.Center().Y();
- }
- bIsTrailingFixed = true;
- if ( ! rPosition.IsExtraSpaceNeeded())
- bIsLeadingFixed = true;
- }
- else
- {
- // Place indicator between two rows/columns.
- const Rectangle aBox1 (GetInnerBoundingBox(rModel, nIndex-1));
- const Rectangle aBox2 (GetInnerBoundingBox(rModel, nIndex));
- if (bIsVertical)
- {
- nLeadingLocation = aBox1.Bottom();
- nTrailingLocation = aBox2.Top();
- nSecondaryLocation = (aBox1.Center().X() + aBox2.Center().X()) / 2;
- }
- else
- {
- nLeadingLocation = aBox1.Right();
- nTrailingLocation = aBox2.Left();
- nSecondaryLocation = (aBox1.Center().Y() + aBox2.Center().Y()) / 2;
- }
- }
-
- // 2. Calculate the location of the insert indicator and the offsets of
- // leading and trailing pages.
- const sal_Int32 nAvailableSpace (nTrailingLocation - nLeadingLocation);
- const sal_Int32 nRequiredSpace (bIsVertical ? rIndicatorSize.Height():rIndicatorSize.Width());
- const sal_Int32 nMissingSpace (::std::max(sal_Int32(0), nRequiredSpace - nAvailableSpace));
- sal_Int32 nPrimaryLocation (0);
- sal_Int32 nLeadingOffset (0);
- sal_Int32 nTrailingOffset (0);
- if (bIsLeadingFixed)
- {
- nPrimaryLocation = nLeadingLocation + nRequiredSpace/2;
- if ( ! bIsTrailingFixed)
- nTrailingOffset = nMissingSpace;
- }
- else if (bIsTrailingFixed)
- {
- nPrimaryLocation = nTrailingLocation - nRequiredSpace/2;
- nLeadingOffset = -nMissingSpace;
- }
- else
- {
- nPrimaryLocation = (nLeadingLocation + nTrailingLocation) /2;
- nLeadingOffset = -nMissingSpace/2;
- nTrailingOffset = nMissingSpace + nLeadingOffset;
- }
-
- if (bIsVertical)
- {
- rPosition.SetGeometricalPosition(
- Point(nSecondaryLocation, nPrimaryLocation),
- Point(0, nLeadingOffset),
- Point(0, nTrailingOffset));
- }
- else
- {
- rPosition.SetGeometricalPosition(
- Point(nPrimaryLocation, nSecondaryLocation),
- Point(nLeadingOffset, 0),
- Point(nTrailingOffset, 0));
- }
-}
-
-
-
-
-Rectangle Layouter::Implementation::GetInnerBoundingBox (
- model::SlideSorterModel& rModel,
- const sal_Int32 nIndex) const
-{
- model::SharedPageDescriptor pDescriptor (rModel.GetPageDescriptor(nIndex));
- if ( ! pDescriptor)
- return Rectangle();
-
- const Point aLocation (pDescriptor->GetLocation(true));
- if (pDescriptor->HasState(model::PageDescriptor::ST_Selected))
- return mpPageObjectLayouter->GetBoundingBox(
- aLocation,
- PageObjectLayouter::PageObject,
- PageObjectLayouter::ModelCoordinateSystem);
- else
- return mpPageObjectLayouter->GetBoundingBox(
- aLocation,
- PageObjectLayouter::Preview,
- PageObjectLayouter::ModelCoordinateSystem);
-}
-
-
-
-
-Range Layouter::Implementation::GetValidHorizontalSizeRange (void) const
-{
- return Range(
- mnLeftBorder + maMinimalSize.Width() + mnRightBorder,
- mnLeftBorder + maMaximalSize.Width() + mnRightBorder);
-}
-
-
-
-
-Range Layouter::Implementation::GetValidVerticalSizeRange (void) const
-{
- return Range(
- mnTopBorder + maMinimalSize.Height() + mnBottomBorder,
- mnTopBorder + maMaximalSize.Height() + mnBottomBorder);
-}
-
-
-
-
-Range Layouter::Implementation::GetRangeOfVisiblePageObjects (const Rectangle& aVisibleArea) const
-{
- const sal_Int32 nRow0 (GetRowAtPosition(aVisibleArea.Top(), true, GM_NEXT));
- const sal_Int32 nCol0 (GetColumnAtPosition(aVisibleArea.Left(),true, GM_NEXT));
- const sal_Int32 nRow1 (GetRowAtPosition(aVisibleArea.Bottom(), true, GM_PREVIOUS));
- const sal_Int32 nCol1 (GetColumnAtPosition(aVisibleArea.Right(), true, GM_PREVIOUS));
-
- // When start and end lie in different rows then the range may include
- // slides outside (left or right of) the given area.
- return Range(GetIndex(nRow0,nCol0,true), GetIndex(nRow1,nCol1,true));
-}
-
-
-
-
-Size Layouter::Implementation::GetTargetSize (
- const Size& rWindowSize,
- const Size& rPreviewModelSize,
- const bool bCalculateWidth,
- const bool bCalculateHeight) const
-{
- (void)rPreviewModelSize;
-
- if (mnColumnCount<=0 || mnRowCount<=0)
- return maPreferredSize;
- if ( ! (bCalculateWidth || bCalculateHeight))
- {
- OSL_ASSERT(bCalculateWidth || bCalculateHeight);
- return maPreferredSize;
- }
-
- // Calculate the width of each page object.
- Size aTargetSize (0,0);
- if (bCalculateWidth)
- aTargetSize.setWidth(
- (rWindowSize.Width() - mnLeftBorder - mnRightBorder
- - (mnColumnCount-1) * mnHorizontalGap)
- / mnColumnCount);
- else if (bCalculateHeight)
- aTargetSize.setHeight(
- (rWindowSize.Height() - mnTopBorder - mnBottomBorder
- - (mnRowCount-1) * mnVerticalGap)
- / mnRowCount);
-
- if (bCalculateWidth)
- {
- if (aTargetSize.Width() < maMinimalSize.Width())
- aTargetSize.setWidth(maMinimalSize.Width());
- else if (aTargetSize.Width() > maMaximalSize.Width())
- aTargetSize.setWidth(maMaximalSize.Width());
- }
- else if (bCalculateHeight)
- {
- if (aTargetSize.Height() < maMinimalSize.Height())
- aTargetSize.setHeight(maMinimalSize.Height());
- else if (aTargetSize.Height() > maMaximalSize.Height())
- aTargetSize.setHeight(maMaximalSize.Height());
- }
-
- return aTargetSize;
-}
-
-
-
-
-sal_Int32 Layouter::Implementation::GetIndex (
- const sal_Int32 nRow,
- const sal_Int32 nColumn,
- const bool bClampToValidRange) const
-{
- if (nRow >= 0 && nColumn >= 0)
- {
- const sal_Int32 nIndex (nRow * mnColumnCount + nColumn);
- if (nIndex >= mnPageCount)
- if (bClampToValidRange)
- return mnPageCount-1;
- else
- return -1;
- else
- return nIndex;
- }
- else if (bClampToValidRange)
- return 0;
- else
- return -1;
-}
-
-
-
-
-Rectangle Layouter::Implementation::GetPageObjectBox (
- const sal_Int32 nIndex,
- const bool bIncludeBorderAndGap) const
-{
- const sal_Int32 nRow (nIndex / mnColumnCount);
- const sal_Int32 nColumn (nIndex % mnColumnCount);
-
- const Rectangle aBoundingBox (GetPageObjectBox(nRow,nColumn));
- if (bIncludeBorderAndGap)
- return AddBorderAndGap(aBoundingBox, nRow, nColumn);
- else
- return aBoundingBox;
-}
-
-
-
-
-Rectangle Layouter::Implementation::GetPageObjectBox (
- const sal_Int32 nRow,
- const sal_Int32 nColumn) const
-{
- return Rectangle(
- Point (mnLeftBorder
- + nColumn * maPageObjectSize.Width()
- + (nColumn>0 ? nColumn : 0) * mnHorizontalGap,
- mnTopBorder
- + nRow * maPageObjectSize.Height()
- + (nRow>0 ? nRow : 0) * mnVerticalGap),
- maPageObjectSize);
-}
-
-
-
-
-
-Rectangle Layouter::Implementation::AddBorderAndGap (
- const Rectangle& rBoundingBox,
- const sal_Int32 nRow,
- const sal_Int32 nColumn) const
-{
- Rectangle aBoundingBox (rBoundingBox);
-
- if (nColumn == 0)
- aBoundingBox.Left() = 0;
- else
- aBoundingBox.Left() -= mnHorizontalGap/2;
- if (nColumn == mnColumnCount-1)
- aBoundingBox.Right() += mnRightBorder;
- else
- aBoundingBox.Right() += mnHorizontalGap/2;
- if (nRow == 0)
- aBoundingBox.Top() = 0;
- else
- aBoundingBox.Top() -= mnVerticalGap/2;
- if (nRow == mnRowCount-1)
- aBoundingBox.Bottom() += mnBottomBorder;
- else
- aBoundingBox.Bottom() += mnVerticalGap/2;
- return aBoundingBox;
-}
-
-
-
-
-Rectangle Layouter::Implementation::GetTotalBoundingBox (void) const
-{
- sal_Int32 nHorizontalSize = 0;
- sal_Int32 nVerticalSize = 0;
- if (mnColumnCount > 0)
- {
- sal_Int32 nRowCount = (mnPageCount+mnColumnCount-1) / mnColumnCount;
- nHorizontalSize =
- mnLeftBorder
- + mnRightBorder
- + mnColumnCount * maPageObjectSize.Width();
- if (mnColumnCount > 1)
- nHorizontalSize += (mnColumnCount-1) * mnHorizontalGap;
- nVerticalSize =
- mnTopBorder
- + mnBottomBorder
- + nRowCount * maPageObjectSize.Height();
- if (nRowCount > 1)
- nVerticalSize += (nRowCount-1) * mnVerticalGap;
- }
-
- return Rectangle (
- Point(0,0),
- Size (nHorizontalSize, nVerticalSize)
- );
-}
-
-
-
-
-void Layouter::Implementation::CalculateVerticalLogicalInsertPosition (
- const Point& rModelPosition,
- InsertPosition& rPosition) const
-{
- const sal_Int32 nY = rModelPosition.Y() - mnTopBorder + maPageObjectSize.Height()/2;
- const sal_Int32 nRowHeight (maPageObjectSize.Height() + mnVerticalGap);
- const sal_Int32 nRow (::std::min(mnPageCount, nY / nRowHeight));
- rPosition.SetLogicalPosition (
- nRow,
- 0,
- nRow,
- (nRow == 0),
- (nRow == mnRowCount),
- (nRow >= mnMaxRowCount));
-}
-
-
-
-
-//===== HorizontalImplementation ================================================
-
-HorizontalImplementation::HorizontalImplementation (
- const SharedSdWindow& rpWindow,
- const ::boost::shared_ptr<view::Theme>& rpTheme)
- : Implementation(rpWindow, rpTheme)
-{
-}
-
-
-
-
-HorizontalImplementation::HorizontalImplementation (const Implementation& rImplementation)
- : Implementation(rImplementation)
-{
-}
-
-
-
-
-Layouter::Orientation HorizontalImplementation::GetOrientation (void) const
-{
- return Layouter::HORIZONTAL;
-}
-
-
-
-
-void HorizontalImplementation::CalculateRowAndColumnCount (const Size& rWindowSize)
-{
- (void)rWindowSize;
-
- // Row and column count are fixed (for a given page count.)
- mnColumnCount = mnPageCount;
- mnRowCount = 1;
-}
-
-
-
-
-void HorizontalImplementation::CalculateMaxRowAndColumnCount (const Size& rWindowSize)
-{
- mnMaxColumnCount = (rWindowSize.Width() - mnLeftBorder - mnRightBorder)
- / (maPageObjectSize.Width() + mnHorizontalGap);
- mnMaxRowCount = 1;
-}
-
-
-
-
-Size HorizontalImplementation::CalculateTargetSize (
- const Size& rWindowSize,
- const Size& rPreviewModelSize) const
-{
- return Implementation::GetTargetSize(rWindowSize, rPreviewModelSize, false, true);
-}
-
-
-
-
-void HorizontalImplementation::CalculateLogicalInsertPosition (
- const Point& rModelPosition,
- InsertPosition& rPosition) const
-{
- const sal_Int32 nX = rModelPosition.X() - mnLeftBorder + maPageObjectSize.Width()/2;
- const sal_Int32 nColumnWidth (maPageObjectSize.Width() + mnHorizontalGap);
- const sal_Int32 nColumn (::std::min(mnPageCount, nX / nColumnWidth));
- rPosition.SetLogicalPosition (
- 0,
- nColumn,
- nColumn,
- (nColumn == 0),
- (nColumn == mnColumnCount),
- (nColumn >= mnMaxColumnCount));
-}
-
-
-
-
-//===== VerticalImplementation ================================================
-
-VerticalImplementation::VerticalImplementation (
- const SharedSdWindow& rpWindow,
- const ::boost::shared_ptr<view::Theme>& rpTheme)
- : Implementation(rpWindow, rpTheme)
-{
-}
-
-
-
-
-VerticalImplementation::VerticalImplementation (const Implementation& rImplementation)
- : Implementation(rImplementation)
-{
-}
-
-
-
-
-Layouter::Orientation VerticalImplementation::GetOrientation (void) const
-{
- return Layouter::VERTICAL;
-}
-
-
-
-
-void VerticalImplementation::CalculateRowAndColumnCount (const Size& rWindowSize)
-{
- (void)rWindowSize;
-
- // Row and column count are fixed (for a given page count.)
- mnRowCount = mnPageCount;
- mnColumnCount = 1;
-
-}
-
-
-
-
-void VerticalImplementation::CalculateMaxRowAndColumnCount (const Size& rWindowSize)
-{
- mnMaxRowCount = (rWindowSize.Height() - mnTopBorder - mnBottomBorder)
- / (maPageObjectSize.Height() + mnVerticalGap);
- mnMaxColumnCount = 1;
-}
-
-
-
-
-Size VerticalImplementation::CalculateTargetSize (
- const Size& rWindowSize,
- const Size& rPreviewModelSize) const
-{
- return Implementation::GetTargetSize(rWindowSize, rPreviewModelSize, true, false);
-}
-
-
-
-
-void VerticalImplementation::CalculateLogicalInsertPosition (
- const Point& rModelPosition,
- InsertPosition& rPosition) const
-{
- return CalculateVerticalLogicalInsertPosition(rModelPosition, rPosition);
-}
-
-
-
-
-//===== GridImplementation ================================================
-
-GridImplementation::GridImplementation (
- const SharedSdWindow& rpWindow,
- const ::boost::shared_ptr<view::Theme>& rpTheme)
- : Implementation(rpWindow, rpTheme)
-{
-}
-
-
-
-
-GridImplementation::GridImplementation (const Implementation& rImplementation)
- : Implementation(rImplementation)
-{
-}
-
-
-
-
-Layouter::Orientation GridImplementation::GetOrientation (void) const
-{
- return Layouter::GRID;
-}
-
-
-
-
-void GridImplementation::CalculateRowAndColumnCount (const Size& rWindowSize)
-{
- // Calculate the column count.
- mnColumnCount
- = (rWindowSize.Width() - mnRequestedLeftBorder - mnRequestedRightBorder)
- / (maPreferredSize.Width() + mnHorizontalGap);
- if (mnColumnCount < mnMinimalColumnCount)
- mnColumnCount = mnMinimalColumnCount;
- if (mnColumnCount > mnMaximalColumnCount)
- mnColumnCount = mnMaximalColumnCount;
- mnRowCount = (mnPageCount + mnColumnCount-1)/mnColumnCount;
-}
-
-
-
-
-void GridImplementation::CalculateMaxRowAndColumnCount (const Size& rWindowSize)
-{
- mnMaxColumnCount = (rWindowSize.Width() - mnLeftBorder - mnRightBorder)
- / (maPageObjectSize.Width() + mnHorizontalGap);
- mnMaxRowCount = (rWindowSize.Height() - mnTopBorder - mnBottomBorder)
- / (maPageObjectSize.Height() + mnVerticalGap);
-}
-
-
-
-
-
-Size GridImplementation::CalculateTargetSize (
- const Size& rWindowSize,
- const Size& rPreviewModelSize) const
-{
- return Implementation::GetTargetSize(rWindowSize, rPreviewModelSize, true, true);
-}
-
-
-
-
-void GridImplementation::CalculateLogicalInsertPosition (
- const Point& rModelPosition,
- InsertPosition& rPosition) const
-{
- if (mnColumnCount == 1)
- {
- CalculateVerticalLogicalInsertPosition(rModelPosition, rPosition);
- }
- else
- {
- // Handle the general case of more than one column.
- sal_Int32 nRow (::std::min(
- mnRowCount-1,
- GetRowAtPosition (rModelPosition.Y(), true, GM_BOTH)));
- const sal_Int32 nX = rModelPosition.X() - mnLeftBorder + maPageObjectSize.Width()/2;
- const sal_Int32 nColumnWidth (maPageObjectSize.Width() + mnHorizontalGap);
- sal_Int32 nColumn (::std::min(mnColumnCount, nX / nColumnWidth));
- sal_Int32 nIndex (nRow * mnColumnCount + nColumn);
- bool bIsAtRunEnd (nColumn == mnColumnCount);
-
- if (nIndex >= mnPageCount)
- {
- nIndex = mnPageCount;
- nRow = mnRowCount-1;
- nColumn = ::std::min(::std::min(mnPageCount, mnColumnCount), nColumn);
- bIsAtRunEnd = true;
- }
-
- rPosition.SetLogicalPosition (
- nRow,
- nColumn,
- nIndex,
- (nColumn == 0),
- bIsAtRunEnd,
- (nColumn >= mnMaxColumnCount));
- }
-}
-
-
-
-
-//===== InsertPosition ========================================================
-
-InsertPosition::InsertPosition (void)
- : mnRow(-1),
- mnColumn(-1),
- mnIndex(-1),
- mbIsAtRunStart(false),
- mbIsAtRunEnd(false),
- mbIsExtraSpaceNeeded(false),
- maLocation(0,0),
- maLeadingOffset(0,0),
- maTrailingOffset(0,0)
-{
-}
-
-
-
-
-InsertPosition& InsertPosition::operator= (const InsertPosition& rInsertPosition)
-{
- if (this != &rInsertPosition)
- {
- mnRow = rInsertPosition.mnRow;
- mnColumn = rInsertPosition.mnColumn;
- mnIndex = rInsertPosition.mnIndex;
- mbIsAtRunStart = rInsertPosition.mbIsAtRunStart;
- mbIsAtRunEnd = rInsertPosition.mbIsAtRunEnd;
- mbIsExtraSpaceNeeded = rInsertPosition.mbIsExtraSpaceNeeded;
- maLocation = rInsertPosition.maLocation;
- maLeadingOffset = rInsertPosition.maLeadingOffset;
- maTrailingOffset = rInsertPosition.maTrailingOffset;
- }
- return *this;
-}
-
-
-
-
-bool InsertPosition::operator== (const InsertPosition& rInsertPosition) const
-{
- // Do not compare the geometrical information (maLocation).
- return mnRow==rInsertPosition.mnRow
- && mnColumn==rInsertPosition.mnColumn
- && mnIndex==rInsertPosition.mnIndex
- && mbIsAtRunStart==rInsertPosition.mbIsAtRunStart
- && mbIsAtRunEnd==rInsertPosition.mbIsAtRunEnd
- && mbIsExtraSpaceNeeded==rInsertPosition.mbIsExtraSpaceNeeded;
-}
-
-
-
-
-bool InsertPosition::operator!= (const InsertPosition& rInsertPosition) const
-{
- return !operator==(rInsertPosition);
-}
-
-
-
-
-void InsertPosition::SetLogicalPosition (
- const sal_Int32 nRow,
- const sal_Int32 nColumn,
- const sal_Int32 nIndex,
- const bool bIsAtRunStart,
- const bool bIsAtRunEnd,
- const bool bIsExtraSpaceNeeded)
-{
- mnRow = nRow;
- mnColumn = nColumn;
- mnIndex = nIndex;
- mbIsAtRunStart = bIsAtRunStart;
- mbIsAtRunEnd = bIsAtRunEnd;
- mbIsExtraSpaceNeeded = bIsExtraSpaceNeeded;
-}
-
-
-
-
-void InsertPosition::SetGeometricalPosition(
- const Point aLocation,
- const Point aLeadingOffset,
- const Point aTrailingOffset)
-{
- maLocation = aLocation;
- maLeadingOffset = aLeadingOffset;
- maTrailingOffset = aTrailingOffset;
-}
-
-
-
-} } } // end of namespace ::sd::slidesorter::namespace
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/view/SlsPageObject.cxx b/sd/source/ui/slidesorter/view/SlsPageObject.cxx
deleted file mode 100644
index a9508e406..000000000
--- a/sd/source/ui/slidesorter/view/SlsPageObject.cxx
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include "view/SlsPageObject.hxx"
-
-#include "model/SlsPageDescriptor.hxx"
-#include "controller/SlsPageObjectFactory.hxx"
-
-using namespace ::sdr::contact;
-using namespace ::sd::slidesorter::model;
-
-
-namespace sd { namespace slidesorter { namespace view {
-
-
-PageObject::PageObject (
- const Rectangle& rRectangle,
- SdrPage* _pPage,
- const SharedPageDescriptor& rpDescriptor)
- : SdrPageObj(rRectangle, _pPage),
- mpDescriptor(rpDescriptor)
-{
-}
-
-
-
-
-PageObject::~PageObject (void)
-{
-}
-
-
-
-
-SharedPageDescriptor PageObject::GetDescriptor (void) const
-{
- return mpDescriptor;
-}
-
-
-
-
-sdr::contact::ViewContact* PageObject::CreateObjectSpecificViewContact()
-{
- if (mpDescriptor.get() != NULL)
- return mpDescriptor->GetPageObjectFactory().CreateViewContact(this, mpDescriptor);
- else
- return NULL;
-}
-
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/view/SlsPageObjectLayouter.cxx b/sd/source/ui/slidesorter/view/SlsPageObjectLayouter.cxx
deleted file mode 100644
index 17fa4df7c..000000000
--- a/sd/source/ui/slidesorter/view/SlsPageObjectLayouter.cxx
+++ /dev/null
@@ -1,287 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "view/SlsPageObjectLayouter.hxx"
-
-#include "model/SlsPageDescriptor.hxx"
-#include "view/SlsFontProvider.hxx"
-#include "view/SlsTheme.hxx"
-#include "tools/IconCache.hxx"
-#include "Window.hxx"
-#include "res_bmp.hrc"
-
-namespace sd { namespace slidesorter { namespace view {
-
-namespace {
-const static sal_Int32 gnLeftPageNumberOffset = 2;
-const static sal_Int32 gnRightPageNumberOffset = 5;
-const static sal_Int32 gnOuterBorderWidth = 5;
-const static sal_Int32 gnInfoAreaMinWidth = 26;
-}
-
-PageObjectLayouter::PageObjectLayouter (
- const ::boost::shared_ptr<Theme>& rpTheme,
- const Size& rPageObjectWindowSize,
- const Size& rPageSize,
- const SharedSdWindow& rpWindow,
- const sal_Int32 nPageCount)
- : mpWindow(rpWindow),
- maPageObjectSize(rPageObjectWindowSize.Width(), rPageObjectWindowSize.Height()),
- mnModelToWindowScale(1),
- maPageObjectBoundingBox(),
- maPageNumberAreaBoundingBox(),
- maPreviewBoundingBox(),
- maTransitionEffectBoundingBox(),
- maTransitionEffectIcon(IconCache::Instance().GetIcon(BMP_FADE_EFFECT_INDICATOR)),
- mpPageNumberFont(Theme::GetFont(Theme::Font_PageNumber, *rpWindow))
-{
- const Size aPageNumberAreaSize (GetPageNumberAreaSize(nPageCount));
-
- const int nMaximumBorderWidth (gnOuterBorderWidth);
- const int nFocusIndicatorWidth (rpTheme->GetIntegerValue(Theme::Integer_FocusIndicatorWidth));
-
- maPreviewBoundingBox = CalculatePreviewBoundingBox(
- maPageObjectSize,
- Size(rPageSize.Width(), rPageSize.Height()),
- aPageNumberAreaSize.Width(),
- nFocusIndicatorWidth);
- maFocusIndicatorBoundingBox = Rectangle(Point(0,0), maPageObjectSize);
- maPageObjectBoundingBox = Rectangle(
- Point(
- nFocusIndicatorWidth,
- nFocusIndicatorWidth),
- Size(
- maPageObjectSize.Width()-2*nFocusIndicatorWidth,
- maPageObjectSize.Height()-2*nFocusIndicatorWidth));
-
- maPageNumberAreaBoundingBox = Rectangle(
- Point(
- std::max(gnLeftPageNumberOffset,
- sal_Int32(maPreviewBoundingBox.Left()
- - gnRightPageNumberOffset
- - aPageNumberAreaSize.Width())),
- nMaximumBorderWidth),
- aPageNumberAreaSize);
-
- const Size aIconSize (maTransitionEffectIcon.GetSizePixel());
- maTransitionEffectBoundingBox = Rectangle(
- Point(
- (maPreviewBoundingBox.Left() - aIconSize.Width()) / 2,
- maPreviewBoundingBox.Bottom() - aIconSize.Height()),
- aIconSize);
-}
-
-
-
-
-PageObjectLayouter::~PageObjectLayouter(void)
-{
-}
-
-
-
-
-Rectangle PageObjectLayouter::CalculatePreviewBoundingBox (
- Size& rPageObjectSize,
- const Size& rPageSize,
- const sal_Int32 nPageNumberAreaWidth,
- const sal_Int32 nFocusIndicatorWidth)
-{
- const sal_Int32 nIconWidth (maTransitionEffectIcon.GetSizePixel().Width());
- const sal_Int32 nLeftAreaWidth (
- ::std::max(
- gnInfoAreaMinWidth,
- gnRightPageNumberOffset
- + ::std::max(
- nPageNumberAreaWidth,
- nIconWidth)));
- sal_Int32 nPreviewWidth;
- sal_Int32 nPreviewHeight;
- const double nPageAspectRatio (double(rPageSize.Width()) / double(rPageSize.Height()));
- if (rPageObjectSize.Height() == 0)
- {
- // Calculate height so that the preview fills the available
- // horizontal space completely while observing the aspect ratio of
- // the preview.
- nPreviewWidth = rPageObjectSize.Width()
- - nLeftAreaWidth - gnOuterBorderWidth - 2*nFocusIndicatorWidth - 1;
- nPreviewHeight = ::basegfx::fround(nPreviewWidth / nPageAspectRatio);
- rPageObjectSize.setHeight(nPreviewHeight + 2*gnOuterBorderWidth + 2*nFocusIndicatorWidth + 1);
- }
- else if (rPageObjectSize.Width() == 0)
- {
- // Calculate the width of the page object so that the preview fills
- // the available vertical space completely while observing the
- // aspect ratio of the preview.
- nPreviewHeight = rPageObjectSize.Height() - 2*gnOuterBorderWidth - 2*nFocusIndicatorWidth - 1;
- nPreviewWidth = ::basegfx::fround(nPreviewHeight * nPageAspectRatio);
- rPageObjectSize.setWidth(nPreviewWidth
- + nLeftAreaWidth + gnOuterBorderWidth + 2*nFocusIndicatorWidth + 1);
-
- }
- else
- {
- // The size of the page object is given. Calculate the size of the
- // preview.
- nPreviewWidth = rPageObjectSize.Width()
- - nLeftAreaWidth - gnOuterBorderWidth - 2*nFocusIndicatorWidth - 1;
- nPreviewHeight = rPageObjectSize.Height()
- - gnOuterBorderWidth - 2*nFocusIndicatorWidth - 1;
- if (double(nPreviewWidth)/double(nPreviewHeight) > nPageAspectRatio)
- nPreviewWidth = ::basegfx::fround(nPreviewHeight * nPageAspectRatio);
- else
- nPreviewHeight = ::basegfx::fround(nPreviewWidth / nPageAspectRatio);
- }
- // When the preview does not fill the available space completely then
- // place it flush right and vertically centered.
- const int nLeft (rPageObjectSize.Width()
- - gnOuterBorderWidth - nPreviewWidth - nFocusIndicatorWidth - 1);
- const int nTop ((rPageObjectSize.Height() - nPreviewHeight)/2);
- return Rectangle(
- nLeft,
- nTop,
- nLeft + nPreviewWidth,
- nTop + nPreviewHeight);
-}
-
-
-
-
-Rectangle PageObjectLayouter::GetBoundingBox (
- const model::SharedPageDescriptor& rpPageDescriptor,
- const Part ePart,
- const CoordinateSystem eCoordinateSystem)
-{
- OSL_ASSERT(rpPageDescriptor);
- Point aLocation (rpPageDescriptor ? rpPageDescriptor->GetLocation() : Point(0,0));
- return GetBoundingBox(aLocation, ePart, eCoordinateSystem);
-}
-
-
-
-
-Rectangle PageObjectLayouter::GetBoundingBox (
- const Point& rPageObjectLocation,
- const Part ePart,
- const CoordinateSystem eCoordinateSystem)
-{
- Rectangle aBoundingBox;
- switch (ePart)
- {
- case FocusIndicator:
- aBoundingBox = maFocusIndicatorBoundingBox;
- break;
-
- case PageObject:
- case MouseOverIndicator:
- aBoundingBox = maPageObjectBoundingBox;
- break;
-
- case Preview:
- aBoundingBox = maPreviewBoundingBox;
- break;
-
- case PageNumber:
- aBoundingBox = maPageNumberAreaBoundingBox;
- break;
-
- case Name:
- aBoundingBox = maPageNumberAreaBoundingBox;
- break;
-
- case TransitionEffectIndicator:
- aBoundingBox = maTransitionEffectBoundingBox;
- break;
- }
-
- // Adapt coordinates to the requested coordinate system.
- Point aLocation (rPageObjectLocation);
- if (eCoordinateSystem == WindowCoordinateSystem)
- aLocation += mpWindow->GetMapMode().GetOrigin();
-
- return Rectangle(
- aBoundingBox.TopLeft() + aLocation,
- aBoundingBox.BottomRight() + aLocation);
-}
-
-
-
-
-Size PageObjectLayouter::GetSize (
- const Part ePart,
- const CoordinateSystem eCoordinateSystem)
-{
- return GetBoundingBox(Point(0,0), ePart, eCoordinateSystem).GetSize();
-}
-
-
-
-
-Size PageObjectLayouter::GetPageNumberAreaSize (const int nPageCount)
-{
- OSL_ASSERT(mpWindow);
-
- // Set the correct font.
- Font aOriginalFont (mpWindow->GetFont());
- if (mpPageNumberFont)
- mpWindow->SetFont(*mpPageNumberFont);
-
- String sPageNumberTemplate;
- if (nPageCount < 10)
- sPageNumberTemplate = String::CreateFromAscii("9");
- else if (nPageCount < 100)
- sPageNumberTemplate = String::CreateFromAscii("99");
- else if (nPageCount < 200)
- // Just for the case that 1 is narrower than 9.
- sPageNumberTemplate = String::CreateFromAscii("199");
- else if (nPageCount < 1000)
- sPageNumberTemplate = String::CreateFromAscii("999");
- else
- sPageNumberTemplate = String::CreateFromAscii("9999");
- // More then 9999 pages are not handled.
-
- const Size aSize (
- mpWindow->GetTextWidth(sPageNumberTemplate),
- mpWindow->GetTextHeight());
-
- mpWindow->SetFont(aOriginalFont);
-
- return aSize;
-}
-
-
-
-
-Image PageObjectLayouter::GetTransitionEffectIcon (void) const
-{
- return maTransitionEffectIcon;
-}
-
-
-} } } // end of namespace ::sd::slidesorter::view
diff --git a/sd/source/ui/slidesorter/view/SlsPageObjectPainter.cxx b/sd/source/ui/slidesorter/view/SlsPageObjectPainter.cxx
deleted file mode 100644
index d4fb96697..000000000
--- a/sd/source/ui/slidesorter/view/SlsPageObjectPainter.cxx
+++ /dev/null
@@ -1,584 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "view/SlsPageObjectPainter.hxx"
-
-#include "model/SlsPageDescriptor.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsPageObjectLayouter.hxx"
-#include "view/SlsLayouter.hxx"
-#include "view/SlsTheme.hxx"
-#include "view/SlsButtonBar.hxx"
-#include "SlsFramePainter.hxx"
-#include "cache/SlsPageCache.hxx"
-#include "controller/SlsProperties.hxx"
-#include "Window.hxx"
-#include "sdpage.hxx"
-#include "sdresid.hxx"
-#include <vcl/svapp.hxx>
-#include <vcl/vclenum.hxx>
-#include <vcl/virdev.hxx>
-#include <boost/scoped_ptr.hpp>
-
-using namespace ::drawinglayer::primitive2d;
-
-namespace sd { namespace slidesorter { namespace view {
-
-namespace {
-
-sal_uInt8 Blend (
- const sal_uInt8 nValue1,
- const sal_uInt8 nValue2,
- const double nWeight)
-{
- const double nValue (nValue1*(1-nWeight) + nValue2 * nWeight);
- if (nValue < 0)
- return 0;
- else if (nValue > 255)
- return 255;
- else
- return (sal_uInt8)nValue;
-}
-
-sal_uInt8 ClampColorChannel (const double nValue)
-{
- if (nValue <= 0)
- return 0;
- else if (nValue >= 255)
- return 255;
- else
- return sal_uInt8(nValue);
-}
-
-sal_uInt8 CalculateColorChannel(
- const double nColor1,
- const double nColor2,
- const double nAlpha1,
- const double nAlpha2,
- const double nAlpha0)
-{
- if (nAlpha0 == 0)
- return 0;
-
- const double nColor0 ((nAlpha1*nColor1 + nAlpha1*nAlpha2*nColor1 + nAlpha2*nColor2) / nAlpha0);
- return ClampColorChannel(255 * nColor0);
-}
-
-} // end of anonymous namespace
-
-
-
-
-//===== PageObjectPainter =====================================================
-
-PageObjectPainter::PageObjectPainter (
- const SlideSorter& rSlideSorter)
- : mrLayouter(rSlideSorter.GetView().GetLayouter()),
- mpPageObjectLayouter(),
- mpCache(rSlideSorter.GetView().GetPreviewCache()),
- mpProperties(rSlideSorter.GetProperties()),
- mpTheme(rSlideSorter.GetTheme()),
- mpPageNumberFont(Theme::GetFont(Theme::Font_PageNumber, *rSlideSorter.GetContentWindow())),
- mpShadowPainter(new FramePainter(mpTheme->GetIcon(Theme::Icon_RawShadow))),
- mpFocusBorderPainter(new FramePainter(mpTheme->GetIcon(Theme::Icon_FocusBorder))),
- maNormalBackground(),
- maSelectionBackground(),
- maFocusedSelectionBackground(),
- maMouseOverBackground(),
- maMouseOverFocusedBackground(),
- msUnhideString(mpTheme->GetString(Theme::String_Unhide)),
- mrButtonBar(rSlideSorter.GetView().GetButtonBar())
-{
- // Replace the color (not the alpha values) in the focus border with a
- // color derived from the current selection color.
- Color aColor (mpTheme->GetColor(Theme::Color_Selection));
- sal_uInt16 nHue, nSat, nBri;
- aColor.RGBtoHSB(nHue, nSat, nBri);
- aColor = Color::HSBtoRGB(nHue, 28, 65);
- mpFocusBorderPainter->AdaptColor(aColor, true);
-}
-
-
-
-
-PageObjectPainter::~PageObjectPainter (void)
-{
-}
-
-
-
-
-void PageObjectPainter::PaintPageObject (
- OutputDevice& rDevice,
- const model::SharedPageDescriptor& rpDescriptor)
-{
- // The page object layouter is quite volatile. It may have been replaced
- // since the last call. Update it now.
- mpPageObjectLayouter = mrLayouter.GetPageObjectLayouter();
- if ( ! mpPageObjectLayouter)
- {
- OSL_ASSERT(mpPageObjectLayouter);
- return;
- }
-
- // Turn off antialiasing to avoid the bitmaps from being shifted by
- // fractions of a pixel and thus show blurry edges.
- const sal_uInt16 nSavedAntialiasingMode (rDevice.GetAntialiasing());
- rDevice.SetAntialiasing(nSavedAntialiasingMode & ~ANTIALIASING_ENABLE_B2DDRAW);
-
- PaintBackground(rDevice, rpDescriptor);
- PaintPreview(rDevice, rpDescriptor);
- PaintPageNumber(rDevice, rpDescriptor);
- PaintTransitionEffect(rDevice, rpDescriptor);
- mrButtonBar.Paint(rDevice, rpDescriptor);
-
- rDevice.SetAntialiasing(nSavedAntialiasingMode);
-}
-
-
-
-
-void PageObjectPainter::NotifyResize (const bool bForce)
-{
- (void)bForce;
- maNormalBackground.SetEmpty();
- maSelectionBackground.SetEmpty();
- maFocusedSelectionBackground.SetEmpty();
- maFocusedBackground.SetEmpty();
- maMouseOverBackground.SetEmpty();
- maMouseOverFocusedBackground.SetEmpty();
- maMouseOverSelectedAndFocusedBackground.SetEmpty();
-}
-
-
-
-
-void PageObjectPainter::SetTheme (const ::boost::shared_ptr<view::Theme>& rpTheme)
-{
- mpTheme = rpTheme;
- NotifyResize(true);
-}
-
-
-
-
-void PageObjectPainter::PaintBackground (
- OutputDevice& rDevice,
- const model::SharedPageDescriptor& rpDescriptor)
-{
- const Rectangle aBox (mpPageObjectLayouter->GetBoundingBox(
- rpDescriptor,
- PageObjectLayouter::FocusIndicator,
- PageObjectLayouter::ModelCoordinateSystem));
-
- const Bitmap& rBackground (GetBackgroundForState(rpDescriptor, rDevice));
- rDevice.DrawBitmap(aBox.TopLeft(), rBackground);
-
- // Fill the interior of the preview area with the default background
- // color of the page.
- SdPage* pPage = rpDescriptor->GetPage();
- if (pPage != NULL)
- {
- rDevice.SetFillColor(pPage->GetPageBackgroundColor(NULL));
- rDevice.SetLineColor(pPage->GetPageBackgroundColor(NULL));
- const Rectangle aPreviewBox (mpPageObjectLayouter->GetBoundingBox(
- rpDescriptor,
- PageObjectLayouter::Preview,
- PageObjectLayouter::ModelCoordinateSystem));
- rDevice.DrawRect(aPreviewBox);
- }
-}
-
-
-
-
-void PageObjectPainter::PaintPreview (
- OutputDevice& rDevice,
- const model::SharedPageDescriptor& rpDescriptor) const
-{
- const Rectangle aBox (mpPageObjectLayouter->GetBoundingBox(
- rpDescriptor,
- PageObjectLayouter::Preview,
- PageObjectLayouter::ModelCoordinateSystem));
-
- if (mpCache != NULL)
- {
- const SdrPage* pPage = rpDescriptor->GetPage();
- mpCache->SetPreciousFlag(pPage, true);
-
- const Bitmap aPreview (GetPreviewBitmap(rpDescriptor, &rDevice));
- if ( ! aPreview.IsEmpty())
- {
- if (aPreview.GetSizePixel() != aBox.GetSize())
- rDevice.DrawBitmap(aBox.TopLeft(), aBox.GetSize(), aPreview);
- else
- rDevice.DrawBitmap(aBox.TopLeft(), aPreview);
- }
- }
-}
-
-
-
-
-Bitmap PageObjectPainter::CreateMarkedPreview (
- const Size& rSize,
- const Bitmap& rPreview,
- const BitmapEx& rOverlay,
- const OutputDevice* pReferenceDevice) const
-{
- ::boost::scoped_ptr<VirtualDevice> pDevice;
- if (pReferenceDevice != NULL)
- pDevice.reset(new VirtualDevice(*pReferenceDevice));
- else
- pDevice.reset(new VirtualDevice());
- pDevice->SetOutputSizePixel(rSize);
-
- pDevice->DrawBitmap(Point(0,0), rSize, rPreview);
-
- // Paint bitmap tiled over the preview to mark it as excluded.
- const sal_Int32 nIconWidth (rOverlay.GetSizePixel().Width());
- const sal_Int32 nIconHeight (rOverlay.GetSizePixel().Height());
- if (nIconWidth>0 && nIconHeight>0)
- {
- for (sal_Int32 nX=0; nX<rSize.Width(); nX+=nIconWidth)
- for (sal_Int32 nY=0; nY<rSize.Height(); nY+=nIconHeight)
- pDevice->DrawBitmapEx(Point(nX,nY), rOverlay);
- }
- return pDevice->GetBitmap(Point(0,0), rSize);
-}
-
-
-
-
-Bitmap PageObjectPainter::GetPreviewBitmap (
- const model::SharedPageDescriptor& rpDescriptor,
- const OutputDevice* pReferenceDevice) const
-{
- const SdrPage* pPage = rpDescriptor->GetPage();
- const bool bIsExcluded (rpDescriptor->HasState(model::PageDescriptor::ST_Excluded));
-
- if (bIsExcluded)
- {
- Bitmap aMarkedPreview (mpCache->GetMarkedPreviewBitmap(pPage,false));
- const Rectangle aPreviewBox (mpPageObjectLayouter->GetBoundingBox(
- rpDescriptor,
- PageObjectLayouter::Preview,
- PageObjectLayouter::ModelCoordinateSystem));
- if (aMarkedPreview.IsEmpty() || aMarkedPreview.GetSizePixel()!=aPreviewBox.GetSize())
- {
- aMarkedPreview = CreateMarkedPreview(
- aPreviewBox.GetSize(),
- mpCache->GetPreviewBitmap(pPage,true),
- mpTheme->GetIcon(Theme::Icon_HideSlideOverlay),
- pReferenceDevice);
- mpCache->SetMarkedPreviewBitmap(pPage, aMarkedPreview);
- }
- return aMarkedPreview;
- }
- else
- {
- return mpCache->GetPreviewBitmap(pPage,false);
- }
-}
-
-
-
-
-void PageObjectPainter::PaintPageNumber (
- OutputDevice& rDevice,
- const model::SharedPageDescriptor& rpDescriptor) const
-{
- const Rectangle aBox (mpPageObjectLayouter->GetBoundingBox(
- rpDescriptor,
- PageObjectLayouter::PageNumber,
- PageObjectLayouter::ModelCoordinateSystem));
-
- // Determine the color of the page number.
- Color aPageNumberColor (mpTheme->GetColor(Theme::Color_PageNumberDefault));
- if (rpDescriptor->HasState(model::PageDescriptor::ST_MouseOver) ||
- rpDescriptor->HasState(model::PageDescriptor::ST_Selected))
- {
- // Page number is painted on background for hover or selection or
- // both. Each of these background colors has a predefined luminance
- // which is compatible with the PageNumberHover color.
- aPageNumberColor = Color(mpTheme->GetColor(Theme::Color_PageNumberHover));
- }
- else
- {
- const Color aBackgroundColor (mpTheme->GetColor(Theme::Color_Background));
- const sal_Int32 nBackgroundLuminance (aBackgroundColor.GetLuminance());
- // When the background color is black then this is interpreted as
- // high contrast mode and the font color is set to white.
- if (nBackgroundLuminance == 0)
- aPageNumberColor = Color(mpTheme->GetColor(Theme::Color_PageNumberHighContrast));
- else
- {
- // Compare luminance of default page number color and background
- // color. When the two are similar then use a darker
- // (preferred) or brighter font color.
- const sal_Int32 nFontLuminance (aPageNumberColor.GetLuminance());
- if (abs(nBackgroundLuminance - nFontLuminance) < 60)
- {
- if (nBackgroundLuminance > nFontLuminance-30)
- aPageNumberColor = Color(mpTheme->GetColor(Theme::Color_PageNumberBrightBackground));
- else
- aPageNumberColor = Color(mpTheme->GetColor(Theme::Color_PageNumberDarkBackground));
- }
- }
- }
-
- // Paint the page number.
- OSL_ASSERT(rpDescriptor->GetPage()!=NULL);
- const sal_Int32 nPageNumber ((rpDescriptor->GetPage()->GetPageNum() - 1) / 2 + 1);
- const String sPageNumber (String::CreateFromInt32(nPageNumber));
- rDevice.SetFont(*mpPageNumberFont);
- rDevice.SetTextColor(aPageNumberColor);
- rDevice.DrawText(aBox, sPageNumber, TEXT_DRAW_RIGHT | TEXT_DRAW_VCENTER);
-}
-
-
-
-
-void PageObjectPainter::PaintTransitionEffect (
- OutputDevice& rDevice,
- const model::SharedPageDescriptor& rpDescriptor) const
-{
- const SdPage* pPage = rpDescriptor->GetPage();
- if (pPage!=NULL && pPage->getTransitionType() > 0)
- {
- const Rectangle aBox (mpPageObjectLayouter->GetBoundingBox(
- rpDescriptor,
- PageObjectLayouter::TransitionEffectIndicator,
- PageObjectLayouter::ModelCoordinateSystem));
-
- rDevice.DrawBitmapEx(
- aBox.TopLeft(),
- mpPageObjectLayouter->GetTransitionEffectIcon().GetBitmapEx());
- }
-}
-
-
-
-
-Bitmap& PageObjectPainter::GetBackgroundForState (
- const model::SharedPageDescriptor& rpDescriptor,
- const OutputDevice& rReferenceDevice)
-{
- enum State { None = 0x00, Selected = 0x01, MouseOver = 0x02, Focused = 0x04 };
- const int eState =
- (rpDescriptor->HasState(model::PageDescriptor::ST_Selected) ? Selected : None)
- | (rpDescriptor->HasState(model::PageDescriptor::ST_MouseOver) ? MouseOver : None)
- | (rpDescriptor->HasState(model::PageDescriptor::ST_Focused) ? Focused : None);
-
- switch (eState)
- {
- case MouseOver | Selected | Focused:
- return GetBackground(
- maMouseOverSelectedAndFocusedBackground,
- Theme::Gradient_MouseOverSelectedAndFocusedPage,
- rReferenceDevice,
- true);
-
- case MouseOver | Selected:
- case MouseOver:
- return GetBackground(
- maMouseOverBackground,
- Theme::Gradient_MouseOverPage,
- rReferenceDevice,
- false);
-
- case MouseOver | Focused:
- return GetBackground(
- maMouseOverFocusedBackground,
- Theme::Gradient_MouseOverPage,
- rReferenceDevice,
- true);
-
- case Selected | Focused:
- return GetBackground(
- maFocusedSelectionBackground,
- Theme::Gradient_SelectedAndFocusedPage,
- rReferenceDevice,
- true);
-
- case Selected:
- return GetBackground(
- maSelectionBackground,
- Theme::Gradient_SelectedPage,
- rReferenceDevice,
- false);
-
- case Focused:
- return GetBackground(
- maFocusedBackground,
- Theme::Gradient_FocusedPage,
- rReferenceDevice,
- true);
-
- case None:
- default:
- return GetBackground(
- maNormalBackground,
- Theme::Gradient_NormalPage,
- rReferenceDevice,
- false);
- }
-}
-
-
-
-
-Bitmap& PageObjectPainter::GetBackground(
- Bitmap& rBackground,
- Theme::GradientColorType eType,
- const OutputDevice& rReferenceDevice,
- const bool bHasFocusBorder)
-{
- if (rBackground.IsEmpty())
- rBackground = CreateBackgroundBitmap(rReferenceDevice, eType, bHasFocusBorder);
- return rBackground;
-}
-
-
-
-
-Bitmap PageObjectPainter::CreateBackgroundBitmap(
- const OutputDevice& rReferenceDevice,
- const Theme::GradientColorType eColorType,
- const bool bHasFocusBorder) const
-{
- const Size aSize (mpPageObjectLayouter->GetSize(
- PageObjectLayouter::FocusIndicator,
- PageObjectLayouter::WindowCoordinateSystem));
- const Rectangle aPageObjectBox (mpPageObjectLayouter->GetBoundingBox(
- Point(0,0),
- PageObjectLayouter::PageObject,
- PageObjectLayouter::ModelCoordinateSystem));
- VirtualDevice aBitmapDevice (rReferenceDevice);
- aBitmapDevice.SetOutputSizePixel(aSize);
-
- // Fill the background with the background color of the slide sorter.
- const Color aBackgroundColor (mpTheme->GetColor(Theme::Color_Background));
- OSL_TRACE("filling background of page object bitmap with color %x", aBackgroundColor.GetColor());
- aBitmapDevice.SetFillColor(aBackgroundColor);
- aBitmapDevice.SetLineColor(aBackgroundColor);
- aBitmapDevice.DrawRect(Rectangle(Point(0,0), aSize));
-
- // Paint the slide area with a linear gradient that starts some pixels
- // below the top and ends some pixels above the bottom.
- const Color aTopColor(mpTheme->GetGradientColor(eColorType, Theme::Fill1));
- const Color aBottomColor(mpTheme->GetGradientColor(eColorType, Theme::Fill2));
- if (aTopColor != aBottomColor)
- {
- const sal_Int32 nHeight (aPageObjectBox.GetHeight());
- const sal_Int32 nDefaultConstantSize(nHeight/4);
- const sal_Int32 nMinimalGradientSize(40);
- const sal_Int32 nY1 (
- ::std::max<sal_Int32>(
- 0,
- ::std::min<sal_Int32>(
- nDefaultConstantSize,
- (nHeight - nMinimalGradientSize)/2)));
- const sal_Int32 nY2 (nHeight-nY1);
- const sal_Int32 nTop (aPageObjectBox.Top());
- for (sal_Int32 nY=0; nY<nHeight; ++nY)
- {
- if (nY<=nY1)
- aBitmapDevice.SetLineColor(aTopColor);
- else if (nY>=nY2)
- aBitmapDevice.SetLineColor(aBottomColor);
- else
- {
- Color aColor (aTopColor);
- aColor.Merge(aBottomColor, 255 * (nY2-nY) / (nY2-nY1));
- aBitmapDevice.SetLineColor(aColor);
- }
- aBitmapDevice.DrawLine(
- Point(aPageObjectBox.Left(), nY+nTop),
- Point(aPageObjectBox.Right(), nY+nTop));
- }
- }
- else
- {
- aBitmapDevice.SetFillColor(aTopColor);
- aBitmapDevice.DrawRect(aPageObjectBox);
- }
-
- // Paint the simple border and, for some backgrounds, the focus border.
- if (bHasFocusBorder)
- mpFocusBorderPainter->PaintFrame(aBitmapDevice, aPageObjectBox);
- else
- PaintBorder(aBitmapDevice, eColorType, aPageObjectBox);
-
- // Get bounding box of the preview around which a shadow is painted.
- // Compensate for the border around the preview.
- const Rectangle aBox (mpPageObjectLayouter->GetBoundingBox(
- Point(0,0),
- PageObjectLayouter::Preview,
- PageObjectLayouter::ModelCoordinateSystem));
- Rectangle aFrameBox (aBox.Left()-1,aBox.Top()-1,aBox.Right()+1,aBox.Bottom()+1);
- mpShadowPainter->PaintFrame(aBitmapDevice, aFrameBox);
-
- return aBitmapDevice.GetBitmap (Point(0,0),aSize);
-}
-
-
-
-
-void PageObjectPainter::PaintBorder (
- OutputDevice& rDevice,
- const Theme::GradientColorType eColorType,
- const Rectangle& rBox) const
-{
- rDevice.SetFillColor();
- const sal_Int32 nBorderWidth (1);
- for (int nIndex=0; nIndex<nBorderWidth; ++nIndex)
- {
- const int nDelta (nIndex);
- rDevice.SetLineColor(mpTheme->GetGradientColor(eColorType, Theme::Border2));
- rDevice.DrawLine(
- Point(rBox.Left()-nDelta, rBox.Top()-nDelta),
- Point(rBox.Left()-nDelta, rBox.Bottom()+nDelta));
- rDevice.DrawLine(
- Point(rBox.Left()-nDelta, rBox.Bottom()+nDelta),
- Point(rBox.Right()+nDelta, rBox.Bottom()+nDelta));
- rDevice.DrawLine(
- Point(rBox.Right()+nDelta, rBox.Bottom()+nDelta),
- Point(rBox.Right()+nDelta, rBox.Top()-nDelta));
-
- rDevice.SetLineColor(mpTheme->GetGradientColor(eColorType, Theme::Border1));
- rDevice.DrawLine(
- Point(rBox.Left()-nDelta, rBox.Top()-nDelta),
- Point(rBox.Right()+nDelta, rBox.Top()-nDelta));
- }
-}
-
-
-
-} } } // end of namespace sd::slidesorter::view
diff --git a/sd/source/ui/slidesorter/view/SlsResource.hxx b/sd/source/ui/slidesorter/view/SlsResource.hxx
deleted file mode 100644
index bdbb819ba..000000000
--- a/sd/source/ui/slidesorter/view/SlsResource.hxx
+++ /dev/null
@@ -1,50 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_RESOURCE_HXX
-#define SD_SLIDESORTER_RESOURCE_HXX
-
-#include "view/SlsResource.hrc"
-#include "sdresid.hxx"
-#include <tools/rc.hxx>
-
-namespace sd { namespace slidesorter { namespace view {
-
-class LocalResource : public Resource
-{
-public:
- LocalResource (const sal_uInt16 nResourceId) : Resource(SdResId(nResourceId)){}
- ~LocalResource (void) { FreeResource(); }
-};
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/view/SlsResource.src b/sd/source/ui/slidesorter/view/SlsResource.src
deleted file mode 100644
index 984cff779..000000000
--- a/sd/source/ui/slidesorter/view/SlsResource.src
+++ /dev/null
@@ -1,314 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "view/SlsResource.hrc"
-
-Resource RID_SLIDESORTER_ICONS
-{
- Image IMAGE_COMMAND1_LARGE
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command1_large.png" ; };
- };
- Image IMAGE_COMMAND1_LARGE_HOVER
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command1_large_hover.png" ; };
- };
- Image IMAGE_COMMAND1_MEDIUM
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command1_medium.png" ; };
- };
- Image IMAGE_COMMAND1_MEDIUM_HOVER
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command1_medium_hover.png" ; };
- };
- Image IMAGE_COMMAND1_SMALL
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command1_small.png" ; };
- };
- Image IMAGE_COMMAND1_SMALL_HOVER
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command1_small_hover.png" ; };
- };
-
- Image IMAGE_COMMAND1_LARGE_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command1_large_hc.png" ; };
- };
- Image IMAGE_COMMAND1_LARGE_HOVER_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command1_large_hover_hc.png" ; };
- };
- Image IMAGE_COMMAND1_MEDIUM_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command1_medium_hc.png" ; };
- };
- Image IMAGE_COMMAND1_MEDIUM_HOVER_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command1_medium_hover_hc.png" ; };
- };
- Image IMAGE_COMMAND1_SMALL_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command1_small_hc.png" ; };
- };
- Image IMAGE_COMMAND1_SMALL_HOVER_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command1_small_hover_hc.png" ; };
- };
-
-
- Image IMAGE_COMMAND2_LARGE
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2_large.png" ; };
- };
- Image IMAGE_COMMAND2_LARGE_HOVER
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2_large_hover.png" ; };
- };
- Image IMAGE_COMMAND2_MEDIUM
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2_medium.png" ; };
- };
- Image IMAGE_COMMAND2_MEDIUM_HOVER
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2_medium_hover.png" ; };
- };
- Image IMAGE_COMMAND2_SMALL
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2_small.png" ; };
- };
- Image IMAGE_COMMAND2_SMALL_HOVER
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2_small_hover.png" ; };
- };
-
- Image IMAGE_COMMAND2_LARGE_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2_large_hc.png" ; };
- };
- Image IMAGE_COMMAND2_LARGE_HOVER_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2_large_hover_hc.png" ; };
- };
- Image IMAGE_COMMAND2_MEDIUM_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2_medium_hc.png" ; };
- };
- Image IMAGE_COMMAND2_MEDIUM_HOVER_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2_medium_hover_hc.png" ; };
- };
- Image IMAGE_COMMAND2_SMALL_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2_small_hc.png" ; };
- };
- Image IMAGE_COMMAND2_SMALL_HOVER_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2_small_hover_hc.png" ; };
- };
-
-
- Image IMAGE_COMMAND2B_LARGE
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2b_large.png" ; };
- };
- Image IMAGE_COMMAND2B_LARGE_HOVER
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2b_large_hover.png" ; };
- };
- Image IMAGE_COMMAND2B_MEDIUM
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2b_medium.png" ; };
- };
- Image IMAGE_COMMAND2B_MEDIUM_HOVER
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2b_medium_hover.png" ; };
- };
- Image IMAGE_COMMAND2B_SMALL
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2b_small.png" ; };
- };
- Image IMAGE_COMMAND2B_SMALL_HOVER
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2b_small_hover.png" ; };
- };
-
- Image IMAGE_COMMAND2B_LARGE_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2b_large_hc.png" ; };
- };
- Image IMAGE_COMMAND2B_LARGE_HOVER_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2b_large_hover_hc.png" ; };
- };
- Image IMAGE_COMMAND2B_MEDIUM_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2b_medium_hc.png" ; };
- };
- Image IMAGE_COMMAND2B_MEDIUM_HOVER_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2b_medium_hover_hc.png" ; };
- };
- Image IMAGE_COMMAND2B_SMALL_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2b_small_hc.png" ; };
- };
- Image IMAGE_COMMAND2B_SMALL_HOVER_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command2b_small_hover_hc.png" ; };
- };
-
-
- Image IMAGE_COMMAND3_LARGE
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command3_large.png" ; };
- };
- Image IMAGE_COMMAND3_LARGE_HOVER
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command3_large_hover.png" ; };
- };
- Image IMAGE_COMMAND3_MEDIUM
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command3_medium.png" ; };
- };
- Image IMAGE_COMMAND3_MEDIUM_HOVER
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command3_medium_hover.png" ; };
- };
- Image IMAGE_COMMAND3_SMALL
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command3_small.png" ; };
- };
- Image IMAGE_COMMAND3_SMALL_HOVER
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command3_small_hover.png" ; };
- };
-
- Image IMAGE_COMMAND3_LARGE_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command3_large_hc.png" ; };
- };
- Image IMAGE_COMMAND3_LARGE_HOVER_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command3_large_hover_hc.png" ; };
- };
- Image IMAGE_COMMAND3_MEDIUM_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command3_medium_hc.png" ; };
- };
- Image IMAGE_COMMAND3_MEDIUM_HOVER_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command3_medium_hover_hc.png" ; };
- };
- Image IMAGE_COMMAND3_SMALL_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command3_small_hc.png" ; };
- };
- Image IMAGE_COMMAND3_SMALL_HOVER_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command3_small_hover_hc.png" ; };
- };
-
-
- Image IMAGE_BUTTONBAR_LARGE
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command_background_large.png" ; };
- };
- Image IMAGE_BUTTONBAR_MEDIUM
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command_background_medium.png" ; };
- };
- Image IMAGE_BUTTONBAR_SMALL
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command_background_small.png" ; };
- };
-
- Image IMAGE_BUTTONBAR_LARGE_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command_background_large_hc.png" ; };
- };
- Image IMAGE_BUTTONBAR_MEDIUM_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command_background_medium_hc.png" ; };
- };
- Image IMAGE_BUTTONBAR_SMALL_HC
- {
- ImageBitmap = Bitmap { File = "slide_sorter_command_background_small_hc.png" ; };
- };
-
-
-
- Image IMAGE_SHADOW
- {
- ImageBitmap = Bitmap { File = "slide_sorter_shadow.png" ; };
- };
-
- Image IMAGE_INSERT_SHADOW
- {
- ImageBitmap = Bitmap { File = "slide_sorter_insert_shadow.png" ; };
- };
-
- Image IMAGE_HIDE_SLIDE_OVERLAY
- {
- ImageBitmap = Bitmap { File = "slide_sorter_hide_slide_overlay.png" ; };
- };
-
- Image IMAGE_FOCUS_BORDER
- {
- ImageBitmap = Bitmap { File = "slide_sorter_focus_border.png" ; };
- };
-
-
- String STRING_DRAG_AND_DROP_PAGES
- {
- Text [ en-US ] = "Drag and Drop Pages" ;
- };
-
- String STRING_DRAG_AND_DROP_SLIDES
- {
- Text [ en-US ] = "Drag and Drop Slides" ;
- };
-
- String STRING_COMMAND1
- {
- Text [ en-US ] = "Start Slide Show" ;
- };
-
- String STRING_COMMAND2_A
- {
- Text [ en-US ] = "Hide Slide" ;
- };
-
- String STRING_COMMAND2_B
- {
- Text [ en-US ] = "Show Slide" ;
- };
-
- String STRING_COMMAND3
- {
- Text [ en-US ] = "Duplicate Slide" ;
- };
-};
diff --git a/sd/source/ui/slidesorter/view/SlsTheme.cxx b/sd/source/ui/slidesorter/view/SlsTheme.cxx
deleted file mode 100644
index f68ba3208..000000000
--- a/sd/source/ui/slidesorter/view/SlsTheme.cxx
+++ /dev/null
@@ -1,536 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "view/SlsTheme.hxx"
-#include "SlsResource.hxx"
-#include "controller/SlsProperties.hxx"
-#include "sdresid.hxx"
-#include <tools/color.hxx>
-#include <vcl/outdev.hxx>
-#include <vcl/image.hxx>
-#include <vcl/svapp.hxx>
-#include <svtools/colorcfg.hxx>
-
-namespace sd { namespace slidesorter { namespace view {
-
-const static ColorData Black = 0x000000;
-const static ColorData White = 0xffffff;
-
-
-
-ColorData ChangeLuminance (const ColorData aColorData, const int nValue)
-{
- Color aColor (aColorData);
- if (nValue > 0)
- aColor.IncreaseLuminance(nValue);
- else
- aColor.DecreaseLuminance(-nValue);
- return aColor.GetColor();
-}
-
-ColorData HGBAdapt (
- const ColorData aColorData,
- const sal_Int32 nNewSaturation,
- const sal_Int32 nNewBrightness)
-{
- sal_uInt16 nHue (0);
- sal_uInt16 nSaturation (0);
- sal_uInt16 nBrightness (0);
- Color(aColorData).RGBtoHSB(nHue, nSaturation, nBrightness);
- return Color::HSBtoRGB(
- nHue,
- nNewSaturation>=0 ? nNewSaturation : nSaturation,
- nNewBrightness>=0 ? nNewBrightness : nBrightness);
-}
-
-
-
-
-Theme::Theme (const ::boost::shared_ptr<controller::Properties>& rpProperties)
- : mbIsHighContrastMode(false),
- maBackgroundColor(rpProperties->GetBackgroundColor().GetColor()),
- maPageBackgroundColor(COL_WHITE),
- maGradients(),
- maIcons(),
- maColor(),
- maIntegerValues()
-{
- {
- LocalResource aResource (RID_SLIDESORTER_ICONS);
-
- maStrings.resize(_StringType_Size_);
- maStrings[String_DragAndDropPages] = String(SdResId(STRING_DRAG_AND_DROP_PAGES));
- maStrings[String_DragAndDropSlides] = String(SdResId(STRING_DRAG_AND_DROP_SLIDES));
- maStrings[String_Command1] = String(SdResId(STRING_COMMAND1));
- maStrings[String_Command2] = String(SdResId(STRING_COMMAND2_A));
- maStrings[String_Command2B] = String(SdResId(STRING_COMMAND2_B));
- maStrings[String_Command3] = String(SdResId(STRING_COMMAND3));
-
- maColor.resize(_ColorType_Size_);
- maColor[Color_Background] = maBackgroundColor;
- maColor[Color_ButtonBackground] = Black;
- maColor[Color_ButtonText] = 0xc0c0c0;
- maColor[Color_ButtonTextHover] = White;
- maColor[Color_PageNumberDefault] = 0x0808080;
- maColor[Color_PageNumberHover] = 0x4c4c4c;
- maColor[Color_PageNumberHighContrast] = White;
- maColor[Color_PageNumberBrightBackground] = 0x333333;
- maColor[Color_PageNumberDarkBackground] = 0xcccccc;
- maColor[Color_PreviewBorder] = 0x949599;
-
- maIntegerValues.resize(_IntegerValueType_Size_);
- maIntegerValues[Integer_ButtonCornerRadius] = 3;
- maIntegerValues[Integer_ButtonMaxAlpha] = 0;
- maIntegerValues[Integer_ButtonBarMaxAlpha] = 0;
- maIntegerValues[Integer_ButtonPaintType] = 1;
- maIntegerValues[Integer_ButtonBorder] = 4;
- maIntegerValues[Integer_ButtonGap] = 0;
- maIntegerValues[Integer_ButtonFadeInDelay] = 800;
- maIntegerValues[Integer_ButtonFadeInDuration] = 100;
- maIntegerValues[Integer_ButtonFadeOutDelay] = 0;
- maIntegerValues[Integer_ButtonFadeOutDuration] = 100;
- maIntegerValues[Integer_ToolTipDelay] = 1000;
- maIntegerValues[Integer_FocusIndicatorWidth] = 3;
- }
-
- Update(rpProperties);
-}
-
-
-
-
-void Theme::Update (const ::boost::shared_ptr<controller::Properties>& rpProperties)
-{
- const bool bSavedHighContrastMode (mbIsHighContrastMode);
- mbIsHighContrastMode = rpProperties->IsHighContrastModeActive();
-
- // Set up colors.
- maBackgroundColor = rpProperties->GetBackgroundColor().GetColor();
- maPageBackgroundColor = svtools::ColorConfig().GetColorValue(svtools::DOCCOLOR).nColor;
-
- maColor[Color_Background] = maBackgroundColor;
-
- maGradients.resize(_GradientColorType_Size_);
-
- maColor[Color_Background] = maBackgroundColor;
- const ColorData aSelectionColor (rpProperties->GetSelectionColor().GetColor());
- maColor[Color_Selection] = aSelectionColor;
- if (Color(aSelectionColor).IsBright())
- maColor[Color_PageCountFontColor] = Black;
- else
- maColor[Color_PageCountFontColor] = White;
-
- // Set up gradients.
- SetGradient(Gradient_SelectedPage, aSelectionColor, 50, 50, +100,+100, +50,+25);
- SetGradient(Gradient_MouseOverPage, aSelectionColor, 75, 75, +100,+100, +50,+25);
- SetGradient(Gradient_SelectedAndFocusedPage, aSelectionColor, 50, 50, +100,+100, -50,-75);
- SetGradient(Gradient_MouseOverSelectedAndFocusedPage, aSelectionColor, 75, 75, +100,+100, -50,-75);
- SetGradient(Gradient_FocusedPage, aSelectionColor, -1,-1, 0,0, -50,-75);
-
- SetGradient(Gradient_ButtonBackground, Black, -1,-1, 0,0, 0,0);
- SetGradient(Gradient_NormalPage, maBackgroundColor, -1,-1, 0,0, 0,0);
-
- // The focused gradient needs special handling because its fill color is
- // like that of the NormalPage gradient.
- GetGradient(Gradient_FocusedPage).maFillColor1 = GetGradient(Gradient_NormalPage).maFillColor1;
- GetGradient(Gradient_FocusedPage).maFillColor2 = GetGradient(Gradient_NormalPage).maFillColor2;
-
- // Set up icons.
- if (bSavedHighContrastMode != mbIsHighContrastMode || maIcons.empty())
- {
- LocalResource aResource (RID_SLIDESORTER_ICONS);
-
- maIcons.resize(_IconType_Size_);
- if (mbIsHighContrastMode)
- {
- InitializeIcon(Icon_RawShadow, IMAGE_SHADOW);
- InitializeIcon(Icon_RawInsertShadow, IMAGE_INSERT_SHADOW);
- InitializeIcon(Icon_HideSlideOverlay, IMAGE_HIDE_SLIDE_OVERLAY);
-
- InitializeIcon(Icon_ButtonBarLarge, IMAGE_BUTTONBAR_LARGE_HC);
- InitializeIcon(Icon_ButtonBarMedium, IMAGE_BUTTONBAR_MEDIUM_HC);
- InitializeIcon(Icon_ButtonBarSmall, IMAGE_BUTTONBAR_SMALL_HC);
-
- InitializeIcon(Icon_Command1Large, IMAGE_COMMAND1_LARGE_HC);
- InitializeIcon(Icon_Command1LargeHover, IMAGE_COMMAND1_LARGE_HOVER_HC);
- InitializeIcon(Icon_Command1Medium, IMAGE_COMMAND1_MEDIUM_HC);
- InitializeIcon(Icon_Command1MediumHover, IMAGE_COMMAND1_MEDIUM_HOVER_HC);
- InitializeIcon(Icon_Command1Small, IMAGE_COMMAND1_SMALL_HC);
- InitializeIcon(Icon_Command1SmallHover, IMAGE_COMMAND1_SMALL_HOVER_HC);
-
- InitializeIcon(Icon_Command2Large, IMAGE_COMMAND2_LARGE_HC);
- InitializeIcon(Icon_Command2LargeHover, IMAGE_COMMAND2_LARGE_HOVER_HC);
- InitializeIcon(Icon_Command2Medium, IMAGE_COMMAND2_MEDIUM_HC);
- InitializeIcon(Icon_Command2MediumHover, IMAGE_COMMAND2_MEDIUM_HOVER_HC);
- InitializeIcon(Icon_Command2Small, IMAGE_COMMAND2_SMALL_HC);
- InitializeIcon(Icon_Command2SmallHover, IMAGE_COMMAND2_SMALL_HOVER_HC);
-
- InitializeIcon(Icon_Command2BLarge, IMAGE_COMMAND2B_LARGE_HC);
- InitializeIcon(Icon_Command2BLargeHover, IMAGE_COMMAND2B_LARGE_HOVER_HC);
- InitializeIcon(Icon_Command2BMedium, IMAGE_COMMAND2B_MEDIUM_HC);
- InitializeIcon(Icon_Command2BMediumHover, IMAGE_COMMAND2B_MEDIUM_HOVER_HC);
- InitializeIcon(Icon_Command2BSmall, IMAGE_COMMAND2B_SMALL_HC);
- InitializeIcon(Icon_Command2BSmallHover, IMAGE_COMMAND2B_SMALL_HOVER_HC);
-
- InitializeIcon(Icon_Command3Large, IMAGE_COMMAND3_LARGE_HC);
- InitializeIcon(Icon_Command3LargeHover, IMAGE_COMMAND3_LARGE_HOVER_HC);
- InitializeIcon(Icon_Command3Medium, IMAGE_COMMAND3_SMALL_HC);
- InitializeIcon(Icon_Command3MediumHover, IMAGE_COMMAND3_SMALL_HOVER_HC);
- InitializeIcon(Icon_Command3Small, IMAGE_COMMAND3_SMALL_HC);
- InitializeIcon(Icon_Command3SmallHover, IMAGE_COMMAND3_SMALL_HOVER_HC);
- }
- else
- {
- InitializeIcon(Icon_RawShadow, IMAGE_SHADOW);
- InitializeIcon(Icon_RawInsertShadow, IMAGE_INSERT_SHADOW);
- InitializeIcon(Icon_HideSlideOverlay, IMAGE_HIDE_SLIDE_OVERLAY);
-
- InitializeIcon(Icon_ButtonBarLarge, IMAGE_BUTTONBAR_LARGE);
- InitializeIcon(Icon_ButtonBarMedium, IMAGE_BUTTONBAR_MEDIUM);
- InitializeIcon(Icon_ButtonBarSmall, IMAGE_BUTTONBAR_SMALL);
-
- InitializeIcon(Icon_Command1Large, IMAGE_COMMAND1_LARGE);
- InitializeIcon(Icon_Command1LargeHover, IMAGE_COMMAND1_LARGE_HOVER);
- InitializeIcon(Icon_Command1Medium, IMAGE_COMMAND1_MEDIUM);
- InitializeIcon(Icon_Command1MediumHover, IMAGE_COMMAND1_MEDIUM_HOVER);
- InitializeIcon(Icon_Command1Small, IMAGE_COMMAND1_SMALL);
- InitializeIcon(Icon_Command1SmallHover, IMAGE_COMMAND1_SMALL_HOVER);
-
- InitializeIcon(Icon_Command2Large, IMAGE_COMMAND2_LARGE);
- InitializeIcon(Icon_Command2LargeHover, IMAGE_COMMAND2_LARGE_HOVER);
- InitializeIcon(Icon_Command2Medium, IMAGE_COMMAND2_MEDIUM);
- InitializeIcon(Icon_Command2MediumHover, IMAGE_COMMAND2_MEDIUM_HOVER);
- InitializeIcon(Icon_Command2Small, IMAGE_COMMAND2_SMALL);
- InitializeIcon(Icon_Command2SmallHover, IMAGE_COMMAND2_SMALL_HOVER);
-
- InitializeIcon(Icon_Command2BLarge, IMAGE_COMMAND2B_LARGE);
- InitializeIcon(Icon_Command2BLargeHover, IMAGE_COMMAND2B_LARGE_HOVER);
- InitializeIcon(Icon_Command2BMedium, IMAGE_COMMAND2B_MEDIUM);
- InitializeIcon(Icon_Command2BMediumHover, IMAGE_COMMAND2B_MEDIUM_HOVER);
- InitializeIcon(Icon_Command2BSmall, IMAGE_COMMAND2B_SMALL);
- InitializeIcon(Icon_Command2BSmallHover, IMAGE_COMMAND2B_SMALL_HOVER);
-
- InitializeIcon(Icon_Command3Large, IMAGE_COMMAND3_LARGE);
- InitializeIcon(Icon_Command3LargeHover, IMAGE_COMMAND3_LARGE_HOVER);
- InitializeIcon(Icon_Command3Medium, IMAGE_COMMAND3_MEDIUM);
- InitializeIcon(Icon_Command3MediumHover, IMAGE_COMMAND3_MEDIUM_HOVER);
- InitializeIcon(Icon_Command3Small, IMAGE_COMMAND3_SMALL);
- InitializeIcon(Icon_Command3SmallHover, IMAGE_COMMAND3_SMALL_HOVER);
- }
- InitializeIcon(Icon_FocusBorder, IMAGE_FOCUS_BORDER);
- }
-}
-
-
-
-
-::boost::shared_ptr<Font> Theme::GetFont (
- const FontType eType,
- const OutputDevice& rDevice)
-{
- ::boost::shared_ptr<Font> pFont;
-
- switch (eType)
- {
- case Font_PageNumber:
- pFont.reset(new Font(Application::GetSettings().GetStyleSettings().GetAppFont()));
- pFont->SetTransparent(sal_True);
- pFont->SetWeight(WEIGHT_BOLD);
- break;
-
- case Font_PageCount:
- pFont.reset(new Font(Application::GetSettings().GetStyleSettings().GetAppFont()));
- pFont->SetTransparent(sal_True);
- pFont->SetWeight(WEIGHT_NORMAL);
- {
- const Size aSize (pFont->GetSize());
- pFont->SetSize(Size(aSize.Width()*5/3, aSize.Height()*5/3));
- }
- break;
-
- case Font_Button:
- pFont.reset(new Font(Application::GetSettings().GetStyleSettings().GetAppFont()));
- pFont->SetTransparent(sal_True);
- pFont->SetWeight(WEIGHT_BOLD);
- {
- const Size aSize (pFont->GetSize());
- pFont->SetSize(Size(aSize.Width()*4/3, aSize.Height()*4/3));
- }
- break;
- }
-
- if (pFont)
- {
- // Transform the point size to pixel size.
- const MapMode aFontMapMode (MAP_POINT);
- const Size aFontSize (rDevice.LogicToPixel(pFont->GetSize(), aFontMapMode));
-
- // Transform the font size to the logical coordinates of the device.
- pFont->SetSize(rDevice.PixelToLogic(aFontSize));
- }
-
- return pFont;
-}
-
-
-
-
-ColorData Theme::GetColor (const ColorType eType)
-{
- if (eType>=0 && sal_uInt32(eType)<maColor.size())
- return maColor[eType];
- else
- return 0;
-}
-
-
-
-
-void Theme::SetColor (
- const ColorType eType,
- const ColorData aData)
-{
- if (eType>=0 && sal_uInt32(eType)<maColor.size())
- maColor[eType] = aData;
-}
-
-
-
-
-ColorData Theme::GetGradientColor (
- const GradientColorType eType,
- const GradientColorClass eClass)
-{
- GradientDescriptor& rDescriptor (GetGradient(eType));
-
- switch (eClass)
- {
- case Border1: return rDescriptor.maBorderColor1;
- case Border2: return rDescriptor.maBorderColor2;
- case Fill1: return rDescriptor.maFillColor1;
- case Fill2: return rDescriptor.maFillColor2;
- default: OSL_ASSERT(false); // fall through
- case Base: return rDescriptor.maBaseColor;
- }
-}
-
-
-
-
-sal_Int32 Theme::GetGradientOffset (
- const GradientColorType eType,
- const GradientColorClass eClass)
-{
- GradientDescriptor& rDescriptor (GetGradient(eType));
-
- switch (eClass)
- {
- case Border1: return rDescriptor.mnBorderOffset1;
- case Border2: return rDescriptor.mnBorderOffset2;
- case Fill1: return rDescriptor.mnFillOffset1;
- case Fill2: return rDescriptor.mnFillOffset2;
- default: OSL_ASSERT(false); // fall through
- case Base: return 0;
- }
-}
-
-
-
-
-void Theme::SetGradient (
- const GradientColorType eType,
- const ColorData aBaseColor,
- const sal_Int32 nSaturationOverride,
- const sal_Int32 nBrightnessOverride,
- const sal_Int32 nFillStartOffset,
- const sal_Int32 nFillEndOffset,
- const sal_Int32 nBorderStartOffset,
- const sal_Int32 nBorderEndOffset)
-{
- GradientDescriptor& rGradient (GetGradient(eType));
-
- rGradient.maBaseColor = aBaseColor;
-
- rGradient.mnSaturationOverride = nSaturationOverride;
- rGradient.mnBrightnessOverride = nBrightnessOverride;
- const ColorData aColor (nSaturationOverride>=0 || nBrightnessOverride>=0
- ? HGBAdapt(aBaseColor, nSaturationOverride, nBrightnessOverride)
- : aBaseColor);
-
- rGradient.maFillColor1 = ChangeLuminance(aColor, nFillStartOffset);
- rGradient.maFillColor2 = ChangeLuminance(aColor, nFillEndOffset);
- rGradient.maBorderColor1 = ChangeLuminance(aColor, nBorderStartOffset);
- rGradient.maBorderColor2 = ChangeLuminance(aColor, nBorderEndOffset);
-
- rGradient.mnFillOffset1 = nFillStartOffset;
- rGradient.mnFillOffset2 = nFillEndOffset;
- rGradient.mnBorderOffset1 = nBorderStartOffset;
- rGradient.mnBorderOffset2 = nBorderEndOffset;
-}
-
-
-
-
-sal_Int32 Theme::GetGradientSaturationOverride (const GradientColorType eType)
-{
- GradientDescriptor& rGradient (GetGradient(eType));
- return rGradient.mnSaturationOverride;
-}
-
-
-
-
-sal_Int32 Theme::GetGradientBrightnessOverride (const GradientColorType eType)
-{
- GradientDescriptor& rGradient (GetGradient(eType));
- return rGradient.mnBrightnessOverride;
-}
-
-
-
-
-void Theme::SetGradientSaturationOverride (const GradientColorType eType, const sal_Int32 nValue)
-{
- GradientDescriptor& rGradient (GetGradient(eType));
- SetGradient(
- eType,
- rGradient.maBaseColor,
- nValue,
- rGradient.mnBrightnessOverride,
- rGradient.mnFillOffset1,
- rGradient.mnFillOffset2,
- rGradient.mnBorderOffset1,
- rGradient.mnBorderOffset2);
-}
-
-
-
-
-void Theme::SetGradientBrightnessOverride (const GradientColorType eType, const sal_Int32 nValue)
-{
- GradientDescriptor& rGradient (GetGradient(eType));
- SetGradient(eType,
- rGradient.maBaseColor,
- rGradient.mnSaturationOverride,
- nValue,
- rGradient.mnFillOffset1,
- rGradient.mnFillOffset2,
- rGradient.mnBorderOffset1,
- rGradient.mnBorderOffset2);
-}
-
-
-
-
-const BitmapEx& Theme::GetIcon (const IconType eType)
-{
- if (eType>=0 && size_t(eType)<maIcons.size())
- return maIcons[eType];
- else
- {
- OSL_ASSERT(eType>=0 && size_t(eType)<maIcons.size());
- return maIcons[0];
- }
-}
-
-
-
-
-sal_Int32 Theme::GetIntegerValue (const IntegerValueType eType) const
-{
- if (eType>=0 && size_t(eType)<maIntegerValues.size())
- return maIntegerValues[eType];
- else
- {
- OSL_ASSERT(eType>=0 && size_t(eType)<maIntegerValues.size());
- return 0;
- }
-}
-
-
-
-
-void Theme::SetIntegerValue (const IntegerValueType eType, const sal_Int32 nValue)
-{
- if (eType>=0 && size_t(eType)<maIntegerValues.size())
- maIntegerValues[eType] = nValue;
- else
- {
- OSL_ASSERT(eType>=0 && size_t(eType)<maIntegerValues.size());
- }
-}
-
-
-
-
-::rtl::OUString Theme::GetString (const StringType eType) const
-{
- if (eType>=0 && size_t(eType)<maStrings.size())
- return maStrings[eType];
- else
- {
- OSL_ASSERT(eType>=0 && size_t(eType)<maStrings.size());
- return ::rtl::OUString();
- }
-}
-
-
-
-
-Theme::GradientDescriptor& Theme::GetGradient (const GradientColorType eType)
-{
- if (eType>=0 && size_t(eType)<maGradients.size())
- return maGradients[eType];
- else
- {
- OSL_ASSERT(eType>=0 && size_t(eType)<maGradients.size());
- return maGradients[0];
- }
-}
-
-
-
-
-void Theme::InitializeIcon (const IconType eType, sal_uInt16 nResourceId)
-{
- if (eType>=0 && size_t(eType)<maIcons.size())
- {
- const BitmapEx aIcon (Image(SdResId(nResourceId)).GetBitmapEx());
- maIcons[eType] = aIcon;
- }
- else
- {
- OSL_ASSERT(eType>=0 && size_t(eType)<maIcons.size());
- }
-}
-
-
-
-
-} } } // end of namespace ::sd::slidesorter::view
diff --git a/sd/source/ui/slidesorter/view/SlsToolTip.cxx b/sd/source/ui/slidesorter/view/SlsToolTip.cxx
deleted file mode 100644
index 65c03a3bb..000000000
--- a/sd/source/ui/slidesorter/view/SlsToolTip.cxx
+++ /dev/null
@@ -1,230 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "view/SlsToolTip.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsLayouter.hxx"
-#include "view/SlsTheme.hxx"
-#include "sdpage.hxx"
-#include "sdresid.hxx"
-#include "glob.hrc"
-#include <vcl/help.hxx>
-
-using ::rtl::OUString;
-
-namespace sd { namespace slidesorter { namespace view {
-
-ToolTip::ToolTip (SlideSorter& rSlideSorter)
- : mrSlideSorter(rSlideSorter),
- msDefaultHelpText(),
- msCurrentHelpText(),
- mnHelpWindowHandle(0),
- maTimer()
-{
- maTimer.SetTimeout(rSlideSorter.GetTheme()->GetIntegerValue(Theme::Integer_ToolTipDelay));
- maTimer.SetTimeoutHdl(LINK(this, ToolTip, DelayTrigger));
-}
-
-
-
-
-ToolTip::~ToolTip (void)
-{
- maTimer.Stop();
- Hide();
-}
-
-
-
-
-void ToolTip::SetPage (const model::SharedPageDescriptor& rpDescriptor)
-{
- if (mpDescriptor != rpDescriptor)
- {
- maTimer.Stop();
- Hide();
-
- mpDescriptor = rpDescriptor;
-
- if (mpDescriptor)
- {
- SdPage* pPage = mpDescriptor->GetPage();
- OUString sHelpText;
- if (pPage != NULL)
- sHelpText = pPage->GetName();
- else
- {
- OSL_ASSERT(mpDescriptor->GetPage() != NULL);
- }
- if (sHelpText.getLength() == 0)
- {
- sHelpText = String(SdResId(STR_PAGE));
- sHelpText += String::CreateFromInt32(mpDescriptor->GetPageIndex()+1);
- }
-
- msDefaultHelpText = sHelpText;
- msCurrentHelpText = sHelpText;
- Show(false);
- }
- else
- {
- msDefaultHelpText = OUString();
- msCurrentHelpText = OUString();
- }
- }
-}
-
-
-
-
-void ToolTip::ShowDefaultHelpText (const ::rtl::OUString& rsHelpText)
-{
- if (msDefaultHelpText != rsHelpText)
- {
- const bool bIsVisible (Hide());
-
- msDefaultHelpText = rsHelpText;
- msCurrentHelpText = rsHelpText;
-
- Show(bIsVisible);
- }
-}
-
-
-
-
-void ToolTip::ShowDefaultHelpText (void)
-{
- if (msCurrentHelpText != msDefaultHelpText)
- {
- const bool bIsVisible (Hide());
-
- msCurrentHelpText = msDefaultHelpText;
-
- Show(bIsVisible);
- }
-}
-
-
-
-
-void ToolTip::ShowHelpText (const ::rtl::OUString& rsHelpText)
-{
- if (msCurrentHelpText != rsHelpText)
- {
- const bool bIsVisible (Hide());
-
- msCurrentHelpText = rsHelpText;
-
- Show(bIsVisible);
- }
-}
-
-
-
-
-void ToolTip::Show (const bool bNoDelay)
-{
- if (bNoDelay)
- DoShow();
- else
- maTimer.Start();
-}
-
-
-
-
-void ToolTip::DoShow (void)
-{
- if (maTimer.IsActive())
- {
- // The delay timer is active. Wait for it to trigger the showing of
- // the tool tip.
- return;
- }
-
- SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
- if (msCurrentHelpText.getLength()>0 && pWindow)
- {
- Rectangle aBox (
- mrSlideSorter.GetView().GetLayouter().GetPageObjectLayouter()->GetBoundingBox(
- mpDescriptor,
- PageObjectLayouter::Preview,
- PageObjectLayouter::WindowCoordinateSystem));
-
- // Do not show the help text when the (lower edge of the ) preview
- // is not visible. The tool tip itself may still be outside the
- // window.
- if (aBox.Bottom() >= pWindow->GetSizePixel().Height())
- return;
-
- ::Window* pParent (pWindow.get());
- while (pParent!=NULL && pParent->GetParent()!=NULL)
- pParent = pParent->GetParent();
- const Point aOffset (pWindow->GetWindowExtentsRelative(pParent).TopLeft());
-
- // We do not know how high the tool tip will be but want its top
- // edge not its bottom to be at a specific position (a little below
- // the preview). Therefore we use a little trick and place the tool
- // tip at the top of a rectangle that is placed below the preview.
- aBox.Move(aOffset.X(), aOffset.Y() + aBox.GetHeight() + 3);
- mnHelpWindowHandle = Help::ShowTip(
- pWindow.get(),
- aBox,
- msCurrentHelpText,
- QUICKHELP_CENTER | QUICKHELP_TOP);
- }
-}
-
-
-
-
-bool ToolTip::Hide (void)
-{
- if (mnHelpWindowHandle>0)
- {
- Help::HideTip(mnHelpWindowHandle);
- mnHelpWindowHandle = 0;
- return true;
- }
- else
- return false;
-}
-
-
-
-
-IMPL_LINK(ToolTip, DelayTrigger, void*, EMPTYARG)
-{
- DoShow();
-
- return 0;
-}
-
-} } } // end of namespace ::sd::slidesorter::view
diff --git a/sd/source/ui/slidesorter/view/SlsViewCacheContext.cxx b/sd/source/ui/slidesorter/view/SlsViewCacheContext.cxx
deleted file mode 100644
index 4f35996fe..000000000
--- a/sd/source/ui/slidesorter/view/SlsViewCacheContext.cxx
+++ /dev/null
@@ -1,162 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "SlsViewCacheContext.hxx"
-
-#include "SlideSorter.hxx"
-#include "model/SlideSorterModel.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "model/SlsPageEnumerationProvider.hxx"
-#include "view/SlideSorterView.hxx"
-#include "sdpage.hxx"
-#include "Window.hxx"
-#include "drawdoc.hxx"
-#include "tools/IdleDetection.hxx"
-#include <svx/svdpage.hxx>
-#include <svx/sdr/contact/viewcontact.hxx>
-#include <vcl/window.hxx>
-#include <svx/sdr/contact/objectcontact.hxx>
-
-namespace sd { namespace slidesorter { namespace view {
-
-
-ViewCacheContext::ViewCacheContext (SlideSorter& rSlideSorter)
- : mrModel(rSlideSorter.GetModel()),
- mrSlideSorter(rSlideSorter)
-{
-}
-
-
-
-
-ViewCacheContext::~ViewCacheContext (void)
-{
-}
-
-
-
-
-void ViewCacheContext::NotifyPreviewCreation (
- cache::CacheKey aKey,
- const Bitmap&)
-{
- const model::SharedPageDescriptor pDescriptor (GetDescriptor(aKey));
- if (pDescriptor.get() != NULL)
- {
- // Force a repaint that will trigger their re-creation.
- mrSlideSorter.GetView().RequestRepaint(pDescriptor);
- }
- else
- {
- OSL_ASSERT(pDescriptor);
- }
-}
-
-
-
-
-bool ViewCacheContext::IsIdle (void)
-{
- sal_Int32 nIdleState (tools::IdleDetection::GetIdleState(mrSlideSorter.GetContentWindow().get()));
- if (nIdleState == tools::IdleDetection::IDET_IDLE)
- return true;
- else
- return false;
-}
-
-
-
-
-bool ViewCacheContext::IsVisible (cache::CacheKey aKey)
-{
- const model::SharedPageDescriptor pDescriptor (GetDescriptor(aKey));
- return pDescriptor && pDescriptor->HasState(model::PageDescriptor::ST_Visible);
-}
-
-
-
-
-const SdrPage* ViewCacheContext::GetPage (cache::CacheKey aKey)
-{
- return static_cast<const SdrPage*>(aKey);
-}
-
-
-
-
-::boost::shared_ptr<std::vector<cache::CacheKey> > ViewCacheContext::GetEntryList (bool bVisible)
-{
- ::boost::shared_ptr<std::vector<cache::CacheKey> > pKeys (new std::vector<cache::CacheKey>());
-
- model::PageEnumeration aPageEnumeration (
- bVisible
- ? model::PageEnumerationProvider::CreateVisiblePagesEnumeration(mrModel)
- : model::PageEnumerationProvider::CreateAllPagesEnumeration(mrModel));
-
- while (aPageEnumeration.HasMoreElements())
- {
- model::SharedPageDescriptor pDescriptor (aPageEnumeration.GetNextElement());
- pKeys->push_back(pDescriptor->GetPage());
- }
-
- return pKeys;
-}
-
-
-
-
-sal_Int32 ViewCacheContext::GetPriority (cache::CacheKey aKey)
-{
- return - (static_cast<const SdrPage*>(aKey)->GetPageNum()-1) / 2;
-}
-
-
-
-
-model::SharedPageDescriptor ViewCacheContext::GetDescriptor (cache::CacheKey aKey)
-{
- sal_uInt16 nPageIndex ((static_cast<const SdrPage*>(aKey)->GetPageNum() - 1) / 2);
- return mrModel.GetPageDescriptor(nPageIndex);
-}
-
-
-
-
-::com::sun::star::uno::Reference<com::sun::star::uno::XInterface> ViewCacheContext::GetModel (void)
-{
- if (mrModel.GetDocument() == NULL)
- return NULL;
- else
- return mrModel.GetDocument()->getUnoModel();
-}
-
-} } } // end of namespace ::sd::slidesorter::view
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/slidesorter/view/SlsViewCacheContext.hxx b/sd/source/ui/slidesorter/view/SlsViewCacheContext.hxx
deleted file mode 100644
index 9c714f871..000000000
--- a/sd/source/ui/slidesorter/view/SlsViewCacheContext.hxx
+++ /dev/null
@@ -1,73 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_SLIDESORTER_VIEW_VIEW_CACHE_CONTEXT_HXX
-#define SD_SLIDESORTER_VIEW_VIEW_CACHE_CONTEXT_HXX
-
-#include "cache/SlsCacheContext.hxx"
-#include "model/SlsSharedPageDescriptor.hxx"
-
-namespace sd { namespace slidesorter { namespace model {
-class SlideSorterModel;
-} } }
-
-namespace sd { namespace slidesorter {
-class SlideSorter;
-} }
-
-namespace sd { namespace slidesorter { namespace view {
-
-/** The cache context for the SlideSorter as used by Draw and Impress. See
- the base class for documentation of the individual methods.
-*/
-class ViewCacheContext : public cache::CacheContext
-{
-public:
- ViewCacheContext (SlideSorter& rSlideSorter);
- virtual ~ViewCacheContext (void);
- virtual void NotifyPreviewCreation (cache::CacheKey aKey, const Bitmap& rPreview);
- virtual bool IsIdle (void);
- virtual bool IsVisible (cache::CacheKey aKey);
- virtual const SdrPage* GetPage (cache::CacheKey aKey);
- virtual ::boost::shared_ptr<std::vector<cache::CacheKey> > GetEntryList (bool bVisible);
- virtual sal_Int32 GetPriority (cache::CacheKey aKey);
- virtual ::com::sun::star::uno::Reference<com::sun::star::uno::XInterface> GetModel (void);
-
-private:
- model::SlideSorterModel& mrModel;
- SlideSorter& mrSlideSorter;
-
- model::SharedPageDescriptor GetDescriptor (cache::CacheKey aKey);
-};
-
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */