1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 25 #include "RptModel.hxx" 26 #include "RptPage.hxx" 27 #include <dbaccess/dbsubcomponentcontroller.hxx> 28 #include <tools/debug.hxx> 29 #include <unotools/pathoptions.hxx> 30 31 #include "UndoActions.hxx" 32 #include "UndoEnv.hxx" 33 #include "ReportUndoFactory.hxx" 34 #include "ReportDefinition.hxx" 35 #define ITEMID_COLOR 1 36 #define ITEMID_BRUSH 2 37 #define ITEMID_FONT 3 38 #define ITEMID_FONTHEIGHT 4 39 40 #include <svx/tbcontrl.hxx> 41 #include "rptui_slotid.hrc" 42 #include "RptDef.hxx" 43 #include "corestrings.hrc" 44 #include "FixedLine.hxx" 45 #include "FormattedField.hxx" 46 #include "FixedText.hxx" 47 #include "ImageControl.hxx" 48 #include "Shape.hxx" 49 50 namespace rptui 51 { 52 using namespace reportdesign; 53 using namespace com::sun::star; 54 DBG_NAME( rpt_OReportModel ) 55 TYPEINIT1(OReportModel,SdrModel); 56 57 //---------------------------------------------------------------------------- 58 59 OReportModel::OReportModel(::reportdesign::OReportDefinition* _pReportDefinition) : 60 SdrModel(SvtPathOptions().GetPalettePath(),NULL,_pReportDefinition) 61 ,m_pController(NULL) 62 ,m_pReportDefinition(_pReportDefinition) 63 { 64 DBG_CTOR( rpt_OReportModel,0); 65 SetAllowShapePropertyChangeListener(true); 66 m_pUndoEnv = new OXUndoEnvironment(*this); 67 m_pUndoEnv->acquire(); 68 SetSdrUndoFactory(new OReportUndoFactory); 69 70 // SvxFontNameToolBoxControl::RegisterControl(SID_ATTR_CHAR_FONT); 71 //SvxFontHeightToolBoxControl::RegisterControl(SID_ATTR_CHAR_FONTHEIGHT); 72 //SvxFontColorToolBoxControl::RegisterControl(SID_ATTR_CHAR_COLOR); 73 //SvxFontColorExtToolBoxControl::RegisterControl(SID_ATTR_CHAR_COLOR2); 74 //SvxFontColorExtToolBoxControl::RegisterControl(SID_ATTR_CHAR_COLOR_BACKGROUND); 75 //SvxColorToolBoxControl::RegisterControl(SID_BACKGROUND_COLOR); 76 } 77 78 //---------------------------------------------------------------------------- 79 OReportModel::~OReportModel() 80 { 81 DBG_DTOR( rpt_OReportModel,0); 82 detachController(); 83 m_pUndoEnv->release(); 84 } 85 // ----------------------------------------------------------------------------- 86 void OReportModel::detachController() 87 { 88 m_pReportDefinition = NULL; 89 m_pController = NULL; 90 m_pUndoEnv->EndListening( *this ); 91 ClearUndoBuffer(); 92 m_pUndoEnv->Clear(OXUndoEnvironment::Accessor()); 93 } 94 //---------------------------------------------------------------------------- 95 SdrPage* OReportModel::AllocPage(FASTBOOL /*bMasterPage*/) 96 { 97 DBG_CHKTHIS( rpt_OReportModel, 0); 98 OSL_ENSURE(0,"Who called me!"); 99 return NULL; 100 } 101 102 //---------------------------------------------------------------------------- 103 104 void OReportModel::SetChanged( sal_Bool bChanged ) 105 { 106 SdrModel::SetChanged( bChanged ); 107 SetModified( bChanged ); 108 } 109 110 //---------------------------------------------------------------------------- 111 112 Window* OReportModel::GetCurDocViewWin() 113 { 114 return 0; 115 } 116 117 //---------------------------------------------------------------------------- 118 OXUndoEnvironment& OReportModel::GetUndoEnv() 119 { 120 return *m_pUndoEnv; 121 } 122 //---------------------------------------------------------------------------- 123 void OReportModel::SetModified(sal_Bool _bModified) 124 { 125 if ( m_pController ) 126 m_pController->setModified(_bModified); 127 } 128 // ----------------------------------------------------------------------------- 129 SdrPage* OReportModel::RemovePage(sal_uInt16 nPgNum) 130 { 131 OReportPage* pPage = dynamic_cast<OReportPage*>(SdrModel::RemovePage(nPgNum)); 132 //if ( pPage ) 133 //{ 134 // m_pUndoEnv->RemoveSection(pPage); 135 //} 136 return pPage; 137 } 138 // ----------------------------------------------------------------------------- 139 OReportPage* OReportModel::createNewPage(const uno::Reference< report::XSection >& _xSection) 140 { 141 OReportPage* pPage = new OReportPage( *this ,_xSection); 142 InsertPage(pPage); 143 m_pUndoEnv->AddSection(_xSection); 144 return pPage; 145 } 146 // ----------------------------------------------------------------------------- 147 OReportPage* OReportModel::getPage(const uno::Reference< report::XSection >& _xSection) 148 { 149 OReportPage* pPage = NULL; 150 sal_uInt16 nCount = GetPageCount(); 151 for (sal_uInt16 i = 0; i < nCount && !pPage ; ++i) 152 { 153 OReportPage* pRptPage = PTR_CAST( OReportPage, GetPage(i) ); 154 if ( pRptPage && pRptPage->getSection() == _xSection ) 155 pPage = pRptPage; 156 } 157 return pPage; 158 } 159 // ----------------------------------------------------------------------------- 160 SvxNumType OReportModel::GetPageNumType() const 161 { 162 uno::Reference< report::XReportDefinition > xReportDefinition( getReportDefinition() ); 163 if ( xReportDefinition.is() ) 164 return (SvxNumType)getStyleProperty<sal_Int16>(xReportDefinition,reportdesign::PROPERTY_NUMBERINGTYPE); 165 return SVX_ARABIC; 166 } 167 168 // ----------------------------------------------------------------------------- 169 uno::Reference< report::XReportDefinition > OReportModel::getReportDefinition() const 170 { 171 uno::Reference< report::XReportDefinition > xReportDefinition = m_pReportDefinition; 172 OSL_ENSURE( xReportDefinition.is(), "OReportModel::getReportDefinition: invalid model at our controller!" ); 173 return xReportDefinition; 174 } 175 // ----------------------------------------------------------------------------- 176 uno::Reference< uno::XInterface > OReportModel::createUnoModel() 177 { 178 return uno::Reference< uno::XInterface >(getReportDefinition(),uno::UNO_QUERY); 179 } 180 // ----------------------------------------------------------------------------- 181 uno::Reference< uno::XInterface > OReportModel::createShape(const ::rtl::OUString& aServiceSpecifier,uno::Reference< drawing::XShape >& _rShape,sal_Int32 nOrientation) 182 { 183 uno::Reference< uno::XInterface > xRet; 184 if ( _rShape.is() ) 185 { 186 if ( aServiceSpecifier == SERVICE_FORMATTEDFIELD ) 187 { 188 uno::Reference<report::XFormattedField> xProp = new OFormattedField(m_pReportDefinition->getContext(),m_pReportDefinition,_rShape); 189 xRet = xProp; 190 if ( _rShape.is() ) 191 throw uno::Exception(); 192 xProp->setPropertyValue( PROPERTY_FORMATSSUPPLIER, uno::makeAny(uno::Reference< util::XNumberFormatsSupplier >(*m_pReportDefinition,uno::UNO_QUERY)) ); 193 } 194 else if ( aServiceSpecifier == SERVICE_FIXEDTEXT) 195 { 196 xRet = static_cast<cppu::OWeakObject*>(new OFixedText(m_pReportDefinition->getContext(),m_pReportDefinition,_rShape)); 197 if ( _rShape.is() ) 198 throw uno::Exception(); 199 } 200 else if ( aServiceSpecifier == SERVICE_FIXEDLINE) 201 { 202 xRet = static_cast<cppu::OWeakObject*>(new OFixedLine(m_pReportDefinition->getContext(),m_pReportDefinition,_rShape,nOrientation)); 203 if ( _rShape.is() ) 204 throw uno::Exception(); 205 } 206 else if ( aServiceSpecifier == SERVICE_IMAGECONTROL ) 207 { 208 xRet = static_cast<cppu::OWeakObject*>(new OImageControl(m_pReportDefinition->getContext(),m_pReportDefinition,_rShape)); 209 if ( _rShape.is() ) 210 throw uno::Exception(); 211 } 212 else if ( aServiceSpecifier == SERVICE_REPORTDEFINITION ) 213 { 214 xRet = static_cast<cppu::OWeakObject*>(new OReportDefinition(m_pReportDefinition->getContext(),m_pReportDefinition,_rShape)); 215 if ( _rShape.is() ) 216 throw uno::Exception(); 217 } 218 else if ( _rShape.is() ) 219 { 220 xRet = static_cast<cppu::OWeakObject*>(new OShape(m_pReportDefinition->getContext(),m_pReportDefinition,_rShape,aServiceSpecifier)); 221 if ( _rShape.is() ) 222 throw uno::Exception(); 223 } 224 } 225 return xRet; 226 } 227 //================================================================== 228 } //rptui 229 //================================================================== 230