diff options
author | Philippe Jung <phil.jung@free.fr> | 2015-06-10 16:09:23 +0200 |
---|---|---|
committer | Philippe Jung <phil.jung@free.fr> | 2015-06-16 15:08:24 +0000 |
commit | d18afcc9125f427c0e6693900d24f894068d7e56 (patch) | |
tree | b3e7e9dd50d08f2d79fedf5d822b0a5c89c1b6ca /sd/source/ui/func/funavig.cxx | |
parent | 4fb65441709d02946f4b24da7839dba7ecffff1e (diff) |
tdf#91909 Uno commands for slide navigation and sorting
The following change adds the following uno commands to
draw and impress. Commands are in standard toolbar and
not visible by default.
NextPage: go to the next page
PreviousPage: go to the previous page
FirstPage: go to the first page
LastPage: go the the last page
MovePageUp: Moves the current selection above the page
preceding the selection.
MovePageDown: Moves the current selection below the page
following the selection.
MovePageTop: Moves the selection to the top.
MovePageBottom: Moves the current selection to the bottom.
Change-Id: I2dbd923f14fd9901fb513c58b51bc7ab91ad0a83
Reviewed-on: https://gerrit.libreoffice.org/16211
Reviewed-by: Philippe Jung <phil.jung@free.fr>
Tested-by: Philippe Jung <phil.jung@free.fr>
Diffstat (limited to 'sd/source/ui/func/funavig.cxx')
-rw-r--r-- | sd/source/ui/func/funavig.cxx | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/sd/source/ui/func/funavig.cxx b/sd/source/ui/func/funavig.cxx new file mode 100644 index 000000000000..1c28b93d7bce --- /dev/null +++ b/sd/source/ui/func/funavig.cxx @@ -0,0 +1,156 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +#include "funavig.hxx" +#include <sfx2/viewfrm.hxx> + +#include "app.hrc" +#include "sdpage.hxx" +#include <sfx2/bindings.hxx> +#include <sfx2/request.hxx> +#include "drawdoc.hxx" +#include "DrawViewShell.hxx" +#include "ViewShell.hxx" +#include "slideshow.hxx" + +namespace sd { + +TYPEINIT1( FuNavigation, FuPoor ); + +FuNavigation::FuNavigation ( + ViewShell* pViewSh, + ::sd::Window* pWin, + ::sd::View* pView, + SdDrawDocument* pDoc, + SfxRequest& rReq) + : FuPoor(pViewSh, pWin, pView, pDoc, rReq) +{ +} + +rtl::Reference<FuPoor> FuNavigation::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq ) +{ + rtl::Reference<FuPoor> xFunc( new FuNavigation( pViewSh, pWin, pView, pDoc, rReq ) ); + xFunc->DoExecute(rReq); + return xFunc; +} + +void FuNavigation::DoExecute( SfxRequest& rReq ) +{ + bool bSlideShow = SlideShow::IsRunning( mpViewShell->GetViewShellBase() ); + + switch ( rReq.GetSlot() ) + { + case SID_GO_TO_FIRST_PAGE: + { + if (!mpView->IsTextEdit() + && mpViewShell->ISA(DrawViewShell) + && !bSlideShow) + { + // jump to first page + static_cast<DrawViewShell*>(mpViewShell)->SwitchPage(0); + } + } + break; + + case SID_GO_TO_PREVIOUS_PAGE: + { + if(mpViewShell->ISA(DrawViewShell) && !bSlideShow) + { + // With no modifier pressed we move to the previous + // slide. + mpView->SdrEndTextEdit(); + + // Previous page. + SdPage* pPage = static_cast<DrawViewShell*>(mpViewShell)->GetActualPage(); + sal_uInt16 nSdPage = (pPage->GetPageNum() - 1) / 2; + + if (nSdPage > 0) + { + // Switch the page and send events regarding + // deactivation the old page and activating the new + // one. + TabControl& rPageTabControl = + static_cast<DrawViewShell*>(mpViewShell) + ->GetPageTabControl(); + if (rPageTabControl.IsReallyShown()) + rPageTabControl.SendDeactivatePageEvent (); + static_cast<DrawViewShell*>(mpViewShell)->SwitchPage(nSdPage - 1); + if (rPageTabControl.IsReallyShown()) + rPageTabControl.SendActivatePageEvent (); + } + } + } + break; + + case SID_GO_TO_NEXT_PAGE: + { + if(mpViewShell->ISA(DrawViewShell) && !bSlideShow) + { + // With no modifier pressed we move to the next slide. + mpView->SdrEndTextEdit(); + + // Next page. + SdPage* pPage = static_cast<DrawViewShell*>(mpViewShell)->GetActualPage(); + sal_uInt16 nSdPage = (pPage->GetPageNum() - 1) / 2; + + if (nSdPage < mpDoc->GetSdPageCount(pPage->GetPageKind()) - 1) + { + // Switch the page and send events regarding + // deactivation the old page and activating the new + // one. + TabControl& rPageTabControl = + static_cast<DrawViewShell*>(mpViewShell)->GetPageTabControl(); + if (rPageTabControl.IsReallyShown()) + rPageTabControl.SendDeactivatePageEvent (); + static_cast<DrawViewShell*>(mpViewShell)->SwitchPage(nSdPage + 1); + if (rPageTabControl.IsReallyShown()) + rPageTabControl.SendActivatePageEvent (); + } + } + } + break; + + case SID_GO_TO_LAST_PAGE: + { + if (!mpView->IsTextEdit() + && mpViewShell->ISA(DrawViewShell) + && !bSlideShow) + { + // jump to last page + SdPage* pPage = + static_cast<DrawViewShell*>(mpViewShell)->GetActualPage(); + static_cast<DrawViewShell*>(mpViewShell) + ->SwitchPage(mpDoc->GetSdPageCount( + pPage->GetPageKind()) - 1); + } + } + break; + } + // Refresh toolbar icons + SfxBindings& rBindings = mpViewShell->GetViewFrame()->GetBindings(); + rBindings.Invalidate(SID_GO_TO_FIRST_PAGE); + rBindings.Invalidate(SID_GO_TO_PREVIOUS_PAGE); + rBindings.Invalidate(SID_GO_TO_NEXT_PAGE); + rBindings.Invalidate(SID_GO_TO_LAST_PAGE); +} + + +} // end of namespace sd + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |