/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /************************************************************************* * * 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 * * for a copy of the LGPLv3 License. * ************************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_chart2.hxx" #include "ViewElementListProvider.hxx" #include "chartview/DrawModelWrapper.hxx" #include "chartview/DataPointSymbolSupplier.hxx" #include "macros.hxx" #include "DrawViewWrapper.hxx" #include #include #include #include // header for class NameOrIndex #include // header for class XFillBitmapItem #include #include #include #include #include // header for class XLineStartItem #include // header for class XLineEndItem #include //------------ //oldChartModelWrapper // header for class SfxItemPool #include // header for class FontList #include // header for class Application #include //------------ // header for class SdrObject #include //--------------- //for creation of a symbol Graphic // header for class VirtualDevice #include // header for class SdrView #include //--------------- //............................................................................. namespace chart { //............................................................................. using namespace ::com::sun::star; ViewElementListProvider::ViewElementListProvider( DrawModelWrapper* pDrawModelWrapper ) : m_pDrawModelWrapper( pDrawModelWrapper ) , m_pFontList(NULL) { } ViewElementListProvider::~ViewElementListProvider() { if(m_pFontList) delete m_pFontList; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- XColorTable* ViewElementListProvider::GetColorTable() const { if(m_pDrawModelWrapper) return m_pDrawModelWrapper->GetColorTable(); return NULL; } XDashList* ViewElementListProvider::GetDashList() const { if(m_pDrawModelWrapper) return m_pDrawModelWrapper->GetDashList(); return NULL; } XLineEndList* ViewElementListProvider::GetLineEndList() const { if(m_pDrawModelWrapper) return m_pDrawModelWrapper->GetLineEndList(); return NULL; } XGradientList* ViewElementListProvider::GetGradientList() const { if(m_pDrawModelWrapper) return m_pDrawModelWrapper->GetGradientList(); return NULL; } XHatchList* ViewElementListProvider::GetHatchList() const { if(m_pDrawModelWrapper) return m_pDrawModelWrapper->GetHatchList(); return NULL; } XBitmapList* ViewElementListProvider::GetBitmapList() const { if(m_pDrawModelWrapper) return m_pDrawModelWrapper->GetBitmapList(); return NULL; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //create chartspecific symbols for linecharts SdrObjList* ViewElementListProvider::GetSymbolList() const { SdrObjList* m_pSymbolList = NULL; uno::Reference< drawing::XShapes > m_xSymbols(NULL);//@todo this keeps the first drawinglayer alive ... try { if(!m_pSymbolList || !m_pSymbolList->GetObjCount()) { //@todo use mutex //get shape factory uno::Reference< lang::XMultiServiceFactory > xShapeFactory( m_pDrawModelWrapper->getShapeFactory() ); //get hidden draw page (target): uno::Reference xTarget( m_pDrawModelWrapper->getHiddenDrawPage(), uno::UNO_QUERY ); //create symbols via uno and convert to native sdr objects drawing::Direction3D aSymbolSize(220,220,0); // should be 250, but 250 -> 280 ?? m_xSymbols = DataPointSymbolSupplier::create2DSymbolList( xShapeFactory, xTarget, aSymbolSize ); SdrObject* pSdrObject = DrawViewWrapper::getSdrObject( uno::Reference< drawing::XShape >( m_xSymbols, uno::UNO_QUERY ) ); if(pSdrObject) m_pSymbolList = pSdrObject->GetSubList(); } } catch( uno::Exception& e ) { ASSERT_EXCEPTION( e ); } return m_pSymbolList; } Graphic ViewElementListProvider::GetSymbolGraphic( sal_Int32 nStandardSymbol, const SfxItemSet* pSymbolShapeProperties ) const { SdrObjList* pSymbolList = this->GetSymbolList(); if( !pSymbolList->GetObjCount() ) return Graphic(); if(nStandardSymbol<0) nStandardSymbol*=-1; if( nStandardSymbol >= static_cast(pSymbolList->GetObjCount()) ) nStandardSymbol %= pSymbolList->GetObjCount(); SdrObject* pObj = pSymbolList->GetObj(nStandardSymbol); VirtualDevice aVDev; aVDev.SetMapMode(MapMode(MAP_100TH_MM)); SdrModel* pModel = new SdrModel(); pModel->GetItemPool().FreezeIdRanges(); SdrPage* pPage = new SdrPage( *pModel, FALSE ); pPage->SetSize(Size(1000,1000)); pModel->InsertPage( pPage, 0 ); SdrView* pView = new SdrView( pModel, &aVDev ); pView->hideMarkHandles(); SdrPageView* pPageView = pView->ShowSdrPage(pPage); pObj=pObj->Clone(); pPage->NbcInsertObject(pObj); pView->MarkObj(pObj,pPageView); if( pSymbolShapeProperties ) pObj->SetMergedItemSet(*pSymbolShapeProperties); GDIMetaFile aMeta(pView->GetAllMarkedMetaFile()); Graphic aGraph(aMeta); Size aSize = pObj->GetSnapRect().GetSize(); aGraph.SetPrefSize(aSize); aGraph.SetPrefMapMode(MAP_100TH_MM); pView->UnmarkAll(); pObj=pPage->RemoveObject(0); SdrObject::Free( pObj ); delete pView; delete pModel; return aGraph; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- FontList* ViewElementListProvider::getFontList() const { //was old chart: //SvxFontListItem* SfxObjectShell::.GetItem(SID_ATTR_CHAR_FONTLIST) if(!m_pFontList) { OutputDevice* pRefDev = m_pDrawModelWrapper ? m_pDrawModelWrapper->getReferenceDevice() : NULL; OutputDevice* pDefaultOut = Application::GetDefaultDevice(); // #67730# m_pFontList = new FontList( pRefDev ? pRefDev : pDefaultOut , pRefDev ? pDefaultOut : NULL , FALSE ); } return m_pFontList; } /* SfxPrinter* ObjectPropertiesDialogParameter::getPrinter() { //was old chart: //SfxPrinter* SchChartDocShell::GetPrinter() // OLE-Objekt: kein Printer anlegen ??? see old chart: :UpdateTablePointers //@todo get printer from calc or other container //return NULL; SfxPrinter* pPrinter = NULL; bool bOwnPrinter = true; if (!pPrinter) { SfxBoolItem aItem(SID_PRINTER_NOTFOUND_WARN, TRUE); // ItemSet mit speziellem Poolbereich anlegen SfxItemSet* pSet = new SfxItemSet(GetPool(), SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN, 0); pSet->Put(aItem); pPrinter = new SfxPrinter(pSet); //@todo ->need to remember and delete bOwnPrinter = TRUE; MapMode aMapMode = pPrinter->GetMapMode(); aMapMode.SetMapUnit(MAP_100TH_MM); pPrinter->SetMapMode(aMapMode); if (pChDoc) { if (pPrinter != pChDoc->GetRefDevice()) pChDoc->SetRefDevice(pPrinter); if (pPrinter != pChDoc->GetOutliner()->GetRefDevice()) pChDoc->GetOutliner()->SetRefDevice(pPrinter); } } return pPrinter; } */ //............................................................................. } //namespace chart //............................................................................. /* vim:set shiftwidth=4 softtabstop=4 expandtab: */