[Libreoffice-commits] core.git: include/svx sc/source sd/source solenv/clang-format svx/Library_svx.mk svx/source sw/source

Jan-Marek Glogowski (via logerrit) logerrit at kemper.freedesktop.org
Wed May 26 13:37:50 UTC 2021


 include/svx/MediaShellHelpers.hxx       |   39 +++++++++++
 sc/source/ui/drawfunc/mediash.cxx       |   90 +++----------------------
 sc/source/ui/inc/mediash.hxx            |    1 
 sd/source/ui/view/MediaObjectBar.cxx    |   97 ++++-----------------------
 solenv/clang-format/excludelist         |    4 -
 svx/Library_svx.mk                      |    1 
 svx/source/svdraw/MediaShellHelpers.cxx |  103 +++++++++++++++++++++++++++++
 sw/source/uibase/shells/mediash.cxx     |  112 ++++++--------------------------
 8 files changed, 197 insertions(+), 250 deletions(-)

New commits:
commit 2e30d16bb945042b5c033dc9bdba690ee4a08fed
Author:     Jan-Marek Glogowski <glogow at fbihome.de>
AuthorDate: Mon May 17 22:59:52 2021 +0200
Commit:     Jan-Marek Glogowski <glogow at fbihome.de>
CommitDate: Wed May 26 15:37:06 2021 +0200

    Refactor module media item handling
    
    Move common functionality into svx::MediaShellHelpers.
    
    Change-Id: I6f5db59bdcff7cad00a64e76f6aad7b8ecb4ffa9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116126
    Tested-by: Jenkins
    Reviewed-by: Jan-Marek Glogowski <glogow at fbihome.de>

