diff options
Diffstat (limited to 'sd/source/ui/func/fulinend.cxx')
-rw-r--r-- | sd/source/ui/func/fulinend.cxx | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/sd/source/ui/func/fulinend.cxx b/sd/source/ui/func/fulinend.cxx new file mode 100644 index 000000000000..9c53518507f3 --- /dev/null +++ b/sd/source/ui/func/fulinend.cxx @@ -0,0 +1,183 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sd.hxx" + + +#include "fulinend.hxx" +#include <svx/xtable.hxx> +#include <svx/svxdlg.hxx> +#include <svx/dialogs.hrc> +#include <svx/svdobj.hxx> +#include <svx/svdopath.hxx> +#include <vcl/msgbox.hxx> + +#include "strings.hrc" +#include "ViewShell.hxx" +#include "helpids.h" +#include "sdresid.hxx" +#include "drawdoc.hxx" +#include "View.hxx" +#ifndef SD_WINDOW_SHELL_HXX +#include "Window.hxx" +#endif + +namespace sd { + +#define BITMAP_WIDTH 32 +#define BITMAP_HEIGHT 12 + +TYPEINIT1( FuLineEnd, FuPoor ); + +/************************************************************************* +|* +|* Konstruktor +|* +\************************************************************************/ + +FuLineEnd::FuLineEnd(ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, + SdDrawDocument* pDoc, SfxRequest& rReq) + : FuPoor(pViewSh, pWin, pView, pDoc, rReq) +{ +} + +FunctionReference FuLineEnd::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq ) +{ + FunctionReference xFunc( new FuLineEnd( pViewSh, pWin, pView, pDoc, rReq ) ); + xFunc->DoExecute(rReq); + return xFunc; +} + +void FuLineEnd::DoExecute( SfxRequest& ) +{ + const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); + + if( rMarkList.GetMarkCount() == 1 ) + { + const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); + const SdrObject* pNewObj; + SdrObject* pConvPolyObj = NULL; + + if( pObj->ISA( SdrPathObj ) ) + { + pNewObj = pObj; + } + else + { + SdrObjTransformInfoRec aInfoRec; + pObj->TakeObjInfo( aInfoRec ); + + if( aInfoRec.bCanConvToPath && + pObj->GetObjInventor() == SdrInventor && + pObj->GetObjIdentifier() != OBJ_GRUP ) + // bCanConvToPath ist bei Gruppenobjekten TRUE, + // stuerzt aber bei ConvertToPathObj() ab ! + { + pNewObj = pConvPolyObj = pObj->ConvertToPolyObj( TRUE, FALSE ); + + if( !pNewObj || !pNewObj->ISA( SdrPathObj ) ) + return; // Abbruch, zusaetzliche Sicherheit, die bei + // Gruppenobjekten aber nichts bringt. + } + else return; // Abbruch + } + + const ::basegfx::B2DPolyPolygon aPolyPolygon = ( (SdrPathObj*) pNewObj )->GetPathPoly(); + + // Loeschen des angelegten PolyObjektes + SdrObject::Free( pConvPolyObj ); + + XLineEndList* pLineEndList = mpDoc->GetLineEndList(); + XLineEndEntry* pEntry; + + String aNewName( SdResId( STR_LINEEND ) ); + String aDesc( SdResId( STR_DESC_LINEEND ) ); + String aName; + + long nCount = pLineEndList->Count(); + long j = 1; + BOOL bDifferent = FALSE; + + while( !bDifferent ) + { + aName = aNewName; + aName.Append( sal_Unicode(' ') ); + aName.Append( UniString::CreateFromInt32( j++ ) ); + bDifferent = TRUE; + for( long i = 0; i < nCount && bDifferent; i++ ) + { + if( aName == pLineEndList->GetLineEnd( i )->GetName() ) + bDifferent = FALSE; + } + } + + SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); + AbstractSvxNameDialog* pDlg = pFact ? pFact->CreateSvxNameDialog( NULL, aName, aDesc ) : 0; + + if( pDlg ) + { + pDlg->SetEditHelpId( HID_SD_NAMEDIALOG_LINEEND ); + + if( pDlg->Execute() == RET_OK ) + { + pDlg->GetName( aName ); + bDifferent = TRUE; + + for( long i = 0; i < nCount && bDifferent; i++ ) + { + if( aName == pLineEndList->GetLineEnd( i )->GetName() ) + bDifferent = FALSE; + } + + if( bDifferent ) + { + pEntry = new XLineEndEntry( aPolyPolygon, aName ); + pLineEndList->Insert( pEntry, LIST_APPEND); + } + else + { + String aStr(SdResId( STR_WARN_NAME_DUPLICATE )); + WarningBox aWarningBox( mpWindow, WinBits( WB_OK ), + aStr ); + aWarningBox.Execute(); + } + } + } + delete pDlg; + } +} + +void FuLineEnd::Activate() +{ +} + +void FuLineEnd::Deactivate() +{ +} + +} // end of namespace sd |