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 #include "precompiled_reportdesign.hxx"
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
OReportModel(::reportdesign::OReportDefinition * _pReportDefinition)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 //----------------------------------------------------------------------------
~OReportModel()79 OReportModel::~OReportModel()
80 {
81 DBG_DTOR( rpt_OReportModel,0);
82 detachController();
83 m_pUndoEnv->release();
84 }
85 // -----------------------------------------------------------------------------
detachController()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 //----------------------------------------------------------------------------
AllocPage(FASTBOOL)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
SetChanged(sal_Bool bChanged)104 void OReportModel::SetChanged( sal_Bool bChanged )
105 {
106 SdrModel::SetChanged( bChanged );
107 SetModified( bChanged );
108 }
109
110 //----------------------------------------------------------------------------
111
GetCurDocViewWin()112 Window* OReportModel::GetCurDocViewWin()
113 {
114 return 0;
115 }
116
117 //----------------------------------------------------------------------------
GetUndoEnv()118 OXUndoEnvironment& OReportModel::GetUndoEnv()
119 {
120 return *m_pUndoEnv;
121 }
122 //----------------------------------------------------------------------------
SetModified(sal_Bool _bModified)123 void OReportModel::SetModified(sal_Bool _bModified)
124 {
125 if ( m_pController )
126 m_pController->setModified(_bModified);
127 }
128 // -----------------------------------------------------------------------------
RemovePage(sal_uInt16 nPgNum)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 // -----------------------------------------------------------------------------
createNewPage(const uno::Reference<report::XSection> & _xSection)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 // -----------------------------------------------------------------------------
getPage(const uno::Reference<report::XSection> & _xSection)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 // -----------------------------------------------------------------------------
GetPageNumType() const160 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 // -----------------------------------------------------------------------------
getReportDefinition() const169 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 // -----------------------------------------------------------------------------
createUnoModel()176 uno::Reference< uno::XInterface > OReportModel::createUnoModel()
177 {
178 return uno::Reference< uno::XInterface >(getReportDefinition(),uno::UNO_QUERY);
179 }
180 // -----------------------------------------------------------------------------
createShape(const::rtl::OUString & aServiceSpecifier,uno::Reference<drawing::XShape> & _rShape,sal_Int32 nOrientation)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