| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #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 <vos/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::createFromAscii("com.sun.star.comp.Draw.SlideSorter"); |
| } |
| |
| |
| |
| |
| Sequence<rtl::OUString> SAL_CALL SlideSorterService_getSupportedServiceNames (void) |
| throw (RuntimeException) |
| { |
| static const ::rtl::OUString sServiceName( |
| ::rtl::OUString::createFromAscii("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::createFromAscii("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 |
| |