xref: /trunk/main/sd/source/ui/func/fulinend.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_sd.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir 
32*cdf0e10cSrcweir #include "fulinend.hxx"
33*cdf0e10cSrcweir #include <svx/xtable.hxx>
34*cdf0e10cSrcweir #include <svx/svxdlg.hxx>
35*cdf0e10cSrcweir #include <svx/dialogs.hrc>
36*cdf0e10cSrcweir #include <svx/svdobj.hxx>
37*cdf0e10cSrcweir #include <svx/svdopath.hxx>
38*cdf0e10cSrcweir #include <vcl/msgbox.hxx>
39*cdf0e10cSrcweir 
40*cdf0e10cSrcweir #include "strings.hrc"
41*cdf0e10cSrcweir #include "ViewShell.hxx"
42*cdf0e10cSrcweir #include "helpids.h"
43*cdf0e10cSrcweir #include "sdresid.hxx"
44*cdf0e10cSrcweir #include "drawdoc.hxx"
45*cdf0e10cSrcweir #include "View.hxx"
46*cdf0e10cSrcweir #ifndef SD_WINDOW_SHELL_HXX
47*cdf0e10cSrcweir #include "Window.hxx"
48*cdf0e10cSrcweir #endif
49*cdf0e10cSrcweir 
50*cdf0e10cSrcweir namespace sd {
51*cdf0e10cSrcweir 
52*cdf0e10cSrcweir #define BITMAP_WIDTH  32
53*cdf0e10cSrcweir #define BITMAP_HEIGHT 12
54*cdf0e10cSrcweir 
55*cdf0e10cSrcweir TYPEINIT1( FuLineEnd, FuPoor );
56*cdf0e10cSrcweir 
57*cdf0e10cSrcweir /*************************************************************************
58*cdf0e10cSrcweir |*
59*cdf0e10cSrcweir |* Konstruktor
60*cdf0e10cSrcweir |*
61*cdf0e10cSrcweir \************************************************************************/
62*cdf0e10cSrcweir 
63*cdf0e10cSrcweir FuLineEnd::FuLineEnd(ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView,
64*cdf0e10cSrcweir                     SdDrawDocument* pDoc, SfxRequest& rReq)
65*cdf0e10cSrcweir     : FuPoor(pViewSh, pWin, pView, pDoc, rReq)
66*cdf0e10cSrcweir {
67*cdf0e10cSrcweir }
68*cdf0e10cSrcweir 
69*cdf0e10cSrcweir FunctionReference FuLineEnd::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq )
70*cdf0e10cSrcweir {
71*cdf0e10cSrcweir     FunctionReference xFunc( new FuLineEnd( pViewSh, pWin, pView, pDoc, rReq ) );
72*cdf0e10cSrcweir     xFunc->DoExecute(rReq);
73*cdf0e10cSrcweir     return xFunc;
74*cdf0e10cSrcweir }
75*cdf0e10cSrcweir 
76*cdf0e10cSrcweir void FuLineEnd::DoExecute( SfxRequest& )
77*cdf0e10cSrcweir {
78*cdf0e10cSrcweir     const SdrMarkList& rMarkList = mpView->GetMarkedObjectList();
79*cdf0e10cSrcweir 
80*cdf0e10cSrcweir     if( rMarkList.GetMarkCount() == 1 )
81*cdf0e10cSrcweir     {
82*cdf0e10cSrcweir         const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
83*cdf0e10cSrcweir         const SdrObject* pNewObj;
84*cdf0e10cSrcweir         SdrObject* pConvPolyObj = NULL;
85*cdf0e10cSrcweir 
86*cdf0e10cSrcweir         if( pObj->ISA( SdrPathObj ) )
87*cdf0e10cSrcweir         {
88*cdf0e10cSrcweir             pNewObj = pObj;
89*cdf0e10cSrcweir         }
90*cdf0e10cSrcweir         else
91*cdf0e10cSrcweir         {
92*cdf0e10cSrcweir             SdrObjTransformInfoRec aInfoRec;
93*cdf0e10cSrcweir             pObj->TakeObjInfo( aInfoRec );
94*cdf0e10cSrcweir 
95*cdf0e10cSrcweir             if( aInfoRec.bCanConvToPath &&
96*cdf0e10cSrcweir                 pObj->GetObjInventor() == SdrInventor &&
97*cdf0e10cSrcweir                 pObj->GetObjIdentifier() != OBJ_GRUP )
98*cdf0e10cSrcweir                 // bCanConvToPath ist bei Gruppenobjekten sal_True,
99*cdf0e10cSrcweir                 // stuerzt aber bei ConvertToPathObj() ab !
100*cdf0e10cSrcweir             {
101*cdf0e10cSrcweir                 pNewObj = pConvPolyObj = pObj->ConvertToPolyObj( sal_True, sal_False );
102*cdf0e10cSrcweir 
103*cdf0e10cSrcweir                 if( !pNewObj || !pNewObj->ISA( SdrPathObj ) )
104*cdf0e10cSrcweir                     return; // Abbruch, zusaetzliche Sicherheit, die bei
105*cdf0e10cSrcweir                             // Gruppenobjekten aber nichts bringt.
106*cdf0e10cSrcweir             }
107*cdf0e10cSrcweir             else return; // Abbruch
108*cdf0e10cSrcweir         }
109*cdf0e10cSrcweir 
110*cdf0e10cSrcweir         const ::basegfx::B2DPolyPolygon aPolyPolygon = ( (SdrPathObj*) pNewObj )->GetPathPoly();
111*cdf0e10cSrcweir 
112*cdf0e10cSrcweir         // Loeschen des angelegten PolyObjektes
113*cdf0e10cSrcweir         SdrObject::Free( pConvPolyObj );
114*cdf0e10cSrcweir 
115*cdf0e10cSrcweir         XLineEndList* pLineEndList = mpDoc->GetLineEndList();
116*cdf0e10cSrcweir         XLineEndEntry* pEntry;
117*cdf0e10cSrcweir 
118*cdf0e10cSrcweir         String aNewName( SdResId( STR_LINEEND ) );
119*cdf0e10cSrcweir         String aDesc( SdResId( STR_DESC_LINEEND ) );
120*cdf0e10cSrcweir         String aName;
121*cdf0e10cSrcweir 
122*cdf0e10cSrcweir         long nCount = pLineEndList->Count();
123*cdf0e10cSrcweir         long j = 1;
124*cdf0e10cSrcweir         sal_Bool bDifferent = sal_False;
125*cdf0e10cSrcweir 
126*cdf0e10cSrcweir         while( !bDifferent )
127*cdf0e10cSrcweir         {
128*cdf0e10cSrcweir             aName = aNewName;
129*cdf0e10cSrcweir             aName.Append( sal_Unicode(' ') );
130*cdf0e10cSrcweir             aName.Append( UniString::CreateFromInt32( j++ ) );
131*cdf0e10cSrcweir             bDifferent = sal_True;
132*cdf0e10cSrcweir             for( long i = 0; i < nCount && bDifferent; i++ )
133*cdf0e10cSrcweir             {
134*cdf0e10cSrcweir                 if( aName == pLineEndList->GetLineEnd( i )->GetName() )
135*cdf0e10cSrcweir                     bDifferent = sal_False;
136*cdf0e10cSrcweir             }
137*cdf0e10cSrcweir         }
138*cdf0e10cSrcweir 
139*cdf0e10cSrcweir         SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
140*cdf0e10cSrcweir         AbstractSvxNameDialog* pDlg = pFact ? pFact->CreateSvxNameDialog( NULL, aName, aDesc ) : 0;
141*cdf0e10cSrcweir 
142*cdf0e10cSrcweir         if( pDlg )
143*cdf0e10cSrcweir         {
144*cdf0e10cSrcweir             pDlg->SetEditHelpId( HID_SD_NAMEDIALOG_LINEEND );
145*cdf0e10cSrcweir 
146*cdf0e10cSrcweir             if( pDlg->Execute() == RET_OK )
147*cdf0e10cSrcweir             {
148*cdf0e10cSrcweir                 pDlg->GetName( aName );
149*cdf0e10cSrcweir                 bDifferent = sal_True;
150*cdf0e10cSrcweir 
151*cdf0e10cSrcweir                 for( long i = 0; i < nCount && bDifferent; i++ )
152*cdf0e10cSrcweir                 {
153*cdf0e10cSrcweir                     if( aName == pLineEndList->GetLineEnd( i )->GetName() )
154*cdf0e10cSrcweir                         bDifferent = sal_False;
155*cdf0e10cSrcweir                 }
156*cdf0e10cSrcweir 
157*cdf0e10cSrcweir                 if( bDifferent )
158*cdf0e10cSrcweir                 {
159*cdf0e10cSrcweir                     pEntry = new XLineEndEntry( aPolyPolygon, aName );
160*cdf0e10cSrcweir                     pLineEndList->Insert( pEntry, LIST_APPEND);
161*cdf0e10cSrcweir                 }
162*cdf0e10cSrcweir                 else
163*cdf0e10cSrcweir                 {
164*cdf0e10cSrcweir                     String aStr(SdResId( STR_WARN_NAME_DUPLICATE ));
165*cdf0e10cSrcweir                     WarningBox aWarningBox( mpWindow, WinBits( WB_OK ),
166*cdf0e10cSrcweir                          aStr );
167*cdf0e10cSrcweir                     aWarningBox.Execute();
168*cdf0e10cSrcweir                 }
169*cdf0e10cSrcweir             }
170*cdf0e10cSrcweir         }
171*cdf0e10cSrcweir         delete pDlg;
172*cdf0e10cSrcweir     }
173*cdf0e10cSrcweir }
174*cdf0e10cSrcweir 
175*cdf0e10cSrcweir void FuLineEnd::Activate()
176*cdf0e10cSrcweir {
177*cdf0e10cSrcweir }
178*cdf0e10cSrcweir 
179*cdf0e10cSrcweir void FuLineEnd::Deactivate()
180*cdf0e10cSrcweir {
181*cdf0e10cSrcweir }
182*cdf0e10cSrcweir 
183*cdf0e10cSrcweir } // end of namespace sd
184