/src/libreoffice/sd/source/ui/view/drviewsj.cxx
Line | Count | Source |
1 | | /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ |
2 | | /* |
3 | | * This file is part of the LibreOffice project. |
4 | | * |
5 | | * This Source Code Form is subject to the terms of the Mozilla Public |
6 | | * License, v. 2.0. If a copy of the MPL was not distributed with this |
7 | | * file, You can obtain one at http://mozilla.org/MPL/2.0/. |
8 | | * |
9 | | * This file incorporates work covered by the following license notice: |
10 | | * |
11 | | * Licensed to the Apache Software Foundation (ASF) under one or more |
12 | | * contributor license agreements. See the NOTICE file distributed |
13 | | * with this work for additional information regarding copyright |
14 | | * ownership. The ASF licenses this file to you under the Apache |
15 | | * License, Version 2.0 (the "License"); you may not use this file |
16 | | * except in compliance with the License. You may obtain a copy of |
17 | | * the License at http://www.apache.org/licenses/LICENSE-2.0 . |
18 | | */ |
19 | | |
20 | | #include <DrawViewShell.hxx> |
21 | | #include <com/sun/star/embed/EmbedMisc.hpp> |
22 | | #include <com/sun/star/embed/XEmbeddedObject.hpp> |
23 | | #include <com/sun/star/presentation/ClickAction.hpp> |
24 | | #include <sfx2/objsh.hxx> |
25 | | #include <svx/svxids.hrc> |
26 | | #include <svx/sdmetitm.hxx> |
27 | | #include <editeng/flditem.hxx> |
28 | | #include <svx/svdogrp.hxx> |
29 | | #include <svx/svdograf.hxx> |
30 | | #include <svx/svdoole2.hxx> |
31 | | #include <svx/sdtfsitm.hxx> |
32 | | #include <svx/svdopath.hxx> |
33 | | #include <svx/obj3d.hxx> |
34 | | #include <svx/scene3d.hxx> |
35 | | |
36 | | #include <app.hrc> |
37 | | |
38 | | #include <anminfo.hxx> |
39 | | #include <drawdoc.hxx> |
40 | | #include <drawview.hxx> |
41 | | #include <ViewShellBase.hxx> |
42 | | |
43 | | using namespace com::sun::star; |
44 | | |
45 | | namespace sd { |
46 | | |
47 | | /** |
48 | | * Set state (Enabled/Disabled) of Menu-SfxSlots |
49 | | */ |
50 | | void DrawViewShell::GetMenuStateSel( SfxItemSet &rSet ) |
51 | 0 | { |
52 | | // Status of menu entries (Buttons,...) |
53 | | |
54 | | // Single selection |
55 | 0 | const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); |
56 | 0 | const size_t nMarkCount = rMarkList.GetMarkCount(); |
57 | |
|
58 | 0 | if ( nMarkCount == 1 ) |
59 | 0 | { |
60 | 0 | if( SfxItemState::DEFAULT == rSet.GetItemState( SID_BEZIER_EDIT ) || |
61 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_UNGROUP ) || |
62 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_ENTER_GROUP ) || |
63 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_NAME_GROUP ) || |
64 | | |
65 | | // #i68101# |
66 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_OBJECT_TITLE_DESCRIPTION ) || |
67 | | |
68 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_ATTR_FILL_STYLE ) || |
69 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_ATTR_FILL_USE_SLIDE_BACKGROUND ) || |
70 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_ATTR_FILL_TRANSPARENCE ) || |
71 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_ATTR_FILL_FLOATTRANSPARENCE ) || |
72 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_CHANGEBEZIER ) || |
73 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_CHANGEPOLYGON ) || |
74 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_LINEEND_POLYGON ) || |
75 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_MEASURE_DLG ) || |
76 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_CONNECTION_DLG ) || |
77 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_CONNECTION_NEW_ROUTING ) || |
78 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_OBJECT_SHEAR ) || |
79 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_OBJECT_ALIGN_LEFT ) || |
80 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_OBJECT_ALIGN_CENTER ) || |
81 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_OBJECT_ALIGN_RIGHT ) || |
82 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_OBJECT_ALIGN_UP ) || |
83 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_OBJECT_ALIGN_MIDDLE ) || |
84 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_OBJECT_ALIGN_DOWN ) || |
85 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_FRAME_TO_TOP ) || |
86 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_MOREFRONT ) || |
87 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_FRAME_UP ) || |
88 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_MOREBACK ) || |
89 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_FRAME_DOWN ) || |
90 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_FRAME_TO_BOTTOM ) || |
91 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_BEFORE_OBJ ) || |
92 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_BEHIND_OBJ ) || |
93 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_REVERSE_ORDER ) || |
94 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_ORIGINAL_SIZE ) || |
95 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_SAVE_GRAPHIC ) || |
96 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_COMPRESS_GRAPHIC ) || |
97 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_TEXTATTR_DLG ) || |
98 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_EXECUTE_ANIMATION_EFFECT )) |
99 | 0 | { |
100 | 0 | const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); |
101 | 0 | const SdrGrafObj* pSdrGrafObj = dynamic_cast< const SdrGrafObj* >(pObj); |
102 | 0 | const SdrOle2Obj* pSdrOle2Obj = dynamic_cast< const SdrOle2Obj* >(pObj); |
103 | 0 | const SdAnimationInfo* pAnimationInfo |
104 | 0 | = SdDrawDocument::GetAnimationInfo(rMarkList.GetMark(0)->GetMarkedSdrObj()); |
105 | 0 | SdrInventor nInv = pObj->GetObjInventor(); |
106 | 0 | SdrObjKind nId = pObj->GetObjIdentifier(); |
107 | 0 | SdrObjTransformInfoRec aInfoRec; |
108 | 0 | pObj->TakeObjInfo( aInfoRec ); |
109 | | |
110 | | // don't show original size entry if not possible |
111 | 0 | if(pSdrOle2Obj) |
112 | 0 | { |
113 | 0 | if (pSdrOle2Obj->GetObjRef().is() && |
114 | 0 | (pSdrOle2Obj->GetObjRef()->getStatus( pSdrOle2Obj->GetAspect() ) & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE) ) |
115 | 0 | rSet.DisableItem(SID_ORIGINAL_SIZE); |
116 | 0 | } |
117 | |
|
118 | 0 | if(!pSdrGrafObj) |
119 | 0 | { |
120 | 0 | rSet.DisableItem(SID_SAVE_GRAPHIC); |
121 | 0 | rSet.DisableItem(SID_COMPRESS_GRAPHIC); |
122 | 0 | } |
123 | |
|
124 | 0 | if (!pAnimationInfo |
125 | 0 | || pAnimationInfo->meClickAction == presentation::ClickAction::ClickAction_NONE |
126 | | // Sound does not work in edit mode |
127 | 0 | || pAnimationInfo->meClickAction == presentation::ClickAction::ClickAction_SOUND |
128 | | // No point in exiting the presentation in edit mode |
129 | 0 | || pAnimationInfo->meClickAction |
130 | 0 | == presentation::ClickAction::ClickAction_STOPPRESENTATION) |
131 | 0 | { |
132 | 0 | rSet.DisableItem(SID_EXECUTE_ANIMATION_EFFECT); |
133 | 0 | } |
134 | | |
135 | | /* If it is not a group object or 3D object, we disable "enter |
136 | | group". */ |
137 | 0 | const auto* pSdrObjGroup = dynamic_cast<const SdrObjGroup*>(pObj); |
138 | |
|
139 | 0 | if( !( ( pSdrObjGroup != nullptr && nInv == SdrInventor::Default ) || |
140 | 0 | DynCastE3dScene(pObj) ) ) |
141 | 0 | { |
142 | 0 | rSet.DisableItem( SID_ENTER_GROUP ); |
143 | 0 | } |
144 | | |
145 | | // Don't allow enter Diagrams |
146 | 0 | if(nullptr != pSdrObjGroup && pSdrObjGroup->isDiagram()) |
147 | 0 | { |
148 | 0 | rSet.DisableItem( SID_ENTER_GROUP ); |
149 | 0 | } |
150 | | |
151 | | // If it is not a group object, we disable "ungroup" |
152 | 0 | if(pSdrObjGroup == nullptr || nInv != SdrInventor::Default) |
153 | 0 | { |
154 | 0 | rSet.DisableItem(SID_UNGROUP); |
155 | 0 | } |
156 | | |
157 | | // Support advanced DiagramHelper |
158 | 0 | if(!pSdrObjGroup || !pSdrObjGroup->isDiagram()) |
159 | 0 | { |
160 | 0 | rSet.DisableItem( SID_REGENERATE_DIAGRAM ); |
161 | 0 | rSet.DisableItem( SID_DIAGRAM_TO_GROUP ); |
162 | 0 | rSet.DisableItem( SID_EDIT_DIAGRAM ); |
163 | 0 | } |
164 | |
|
165 | 0 | if( nInv == SdrInventor::Default && |
166 | 0 | (nId == SdrObjKind::Line || |
167 | 0 | nId == SdrObjKind::PolyLine || |
168 | 0 | nId == SdrObjKind::PathLine || |
169 | 0 | nId == SdrObjKind::FreehandLine )) |
170 | 0 | { |
171 | | //rSet.DisableItem( SID_ATTRIBUTES_AREA ); // remove again! |
172 | 0 | rSet.DisableItem( SID_ATTR_FILL_STYLE ); |
173 | 0 | rSet.DisableItem( SID_ATTR_FILL_USE_SLIDE_BACKGROUND ); |
174 | 0 | rSet.DisableItem( SID_ATTR_FILL_TRANSPARENCE ); |
175 | 0 | rSet.DisableItem( SID_ATTR_FILL_FLOATTRANSPARENCE ); |
176 | 0 | } |
177 | 0 | if( (dynamic_cast< const SdrPathObj *>( pObj ) == nullptr&& !aInfoRec.bCanConvToPath) || dynamic_cast< const SdrObjGroup *>( pObj ) != nullptr ) // As long as JOE handles it incorrectly! |
178 | 0 | { // JOE: a group object may can be converted into a PathObj |
179 | 0 | rSet.DisableItem( SID_LINEEND_POLYGON ); |
180 | 0 | } |
181 | 0 | if(nInv == SdrInventor::Default && |
182 | 0 | (nId == SdrObjKind::PathFill || nId == SdrObjKind::PathLine || !aInfoRec.bCanConvToPath)) |
183 | 0 | rSet.DisableItem( SID_CHANGEBEZIER ); |
184 | |
|
185 | 0 | if( nInv == SdrInventor::Default && |
186 | 0 | ( nId == SdrObjKind::Polygon || nId == SdrObjKind::PolyLine || !aInfoRec.bCanConvToPoly ) && |
187 | 0 | !GetView()->IsVectorizeAllowed() ) |
188 | 0 | { |
189 | 0 | rSet.DisableItem( SID_CHANGEPOLYGON ); |
190 | 0 | } |
191 | |
|
192 | 0 | if(nInv == SdrInventor::Default && nId == SdrObjKind::Table ) |
193 | 0 | { |
194 | 0 | rSet.DisableItem( SID_TEXTATTR_DLG ); |
195 | 0 | } |
196 | |
|
197 | 0 | if( nInv != SdrInventor::Default || nId != SdrObjKind::Measure ) |
198 | 0 | rSet.DisableItem( SID_MEASURE_DLG ); |
199 | |
|
200 | 0 | if( nInv != SdrInventor::Default || nId != SdrObjKind::Edge ) |
201 | 0 | rSet.DisableItem( SID_CONNECTION_DLG ); |
202 | 0 | else |
203 | 0 | { |
204 | 0 | bool bDisable = true; |
205 | 0 | SfxItemSet aAttrSet( GetDoc()->GetPool() ); |
206 | 0 | GetView()->GetAttributes( aAttrSet ); |
207 | |
|
208 | 0 | if( aAttrSet.GetItemState( SDRATTR_EDGELINE1DELTA ) >= SfxItemState::DEFAULT && |
209 | 0 | aAttrSet.GetItemState( SDRATTR_EDGELINE2DELTA ) >= SfxItemState::DEFAULT && |
210 | 0 | aAttrSet.GetItemState( SDRATTR_EDGELINE3DELTA ) >= SfxItemState::DEFAULT ) |
211 | 0 | { |
212 | 0 | ::tools::Long nVal1 = aAttrSet.Get( SDRATTR_EDGELINE1DELTA ).GetValue(); |
213 | 0 | ::tools::Long nVal2 = aAttrSet.Get( SDRATTR_EDGELINE2DELTA ).GetValue(); |
214 | 0 | ::tools::Long nVal3 = aAttrSet.Get( SDRATTR_EDGELINE3DELTA ).GetValue(); |
215 | 0 | if( nVal1 != 0 || nVal2 != 0 || nVal3 != 0 ) |
216 | 0 | bDisable = false; |
217 | 0 | } |
218 | 0 | if( bDisable ) |
219 | 0 | rSet.DisableItem( SID_CONNECTION_NEW_ROUTING ); |
220 | 0 | } |
221 | |
|
222 | 0 | if ( nInv == SdrInventor::E3d || |
223 | 0 | (!mpDrawView->IsConvertToPathObjPossible() && |
224 | 0 | !mpDrawView->IsShearAllowed() && |
225 | 0 | !mpDrawView->IsDistortAllowed()) ) |
226 | 0 | { |
227 | 0 | rSet.DisableItem( SID_OBJECT_SHEAR ); |
228 | 0 | } |
229 | |
|
230 | 0 | if(dynamic_cast< const E3dCompoundObject *>( pObj ) != nullptr) |
231 | 0 | { |
232 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN ); |
233 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_LEFT ); |
234 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_CENTER ); |
235 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_RIGHT ); |
236 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_UP ); |
237 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_MIDDLE ); |
238 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_DOWN ); |
239 | 0 | rSet.DisableItem( SID_FRAME_TO_TOP ); |
240 | 0 | rSet.DisableItem( SID_MOREFRONT ); |
241 | 0 | rSet.DisableItem( SID_FRAME_UP ); |
242 | 0 | rSet.DisableItem( SID_MOREBACK ); |
243 | 0 | rSet.DisableItem( SID_FRAME_DOWN ); |
244 | 0 | rSet.DisableItem( SID_FRAME_TO_BOTTOM ); |
245 | 0 | rSet.DisableItem( SID_BEFORE_OBJ ); |
246 | 0 | rSet.DisableItem( SID_BEHIND_OBJ ); |
247 | 0 | rSet.DisableItem( SID_REVERSE_ORDER ); |
248 | 0 | rSet.DisableItem( SID_POSITION ); |
249 | 0 | } |
250 | 0 | } |
251 | |
|
252 | 0 | if( SfxItemState::DEFAULT == rSet.GetItemState( SID_DISMANTLE ) || |
253 | 0 | SfxItemState::DEFAULT == rSet.GetItemState( SID_BREAK ) ) |
254 | 0 | { |
255 | 0 | if ( !mpDrawView->IsDismantlePossible() ) |
256 | 0 | { |
257 | 0 | rSet.DisableItem( SID_DISMANTLE ); |
258 | 0 | } |
259 | |
|
260 | 0 | if ( !mpDrawView->IsDismantlePossible(true) && |
261 | 0 | !mpDrawView->IsImportMtfPossible() && |
262 | 0 | !mpDrawView->IsBreak3DObjPossible() ) |
263 | 0 | { |
264 | 0 | rSet.DisableItem( SID_BREAK ); |
265 | 0 | } |
266 | 0 | } |
267 | 0 | if( SfxItemState::DEFAULT == rSet.GetItemState( SID_MODIFY_FIELD ) ) |
268 | 0 | { |
269 | 0 | OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView(); |
270 | |
|
271 | 0 | if( pOLV ) |
272 | 0 | { |
273 | 0 | const SvxFieldItem* pFldItem = pOLV->GetFieldAtSelection(); |
274 | |
|
275 | 0 | if( !( pFldItem && (nullptr != dynamic_cast< const SvxDateField *>( pFldItem->GetField() ) || |
276 | 0 | nullptr != dynamic_cast< const SvxAuthorField *>( pFldItem->GetField() ) || |
277 | 0 | nullptr != dynamic_cast< const SvxExtFileField *>( pFldItem->GetField() ) || |
278 | 0 | nullptr != dynamic_cast< const SvxExtTimeField *>( pFldItem->GetField() ) ) ) ) |
279 | 0 | { |
280 | 0 | rSet.DisableItem( SID_MODIFY_FIELD ); |
281 | 0 | } |
282 | 0 | } |
283 | 0 | else |
284 | 0 | rSet.DisableItem( SID_MODIFY_FIELD ); |
285 | 0 | } |
286 | 0 | if( SfxItemState::DEFAULT == rSet.GetItemState( SID_OUTLINE_TEXT_AUTOFIT ) ) |
287 | 0 | { |
288 | 0 | const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); |
289 | 0 | const SdrTextFitToSizeTypeItem* pItem = pObj->GetMergedItemSet().GetItem<SdrTextFitToSizeTypeItem>(SDRATTR_TEXT_FITTOSIZE); |
290 | 0 | const bool bSet = pItem && pItem->GetValue() != drawing::TextFitToSizeType_NONE; |
291 | 0 | rSet.Put(SfxBoolItem(SID_OUTLINE_TEXT_AUTOFIT, bSet)); |
292 | 0 | } |
293 | |
|
294 | 0 | rSet.DisableItem(SID_GROUP); |
295 | 0 | rSet.DisableItem(SID_TEXT_COMBINE); |
296 | 0 | rSet.DisableItem(SID_COMBINE); |
297 | 0 | rSet.DisableItem(SID_DISTRIBUTE_HLEFT); |
298 | 0 | rSet.DisableItem(SID_DISTRIBUTE_HCENTER); |
299 | 0 | rSet.DisableItem(SID_DISTRIBUTE_HDISTANCE); |
300 | 0 | rSet.DisableItem(SID_DISTRIBUTE_HRIGHT); |
301 | 0 | rSet.DisableItem(SID_DISTRIBUTE_VTOP); |
302 | 0 | rSet.DisableItem(SID_DISTRIBUTE_VCENTER); |
303 | 0 | rSet.DisableItem(SID_DISTRIBUTE_VDISTANCE); |
304 | 0 | rSet.DisableItem(SID_DISTRIBUTE_VBOTTOM); |
305 | 0 | rSet.DisableItem(SID_POLY_MERGE); |
306 | 0 | rSet.DisableItem(SID_POLY_SUBSTRACT); |
307 | 0 | rSet.DisableItem(SID_POLY_INTERSECT); |
308 | 0 | rSet.DisableItem(SID_EQUALIZEWIDTH); |
309 | 0 | rSet.DisableItem(SID_EQUALIZEHEIGHT); |
310 | 0 | rSet.DisableItem(SID_CONNECT); |
311 | 0 | } |
312 | | // multi-selection |
313 | 0 | else if( nMarkCount > 1 ) |
314 | 0 | { |
315 | | // distribute dialog for 3+n objects |
316 | 0 | if(nMarkCount <= 2) |
317 | 0 | { |
318 | 0 | rSet.DisableItem(SID_DISTRIBUTE_HLEFT); |
319 | 0 | rSet.DisableItem(SID_DISTRIBUTE_HCENTER); |
320 | 0 | rSet.DisableItem(SID_DISTRIBUTE_HDISTANCE); |
321 | 0 | rSet.DisableItem(SID_DISTRIBUTE_HRIGHT); |
322 | 0 | rSet.DisableItem(SID_DISTRIBUTE_VTOP); |
323 | 0 | rSet.DisableItem(SID_DISTRIBUTE_VCENTER); |
324 | 0 | rSet.DisableItem(SID_DISTRIBUTE_VDISTANCE); |
325 | 0 | rSet.DisableItem(SID_DISTRIBUTE_VBOTTOM); |
326 | 0 | } |
327 | |
|
328 | 0 | rSet.DisableItem( SID_LINEEND_POLYGON ); |
329 | 0 | rSet.DisableItem( SID_ENTER_GROUP ); |
330 | | // Now names for objects have to be unique |
331 | 0 | rSet.DisableItem( SID_NAME_GROUP ); |
332 | | // #i68101# |
333 | 0 | rSet.DisableItem( SID_OBJECT_TITLE_DESCRIPTION ); |
334 | 0 | rSet.DisableItem( SID_MODIFY_FIELD ); |
335 | |
|
336 | 0 | { |
337 | 0 | bool bText = false; |
338 | 0 | bool bLine = false; |
339 | 0 | bool bGroup = false; |
340 | 0 | bool bDrawObj = false; |
341 | 0 | bool b3dObj = false; |
342 | 0 | bool bTable = false; |
343 | 0 | bool bMeasureObj = false; |
344 | 0 | bool bEdgeObj = false; // Connector |
345 | 0 | bool bE3dCompoundObject = false; |
346 | |
|
347 | 0 | for( size_t i = 0; i < nMarkCount && !bText && i < 50; ++i ) |
348 | 0 | { |
349 | 0 | SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj(); |
350 | 0 | SdrInventor nInv = pObj->GetObjInventor(); |
351 | 0 | SdrObjKind nId = pObj->GetObjIdentifier(); |
352 | |
|
353 | 0 | if (nInv == SdrInventor::Default) |
354 | 0 | { |
355 | 0 | switch (nId) |
356 | 0 | { |
357 | 0 | case SdrObjKind::Text: bText = true; break; |
358 | | |
359 | 0 | case SdrObjKind::Line: bLine = true; break; |
360 | | |
361 | 0 | case SdrObjKind::Edge: bEdgeObj = true; break; |
362 | | |
363 | 0 | case SdrObjKind::Measure: bMeasureObj = true; break; |
364 | | |
365 | 0 | case SdrObjKind::Rectangle: |
366 | 0 | case SdrObjKind::CircleOrEllipse: |
367 | 0 | case SdrObjKind::FreehandLine: |
368 | 0 | case SdrObjKind::FreehandFill: |
369 | 0 | case SdrObjKind::PathFill: |
370 | 0 | case SdrObjKind::PathLine: |
371 | 0 | case SdrObjKind::CircleSection: |
372 | 0 | case SdrObjKind::CircleArc: |
373 | 0 | case SdrObjKind::CircleCut: bDrawObj = true; break; |
374 | | |
375 | 0 | case SdrObjKind::Group: bGroup = true; break; |
376 | | |
377 | 0 | case SdrObjKind::Graphic: break; |
378 | | |
379 | 0 | case SdrObjKind::Table: bTable = true; break; |
380 | 0 | default: ; |
381 | 0 | } |
382 | 0 | } |
383 | 0 | else if (nInv == SdrInventor::E3d) |
384 | 0 | { |
385 | 0 | if(DynCastE3dScene(pObj)) |
386 | 0 | b3dObj = true; |
387 | 0 | else if(dynamic_cast< const E3dCompoundObject* >(pObj) != nullptr) |
388 | 0 | bE3dCompoundObject = true; |
389 | 0 | } |
390 | 0 | } |
391 | 0 | if( bLine && !bText && !bDrawObj &&!b3dObj) |
392 | 0 | { |
393 | 0 | rSet.DisableItem( SID_ATTR_FILL_STYLE ); |
394 | 0 | rSet.DisableItem( SID_ATTR_FILL_USE_SLIDE_BACKGROUND ); |
395 | 0 | rSet.DisableItem( SID_ATTR_FILL_TRANSPARENCE ); |
396 | 0 | rSet.DisableItem( SID_ATTR_FILL_FLOATTRANSPARENCE ); |
397 | 0 | } |
398 | 0 | if( !bEdgeObj ) |
399 | 0 | rSet.DisableItem( SID_CONNECTION_DLG ); |
400 | |
|
401 | 0 | if (b3dObj) |
402 | 0 | { |
403 | 0 | rSet.DisableItem( SID_COMBINE ); |
404 | 0 | rSet.DisableItem(SID_POLY_MERGE); |
405 | 0 | rSet.DisableItem(SID_POLY_SUBSTRACT); |
406 | 0 | rSet.DisableItem(SID_POLY_INTERSECT); |
407 | 0 | rSet.DisableItem(SID_EQUALIZEWIDTH); |
408 | 0 | rSet.DisableItem(SID_EQUALIZEHEIGHT); |
409 | 0 | } |
410 | |
|
411 | 0 | if (b3dObj || |
412 | 0 | (!mpDrawView->IsConvertToPathObjPossible() && |
413 | 0 | !mpDrawView->IsShearAllowed() && |
414 | 0 | !mpDrawView->IsDistortAllowed()) ) |
415 | 0 | { |
416 | 0 | rSet.DisableItem( SID_OBJECT_SHEAR ); |
417 | 0 | } |
418 | |
|
419 | 0 | if( !bGroup ) |
420 | 0 | { |
421 | 0 | rSet.DisableItem( SID_UNGROUP ); |
422 | 0 | } |
423 | 0 | if( bTable ) |
424 | 0 | rSet.DisableItem( SID_TEXTATTR_DLG ); |
425 | |
|
426 | 0 | if( !bMeasureObj ) |
427 | 0 | rSet.DisableItem( SID_MEASURE_DLG ); |
428 | |
|
429 | 0 | if(bE3dCompoundObject) |
430 | 0 | { |
431 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN ); |
432 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_LEFT ); |
433 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_CENTER ); |
434 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_RIGHT ); |
435 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_UP ); |
436 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_MIDDLE ); |
437 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_DOWN ); |
438 | 0 | rSet.DisableItem( SID_FRAME_TO_TOP ); |
439 | 0 | rSet.DisableItem( SID_MOREFRONT ); |
440 | 0 | rSet.DisableItem( SID_FRAME_UP ); |
441 | 0 | rSet.DisableItem( SID_MOREBACK ); |
442 | 0 | rSet.DisableItem( SID_FRAME_DOWN ); |
443 | 0 | rSet.DisableItem( SID_FRAME_TO_BOTTOM ); |
444 | 0 | rSet.DisableItem( SID_BEFORE_OBJ ); |
445 | 0 | rSet.DisableItem( SID_BEHIND_OBJ ); |
446 | 0 | rSet.DisableItem( SID_REVERSE_ORDER ); |
447 | 0 | rSet.DisableItem( SID_POSITION ); |
448 | 0 | } |
449 | 0 | } |
450 | | |
451 | 0 | if ( !mpDrawView->IsDismantlePossible() ) |
452 | 0 | { |
453 | 0 | rSet.DisableItem( SID_DISMANTLE ); |
454 | 0 | } |
455 | 0 | if ( !mpDrawView->IsDismantlePossible(true) && |
456 | 0 | !mpDrawView->IsImportMtfPossible() && |
457 | 0 | !mpDrawView->IsBreak3DObjPossible() ) |
458 | 0 | { |
459 | 0 | rSet.DisableItem( SID_BREAK ); |
460 | 0 | } |
461 | 0 | if ( !mpDrawView->IsCombinePossible() ) |
462 | 0 | { |
463 | 0 | rSet.DisableItem(SID_COMBINE); |
464 | 0 | rSet.DisableItem(SID_POLY_MERGE); |
465 | 0 | rSet.DisableItem(SID_POLY_SUBSTRACT); |
466 | 0 | rSet.DisableItem(SID_POLY_INTERSECT); |
467 | 0 | rSet.DisableItem(SID_EQUALIZEWIDTH); |
468 | 0 | rSet.DisableItem(SID_EQUALIZEHEIGHT); |
469 | 0 | } |
470 | 0 | if ( !mpDrawView->IsCombinePossible(true) ) |
471 | 0 | { |
472 | 0 | rSet.DisableItem( SID_CONNECT ); |
473 | 0 | } |
474 | 0 | if ( !mpDrawView->IsGroupPossible() ) |
475 | 0 | { |
476 | 0 | rSet.DisableItem( SID_GROUP ); |
477 | 0 | } |
478 | 0 | if ( !mpDrawView->IsUnGroupPossible() ) |
479 | 0 | { |
480 | 0 | rSet.DisableItem( SID_UNGROUP ); |
481 | 0 | } |
482 | 0 | } |
483 | | // select no object |
484 | 0 | else |
485 | 0 | { |
486 | 0 | rSet.DisableItem(SID_SETLAYER); |
487 | 0 | rSet.DisableItem( SID_ENTER_GROUP ); |
488 | 0 | rSet.DisableItem( SID_CUT ); |
489 | 0 | rSet.DisableItem( SID_COPY ); |
490 | 0 | rSet.DisableItem( SID_DELETE ); |
491 | 0 | rSet.DisableItem( SID_ATTR_TRANSFORM ); |
492 | |
|
493 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN ); |
494 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_LEFT ); |
495 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_CENTER ); |
496 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_RIGHT ); |
497 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_UP ); |
498 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_MIDDLE ); |
499 | 0 | rSet.DisableItem( SID_OBJECT_ALIGN_DOWN ); |
500 | |
|
501 | 0 | rSet.DisableItem( SID_FRAME_TO_TOP ); |
502 | 0 | rSet.DisableItem( SID_MOREFRONT ); |
503 | 0 | rSet.DisableItem( SID_FRAME_UP ); |
504 | 0 | rSet.DisableItem( SID_MOREBACK ); |
505 | 0 | rSet.DisableItem( SID_FRAME_DOWN ); |
506 | 0 | rSet.DisableItem( SID_FRAME_TO_BOTTOM ); |
507 | 0 | rSet.DisableItem( SID_BEFORE_OBJ ); |
508 | 0 | rSet.DisableItem( SID_BEHIND_OBJ ); |
509 | 0 | rSet.DisableItem( SID_POSITION ); |
510 | |
|
511 | 0 | rSet.DisableItem( SID_SIZE_OPTIMAL ); |
512 | 0 | rSet.DisableItem( SID_LINEEND_POLYGON ); |
513 | 0 | rSet.DisableItem( SID_COPYOBJECTS ); |
514 | 0 | rSet.DisableItem( SID_HORIZONTAL ); |
515 | 0 | rSet.DisableItem( SID_VERTICAL ); |
516 | 0 | rSet.DisableItem( SID_FLIP_HORIZONTAL ); |
517 | 0 | rSet.DisableItem( SID_FLIP_VERTICAL ); |
518 | 0 | rSet.DisableItem( SID_GROUP ); |
519 | 0 | rSet.DisableItem( SID_UNGROUP ); |
520 | 0 | rSet.DisableItem( SID_NAME_GROUP ); |
521 | | |
522 | | // #i68101# |
523 | 0 | rSet.DisableItem( SID_OBJECT_TITLE_DESCRIPTION ); |
524 | |
|
525 | 0 | rSet.DisableItem( SID_DISMANTLE ); |
526 | 0 | rSet.DisableItem( SID_BREAK ); |
527 | 0 | rSet.DisableItem( SID_TEXT_COMBINE ); |
528 | 0 | rSet.DisableItem( SID_COMBINE ); |
529 | 0 | rSet.DisableItem(SID_DISTRIBUTE_DLG); |
530 | 0 | rSet.DisableItem(SID_DISTRIBUTE_HLEFT); |
531 | 0 | rSet.DisableItem(SID_DISTRIBUTE_HCENTER); |
532 | 0 | rSet.DisableItem(SID_DISTRIBUTE_HDISTANCE); |
533 | 0 | rSet.DisableItem(SID_DISTRIBUTE_HRIGHT); |
534 | 0 | rSet.DisableItem(SID_DISTRIBUTE_VTOP); |
535 | 0 | rSet.DisableItem(SID_DISTRIBUTE_VCENTER); |
536 | 0 | rSet.DisableItem(SID_DISTRIBUTE_VDISTANCE); |
537 | 0 | rSet.DisableItem(SID_DISTRIBUTE_VBOTTOM); |
538 | 0 | rSet.DisableItem(SID_POLY_MERGE); |
539 | 0 | rSet.DisableItem(SID_POLY_SUBSTRACT); |
540 | 0 | rSet.DisableItem(SID_POLY_INTERSECT); |
541 | 0 | rSet.DisableItem(SID_EQUALIZEWIDTH); |
542 | 0 | rSet.DisableItem(SID_EQUALIZEHEIGHT); |
543 | 0 | rSet.DisableItem( SID_CONNECT ); |
544 | 0 | rSet.DisableItem( SID_ANIMATION_EFFECTS ); |
545 | 0 | rSet.DisableItem( SID_EXECUTE_ANIMATION_EFFECT ); |
546 | 0 | rSet.DisableItem( SID_MODIFY_FIELD ); |
547 | 0 | rSet.DisableItem (SID_OBJECT_SHEAR); |
548 | 0 | } |
549 | | |
550 | 0 | if (GetObjectShell()->isContentExtractionLocked()) |
551 | 0 | { |
552 | 0 | rSet.DisableItem(SID_COPY); |
553 | 0 | rSet.DisableItem(SID_CUT); |
554 | 0 | } |
555 | 0 | if(GetObjectShell()->isExportLocked()) |
556 | 0 | { |
557 | 0 | rSet.DisableItem(SID_SAVE_GRAPHIC); |
558 | 0 | rSet.DisableItem(SID_EXTERNAL_EDIT); |
559 | 0 | } |
560 | 0 | if (GetDoc()->getImagePreferredDPI() <= 0) |
561 | 0 | { |
562 | 0 | rSet.DisableItem(SID_GRAPHIC_SIZE_CHECK); |
563 | 0 | } |
564 | 0 | } |
565 | | |
566 | | const SdViewOptions& DrawViewShell::GetViewOptions() const |
567 | 0 | { |
568 | 0 | return GetViewShellBase().GetViewOptions(); |
569 | 0 | } |
570 | | |
571 | | void DrawViewShell::SetViewOptions(const SdViewOptions& rOptions) |
572 | 0 | { |
573 | 0 | GetViewShellBase().SetViewOptions(rOptions); |
574 | 0 | } |
575 | | |
576 | | } // end of namespace sd |
577 | | |
578 | | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |