xref: /aoo41x/main/sd/source/ui/func/fulinend.cxx (revision cdf0e10c)
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