summaryrefslogtreecommitdiffstats
path: root/sd
diff options
context:
space:
mode:
authorZolnai Tamás <tamas.zolnai@collabora.com>2014-03-27 11:22:02 +0100
committerZolnai Tamás <tamas.zolnai@collabora.com>2014-03-27 11:22:33 +0100
commitcab8cfbe60e2829d62308444a610d340d2370781 (patch)
treef6c0b7e93f7a0cec5654b0d012003785ffbe3d38 /sd
parentSkeleton of OpenGL avmedia service for playing 3D models (diff)
downloadcore-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.sdi5
-rw-r--r--sd/source/ui/func/fuinsert.cxx59
-rw-r--r--sd/source/ui/inc/fuinsert.hxx17
-rw-r--r--sd/source/ui/view/drviews2.cxx11
-rw-r--r--sd/uiconfig/simpress/menubar/menubar.xml1
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"/>