File: | home/maarten/src/libreoffice/core/sd/source/ui/func/fulinend.cxx |
Warning: | line 70, column 9 Called C++ object pointer is null |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
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 <fulinend.hxx> | |||
21 | #include <svx/xtable.hxx> | |||
22 | #include <svx/svxdlg.hxx> | |||
23 | #include <svx/svdobj.hxx> | |||
24 | #include <svx/svdopath.hxx> | |||
25 | #include <vcl/svapp.hxx> | |||
26 | #include <vcl/weld.hxx> | |||
27 | ||||
28 | #include <strings.hrc> | |||
29 | #include <helpids.h> | |||
30 | #include <sdresid.hxx> | |||
31 | #include <drawdoc.hxx> | |||
32 | #include <View.hxx> | |||
33 | #include <Window.hxx> | |||
34 | #include <memory> | |||
35 | ||||
36 | namespace sd { | |||
37 | ||||
38 | ||||
39 | FuLineEnd::FuLineEnd(ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, | |||
40 | SdDrawDocument* pDoc, SfxRequest& rReq) | |||
41 | : FuPoor(pViewSh, pWin, pView, pDoc, rReq) | |||
42 | { | |||
43 | } | |||
44 | ||||
45 | rtl::Reference<FuPoor> FuLineEnd::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq ) | |||
46 | { | |||
47 | rtl::Reference<FuPoor> xFunc( new FuLineEnd( pViewSh, pWin, pView, pDoc, rReq ) ); | |||
48 | xFunc->DoExecute(rReq); | |||
49 | return xFunc; | |||
50 | } | |||
51 | ||||
52 | void FuLineEnd::DoExecute( SfxRequest& ) | |||
53 | { | |||
54 | const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); | |||
55 | ||||
56 | if( rMarkList.GetMarkCount() != 1 ) | |||
| ||||
57 | return; | |||
58 | ||||
59 | const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); | |||
60 | const SdrObject* pNewObj; | |||
61 | SdrObjectUniquePtr pConvPolyObj; | |||
62 | ||||
63 | if( dynamic_cast< const SdrPathObj *>( pObj ) != nullptr ) | |||
64 | { | |||
65 | pNewObj = pObj; | |||
66 | } | |||
67 | else | |||
68 | { | |||
69 | SdrObjTransformInfoRec aInfoRec; | |||
70 | pObj->TakeObjInfo( aInfoRec ); | |||
| ||||
71 | ||||
72 | if( aInfoRec.bCanConvToPath && | |||
73 | pObj->GetObjInventor() == SdrInventor::Default && | |||
74 | pObj->GetObjIdentifier() != OBJ_GRUP ) | |||
75 | // bCanConvToPath is sal_True for group objects, | |||
76 | // but it crashes on ConvertToPathObj()! | |||
77 | { | |||
78 | pConvPolyObj = pObj->ConvertToPolyObj( true, false ); | |||
79 | pNewObj = pConvPolyObj.get(); | |||
80 | ||||
81 | if( !pNewObj || dynamic_cast< const SdrPathObj *>( pNewObj ) == nullptr ) | |||
82 | return; // Cancel, additional security, but it does not help | |||
83 | // for group objects | |||
84 | } | |||
85 | else return; // Cancel | |||
86 | } | |||
87 | ||||
88 | const ::basegfx::B2DPolyPolygon aPolyPolygon = static_cast<const SdrPathObj*>(pNewObj)->GetPathPoly(); | |||
89 | ||||
90 | // Delete the created poly-object | |||
91 | pConvPolyObj.reset(); | |||
92 | ||||
93 | XLineEndListRef pLineEndList = mpDoc->GetLineEndList(); | |||
94 | ||||
95 | OUString aNewName( SdResId( STR_LINEENDreinterpret_cast<char const *>("STR_LINEEND" "\004" u8"Line Ends" ) ) ); | |||
96 | OUString aDesc( SdResId( STR_DESC_LINEENDreinterpret_cast<char const *>("STR_DESC_LINEEND" "\004" u8"Please enter a name for the new arrowhead:") ) ); | |||
97 | OUString aName; | |||
98 | ||||
99 | long nCount = pLineEndList->Count(); | |||
100 | long j = 1; | |||
101 | bool bDifferent = false; | |||
102 | ||||
103 | while( !bDifferent ) | |||
104 | { | |||
105 | aName = aNewName + " " + OUString::number(j++); | |||
106 | bDifferent = true; | |||
107 | for( long i = 0; i < nCount && bDifferent; i++ ) | |||
108 | { | |||
109 | if( aName == pLineEndList->GetLineEnd( i )->GetName() ) | |||
110 | bDifferent = false; | |||
111 | } | |||
112 | } | |||
113 | ||||
114 | SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); | |||
115 | ScopedVclPtr<AbstractSvxNameDialog> pDlg( pFact->CreateSvxNameDialog( nullptr, aName, aDesc ) ); | |||
116 | ||||
117 | pDlg->SetEditHelpId( HID_SD_NAMEDIALOG_LINEEND"SD_HID_SD_NAMEDIALOG_LINEEND" ); | |||
118 | ||||
119 | if( pDlg->Execute() != RET_OK ) | |||
120 | return; | |||
121 | ||||
122 | pDlg->GetName( aName ); | |||
123 | bDifferent = true; | |||
124 | ||||
125 | for( long i = 0; i < nCount && bDifferent; i++ ) | |||
126 | { | |||
127 | if( aName == pLineEndList->GetLineEnd( i )->GetName() ) | |||
128 | bDifferent = false; | |||
129 | } | |||
130 | ||||
131 | if( bDifferent ) | |||
132 | { | |||
133 | pLineEndList->Insert(std::make_unique<XLineEndEntry>(aPolyPolygon, aName)); | |||
134 | } | |||
135 | else | |||
136 | { | |||
137 | std::unique_ptr<weld::MessageDialog> xWarn(Application::CreateMessageDialog(mpWindow ? mpWindow->GetFrameWeld() : nullptr, | |||
138 | VclMessageType::Warning, VclButtonsType::Ok, | |||
139 | SdResId(STR_WARN_NAME_DUPLICATEreinterpret_cast<char const *>("STR_WARN_NAME_DUPLICATE" "\004" u8"The name chosen already exists. \nPlease enter another name." )))); | |||
140 | xWarn->run(); | |||
141 | } | |||
142 | } | |||
143 | ||||
144 | void FuLineEnd::Activate() | |||
145 | { | |||
146 | } | |||
147 | ||||
148 | void FuLineEnd::Deactivate() | |||
149 | { | |||
150 | } | |||
151 | ||||
152 | } // end of namespace sd | |||
153 | ||||
154 | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |