Coverage Report

Created: 2026-07-10 11:04

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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: */