/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "DrawViewShell.hxx" #include #include "sdattr.hxx" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #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); USHORT nSId = rReq.GetSlot(); switch( nSId ) { case SID_3D_INIT: { USHORT 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() { USHORT 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() { USHORT 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, FALSE ); GetView()->SetAttributes( aTextSet ); // Text in 3D umwandeln USHORT nSId = SID_CONVERT_TO_3D; SfxBoolItem aItem( nSId, 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(); } } } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */