/* -*- 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 * * 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 #include namespace sd { namespace slidesorter { namespace controller { DragAndDropContext::DragAndDropContext (SlideSorter& rSlideSorter) : mpTargetSlideSorter(&rSlideSorter), mnInsertionIndex(-1) { ::std::vector aPages; // No Drag-and-Drop for master pages. if (rSlideSorter.GetModel().GetEditMode() != EM_PAGE) return; rSlideSorter.GetController().GetInsertionIndicatorHandler()->UpdateIndicatorIcon( dynamic_cast(SD_MOD()->pTransferDrag)); } DragAndDropContext::~DragAndDropContext (void) { SetTargetSlideSorter (NULL, Point(0,0), InsertionIndicatorHandler::UnknownMode, false); } 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 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 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */