diff options
author | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-03-27 11:22:02 +0100 |
---|---|---|
committer | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-03-27 11:22:33 +0100 |
commit | cab8cfbe60e2829d62308444a610d340d2370781 (patch) | |
tree | f6c0b7e93f7a0cec5654b0d012003785ffbe3d38 /sd | |
parent | Skeleton of OpenGL avmedia service for playing 3D models (diff) | |
download | core-cab8cfbe60e2829d62308444a610d340d2370781.tar.gz core-cab8cfbe60e2829d62308444a610d340d2370781.zip |
Basic UI for inserting 3D models
-By now only in impress.
-One supported file format: gltf/.json
Change-Id: I66b9cc91afeac292a19e8917f923228dc96a791a
Diffstat (limited to 'sd')
-rw-r--r-- | sd/sdi/_drvwsh.sdi | 5 | ||||
-rw-r--r-- | sd/source/ui/func/fuinsert.cxx | 59 | ||||
-rw-r--r-- | sd/source/ui/inc/fuinsert.hxx | 17 | ||||
-rw-r--r-- | sd/source/ui/view/drviews2.cxx | 11 | ||||
-rw-r--r-- | sd/uiconfig/simpress/menubar/menubar.xml | 1 |
5 files changed, 93 insertions, 0 deletions
diff --git a/sd/sdi/_drvwsh.sdi b/sd/sdi/_drvwsh.sdi index 78e812e834e0..d328cf42e57a 100644 --- a/sd/sdi/_drvwsh.sdi +++ b/sd/sdi/_drvwsh.sdi @@ -2748,4 +2748,9 @@ interface DrawView [ ExecMethod = FuTemporary ; ] + SID_INSERT_3DMODEL + [ + ExecMethod = FuTemporary ; + StateMethod = GetMenuState ; + ] } diff --git a/sd/source/ui/func/fuinsert.cxx b/sd/source/ui/func/fuinsert.cxx index 13f71bad655b..c1706fc298cf 100644 --- a/sd/source/ui/func/fuinsert.cxx +++ b/sd/source/ui/func/fuinsert.cxx @@ -29,6 +29,7 @@ #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/drawing/FillStyle.hpp> +#include <com/sun/star/ui/dialogs/TemplateDescription.hpp> #include <tools/urlobj.hxx> #include <svl/urihelper.hxx> @@ -90,6 +91,7 @@ TYPEINIT1( FuInsertGraphic, FuPoor ); TYPEINIT1( FuInsertClipboard, FuPoor ); TYPEINIT1( FuInsertOLE, FuPoor ); TYPEINIT1( FuInsertAVMedia, FuPoor ); +TYPEINIT1( FuInsert3DModel, FuPoor ); FuInsertGraphic::FuInsertGraphic ( ViewShell* pViewSh, @@ -753,6 +755,63 @@ void FuInsertAVMedia::DoExecute( SfxRequest& rReq ) } } +FuInsert3DModel::FuInsert3DModel( + ViewShell* pViewSh, + ::sd::Window* pWin, + ::sd::View* pView, + SdDrawDocument* pDoc, + SfxRequest& rReq) + : FuPoor(pViewSh, pWin, pView, pDoc, rReq) +{ +} + +rtl::Reference<FuPoor> FuInsert3DModel::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq ) +{ + rtl::Reference<FuPoor> xFunc( new FuInsert3DModel( pViewSh, pWin, pView, pDoc, rReq ) ); + xFunc->DoExecute(rReq); + return xFunc; +} + +void FuInsert3DModel::DoExecute( SfxRequest& ) +{ + sfx2::FileDialogHelper aDlg( ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 ); + + aDlg.SetTitle( "Open 3DModel" ); + aDlg.AddFilter( "GL Transmission Format", "*.json" ); + aDlg.AddFilter( "All files", "*.*" ); + + OUString sURL; + if( aDlg.Execute() == ERRCODE_NONE ) + { + const INetURLObject aURL( aDlg.GetPath() ); + sURL = aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ); + } + else if( !sURL.isEmpty() ) + sURL = OUString(); + + if (!sURL.isEmpty()) + { + if( mpWindow ) + mpWindow->EnterWait(); + + Point aPos; + Size aSize(480,360); + sal_Int8 nAction = DND_ACTION_COPY; + + if( mpWindow ) + { + aPos = mpWindow->PixelToLogic( Rectangle( aPos, mpWindow->GetOutputSizePixel() ).Center() ); + aPos.X() -= aSize.Width() >> 1; + aPos.Y() -= aSize.Height() >> 1; + } + + mpView->InsertMediaURL( sURL, nAction, aPos, aSize, false ) ; + + if( mpWindow ) + mpWindow->LeaveWait(); + } +} + } // end of namespace sd /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/source/ui/inc/fuinsert.hxx b/sd/source/ui/inc/fuinsert.hxx index 2f6ca859397e..f002250b58dd 100644 --- a/sd/source/ui/inc/fuinsert.hxx +++ b/sd/source/ui/inc/fuinsert.hxx @@ -105,6 +105,23 @@ private: SfxRequest& rReq); }; +class FuInsert3DModel + : public FuPoor +{ +public: + TYPEINFO_OVERRIDE(); + + static rtl::Reference<FuPoor> Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq ); + virtual void DoExecute( SfxRequest& rReq ); + +private: + FuInsert3DModel ( + ViewShell* pViewSh, + ::sd::Window* pWin, + ::sd::View* pView, + SdDrawDocument* pDoc, + SfxRequest& rReq); +}; } // end of namespace sd diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx index c996d14deff2..856297edbe1c 100644 --- a/sd/source/ui/view/drviews2.cxx +++ b/sd/source/ui/view/drviews2.cxx @@ -1167,6 +1167,17 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq) } break; + case SID_INSERT_3DMODEL: + { + SetCurrentFunction( FuInsert3DModel::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq ) ); + + Cancel(); + rReq.Ignore (); + + Invalidate(SID_DRAWTBX_INSERT); + } + break; + case SID_COPYOBJECTS: { if ( mpDrawView->IsPresObjSelected(sal_False, sal_True) ) diff --git a/sd/uiconfig/simpress/menubar/menubar.xml b/sd/uiconfig/simpress/menubar/menubar.xml index b2d5ae6459d6..ab11e88e79e1 100644 --- a/sd/uiconfig/simpress/menubar/menubar.xml +++ b/sd/uiconfig/simpress/menubar/menubar.xml @@ -217,6 +217,7 @@ <menu:menuitem menu:id=".uno:InsertObject"/> <menu:menuitem menu:id=".uno:InsertPlugin"/> <menu:menuitem menu:id=".uno:InsertMath"/> + <menu:menuitem menu:id=".uno:Insert3DModel"/> </menu:menupopup> </menu:menu> <menu:menuitem menu:id=".uno:InsertObjectChart"/> |