summaryrefslogtreecommitdiff
path: root/reportdesign/source/core/sdr/RptModel.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'reportdesign/source/core/sdr/RptModel.cxx')
-rw-r--r--reportdesign/source/core/sdr/RptModel.cxx233
1 files changed, 233 insertions, 0 deletions
diff --git a/reportdesign/source/core/sdr/RptModel.cxx b/reportdesign/source/core/sdr/RptModel.cxx
new file mode 100644
index 000000000000..7327456c7940
--- /dev/null
+++ b/reportdesign/source/core/sdr/RptModel.cxx
@@ -0,0 +1,233 @@
+/*************************************************************************
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+
+#include "RptModel.hxx"
+#include "RptPage.hxx"
+#include <dbaccess/singledoccontroller.hxx>
+#include <tools/debug.hxx>
+#include <unotools/pathoptions.hxx>
+
+#include "UndoActions.hxx"
+#include "UndoEnv.hxx"
+#include "ReportUndoFactory.hxx"
+#include "ReportDefinition.hxx"
+#define ITEMID_COLOR 1
+#define ITEMID_BRUSH 2
+#define ITEMID_FONT 3
+#define ITEMID_FONTHEIGHT 4
+
+#include <svx/tbcontrl.hxx>
+#include "rptui_slotid.hrc"
+#include "RptDef.hxx"
+#include "corestrings.hrc"
+#include "FixedLine.hxx"
+#include "FormattedField.hxx"
+#include "FixedText.hxx"
+#include "ImageControl.hxx"
+#include "Shape.hxx"
+
+namespace rptui
+{
+using namespace reportdesign;
+using namespace com::sun::star;
+DBG_NAME( rpt_OReportModel )
+TYPEINIT1(OReportModel,SdrModel);
+
+//----------------------------------------------------------------------------
+
+OReportModel::OReportModel(::reportdesign::OReportDefinition* _pReportDefinition) :
+ SdrModel(SvtPathOptions().GetPalettePath(),NULL,_pReportDefinition)
+ ,m_pController(NULL)
+ ,m_pReportDefinition(_pReportDefinition)
+{
+ DBG_CTOR( rpt_OReportModel,0);
+ SetAllowShapePropertyChangeListener(true);
+ m_pUndoEnv = new OXUndoEnvironment(*this);
+ m_pUndoEnv->acquire();
+ SetSdrUndoFactory(new OReportUndoFactory);
+
+ // SvxFontNameToolBoxControl::RegisterControl(SID_ATTR_CHAR_FONT);
+ //SvxFontHeightToolBoxControl::RegisterControl(SID_ATTR_CHAR_FONTHEIGHT);
+ //SvxFontColorToolBoxControl::RegisterControl(SID_ATTR_CHAR_COLOR);
+ //SvxFontColorExtToolBoxControl::RegisterControl(SID_ATTR_CHAR_COLOR2);
+ //SvxFontColorExtToolBoxControl::RegisterControl(SID_ATTR_CHAR_COLOR_BACKGROUND);
+ //SvxColorToolBoxControl::RegisterControl(SID_BACKGROUND_COLOR);
+}
+
+//----------------------------------------------------------------------------
+OReportModel::~OReportModel()
+{
+ DBG_DTOR( rpt_OReportModel,0);
+ detachController();
+ m_pUndoEnv->release();
+}
+// -----------------------------------------------------------------------------
+void OReportModel::detachController()
+{
+ m_pReportDefinition = NULL;
+ m_pController = NULL;
+ m_pUndoEnv->EndListening( *this );
+ ClearUndoBuffer();
+ m_pUndoEnv->Clear(OXUndoEnvironment::Accessor());
+}
+//----------------------------------------------------------------------------
+SdrPage* OReportModel::AllocPage(FASTBOOL /*bMasterPage*/)
+{
+ DBG_CHKTHIS( rpt_OReportModel, 0);
+ OSL_ENSURE(0,"Who called me!");
+ return NULL;
+}
+
+//----------------------------------------------------------------------------
+
+void OReportModel::SetChanged( sal_Bool bChanged )
+{
+ SdrModel::SetChanged( bChanged );
+ SetModified( bChanged );
+}
+
+//----------------------------------------------------------------------------
+
+Window* OReportModel::GetCurDocViewWin()
+{
+ return 0;
+}
+
+//----------------------------------------------------------------------------
+OXUndoEnvironment& OReportModel::GetUndoEnv()
+{
+ return *m_pUndoEnv;
+}
+//----------------------------------------------------------------------------
+void OReportModel::SetModified(sal_Bool _bModified)
+{
+ if ( m_pController )
+ m_pController->setModified(_bModified);
+}
+// -----------------------------------------------------------------------------
+SdrPage* OReportModel::RemovePage(USHORT nPgNum)
+{
+ OReportPage* pPage = dynamic_cast<OReportPage*>(SdrModel::RemovePage(nPgNum));
+ //if ( pPage )
+ //{
+ // m_pUndoEnv->RemoveSection(pPage);
+ //}
+ return pPage;
+}
+// -----------------------------------------------------------------------------
+OReportPage* OReportModel::createNewPage(const uno::Reference< report::XSection >& _xSection)
+{
+ OReportPage* pPage = new OReportPage( *this ,_xSection);
+ InsertPage(pPage);
+ m_pUndoEnv->AddSection(_xSection);
+ return pPage;
+}
+// -----------------------------------------------------------------------------
+OReportPage* OReportModel::getPage(const uno::Reference< report::XSection >& _xSection)
+{
+ OReportPage* pPage = NULL;
+ USHORT nCount = GetPageCount();
+ for (USHORT i = 0; i < nCount && !pPage ; ++i)
+ {
+ OReportPage* pRptPage = PTR_CAST( OReportPage, GetPage(i) );
+ if ( pRptPage && pRptPage->getSection() == _xSection )
+ pPage = pRptPage;
+ }
+ return pPage;
+}
+// -----------------------------------------------------------------------------
+SvxNumType OReportModel::GetPageNumType() const
+{
+ uno::Reference< report::XReportDefinition > xReportDefinition( getReportDefinition() );
+ if ( xReportDefinition.is() )
+ return (SvxNumType)getStyleProperty<sal_Int16>(xReportDefinition,reportdesign::PROPERTY_NUMBERINGTYPE);
+ return SVX_ARABIC;
+}
+
+// -----------------------------------------------------------------------------
+uno::Reference< report::XReportDefinition > OReportModel::getReportDefinition() const
+{
+ uno::Reference< report::XReportDefinition > xReportDefinition = m_pReportDefinition;
+ OSL_ENSURE( xReportDefinition.is(), "OReportModel::getReportDefinition: invalid model at our controller!" );
+ return xReportDefinition;
+}
+// -----------------------------------------------------------------------------
+uno::Reference< uno::XInterface > OReportModel::createUnoModel()
+{
+ return uno::Reference< uno::XInterface >(getReportDefinition(),uno::UNO_QUERY);
+}
+// -----------------------------------------------------------------------------
+uno::Reference< uno::XInterface > OReportModel::createShape(const ::rtl::OUString& aServiceSpecifier,uno::Reference< drawing::XShape >& _rShape,sal_Int32 nOrientation)
+{
+ uno::Reference< uno::XInterface > xRet;
+ if ( _rShape.is() )
+ {
+ if ( aServiceSpecifier == SERVICE_FORMATTEDFIELD )
+ {
+ uno::Reference<report::XFormattedField> xProp = new OFormattedField(m_pReportDefinition->getContext(),m_pReportDefinition,_rShape);
+ xRet = xProp;
+ if ( _rShape.is() )
+ throw uno::Exception();
+ xProp->setPropertyValue( PROPERTY_FORMATSSUPPLIER, uno::makeAny(uno::Reference< util::XNumberFormatsSupplier >(*m_pReportDefinition,uno::UNO_QUERY)) );
+ }
+ else if ( aServiceSpecifier == SERVICE_FIXEDTEXT)
+ {
+ xRet = static_cast<cppu::OWeakObject*>(new OFixedText(m_pReportDefinition->getContext(),m_pReportDefinition,_rShape));
+ if ( _rShape.is() )
+ throw uno::Exception();
+ }
+ else if ( aServiceSpecifier == SERVICE_FIXEDLINE)
+ {
+ xRet = static_cast<cppu::OWeakObject*>(new OFixedLine(m_pReportDefinition->getContext(),m_pReportDefinition,_rShape,nOrientation));
+ if ( _rShape.is() )
+ throw uno::Exception();
+ }
+ else if ( aServiceSpecifier == SERVICE_IMAGECONTROL )
+ {
+ xRet = static_cast<cppu::OWeakObject*>(new OImageControl(m_pReportDefinition->getContext(),m_pReportDefinition,_rShape));
+ if ( _rShape.is() )
+ throw uno::Exception();
+ }
+ else if ( aServiceSpecifier == SERVICE_REPORTDEFINITION )
+ {
+ xRet = static_cast<cppu::OWeakObject*>(new OReportDefinition(m_pReportDefinition->getContext(),m_pReportDefinition,_rShape));
+ if ( _rShape.is() )
+ throw uno::Exception();
+ }
+ else if ( _rShape.is() )
+ {
+ xRet = static_cast<cppu::OWeakObject*>(new OShape(m_pReportDefinition->getContext(),m_pReportDefinition,_rShape,aServiceSpecifier));
+ if ( _rShape.is() )
+ throw uno::Exception();
+ }
+ }
+ return xRet;
+}
+//==================================================================
+} //rptui
+//==================================================================