xref: /aoo41x/main/sw/source/ui/shells/mediash.cxx (revision f120fe41)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 
27 
28 
29 
30 #ifndef _CMDID_H
31 #include <cmdid.h>
32 #endif
33 #include <hintids.hxx>
34 #include <tools/urlobj.hxx>
35 #include <vcl/msgbox.hxx>
36 #include <svl/stritem.hxx>
37 #include <svl/whiter.hxx>
38 #include <svl/urihelper.hxx>
39 #include <sfx2/dispatch.hxx>
40 #include <editeng/sizeitem.hxx>
41 #include <editeng/protitem.hxx>
42 #include <sfx2/request.hxx>
43 #include <svl/srchitem.hxx>
44 #include <svx/htmlmode.hxx>
45 #include <svx/sdgluitm.hxx>
46 #include <svx/sdgcoitm.hxx>
47 #include <svx/sdggaitm.hxx>
48 #include <svx/sdgtritm.hxx>
49 #include <svx/sdginitm.hxx>
50 #include <svx/sdgmoitm.hxx>
51 #include <editeng/brshitem.hxx>
52 #include <svx/grfflt.hxx>
53 #include <fmturl.hxx>
54 #include <view.hxx>
55 #include <wrtsh.hxx>
56 #include <viewopt.hxx>
57 #include <swmodule.hxx>
58 #include <frmatr.hxx>
59 #include <swundo.hxx>
60 #include <uitool.hxx>
61 #include <docsh.hxx>
62 #include <mediash.hxx>
63 #include <frmmgr.hxx>
64 #include <frmdlg.hxx>
65 #include <frmfmt.hxx>
66 #include <grfatr.hxx>
67 #include <usrpref.hxx>
68 #include <edtwin.hxx>
69 #include <swwait.hxx>
70 #ifndef _SHELLS_HRC
71 #include <shells.hrc>
72 #endif
73 #ifndef _POPUP_HRC
74 #include <popup.hrc>
75 #endif
76 
77 #include <sfx2/objface.hxx>
78 #include <sfx2/sidebar/EnumContext.hxx>
79 #include <svx/svdomedia.hxx>
80 #include <svx/sdr/contact/viewcontactofsdrmediaobj.hxx>
81 #include <avmedia/mediaitem.hxx>
82 
83 #define SwMediaShell
84 #include <sfx2/msg.hxx>
85 #include "swslots.hxx"
86 #include "swabstdlg.hxx"
87 
SFX_IMPL_INTERFACE(SwMediaShell,SwBaseShell,SW_RES (STR_SHELLNAME_MEDIA))88 SFX_IMPL_INTERFACE(SwMediaShell, SwBaseShell, SW_RES(STR_SHELLNAME_MEDIA))
89 {
90 	SFX_POPUPMENU_REGISTRATION(SW_RES(MN_MEDIA_POPUPMENU));
91 	SFX_OBJECTBAR_REGISTRATION(SFX_OBJECTBAR_OBJECT, SW_RES(RID_MEDIA_TOOLBOX));
92 }
93 
94 // ------------------------------------------------------------------------------
95 
ExecMedia(SfxRequest & rReq)96 void SwMediaShell::ExecMedia(SfxRequest &rReq)
97 {
98 	SwWrtShell* pSh = &GetShell();
99 	SdrView*	pSdrView = pSh->GetDrawView();
100 
101 	if( pSdrView )
102 	{
103     	const SfxItemSet*   pArgs = rReq.GetArgs();
104 	    sal_uInt16		        nSlotId = rReq.GetSlot();
105     	sal_Bool                bChanged = pSdrView->GetModel()->IsChanged();
106 
107 	    pSdrView->GetModel()->SetChanged( sal_False );
108 
109 	    switch( nSlotId )
110 	    {
111 		    case SID_DELETE:
112 		    {
113 			    if( pSh->IsObjSelected() )
114 			    {
115     				pSh->SetModified();
116 				    pSh->DelSelectedObj();
117 
118 				    if( pSh->IsSelFrmMode() )
119 					    pSh->LeaveSelFrmMode();
120 
121 				    GetView().AttrChangedNotify( pSh );
122 			    }
123 		    }
124 		    break;
125 
126 		    case( SID_AVMEDIA_TOOLBOX ):
127 		    {
128 			    if( pSh->IsObjSelected() )
129 		        {
130 			        const SfxPoolItem*	pItem;
131 
132 			        if( !pArgs || ( SFX_ITEM_SET != pArgs->GetItemState( SID_AVMEDIA_TOOLBOX, sal_False, &pItem ) ) )
133 				        pItem = NULL;
134 
135 			        if( pItem )
136 			        {
137 				        SdrMarkList* pMarkList = new SdrMarkList( pSdrView->GetMarkedObjectList() );
138 
139 				        if( 1 == pMarkList->GetMarkCount() )
140 				        {
141 					        SdrObject* pObj = pMarkList->GetMark( 0 )->GetMarkedSdrObj();
142 
143 					        if( pObj && pObj->ISA( SdrMediaObj ) )
144 					        {
145 						        static_cast< sdr::contact::ViewContactOfSdrMediaObj& >( pObj->GetViewContact() ).executeMediaItem(
146 							        static_cast< const ::avmedia::MediaItem& >( *pItem ) );
147 					        }
148 				        }
149 
150 				        delete pMarkList;
151 			        }
152 		        }
153             }
154 		    break;
155 
156 		    default:
157 		    break;
158         }
159 
160 	    if( pSdrView->GetModel()->IsChanged() )
161 		    GetShell().SetModified();
162 	    else if( bChanged )
163 		    pSdrView->GetModel()->SetChanged(sal_True);
164     }
165 }
166 
167 // ------------------------------------------------------------------------------
168 
GetMediaState(SfxItemSet & rSet)169 void SwMediaShell::GetMediaState(SfxItemSet &rSet)
170 {
171 	SfxWhichIter	aIter( rSet );
172 	sal_uInt16			nWhich = aIter.FirstWhich();
173 
174 	while( nWhich )
175 	{
176 		if( SID_AVMEDIA_TOOLBOX == nWhich )
177 		{
178 			SwWrtShell&	rSh = GetShell();
179 			SdrView*	pView = rSh.GetDrawView();
180 			bool		bDisable = true;
181 
182 			if( pView )
183 			{
184 				SdrMarkList* pMarkList = new SdrMarkList( pView->GetMarkedObjectList() );
185 
186 				if( 1 == pMarkList->GetMarkCount() )
187 				{
188 					SdrObject* pObj = pMarkList->GetMark( 0 )->GetMarkedSdrObj();
189 
190 					if( pObj && pObj->ISA( SdrMediaObj ) )
191 					{
192 						::avmedia::MediaItem aItem( SID_AVMEDIA_TOOLBOX );
193 
194 						static_cast< sdr::contact::ViewContactOfSdrMediaObj& >( pObj->GetViewContact() ).updateMediaItem( aItem );
195 						rSet.Put( aItem );
196 						bDisable = false;
197 					}
198 				}
199 
200 				if( bDisable )
201 					rSet.DisableItem( SID_AVMEDIA_TOOLBOX );
202 
203 				delete pMarkList;
204 			}
205 		}
206 
207 		nWhich = aIter.NextWhich();
208 	}
209 }
210 
211 // ------------------------------------------------------------------------------
212 
SwMediaShell(SwView & _rView)213 SwMediaShell::SwMediaShell(SwView &_rView) :
214     SwBaseShell(_rView)
215 
216 {
217 	SetName(String::CreateFromAscii("Media Playback"));
218 	SetHelpId(SW_MEDIASHELL);
219     SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Media));
220 }
221