diff --git a/include/svx/MediaShellHelpers.hxx b/include/svx/MediaShellHelpers.hxx
new file mode 100644
index 000000000000..5cfecaedf1a1
--- /dev/null
+++ b/include/svx/MediaShellHelpers.hxx
@@ -0,0 +1,39 @@
+/* -*- 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 .
+ */
+
+#pragma once
+
+#include <svx/svxdllapi.h>
+
+class SdrMarkView;
+class SfxItemSet;
+class SfxRequest;
+
+namespace avmedia
+{
+class MediaItem;
+}
+
+namespace svx::MediaShellHelpers
+{
+SVX_DLLPUBLIC void GetState(SdrMarkView* pSdrView, SfxItemSet& rSet);
+SVX_DLLPUBLIC const ::avmedia::MediaItem* Execute(SdrMarkView* pSdrView, SfxRequest const& rReq);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/drawfunc/mediash.cxx b/sc/source/ui/drawfunc/mediash.cxx
index 242ee95120b7..b203cfeb7fd4 100644
--- a/sc/source/ui/drawfunc/mediash.cxx
+++ b/sc/source/ui/drawfunc/mediash.cxx
@@ -19,12 +19,8 @@
 
 #include <memory>
 #include <sfx2/objface.hxx>
-#include <sfx2/request.hxx>
-#include <avmedia/mediaitem.hxx>
-#include <svl/whiter.hxx>
-#include <svx/svdomedia.hxx>
-#include <svx/sdr/contact/viewcontactofsdrmediaobj.hxx>
 #include <vcl/EnumContext.hxx>
+#include <svx/MediaShellHelpers.hxx>
 
 #include <mediash.hxx>
 #include <strings.hrc>
@@ -35,95 +31,35 @@
 #define ShellClass_ScMediaShell
 #include <scslots.hxx>
 
+using namespace svx;
+
 SFX_IMPL_INTERFACE(ScMediaShell, ScDrawShell)
 
 void ScMediaShell::InitInterface_Impl()
 {
-    GetStaticInterface()->RegisterObjectBar(SFX_OBJECTBAR_OBJECT, SfxVisibilityFlags::Invisible, ToolbarId::Media_Objectbar);
+    GetStaticInterface()->RegisterObjectBar(SFX_OBJECTBAR_OBJECT, SfxVisibilityFlags::Invisible,
+                                            ToolbarId::Media_Objectbar);
 
     GetStaticInterface()->RegisterPopupMenu("media");
 }
 
-
-ScMediaShell::ScMediaShell(ScViewData& rData) :
-    ScDrawShell(rData)
+ScMediaShell::ScMediaShell(ScViewData& rData)
+    : ScDrawShell(rData)
 {
-    SetName( ScResId( SCSTR_MEDIASHELL ) );
+    SetName(ScResId(SCSTR_MEDIASHELL));
     SfxShell::SetContextName(vcl::EnumContext::GetContextName(vcl::EnumContext::Context::Media));
 }
 
-ScMediaShell::~ScMediaShell()
-{
-}
+ScMediaShell::~ScMediaShell() {}
 
-void ScMediaShell::GetMediaState( SfxItemSet& rSet )
+void ScMediaShell::GetMediaState(SfxItemSet& rSet)
 {
-    ScDrawView* pView = GetViewData().GetScDrawView();
-
-    if( !pView )
-        return;
-
-    SfxWhichIter aIter( rSet );
-    sal_uInt16   nWhich = aIter.FirstWhich();
-
-    while( nWhich )
-    {
-        if( SID_AVMEDIA_TOOLBOX == nWhich )
-        {
-            std::unique_ptr<SdrMarkList> pMarkList(new SdrMarkList( pView->GetMarkedObjectList() ));
-            bool            bDisable = true;
-
-            if( 1 == pMarkList->GetMarkCount() )
-            {
-                SdrObject* pObj = pMarkList->GetMark( 0 )->GetMarkedSdrObj();
-
-                if( dynamic_cast<const SdrMediaObj*>( pObj) )
-                {
-                    ::avmedia::MediaItem aItem( SID_AVMEDIA_TOOLBOX );
-
-                    static_cast< sdr::contact::ViewContactOfSdrMediaObj& >( pObj->GetViewContact() ).updateMediaItem( aItem );
-                    rSet.Put( aItem );
-                    bDisable = false;
-                }
-            }
-
-            if( bDisable )
-                rSet.DisableItem( SID_AVMEDIA_TOOLBOX );
-        }
-
-        nWhich = aIter.NextWhich();
-    }
+    MediaShellHelpers::GetState(GetViewData().GetScDrawView(), rSet);
 }
 
-void ScMediaShell::ExecuteMedia( const SfxRequest& rReq )
+void ScMediaShell::ExecuteMedia(const SfxRequest& rReq)
 {
-    ScDrawView* pView = GetViewData().GetScDrawView();
-
-    if( pView && SID_AVMEDIA_TOOLBOX == rReq.GetSlot() )
-    {
-        const SfxItemSet*   pArgs = rReq.GetArgs();
-        const SfxPoolItem*  pItem;
-
-        if( !pArgs || ( SfxItemState::SET != pArgs->GetItemState( SID_AVMEDIA_TOOLBOX, false, &pItem ) ) )
-            pItem = nullptr;
-
-        if( pItem )
-        {
-            std::unique_ptr<SdrMarkList> pMarkList(new SdrMarkList( pView->GetMarkedObjectList() ));
-
-            if( 1 == pMarkList->GetMarkCount() )
-            {
-                SdrObject* pObj = pMarkList->GetMark( 0 )->GetMarkedSdrObj();
-
-                if( dynamic_cast<const SdrMediaObj*>( pObj) )
-                {
-                    static_cast< sdr::contact::ViewContactOfSdrMediaObj& >( pObj->GetViewContact() ).executeMediaItem(
-                        static_cast< const ::avmedia::MediaItem& >( *pItem ) );
-                }
-            }
-        }
-    }
-
+    MediaShellHelpers::Execute(GetViewData().GetScDrawView(), rReq);
     Invalidate();
 }
 
diff --git a/sc/source/ui/inc/mediash.hxx b/sc/source/ui/inc/mediash.hxx
index fb75f303ec82..cc7b6db7dd33 100644
--- a/sc/source/ui/inc/mediash.hxx
+++ b/sc/source/ui/inc/mediash.hxx
@@ -19,7 +19,6 @@
 
 #pragma once
 
-#include <sfx2/shell.hxx>
 #include <shellids.hxx>
 
 class ScViewData;
diff --git a/sd/source/ui/view/MediaObjectBar.cxx b/sd/source/ui/view/MediaObjectBar.cxx
index b6ee505f98a5..8d77b5b8c501 100644
--- a/sd/source/ui/view/MediaObjectBar.cxx
+++ b/sd/source/ui/view/MediaObjectBar.cxx
@@ -19,13 +19,9 @@
 
 #include <MediaObjectBar.hxx>
 #include <avmedia/mediaitem.hxx>
-#include <sfx2/msg.hxx>
 #include <sfx2/sfxsids.hrc>
-#include <sfx2/request.hxx>
 #include <sfx2/objface.hxx>
-#include <svl/whiter.hxx>
-#include <svx/svdomedia.hxx>
-#include <svx/sdr/contact/viewcontactofsdrmediaobj.hxx>
+#include <svx/MediaShellHelpers.hxx>
 
 #include <strings.hrc>
 #include <DrawDocShell.hxx>
@@ -35,100 +31,41 @@
 #include <memory>
 
 using namespace sd;
+using namespace svx;
 
 #define ShellClass_MediaObjectBar
 #include <sdslots.hxx>
 
-namespace sd {
-
-
+namespace sd
+{
 SFX_IMPL_INTERFACE(MediaObjectBar, SfxShell)
 
-void MediaObjectBar::InitInterface_Impl()
-{
-}
+void MediaObjectBar::InitInterface_Impl() {}
 
-MediaObjectBar::MediaObjectBar( const ViewShell* pSdViewShell, ::sd::View* pSdView ) :
-    SfxShell( pSdViewShell->GetViewShell() ),
-    mpView( pSdView )
+MediaObjectBar::MediaObjectBar(const ViewShell* pSdViewShell, ::sd::View* pSdView)
+    : SfxShell(pSdViewShell->GetViewShell())
+    , mpView(pSdView)
 {
     DrawDocShell* pDocShell = pSdViewShell->GetDocSh();
 
-    SetPool( &pDocShell->GetPool() );
-    SetUndoManager( pDocShell->GetUndoManager() );
-    SetRepeatTarget( mpView );
+    SetPool(&pDocShell->GetPool());
+    SetUndoManager(pDocShell->GetUndoManager());
+    SetRepeatTarget(mpView);
     SetName(SdResId(RID_DRAW_MEDIA_TOOLBOX));
 }
 
-MediaObjectBar::~MediaObjectBar()
-{
-    SetRepeatTarget( nullptr );
-}
+MediaObjectBar::~MediaObjectBar() { SetRepeatTarget(nullptr); }
 
-void MediaObjectBar::GetState( SfxItemSet& rSet )
-{
-    SfxWhichIter    aIter( rSet );
-    sal_uInt16          nWhich = aIter.FirstWhich();
+void MediaObjectBar::GetState(SfxItemSet& rSet) { MediaShellHelpers::GetState(mpView, rSet); }
 
-    while( nWhich )
-    {
-        if( SID_AVMEDIA_TOOLBOX == nWhich )
-        {
-            std::unique_ptr<SdrMarkList> pMarkList(new SdrMarkList( mpView->GetMarkedObjectList() ));
-            bool         bDisable = true;
-
-            if( 1 == pMarkList->GetMarkCount() )
-            {
-                SdrObject* pObj =pMarkList->GetMark( 0 )->GetMarkedSdrObj();
-
-                if( dynamic_cast< SdrMediaObj *>( pObj ) )
-                {
-                    ::avmedia::MediaItem aItem( SID_AVMEDIA_TOOLBOX );
-
-                    static_cast< sdr::contact::ViewContactOfSdrMediaObj& >( pObj->GetViewContact() ).updateMediaItem( aItem );
-                    rSet.Put( aItem );
-                    bDisable = false;
-                }
-            }
-
-            if( bDisable )
-                rSet.DisableItem( SID_AVMEDIA_TOOLBOX );
-        }
-
-        nWhich = aIter.NextWhich();
-    }
-}
-
-void MediaObjectBar::Execute( SfxRequest const & rReq )
+void MediaObjectBar::Execute(SfxRequest const& rReq)
 {
-    if( SID_AVMEDIA_TOOLBOX != rReq.GetSlot() )
-        return;
-
-    const SfxItemSet*   pArgs = rReq.GetArgs();
-    const SfxPoolItem*  pItem;
-
-    if( !pArgs || ( SfxItemState::SET != pArgs->GetItemState( SID_AVMEDIA_TOOLBOX, false, &pItem ) ) )
-        pItem = nullptr;
-
-    if( !pItem )
-        return;
-
-    std::unique_ptr<SdrMarkList> pMarkList(new SdrMarkList( mpView->GetMarkedObjectList() ));
-
-    if( 1 != pMarkList->GetMarkCount() )
+    const ::avmedia::MediaItem* pMediaItem = MediaShellHelpers::Execute(mpView, rReq);
+    if (!pMediaItem)
         return;
 
-    SdrObject* pObj = pMarkList->GetMark( 0 )->GetMarkedSdrObj();
-
-    if( !dynamic_cast< SdrMediaObj *>( pObj ) )
-        return;
-
-    static_cast< sdr::contact::ViewContactOfSdrMediaObj& >( pObj->GetViewContact() ).executeMediaItem(
-        static_cast< const ::avmedia::MediaItem& >( *pItem ) );
-
-
     //if only changing state then don't set modified flag (e.g. playing a video)
-    if( !(static_cast< const ::avmedia::MediaItem& >( *pItem ).getMaskSet() & AVMediaSetMask::STATE))
+    if (!(pMediaItem->getMaskSet() & AVMediaSetMask::STATE))
     {
         //fdo #32598: after changing playback opts, set document's modified flag
         SdDrawDocument& rDoc = mpView->GetDoc();
diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist
index 22cd1b275860..046f7dd4e061 100644
--- a/solenv/clang-format/excludelist
+++ b/solenv/clang-format/excludelist
@@ -8901,7 +8901,6 @@ sc/source/ui/drawfunc/fusel2.cxx
 sc/source/ui/drawfunc/futext.cxx
 sc/source/ui/drawfunc/futext3.cxx
 sc/source/ui/drawfunc/graphsh.cxx
-sc/source/ui/drawfunc/mediash.cxx
 sc/source/ui/drawfunc/oleobjsh.cxx
 sc/source/ui/formdlg/dwfunctr.cxx
 sc/source/ui/formdlg/formula.cxx
@@ -9822,7 +9821,6 @@ sd/source/ui/inc/DrawViewShell.hxx
 sd/source/ui/inc/FrameView.hxx
 sd/source/ui/inc/GraphicObjectBar.hxx
 sd/source/ui/inc/LayerTabBar.hxx
-sd/source/ui/inc/MediaObjectBar.hxx
 sd/source/ui/inc/NavigatorChildWindow.hxx
 sd/source/ui/inc/OutlineView.hxx
 sd/source/ui/inc/OutlineViewShell.hxx
@@ -10132,7 +10130,6 @@ sd/source/ui/view/DocumentRenderer.cxx
 sd/source/ui/view/FormShellManager.cxx
 sd/source/ui/view/GraphicObjectBar.cxx
 sd/source/ui/view/ImpressViewShellBase.cxx
-sd/source/ui/view/MediaObjectBar.cxx
 sd/source/ui/view/OutlineViewShellBase.cxx
 sd/source/ui/view/Outliner.cxx
 sd/source/ui/view/OutlinerIterator.cxx
@@ -13512,7 +13509,6 @@ sw/source/uibase/shells/grfsh.cxx
 sw/source/uibase/shells/grfshex.cxx
 sw/source/uibase/shells/langhelper.cxx
 sw/source/uibase/shells/listsh.cxx
-sw/source/uibase/shells/mediash.cxx
 sw/source/uibase/shells/olesh.cxx
 sw/source/uibase/shells/tabsh.cxx
 sw/source/uibase/shells/textdrw.cxx
diff --git a/svx/Library_svx.mk b/svx/Library_svx.mk
index c951d91169f3..5ff8a89f6196 100644
--- a/svx/Library_svx.mk
+++ b/svx/Library_svx.mk
@@ -220,6 +220,7 @@ $(eval $(call gb_Library_add_exception_objects,svx,\
     svx/source/stbctrls/zoomsliderctrl \
     svx/source/stbctrls/zoomctrl \
     svx/source/svdraw/ActionDescriptionProvider \
+    svx/source/svdraw/MediaShellHelpers \
     svx/source/smarttags/SmartTagMgr \
     svx/source/table/accessiblecell \
     svx/source/table/accessibletableshape \
diff --git a/svx/source/svdraw/MediaShellHelpers.cxx b/svx/source/svdraw/MediaShellHelpers.cxx
new file mode 100644
index 000000000000..03fb24174e7b
--- /dev/null
+++ b/svx/source/svdraw/MediaShellHelpers.cxx
@@ -0,0 +1,103 @@
+/* -*- 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 <svx/MediaShellHelpers.hxx>
+#include <avmedia/mediaitem.hxx>
+#include <sfx2/request.hxx>
+#include <sfx2/sfxsids.hrc>
+#include <svl/whiter.hxx>
+#include <svx/sdr/contact/viewcontactofsdrmediaobj.hxx>
+#include <svx/svdmrkv.hxx>
+
+#include <memory>
+
+namespace svx::MediaShellHelpers
+{
+void GetState(SdrMarkView* pSdrView, SfxItemSet& rSet)
+{
+    if (!pSdrView)
+        return;
+
+    SfxWhichIter aIter(rSet);
+
+    for (sal_uInt16 nWhich = aIter.FirstWhich(); nWhich; nWhich = aIter.NextWhich())
+    {
+        if (SID_AVMEDIA_TOOLBOX != nWhich)
+            continue;
+
+        std::unique_ptr<SdrMarkList> pMarkList(new SdrMarkList(pSdrView->GetMarkedObjectList()));
+        bool bDisable = true;
+
+        if (1 == pMarkList->GetMarkCount())
+        {
+            SdrObject* pObj = pMarkList->GetMark(0)->GetMarkedSdrObj();
+
+            if (dynamic_cast<SdrMediaObj*>(pObj))
+            {
+                ::avmedia::MediaItem aItem(SID_AVMEDIA_TOOLBOX);
+
+                static_cast<sdr::contact::ViewContactOfSdrMediaObj&>(pObj->GetViewContact())
+                    .updateMediaItem(aItem);
+                rSet.Put(aItem);
+                bDisable = false;
+            }
+        }
+
+        if (bDisable)
+            rSet.DisableItem(SID_AVMEDIA_TOOLBOX);
+    }
+}
+
+const ::avmedia::MediaItem* Execute(SdrMarkView* pSdrView, SfxRequest const& rReq)
+{
+    if (!pSdrView)
+        return nullptr;
+
+    if (SID_AVMEDIA_TOOLBOX != rReq.GetSlot())
+        return nullptr;
+
+    const SfxItemSet* pArgs = rReq.GetArgs();
+    const SfxPoolItem* pItem;
+
+    if (!pArgs || (SfxItemState::SET != pArgs->GetItemState(SID_AVMEDIA_TOOLBOX, false, &pItem)))
+        pItem = nullptr;
+
+    if (!pItem)
+        return nullptr;
+
+    std::unique_ptr<SdrMarkList> pMarkList(new SdrMarkList(pSdrView->GetMarkedObjectList()));
+
+    if (1 != pMarkList->GetMarkCount())
+        return nullptr;
+
+    SdrObject* pObj = pMarkList->GetMark(0)->GetMarkedSdrObj();
+
+    if (!dynamic_cast<SdrMediaObj*>(pObj))
+        return nullptr;
+
+    const ::avmedia::MediaItem* pMediaItem = static_cast<const ::avmedia::MediaItem*>(pItem);
+    static_cast<sdr::contact::ViewContactOfSdrMediaObj&>(pObj->GetViewContact())
+        .executeMediaItem(*pMediaItem);
+
+    return pMediaItem;
+}
+
+} // end of namespace svx::MediaShellHelpers
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/uibase/shells/mediash.cxx b/sw/source/uibase/shells/mediash.cxx
index 7aaabc817c08..2eeffe659989 100644
--- a/sw/source/uibase/shells/mediash.cxx
+++ b/sw/source/uibase/shells/mediash.cxx
@@ -18,7 +18,6 @@
  */
 
 #include <cmdid.h>
-#include <svl/whiter.hxx>
 #include <sfx2/request.hxx>
 #include <svx/svdview.hxx>
 #include <view.hxx>
@@ -27,135 +26,72 @@
 
 #include <sfx2/objface.hxx>
 #include <vcl/EnumContext.hxx>
-#include <svx/svdomedia.hxx>
-#include <svx/sdr/contact/viewcontactofsdrmediaobj.hxx>
-#include <avmedia/mediaitem.hxx>
+#include <svx/MediaShellHelpers.hxx>
 
 #define ShellClass_SwMediaShell
-#include <sfx2/msg.hxx>
 #include <swslots.hxx>
 #include <memory>
 
+using namespace svx;
+
 SFX_IMPL_INTERFACE(SwMediaShell, SwBaseShell)
 
 void SwMediaShell::InitInterface_Impl()
 {
     GetStaticInterface()->RegisterPopupMenu("media");
 
-    GetStaticInterface()->RegisterObjectBar(SFX_OBJECTBAR_OBJECT, SfxVisibilityFlags::Invisible, ToolbarId::Media_Toolbox);
+    GetStaticInterface()->RegisterObjectBar(SFX_OBJECTBAR_OBJECT, SfxVisibilityFlags::Invisible,
+                                            ToolbarId::Media_Toolbox);
 }
 
-void SwMediaShell::ExecMedia(SfxRequest const &rReq)
+void SwMediaShell::ExecMedia(SfxRequest const& rReq)
 {
     SwWrtShell* pSh = &GetShell();
-    SdrView*    pSdrView = pSh->GetDrawView();
+    SdrView* pSdrView = pSh->GetDrawView();
 
-    if( !pSdrView )
+    if (!pSdrView)
         return;
 
-    const SfxItemSet*   pArgs = rReq.GetArgs();
-    bool                bChanged = pSdrView->GetModel()->IsChanged();
-
-    pSdrView->GetModel()->SetChanged( false );
+    const bool bChanged = pSdrView->GetModel()->IsChanged();
+    pSdrView->GetModel()->SetChanged(false);
 
-    switch( rReq.GetSlot() )
+    switch (rReq.GetSlot())
     {
         case SID_DELETE:
-        {
-            if( pSh->IsObjSelected() )
+            if (pSh->IsObjSelected())
             {
                 pSh->SetModified();
                 pSh->DelSelectedObj();
 
-                if( pSh->IsSelFrameMode() )
+                if (pSh->IsSelFrameMode())
                     pSh->LeaveSelFrameMode();
 
                 GetView().AttrChangedNotify(nullptr);
             }
-        }
-        break;
+            break;
 
         case SID_AVMEDIA_TOOLBOX:
-        {
-            if( pSh->IsObjSelected() )
-            {
-                const SfxPoolItem*  pItem;
-
-                if( !pArgs || ( SfxItemState::SET != pArgs->GetItemState( SID_AVMEDIA_TOOLBOX, false, &pItem ) ) )
-                    pItem = nullptr;
-
-                if( pItem )
-                {
-                    std::unique_ptr<SdrMarkList> pMarkList(new SdrMarkList( pSdrView->GetMarkedObjectList() ));
-
-                    if( 1 == pMarkList->GetMarkCount() )
-                    {
-                        SdrObject* pObj = pMarkList->GetMark( 0 )->GetMarkedSdrObj();
-
-                        if( dynamic_cast< const SdrMediaObj *>( pObj ) )
-                        {
-                            static_cast< sdr::contact::ViewContactOfSdrMediaObj& >( pObj->GetViewContact() ).executeMediaItem(
-                                static_cast< const ::avmedia::MediaItem& >( *pItem ) );
-                        }
-                    }
-                }
-            }
-        }
-        break;
+            if (pSh->IsObjSelected())
+                MediaShellHelpers::Execute(pSdrView, rReq);
+            break;
 
         default:
-        break;
+            break;
     }
 
-    if( pSdrView->GetModel()->IsChanged() )
+    if (pSdrView->GetModel()->IsChanged())
         GetShell().SetModified();
-    else if( bChanged )
+    else if (bChanged)
         pSdrView->GetModel()->SetChanged();
 }
 
-void SwMediaShell::GetMediaState(SfxItemSet &rSet)
+void SwMediaShell::GetMediaState(SfxItemSet& rSet)
 {
-    SfxWhichIter    aIter( rSet );
-    sal_uInt16          nWhich = aIter.FirstWhich();
-
-    while( nWhich )
-    {
-        if( SID_AVMEDIA_TOOLBOX == nWhich )
-        {
-            SwWrtShell& rSh = GetShell();
-            SdrView*    pView = rSh.GetDrawView();
-
-            if( pView )
-            {
-                bool bDisable = true;
-                std::unique_ptr<SdrMarkList> pMarkList(new SdrMarkList( pView->GetMarkedObjectList() ));
-
-                if( 1 == pMarkList->GetMarkCount() )
-                {
-                    SdrObject* pObj = pMarkList->GetMark( 0 )->GetMarkedSdrObj();
-
-                    if( dynamic_cast< const SdrMediaObj *>( pObj ) )
-                    {
-                        ::avmedia::MediaItem aItem( SID_AVMEDIA_TOOLBOX );
-
-                        static_cast< sdr::contact::ViewContactOfSdrMediaObj& >( pObj->GetViewContact() ).updateMediaItem( aItem );
-                        rSet.Put( aItem );
-                        bDisable = false;
-                    }
-                }
-
-                if( bDisable )
-                    rSet.DisableItem( SID_AVMEDIA_TOOLBOX );
-            }
-        }
-
-        nWhich = aIter.NextWhich();
-    }
+    MediaShellHelpers::GetState(GetShell().GetDrawView(), rSet);
 }
 
-SwMediaShell::SwMediaShell(SwView &_rView) :
-    SwBaseShell(_rView)
-
+SwMediaShell::SwMediaShell(SwView& _rView)
+    : SwBaseShell(_rView)
 {
     SetName("Media Playback");
     SfxShell::SetContextName(vcl::EnumContext::GetContextName(vcl::EnumContext::Context::Media));


More information about the Libreoffice-commits mailing list