blob: fbcbf9cc09c28c9ca4802d63372e335d2d171300 [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sd.hxx"
#include "DrawViewShell.hxx"
#include <svx/xtable.hxx>
#include "sdattr.hxx"
#include <svl/aeitem.hxx>
#include <editeng/eeitem.hxx>
#include <sfx2/request.hxx>
#include <svx/svditer.hxx>
#include <editeng/colritem.hxx>
#include <sfx2/viewfrm.hxx>
#ifndef _SVXIDS_HRC
#include <svx/svxids.hrc>
#endif
#include <svx/svdundo.hxx>
#include <svx/view3d.hxx>
#include <sfx2/dispatch.hxx>
#include <svx/float3d.hxx>
#include <svx/f3dchild.hxx>
#ifndef _SVX_DIALOGS_HRC //autogen
#include <svx/dialogs.hrc>
#endif
#include <vcl/msgbox.hxx>
#include "app.hrc"
#include "strings.hrc"
#include "drawdoc.hxx"
#include "DrawDocShell.hxx"
#include "anminfo.hxx"
#include "unoaprms.hxx" // Undo-Action
#include "sdundogr.hxx" // Undo Gruppe
#include "drawview.hxx"
#include "Window.hxx"
#include "sdresid.hxx"
using namespace ::com::sun::star;
namespace sd {
#define ATTR_MISSING 0 // Attribut nicht verfuegbar
#define ATTR_MIXED 1 // Attribut uneindeutig (bei Mehrfachselektion)
#define ATTR_SET 2 // Attribut eindeutig
#define ITEMVALUE(ItemSet,Id,Cast) ((const Cast&)(ItemSet).Get(Id)).GetValue()
/*************************************************************************
|*
|* SfxRequests fuer EffekteWindow bearbeiten
|*
\************************************************************************/
void DrawViewShell::ExecEffectWin( SfxRequest& rReq )
{
CheckLineTo (rReq);
sal_uInt16 nSId = rReq.GetSlot();
switch( nSId )
{
case SID_3D_INIT:
{
sal_uInt16 nId = Svx3DChildWindow::GetChildWindowId();
SfxChildWindow* pWindow = GetViewFrame()->GetChildWindow( nId );
if( pWindow )
{
Svx3DWin* p3DWin = (Svx3DWin*)( pWindow->GetWindow() );
if( p3DWin )
p3DWin->InitColorLB( GetDoc() );
}
}
break;
case SID_3D_STATE:
{
Update3DWindow();
}
break;
case SID_3D_ASSIGN:
{
AssignFrom3DWindow();
}
break;
}
}
/*************************************************************************
|*
|* 3D - Assign / Update
|*
\************************************************************************/
void DrawViewShell::Update3DWindow()
{
sal_uInt16 nId = Svx3DChildWindow::GetChildWindowId();
SfxChildWindow* pWindow = GetViewFrame()->GetChildWindow( nId );
if( pWindow )
{
Svx3DWin* p3DWin = (Svx3DWin*) pWindow->GetWindow();
if( p3DWin && p3DWin->IsUpdateMode() )
{
SfxItemSet aTmpItemSet = GetView()->Get3DAttributes();
p3DWin->Update( aTmpItemSet );
}
}
}
/*----------------------------------------------------------------------------*/
void DrawViewShell::AssignFrom3DWindow()
{
sal_uInt16 nId = Svx3DChildWindow::GetChildWindowId();
SfxChildWindow* pWin = GetViewFrame()->GetChildWindow( nId );
if( pWin )
{
Svx3DWin* p3DWin = (Svx3DWin*) pWin->GetWindow();
if( p3DWin && GetView() )
{
if(!GetView()->IsPresObjSelected())
{
SfxItemSet aSet( GetDoc()->GetPool(),
SDRATTR_START, SDRATTR_END,
0, 0);
p3DWin->GetAttr( aSet );
// Eigene UNDO-Klammerung auch um die Wandlung in 3D
GetView()->BegUndo(String(SdResId(STR_UNDO_APPLY_3D_FAVOURITE)));
if(GetView()->IsConvertTo3DObjPossible())
{
// Nur TextAttribute zuweisen
SfxItemSet aTextSet( GetDoc()->GetPool(),
EE_ITEMS_START, EE_ITEMS_END, 0 );
aTextSet.Put( aSet, sal_False );
GetView()->SetAttributes( aTextSet );
// Text in 3D umwandeln
sal_uInt16 nSId = SID_CONVERT_TO_3D;
SfxBoolItem aItem( nSId, sal_True );
GetViewFrame()->GetDispatcher()->Execute(
nSId, SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L );
// Feststellen, ob ein FILL_Attribut gesetzt ist.
// Falls nicht, Fuellattribut hart setzen
XFillStyle eFillStyle = ITEMVALUE( aSet, XATTR_FILLSTYLE, XFillStyleItem );
if(eFillStyle == XFILL_NONE)
aSet.Put(XFillStyleItem (XFILL_SOLID));
// remove some 3DSCENE attributes since these were
// created by convert to 3D and may not be changed
// to the defaults again.
aSet.ClearItem(SDRATTR_3DSCENE_DISTANCE);
aSet.ClearItem(SDRATTR_3DSCENE_FOCAL_LENGTH);
aSet.ClearItem(SDRATTR_3DOBJ_DEPTH);
}
// Attribute zuweisen
GetView()->Set3DAttributes( aSet );
// Ende UNDO
GetView()->EndUndo();
}
else
{
InfoBox aInfoBox (
GetActiveWindow(),
String(SdResId(STR_ACTION_NOTPOSSIBLE)));
aInfoBox.Execute();
}
// Focus zurueckholen
GetActiveWindow()->GrabFocus();
}
}
}
}