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_sd.hxx" 26 27 #include "DrawViewShell.hxx" 28 #include <svx/xtable.hxx> 29 #include "sdattr.hxx" 30 #include <svl/aeitem.hxx> 31 #include <editeng/eeitem.hxx> 32 #include <sfx2/request.hxx> 33 #include <svx/svditer.hxx> 34 #include <editeng/colritem.hxx> 35 #include <sfx2/viewfrm.hxx> 36 #ifndef _SVXIDS_HRC 37 #include <svx/svxids.hrc> 38 #endif 39 #include <svx/svdundo.hxx> 40 #include <svx/view3d.hxx> 41 #include <sfx2/dispatch.hxx> 42 #include <svx/float3d.hxx> 43 #include <svx/f3dchild.hxx> 44 #ifndef _SVX_DIALOGS_HRC //autogen 45 #include <svx/dialogs.hrc> 46 #endif 47 #include <vcl/msgbox.hxx> 48 49 50 #include "app.hrc" 51 #include "strings.hrc" 52 53 #include "drawdoc.hxx" 54 #include "DrawDocShell.hxx" 55 #include "anminfo.hxx" 56 #include "unoaprms.hxx" // Undo-Action 57 #include "sdundogr.hxx" // Undo Gruppe 58 #include "drawview.hxx" 59 #include "Window.hxx" 60 #include "sdresid.hxx" 61 62 using namespace ::com::sun::star; 63 64 namespace sd { 65 66 #define ATTR_MISSING 0 // Attribut nicht verfuegbar 67 #define ATTR_MIXED 1 // Attribut uneindeutig (bei Mehrfachselektion) 68 #define ATTR_SET 2 // Attribut eindeutig 69 70 #define ITEMVALUE(ItemSet,Id,Cast) ((const Cast&)(ItemSet).Get(Id)).GetValue() 71 72 /************************************************************************* 73 |* 74 |* SfxRequests fuer EffekteWindow bearbeiten 75 |* 76 \************************************************************************/ 77 78 void DrawViewShell::ExecEffectWin( SfxRequest& rReq ) 79 { 80 CheckLineTo (rReq); 81 82 sal_uInt16 nSId = rReq.GetSlot(); 83 84 switch( nSId ) 85 { 86 case SID_3D_INIT: 87 { 88 sal_uInt16 nId = Svx3DChildWindow::GetChildWindowId(); 89 SfxChildWindow* pWindow = GetViewFrame()->GetChildWindow( nId ); 90 if( pWindow ) 91 { 92 Svx3DWin* p3DWin = (Svx3DWin*)( pWindow->GetWindow() ); 93 if( p3DWin ) 94 p3DWin->InitColorLB( GetDoc() ); 95 } 96 } 97 break; 98 99 case SID_3D_STATE: 100 { 101 Update3DWindow(); 102 } 103 break; 104 105 case SID_3D_ASSIGN: 106 { 107 AssignFrom3DWindow(); 108 } 109 break; 110 111 } 112 } 113 114 /************************************************************************* 115 |* 116 |* 3D - Assign / Update 117 |* 118 \************************************************************************/ 119 void DrawViewShell::Update3DWindow() 120 { 121 sal_uInt16 nId = Svx3DChildWindow::GetChildWindowId(); 122 SfxChildWindow* pWindow = GetViewFrame()->GetChildWindow( nId ); 123 if( pWindow ) 124 { 125 Svx3DWin* p3DWin = (Svx3DWin*) pWindow->GetWindow(); 126 if( p3DWin && p3DWin->IsUpdateMode() ) 127 { 128 SfxItemSet aTmpItemSet = GetView()->Get3DAttributes(); 129 p3DWin->Update( aTmpItemSet ); 130 } 131 } 132 } 133 134 /*----------------------------------------------------------------------------*/ 135 136 void DrawViewShell::AssignFrom3DWindow() 137 { 138 sal_uInt16 nId = Svx3DChildWindow::GetChildWindowId(); 139 SfxChildWindow* pWin = GetViewFrame()->GetChildWindow( nId ); 140 if( pWin ) 141 { 142 Svx3DWin* p3DWin = (Svx3DWin*) pWin->GetWindow(); 143 if( p3DWin && GetView() ) 144 { 145 if(!GetView()->IsPresObjSelected()) 146 { 147 SfxItemSet aSet( GetDoc()->GetPool(), 148 SDRATTR_START, SDRATTR_END, 149 0, 0); 150 p3DWin->GetAttr( aSet ); 151 152 // Eigene UNDO-Klammerung auch um die Wandlung in 3D 153 GetView()->BegUndo(String(SdResId(STR_UNDO_APPLY_3D_FAVOURITE))); 154 155 if(GetView()->IsConvertTo3DObjPossible()) 156 { 157 // Nur TextAttribute zuweisen 158 SfxItemSet aTextSet( GetDoc()->GetPool(), 159 EE_ITEMS_START, EE_ITEMS_END, 0 ); 160 aTextSet.Put( aSet, sal_False ); 161 GetView()->SetAttributes( aTextSet ); 162 163 // Text in 3D umwandeln 164 sal_uInt16 nSId = SID_CONVERT_TO_3D; 165 SfxBoolItem aItem( nSId, sal_True ); 166 GetViewFrame()->GetDispatcher()->Execute( 167 nSId, SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L ); 168 169 // Feststellen, ob ein FILL_Attribut gesetzt ist. 170 // Falls nicht, Fuellattribut hart setzen 171 XFillStyle eFillStyle = ITEMVALUE( aSet, XATTR_FILLSTYLE, XFillStyleItem ); 172 if(eFillStyle == XFILL_NONE) 173 aSet.Put(XFillStyleItem (XFILL_SOLID)); 174 175 // remove some 3DSCENE attributes since these were 176 // created by convert to 3D and may not be changed 177 // to the defaults again. 178 aSet.ClearItem(SDRATTR_3DSCENE_DISTANCE); 179 aSet.ClearItem(SDRATTR_3DSCENE_FOCAL_LENGTH); 180 aSet.ClearItem(SDRATTR_3DOBJ_DEPTH); 181 } 182 183 // Attribute zuweisen 184 GetView()->Set3DAttributes( aSet ); 185 186 // Ende UNDO 187 GetView()->EndUndo(); 188 } 189 else 190 { 191 InfoBox aInfoBox ( 192 GetActiveWindow(), 193 String(SdResId(STR_ACTION_NOTPOSSIBLE))); 194 aInfoBox.Execute(); 195 } 196 197 // Focus zurueckholen 198 GetActiveWindow()->GrabFocus(); 199 } 200 } 201 } 202 203 } 204