xref: /aoo4110/main/basctl/source/dlged/dlged.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_basctl.hxx"
26*b1cdbd2cSJim Jagielski #include "dlged.hxx"
27*b1cdbd2cSJim Jagielski #include "dlgedfunc.hxx"
28*b1cdbd2cSJim Jagielski #include "dlgedfac.hxx"
29*b1cdbd2cSJim Jagielski #include <dlgedmod.hxx>
30*b1cdbd2cSJim Jagielski #include "dlgedpage.hxx"
31*b1cdbd2cSJim Jagielski #include "dlgedview.hxx"
32*b1cdbd2cSJim Jagielski #include "dlgedobj.hxx"
33*b1cdbd2cSJim Jagielski #include "dlgedclip.hxx"
34*b1cdbd2cSJim Jagielski #include <dlgeddef.hxx>
35*b1cdbd2cSJim Jagielski #include "propbrw.hxx"
36*b1cdbd2cSJim Jagielski #include <localizationmgr.hxx>
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski #include <basidesh.hxx>
39*b1cdbd2cSJim Jagielski #include <iderdll.hxx>
40*b1cdbd2cSJim Jagielski #include <vcl/scrbar.hxx>
41*b1cdbd2cSJim Jagielski #include <tools/shl.hxx>
42*b1cdbd2cSJim Jagielski #include <svl/itempool.hxx>
43*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski #ifndef _SVX_SVXIDS_HRC
46*b1cdbd2cSJim Jagielski #include <svx/svxids.hrc>
47*b1cdbd2cSJim Jagielski #endif
48*b1cdbd2cSJim Jagielski #include <svx/svdpagv.hxx>
49*b1cdbd2cSJim Jagielski #include <xmlscript/xml_helper.hxx>
50*b1cdbd2cSJim Jagielski #include <xmlscript/xmldlg_imexp.hxx>
51*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValue.hpp>
52*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
53*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/Property.hpp>
54*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XDialog.hpp>
55*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XCloneable.hpp>
56*b1cdbd2cSJim Jagielski #include <com/sun/star/resource/XStringResourcePersistence.hpp>
57*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
58*b1cdbd2cSJim Jagielski #include <comphelper/types.hxx>
59*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
60*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx>
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski // #i74769#
63*b1cdbd2cSJim Jagielski #include <svx/sdrpaintwindow.hxx>
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski using namespace comphelper;
66*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
67*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
68*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
69*b1cdbd2cSJim Jagielski using namespace	::com::sun::star::io;
70*b1cdbd2cSJim Jagielski using ::rtl::OUString;
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski static ::rtl::OUString aResourceResolverPropName =
73*b1cdbd2cSJim Jagielski 	::rtl::OUString::createFromAscii( "ResourceResolver" );
74*b1cdbd2cSJim Jagielski static ::rtl::OUString aDecorationPropName =
75*b1cdbd2cSJim Jagielski 	::rtl::OUString::createFromAscii( "Decoration" );
76*b1cdbd2cSJim Jagielski static ::rtl::OUString aTitlePropName =
77*b1cdbd2cSJim Jagielski 	::rtl::OUString::createFromAscii( "Title" );
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski //============================================================================
81*b1cdbd2cSJim Jagielski // DlgEdHint
82*b1cdbd2cSJim Jagielski //============================================================================
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski TYPEINIT1( DlgEdHint, SfxHint );
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
87*b1cdbd2cSJim Jagielski 
DlgEdHint(DlgEdHintKind eHint)88*b1cdbd2cSJim Jagielski DlgEdHint::DlgEdHint( DlgEdHintKind eHint )
89*b1cdbd2cSJim Jagielski 	:eHintKind( eHint )
90*b1cdbd2cSJim Jagielski {
91*b1cdbd2cSJim Jagielski }
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
94*b1cdbd2cSJim Jagielski 
DlgEdHint(DlgEdHintKind eHint,DlgEdObj * pObj)95*b1cdbd2cSJim Jagielski DlgEdHint::DlgEdHint( DlgEdHintKind eHint, DlgEdObj* pObj )
96*b1cdbd2cSJim Jagielski 	:eHintKind( eHint )
97*b1cdbd2cSJim Jagielski 	,pDlgEdObj( pObj )
98*b1cdbd2cSJim Jagielski {
99*b1cdbd2cSJim Jagielski }
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
102*b1cdbd2cSJim Jagielski 
~DlgEdHint()103*b1cdbd2cSJim Jagielski DlgEdHint::~DlgEdHint()
104*b1cdbd2cSJim Jagielski {
105*b1cdbd2cSJim Jagielski }
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski //============================================================================
109*b1cdbd2cSJim Jagielski // DlgEditor
110*b1cdbd2cSJim Jagielski //============================================================================
111*b1cdbd2cSJim Jagielski 
ShowDialog()112*b1cdbd2cSJim Jagielski void DlgEditor::ShowDialog()
113*b1cdbd2cSJim Jagielski {
114*b1cdbd2cSJim Jagielski     uno::Reference< lang::XMultiServiceFactory >  xMSF = getProcessServiceFactory();
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski 	// create a dialog
117*b1cdbd2cSJim Jagielski 	uno::Reference< awt::XControl > xDlg( xMSF->createInstance( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlDialog" ) ) ), uno::UNO_QUERY );
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski 	// clone the dialog model
120*b1cdbd2cSJim Jagielski 	uno::Reference< util::XCloneable > xC( m_xUnoControlDialogModel, uno::UNO_QUERY );
121*b1cdbd2cSJim Jagielski 	uno::Reference< util::XCloneable > xNew = xC->createClone();
122*b1cdbd2cSJim Jagielski 	uno::Reference< awt::XControlModel > xDlgMod( xNew, uno::UNO_QUERY );
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xSrcDlgModPropSet( m_xUnoControlDialogModel, uno::UNO_QUERY );
125*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xNewDlgModPropSet( xDlgMod, uno::UNO_QUERY );
126*b1cdbd2cSJim Jagielski 	if( xNewDlgModPropSet.is() )
127*b1cdbd2cSJim Jagielski 	{
128*b1cdbd2cSJim Jagielski 		if( xSrcDlgModPropSet.is() )
129*b1cdbd2cSJim Jagielski 		{
130*b1cdbd2cSJim Jagielski 			try
131*b1cdbd2cSJim Jagielski 			{
132*b1cdbd2cSJim Jagielski 				Any aResourceResolver = xSrcDlgModPropSet->getPropertyValue( aResourceResolverPropName );
133*b1cdbd2cSJim Jagielski 				xNewDlgModPropSet->setPropertyValue( aResourceResolverPropName, aResourceResolver );
134*b1cdbd2cSJim Jagielski 			}
135*b1cdbd2cSJim Jagielski 			catch( UnknownPropertyException& )
136*b1cdbd2cSJim Jagielski 			{
137*b1cdbd2cSJim Jagielski 				DBG_ERROR( "DlgEditor::ShowDialog(): No ResourceResolver property" );
138*b1cdbd2cSJim Jagielski 			}
139*b1cdbd2cSJim Jagielski 		}
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski 		// Disable decoration
142*b1cdbd2cSJim Jagielski 		bool bDecoration = true;
143*b1cdbd2cSJim Jagielski 		try
144*b1cdbd2cSJim Jagielski 		{
145*b1cdbd2cSJim Jagielski 			Any aDecorationAny = xSrcDlgModPropSet->getPropertyValue( aDecorationPropName );
146*b1cdbd2cSJim Jagielski 			aDecorationAny >>= bDecoration;
147*b1cdbd2cSJim Jagielski 			if( !bDecoration )
148*b1cdbd2cSJim Jagielski 			{
149*b1cdbd2cSJim Jagielski 				xNewDlgModPropSet->setPropertyValue( aDecorationPropName, makeAny( true ) );
150*b1cdbd2cSJim Jagielski 				xNewDlgModPropSet->setPropertyValue( aTitlePropName, makeAny( ::rtl::OUString() ) );
151*b1cdbd2cSJim Jagielski 			}
152*b1cdbd2cSJim Jagielski 		}
153*b1cdbd2cSJim Jagielski 		catch( UnknownPropertyException& )
154*b1cdbd2cSJim Jagielski 		{}
155*b1cdbd2cSJim Jagielski 	}
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski 	// set the model
158*b1cdbd2cSJim Jagielski 	xDlg->setModel( xDlgMod );
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski 	// create a peer
161*b1cdbd2cSJim Jagielski 	uno::Reference< awt::XToolkit> xToolkit( xMSF->createInstance( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.ExtToolkit" ) ) ), uno::UNO_QUERY );
162*b1cdbd2cSJim Jagielski 	xDlg->createPeer( xToolkit, pWindow->GetComponentInterface() );
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 	uno::Reference< awt::XDialog > xD( xDlg, uno::UNO_QUERY );
165*b1cdbd2cSJim Jagielski 	xD->execute();
166*b1cdbd2cSJim Jagielski 
167*b1cdbd2cSJim Jagielski     uno::Reference< lang::XComponent > xComponent(xDlg, uno::UNO_QUERY);
168*b1cdbd2cSJim Jagielski     if (xComponent.is())
169*b1cdbd2cSJim Jagielski         xComponent->dispose();
170*b1cdbd2cSJim Jagielski }
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
173*b1cdbd2cSJim Jagielski 
UnmarkDialog()174*b1cdbd2cSJim Jagielski sal_Bool DlgEditor::UnmarkDialog()
175*b1cdbd2cSJim Jagielski {
176*b1cdbd2cSJim Jagielski 	SdrObject* 		pDlgObj = pDlgEdModel->GetPage(0)->GetObj(0);
177*b1cdbd2cSJim Jagielski 	SdrPageView*    pPgView = pDlgEdView->GetSdrPageView();
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski 	sal_Bool bWasMarked = pDlgEdView->IsObjMarked( pDlgObj );
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski 	if( bWasMarked )
182*b1cdbd2cSJim Jagielski 		pDlgEdView->MarkObj( pDlgObj, pPgView, sal_True );
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski 	return bWasMarked;
185*b1cdbd2cSJim Jagielski }
186*b1cdbd2cSJim Jagielski 
187*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
188*b1cdbd2cSJim Jagielski 
RemarkDialog()189*b1cdbd2cSJim Jagielski sal_Bool DlgEditor::RemarkDialog()
190*b1cdbd2cSJim Jagielski {
191*b1cdbd2cSJim Jagielski 	SdrObject* 		pDlgObj = pDlgEdModel->GetPage(0)->GetObj(0);
192*b1cdbd2cSJim Jagielski 	SdrPageView*    pPgView = pDlgEdView->GetSdrPageView();
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski 	sal_Bool bWasMarked = pDlgEdView->IsObjMarked( pDlgObj );
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski 	if( !bWasMarked )
197*b1cdbd2cSJim Jagielski 		pDlgEdView->MarkObj( pDlgObj, pPgView, sal_False );
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski 	return bWasMarked;
200*b1cdbd2cSJim Jagielski }
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
203*b1cdbd2cSJim Jagielski 
DlgEditor()204*b1cdbd2cSJim Jagielski DlgEditor::DlgEditor()
205*b1cdbd2cSJim Jagielski 	:pHScroll(NULL)
206*b1cdbd2cSJim Jagielski 	,pVScroll(NULL)
207*b1cdbd2cSJim Jagielski 	,pDlgEdModel(NULL)
208*b1cdbd2cSJim Jagielski 	,pDlgEdPage(NULL)
209*b1cdbd2cSJim Jagielski 	,pDlgEdView(NULL)
210*b1cdbd2cSJim Jagielski 	,pDlgEdForm(NULL)
211*b1cdbd2cSJim Jagielski 	,m_xUnoControlDialogModel(NULL)
212*b1cdbd2cSJim Jagielski 	,m_ClipboardDataFlavors(1)
213*b1cdbd2cSJim Jagielski 	,m_ClipboardDataFlavorsResource(2)
214*b1cdbd2cSJim Jagielski 	,pObjFac(NULL)
215*b1cdbd2cSJim Jagielski 	,pWindow(NULL)
216*b1cdbd2cSJim Jagielski 	,pFunc(NULL)
217*b1cdbd2cSJim Jagielski 	,eMode( DLGED_SELECT )
218*b1cdbd2cSJim Jagielski 	,eActObj( OBJ_DLG_PUSHBUTTON )
219*b1cdbd2cSJim Jagielski 	,bFirstDraw(sal_False)
220*b1cdbd2cSJim Jagielski 	,aGridSize( 100, 100 )	// 100TH_MM
221*b1cdbd2cSJim Jagielski 	,bGridVisible(sal_False)
222*b1cdbd2cSJim Jagielski 	,bGridSnap(sal_True)
223*b1cdbd2cSJim Jagielski 	,bCreateOK(sal_True)
224*b1cdbd2cSJim Jagielski 	,bDialogModelChanged(sal_False)
225*b1cdbd2cSJim Jagielski 	,mnPaintGuard(0)
226*b1cdbd2cSJim Jagielski {
227*b1cdbd2cSJim Jagielski 	pDlgEdModel = new DlgEdModel();
228*b1cdbd2cSJim Jagielski 	pDlgEdModel->GetItemPool().FreezeIdRanges();
229*b1cdbd2cSJim Jagielski 	pDlgEdModel->SetScaleUnit( MAP_100TH_MM );
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski 	SdrLayerAdmin& rAdmin = pDlgEdModel->GetLayerAdmin();
232*b1cdbd2cSJim Jagielski 	rAdmin.NewLayer( rAdmin.GetControlLayerName() );
233*b1cdbd2cSJim Jagielski 	rAdmin.NewLayer( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "HiddenLayer" ) ) );
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski 	pDlgEdPage = new DlgEdPage( *pDlgEdModel );
236*b1cdbd2cSJim Jagielski 	pDlgEdModel->InsertPage( pDlgEdPage );
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski 	pObjFac = new DlgEdFactory();
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski 	pFunc = new DlgEdFuncSelect( this );
241*b1cdbd2cSJim Jagielski 
242*b1cdbd2cSJim Jagielski 	// set clipboard data flavors
243*b1cdbd2cSJim Jagielski 	m_ClipboardDataFlavors[0].MimeType =				::rtl::OUString::createFromAscii("application/vnd.sun.xml.dialog");
244*b1cdbd2cSJim Jagielski 	m_ClipboardDataFlavors[0].HumanPresentableName =	::rtl::OUString::createFromAscii("Dialog 6.0");
245*b1cdbd2cSJim Jagielski 	m_ClipboardDataFlavors[0].DataType =				::getCppuType( (const Sequence< sal_Int8 >*) 0 );
246*b1cdbd2cSJim Jagielski 
247*b1cdbd2cSJim Jagielski 	m_ClipboardDataFlavorsResource[0] =							m_ClipboardDataFlavors[0];
248*b1cdbd2cSJim Jagielski 	m_ClipboardDataFlavorsResource[1].MimeType =				::rtl::OUString::createFromAscii("application/vnd.sun.xml.dialogwithresource");
249*b1cdbd2cSJim Jagielski 	m_ClipboardDataFlavorsResource[1].HumanPresentableName =	::rtl::OUString::createFromAscii("Dialog 8.0");
250*b1cdbd2cSJim Jagielski 	m_ClipboardDataFlavorsResource[1].DataType =				::getCppuType( (const Sequence< sal_Int8 >*) 0 );
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski 	aPaintTimer.SetTimeout( 1 );
253*b1cdbd2cSJim Jagielski 	aPaintTimer.SetTimeoutHdl( LINK( this, DlgEditor, PaintTimeout ) );
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski 	aMarkTimer.SetTimeout( 100 );
256*b1cdbd2cSJim Jagielski 	aMarkTimer.SetTimeoutHdl( LINK( this, DlgEditor, MarkTimeout ) );
257*b1cdbd2cSJim Jagielski }
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
260*b1cdbd2cSJim Jagielski 
~DlgEditor()261*b1cdbd2cSJim Jagielski DlgEditor::~DlgEditor()
262*b1cdbd2cSJim Jagielski {
263*b1cdbd2cSJim Jagielski     aPaintTimer.Stop();
264*b1cdbd2cSJim Jagielski     aMarkTimer.Stop();
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski     ::comphelper::disposeComponent( m_xControlContainer );
267*b1cdbd2cSJim Jagielski 
268*b1cdbd2cSJim Jagielski     delete pObjFac;
269*b1cdbd2cSJim Jagielski 	delete pFunc;
270*b1cdbd2cSJim Jagielski 	delete pDlgEdView;
271*b1cdbd2cSJim Jagielski 	delete pDlgEdModel;
272*b1cdbd2cSJim Jagielski }
273*b1cdbd2cSJim Jagielski 
274*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
275*b1cdbd2cSJim Jagielski 
GetWindowControlContainer()276*b1cdbd2cSJim Jagielski Reference< awt::XControlContainer > DlgEditor::GetWindowControlContainer()
277*b1cdbd2cSJim Jagielski {
278*b1cdbd2cSJim Jagielski     if ( !m_xControlContainer.is() && pWindow )
279*b1cdbd2cSJim Jagielski         m_xControlContainer = VCLUnoHelper::CreateControlContainer( pWindow );
280*b1cdbd2cSJim Jagielski     return m_xControlContainer;
281*b1cdbd2cSJim Jagielski }
282*b1cdbd2cSJim Jagielski 
283*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
284*b1cdbd2cSJim Jagielski 
SetWindow(Window * pWindow_)285*b1cdbd2cSJim Jagielski void DlgEditor::SetWindow( Window* pWindow_ )
286*b1cdbd2cSJim Jagielski {
287*b1cdbd2cSJim Jagielski 	DlgEditor::pWindow = pWindow_;
288*b1cdbd2cSJim Jagielski 	pWindow_->SetMapMode( MapMode( MAP_100TH_MM ) );
289*b1cdbd2cSJim Jagielski 	pDlgEdPage->SetSize( pWindow_->PixelToLogic( Size( DLGED_PAGE_WIDTH_MIN, DLGED_PAGE_HEIGHT_MIN ) ) );
290*b1cdbd2cSJim Jagielski 
291*b1cdbd2cSJim Jagielski 	pDlgEdView = new DlgEdView( pDlgEdModel, pWindow_, this );
292*b1cdbd2cSJim Jagielski 	pDlgEdView->ShowSdrPage(pDlgEdView->GetModel()->GetPage(0));
293*b1cdbd2cSJim Jagielski 	pDlgEdView->SetLayerVisible( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "HiddenLayer" ) ), sal_False );
294*b1cdbd2cSJim Jagielski 	pDlgEdView->SetMoveSnapOnlyTopLeft( sal_True );
295*b1cdbd2cSJim Jagielski 	pDlgEdView->SetWorkArea( Rectangle( Point( 0, 0 ), pDlgEdPage->GetSize() ) );
296*b1cdbd2cSJim Jagielski 
297*b1cdbd2cSJim Jagielski 	pDlgEdView->SetGridCoarse( aGridSize );
298*b1cdbd2cSJim Jagielski 	pDlgEdView->SetSnapGridWidth(Fraction(aGridSize.Width(), 1), Fraction(aGridSize.Height(), 1));
299*b1cdbd2cSJim Jagielski 	pDlgEdView->SetGridSnap( bGridSnap );
300*b1cdbd2cSJim Jagielski 	pDlgEdView->SetGridVisible( bGridVisible );
301*b1cdbd2cSJim Jagielski 	pDlgEdView->SetDragStripes( sal_False );
302*b1cdbd2cSJim Jagielski 
303*b1cdbd2cSJim Jagielski 	pDlgEdView->SetDesignMode( sal_True );
304*b1cdbd2cSJim Jagielski 
305*b1cdbd2cSJim Jagielski     ::comphelper::disposeComponent( m_xControlContainer );
306*b1cdbd2cSJim Jagielski }
307*b1cdbd2cSJim Jagielski 
308*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
309*b1cdbd2cSJim Jagielski 
SetScrollBars(ScrollBar * pHS,ScrollBar * pVS)310*b1cdbd2cSJim Jagielski void DlgEditor::SetScrollBars( ScrollBar* pHS, ScrollBar* pVS )
311*b1cdbd2cSJim Jagielski {
312*b1cdbd2cSJim Jagielski 	pHScroll = pHS;
313*b1cdbd2cSJim Jagielski 	pVScroll = pVS;
314*b1cdbd2cSJim Jagielski 
315*b1cdbd2cSJim Jagielski     InitScrollBars();
316*b1cdbd2cSJim Jagielski }
317*b1cdbd2cSJim Jagielski 
318*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
319*b1cdbd2cSJim Jagielski 
InitScrollBars()320*b1cdbd2cSJim Jagielski void DlgEditor::InitScrollBars()
321*b1cdbd2cSJim Jagielski {
322*b1cdbd2cSJim Jagielski     DBG_ASSERT( pHScroll, "DlgEditor::InitScrollBars: no horizontal scroll bar!" );
323*b1cdbd2cSJim Jagielski     DBG_ASSERT( pVScroll, "DlgEditor::InitScrollBars: no vertical scroll bar!" );
324*b1cdbd2cSJim Jagielski     if ( !pHScroll || !pVScroll )
325*b1cdbd2cSJim Jagielski         return;
326*b1cdbd2cSJim Jagielski 
327*b1cdbd2cSJim Jagielski 	Size aOutSize = pWindow->GetOutputSize();
328*b1cdbd2cSJim Jagielski 	Size aPgSize  = pDlgEdPage->GetSize();
329*b1cdbd2cSJim Jagielski 
330*b1cdbd2cSJim Jagielski 	pHScroll->SetRange( Range( 0, aPgSize.Width()  ));
331*b1cdbd2cSJim Jagielski 	pVScroll->SetRange( Range( 0, aPgSize.Height() ));
332*b1cdbd2cSJim Jagielski 	pHScroll->SetVisibleSize( (sal_uLong)aOutSize.Width() );
333*b1cdbd2cSJim Jagielski 	pVScroll->SetVisibleSize( (sal_uLong)aOutSize.Height() );
334*b1cdbd2cSJim Jagielski 
335*b1cdbd2cSJim Jagielski 	pHScroll->SetLineSize( aOutSize.Width() / 10 );
336*b1cdbd2cSJim Jagielski 	pVScroll->SetLineSize( aOutSize.Height() / 10 );
337*b1cdbd2cSJim Jagielski 	pHScroll->SetPageSize( aOutSize.Width() / 2 );
338*b1cdbd2cSJim Jagielski 	pVScroll->SetPageSize( aOutSize.Height() / 2 );
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski 	DoScroll( pHScroll );
341*b1cdbd2cSJim Jagielski 	DoScroll( pVScroll );
342*b1cdbd2cSJim Jagielski }
343*b1cdbd2cSJim Jagielski 
344*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
345*b1cdbd2cSJim Jagielski 
DoScroll(ScrollBar *)346*b1cdbd2cSJim Jagielski void DlgEditor::DoScroll( ScrollBar* )
347*b1cdbd2cSJim Jagielski {
348*b1cdbd2cSJim Jagielski 	if( !pHScroll || !pVScroll )
349*b1cdbd2cSJim Jagielski 		return;
350*b1cdbd2cSJim Jagielski 
351*b1cdbd2cSJim Jagielski 	MapMode aMap = pWindow->GetMapMode();
352*b1cdbd2cSJim Jagielski 	Point aOrg = aMap.GetOrigin();
353*b1cdbd2cSJim Jagielski 
354*b1cdbd2cSJim Jagielski 	Size  aScrollPos( pHScroll->GetThumbPos(), pVScroll->GetThumbPos() );
355*b1cdbd2cSJim Jagielski 	aScrollPos = pWindow->LogicToPixel( aScrollPos );
356*b1cdbd2cSJim Jagielski 	aScrollPos = pWindow->PixelToLogic( aScrollPos );
357*b1cdbd2cSJim Jagielski 
358*b1cdbd2cSJim Jagielski 	long  nX   = aScrollPos.Width() + aOrg.X();
359*b1cdbd2cSJim Jagielski 	long  nY   = aScrollPos.Height() + aOrg.Y();
360*b1cdbd2cSJim Jagielski 
361*b1cdbd2cSJim Jagielski 	if( !nX && !nY )
362*b1cdbd2cSJim Jagielski 		return;
363*b1cdbd2cSJim Jagielski 
364*b1cdbd2cSJim Jagielski 	pWindow->Update();
365*b1cdbd2cSJim Jagielski 
366*b1cdbd2cSJim Jagielski 	// #i31562#
367*b1cdbd2cSJim Jagielski 	// When scrolling, someone was rescuing the Wallpaper and forced the window scroll to
368*b1cdbd2cSJim Jagielski 	// be done without background refresh. I do not know why, but that causes the repaint
369*b1cdbd2cSJim Jagielski 	// problems. Taking that out.
370*b1cdbd2cSJim Jagielski 	//	Wallpaper aOldBackground = pWindow->GetBackground();
371*b1cdbd2cSJim Jagielski 	//	pWindow->SetBackground();
372*b1cdbd2cSJim Jagielski 
373*b1cdbd2cSJim Jagielski 	// #i74769# children should be scrolled
374*b1cdbd2cSJim Jagielski 	pWindow->Scroll( -nX, -nY, SCROLL_CHILDREN); // SCROLL_NOCHILDREN );
375*b1cdbd2cSJim Jagielski 	aMap.SetOrigin( Point( -aScrollPos.Width(), -aScrollPos.Height() ) );
376*b1cdbd2cSJim Jagielski 	pWindow->SetMapMode( aMap );
377*b1cdbd2cSJim Jagielski 	pWindow->Update();
378*b1cdbd2cSJim Jagielski 
379*b1cdbd2cSJim Jagielski 	// pWindow->SetBackground( aOldBackground );
380*b1cdbd2cSJim Jagielski 
381*b1cdbd2cSJim Jagielski 	DlgEdHint aHint( DLGED_HINT_WINDOWSCROLLED );
382*b1cdbd2cSJim Jagielski 	Broadcast( aHint );
383*b1cdbd2cSJim Jagielski }
384*b1cdbd2cSJim Jagielski 
385*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
386*b1cdbd2cSJim Jagielski 
UpdateScrollBars()387*b1cdbd2cSJim Jagielski void DlgEditor::UpdateScrollBars()
388*b1cdbd2cSJim Jagielski {
389*b1cdbd2cSJim Jagielski 	MapMode aMap = pWindow->GetMapMode();
390*b1cdbd2cSJim Jagielski 	Point aOrg = aMap.GetOrigin();
391*b1cdbd2cSJim Jagielski 
392*b1cdbd2cSJim Jagielski 	if ( pHScroll )
393*b1cdbd2cSJim Jagielski 		pHScroll->SetThumbPos( -aOrg.X() );
394*b1cdbd2cSJim Jagielski 
395*b1cdbd2cSJim Jagielski 	if ( pVScroll )
396*b1cdbd2cSJim Jagielski 		pVScroll->SetThumbPos( -aOrg.Y() );
397*b1cdbd2cSJim Jagielski }
398*b1cdbd2cSJim Jagielski 
399*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
400*b1cdbd2cSJim Jagielski 
SetDialog(uno::Reference<container::XNameContainer> xUnoControlDialogModel)401*b1cdbd2cSJim Jagielski void DlgEditor::SetDialog( uno::Reference< container::XNameContainer > xUnoControlDialogModel )
402*b1cdbd2cSJim Jagielski {
403*b1cdbd2cSJim Jagielski 	// set dialog model
404*b1cdbd2cSJim Jagielski 	m_xUnoControlDialogModel = xUnoControlDialogModel;
405*b1cdbd2cSJim Jagielski 
406*b1cdbd2cSJim Jagielski 	// create dialog form
407*b1cdbd2cSJim Jagielski 	pDlgEdForm = new DlgEdForm();
408*b1cdbd2cSJim Jagielski 	uno::Reference< awt::XControlModel > xDlgMod( m_xUnoControlDialogModel , uno::UNO_QUERY );
409*b1cdbd2cSJim Jagielski 	pDlgEdForm->SetUnoControlModel(xDlgMod);
410*b1cdbd2cSJim Jagielski 	pDlgEdForm->SetDlgEditor( this );
411*b1cdbd2cSJim Jagielski 	((DlgEdPage*)pDlgEdModel->GetPage(0))->SetDlgEdForm( pDlgEdForm );
412*b1cdbd2cSJim Jagielski 	pDlgEdModel->GetPage(0)->InsertObject( pDlgEdForm );
413*b1cdbd2cSJim Jagielski     AdjustPageSize();
414*b1cdbd2cSJim Jagielski 	pDlgEdForm->SetRectFromProps();
415*b1cdbd2cSJim Jagielski 	pDlgEdForm->UpdateTabIndices();		// for backward compatibility
416*b1cdbd2cSJim Jagielski 	pDlgEdForm->StartListening();
417*b1cdbd2cSJim Jagielski 
418*b1cdbd2cSJim Jagielski 	// create controls
419*b1cdbd2cSJim Jagielski 	Reference< ::com::sun::star::container::XNameAccess > xNameAcc( m_xUnoControlDialogModel, UNO_QUERY );
420*b1cdbd2cSJim Jagielski 	if ( xNameAcc.is() )
421*b1cdbd2cSJim Jagielski 	{
422*b1cdbd2cSJim Jagielski 		// get sequence of control names
423*b1cdbd2cSJim Jagielski 		Sequence< ::rtl::OUString > aNames = xNameAcc->getElementNames();
424*b1cdbd2cSJim Jagielski 		const ::rtl::OUString* pNames = aNames.getConstArray();
425*b1cdbd2cSJim Jagielski 		sal_Int32 nCtrls = aNames.getLength();
426*b1cdbd2cSJim Jagielski 
427*b1cdbd2cSJim Jagielski 		// create a map of tab indices and control names, sorted by tab index
428*b1cdbd2cSJim Jagielski 		IndexToNameMap aIndexToNameMap;
429*b1cdbd2cSJim Jagielski 		for ( sal_Int32 i = 0; i < nCtrls; ++i )
430*b1cdbd2cSJim Jagielski 		{
431*b1cdbd2cSJim Jagielski 			// get name
432*b1cdbd2cSJim Jagielski 			::rtl::OUString aName( pNames[i] );
433*b1cdbd2cSJim Jagielski 
434*b1cdbd2cSJim Jagielski 			// get tab index
435*b1cdbd2cSJim Jagielski 			sal_Int16 nTabIndex = -1;
436*b1cdbd2cSJim Jagielski 			Any aCtrl = xNameAcc->getByName( aName );
437*b1cdbd2cSJim Jagielski 			Reference< ::com::sun::star::beans::XPropertySet > xPSet;
438*b1cdbd2cSJim Jagielski    			aCtrl >>= xPSet;
439*b1cdbd2cSJim Jagielski 			if ( xPSet.is() )
440*b1cdbd2cSJim Jagielski 				xPSet->getPropertyValue( DLGED_PROP_TABINDEX ) >>= nTabIndex;
441*b1cdbd2cSJim Jagielski 
442*b1cdbd2cSJim Jagielski 			// insert into map
443*b1cdbd2cSJim Jagielski 			aIndexToNameMap.insert( IndexToNameMap::value_type( nTabIndex, aName ) );
444*b1cdbd2cSJim Jagielski 		}
445*b1cdbd2cSJim Jagielski 
446*b1cdbd2cSJim Jagielski 		// create controls and insert them into drawing page
447*b1cdbd2cSJim Jagielski 		for ( IndexToNameMap::iterator aIt = aIndexToNameMap.begin(); aIt != aIndexToNameMap.end(); ++aIt )
448*b1cdbd2cSJim Jagielski 		{
449*b1cdbd2cSJim Jagielski             Any aCtrl = xNameAcc->getByName( aIt->second );
450*b1cdbd2cSJim Jagielski             Reference< ::com::sun::star::awt::XControlModel > xCtrlModel;
451*b1cdbd2cSJim Jagielski             aCtrl >>= xCtrlModel;
452*b1cdbd2cSJim Jagielski             DlgEdObj* pCtrlObj = new DlgEdObj();
453*b1cdbd2cSJim Jagielski             pCtrlObj->SetUnoControlModel( xCtrlModel );
454*b1cdbd2cSJim Jagielski             pCtrlObj->SetDlgEdForm( pDlgEdForm );
455*b1cdbd2cSJim Jagielski             pDlgEdForm->AddChild( pCtrlObj );
456*b1cdbd2cSJim Jagielski             pDlgEdModel->GetPage(0)->InsertObject( pCtrlObj );
457*b1cdbd2cSJim Jagielski             pCtrlObj->SetRectFromProps();
458*b1cdbd2cSJim Jagielski             pCtrlObj->UpdateStep();
459*b1cdbd2cSJim Jagielski             pCtrlObj->StartListening();
460*b1cdbd2cSJim Jagielski 		}
461*b1cdbd2cSJim Jagielski 	}
462*b1cdbd2cSJim Jagielski 
463*b1cdbd2cSJim Jagielski 	bFirstDraw = sal_True;
464*b1cdbd2cSJim Jagielski 
465*b1cdbd2cSJim Jagielski 	pDlgEdModel->SetChanged( sal_False );
466*b1cdbd2cSJim Jagielski }
467*b1cdbd2cSJim Jagielski 
ResetDialog(void)468*b1cdbd2cSJim Jagielski void DlgEditor::ResetDialog( void )
469*b1cdbd2cSJim Jagielski {
470*b1cdbd2cSJim Jagielski 	DlgEdForm* pOldDlgEdForm = pDlgEdForm;
471*b1cdbd2cSJim Jagielski 	DlgEdPage* pPage = (DlgEdPage*)pDlgEdModel->GetPage(0);
472*b1cdbd2cSJim Jagielski     SdrPageView* pPgView = pDlgEdView->GetSdrPageView();
473*b1cdbd2cSJim Jagielski 	sal_Bool bWasMarked = pDlgEdView->IsObjMarked( pOldDlgEdForm );
474*b1cdbd2cSJim Jagielski 	pDlgEdView->UnmarkAll();
475*b1cdbd2cSJim Jagielski 	pPage->Clear();
476*b1cdbd2cSJim Jagielski 	pPage->SetDlgEdForm( NULL );
477*b1cdbd2cSJim Jagielski 	SetDialog( m_xUnoControlDialogModel );
478*b1cdbd2cSJim Jagielski 	if( bWasMarked )
479*b1cdbd2cSJim Jagielski 		pDlgEdView->MarkObj( pDlgEdForm, pPgView, sal_False );
480*b1cdbd2cSJim Jagielski }
481*b1cdbd2cSJim Jagielski 
482*b1cdbd2cSJim Jagielski 
483*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
484*b1cdbd2cSJim Jagielski 
GetNumberFormatsSupplier()485*b1cdbd2cSJim Jagielski Reference< util::XNumberFormatsSupplier > const & DlgEditor::GetNumberFormatsSupplier()
486*b1cdbd2cSJim Jagielski {
487*b1cdbd2cSJim Jagielski     if ( !m_xSupplier.is() )
488*b1cdbd2cSJim Jagielski     {
489*b1cdbd2cSJim Jagielski 		Reference< lang::XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory();
490*b1cdbd2cSJim Jagielski         Reference< util::XNumberFormatsSupplier > xSupplier( xMSF->createInstance(
491*b1cdbd2cSJim Jagielski             ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.util.NumberFormatsSupplier") ) ), UNO_QUERY );
492*b1cdbd2cSJim Jagielski 
493*b1cdbd2cSJim Jagielski         ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
494*b1cdbd2cSJim Jagielski         if ( !m_xSupplier.is() )
495*b1cdbd2cSJim Jagielski         {
496*b1cdbd2cSJim Jagielski             m_xSupplier = xSupplier;
497*b1cdbd2cSJim Jagielski         }
498*b1cdbd2cSJim Jagielski     }
499*b1cdbd2cSJim Jagielski     return m_xSupplier;
500*b1cdbd2cSJim Jagielski }
501*b1cdbd2cSJim Jagielski 
502*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
503*b1cdbd2cSJim Jagielski 
MouseButtonDown(const MouseEvent & rMEvt)504*b1cdbd2cSJim Jagielski void DlgEditor::MouseButtonDown( const MouseEvent& rMEvt )
505*b1cdbd2cSJim Jagielski {
506*b1cdbd2cSJim Jagielski 	if( pWindow )
507*b1cdbd2cSJim Jagielski 		pWindow->GrabFocus();
508*b1cdbd2cSJim Jagielski 	pFunc->MouseButtonDown( rMEvt );
509*b1cdbd2cSJim Jagielski }
510*b1cdbd2cSJim Jagielski 
511*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
512*b1cdbd2cSJim Jagielski 
MouseButtonUp(const MouseEvent & rMEvt)513*b1cdbd2cSJim Jagielski void DlgEditor::MouseButtonUp( const MouseEvent& rMEvt )
514*b1cdbd2cSJim Jagielski {
515*b1cdbd2cSJim Jagielski 	sal_Bool bRet = pFunc->MouseButtonUp( rMEvt );
516*b1cdbd2cSJim Jagielski 
517*b1cdbd2cSJim Jagielski 	if( eMode == DLGED_INSERT )
518*b1cdbd2cSJim Jagielski 		bCreateOK = bRet;
519*b1cdbd2cSJim Jagielski }
520*b1cdbd2cSJim Jagielski 
521*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
522*b1cdbd2cSJim Jagielski 
MouseMove(const MouseEvent & rMEvt)523*b1cdbd2cSJim Jagielski void DlgEditor::MouseMove( const MouseEvent& rMEvt )
524*b1cdbd2cSJim Jagielski {
525*b1cdbd2cSJim Jagielski 	pFunc->MouseMove( rMEvt );
526*b1cdbd2cSJim Jagielski }
527*b1cdbd2cSJim Jagielski 
528*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
529*b1cdbd2cSJim Jagielski 
KeyInput(const KeyEvent & rKEvt)530*b1cdbd2cSJim Jagielski sal_Bool DlgEditor::KeyInput( const KeyEvent& rKEvt )
531*b1cdbd2cSJim Jagielski {
532*b1cdbd2cSJim Jagielski 	return pFunc->KeyInput( rKEvt );
533*b1cdbd2cSJim Jagielski }
534*b1cdbd2cSJim Jagielski 
535*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
536*b1cdbd2cSJim Jagielski 
Paint(const Rectangle & rRect)537*b1cdbd2cSJim Jagielski void DlgEditor::Paint( const Rectangle& rRect )
538*b1cdbd2cSJim Jagielski {
539*b1cdbd2cSJim Jagielski 	aPaintRect = rRect;
540*b1cdbd2cSJim Jagielski 	PaintTimeout( &aPaintTimer );
541*b1cdbd2cSJim Jagielski }
542*b1cdbd2cSJim Jagielski 
543*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
544*b1cdbd2cSJim Jagielski 
IMPL_LINK(DlgEditor,PaintTimeout,Timer *,EMPTYARG)545*b1cdbd2cSJim Jagielski IMPL_LINK( DlgEditor, PaintTimeout, Timer *, EMPTYARG )
546*b1cdbd2cSJim Jagielski {
547*b1cdbd2cSJim Jagielski 	if( !pDlgEdView )
548*b1cdbd2cSJim Jagielski 		return 0;
549*b1cdbd2cSJim Jagielski 
550*b1cdbd2cSJim Jagielski 	mnPaintGuard++;
551*b1cdbd2cSJim Jagielski 
552*b1cdbd2cSJim Jagielski 	Size aMacSize;
553*b1cdbd2cSJim Jagielski 	if( bFirstDraw &&
554*b1cdbd2cSJim Jagielski 		pWindow->IsVisible() &&
555*b1cdbd2cSJim Jagielski 		(pWindow->GetOutputSize() != aMacSize) )
556*b1cdbd2cSJim Jagielski 	{
557*b1cdbd2cSJim Jagielski 		bFirstDraw = sal_False;
558*b1cdbd2cSJim Jagielski 
559*b1cdbd2cSJim Jagielski 		// get property set
560*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >  xPSet(pDlgEdForm->GetUnoControlModel(), ::com::sun::star::uno::UNO_QUERY);
561*b1cdbd2cSJim Jagielski 
562*b1cdbd2cSJim Jagielski 		if ( xPSet.is() )
563*b1cdbd2cSJim Jagielski 		{
564*b1cdbd2cSJim Jagielski 			// get dialog size from properties
565*b1cdbd2cSJim Jagielski 			sal_Int32 nWidth = 0, nHeight = 0;
566*b1cdbd2cSJim Jagielski 			xPSet->getPropertyValue( DLGED_PROP_WIDTH ) >>= nWidth;
567*b1cdbd2cSJim Jagielski 			xPSet->getPropertyValue( DLGED_PROP_HEIGHT ) >>= nHeight;
568*b1cdbd2cSJim Jagielski 
569*b1cdbd2cSJim Jagielski 			if ( nWidth == 0 && nHeight == 0 )
570*b1cdbd2cSJim Jagielski 			{
571*b1cdbd2cSJim Jagielski 				Size   aSize = pWindow->PixelToLogic( Size( 400, 300 ) );
572*b1cdbd2cSJim Jagielski 
573*b1cdbd2cSJim Jagielski 				// align with grid
574*b1cdbd2cSJim Jagielski 				Size aGridSize_(long(pDlgEdView->GetSnapGridWidthX()), long(pDlgEdView->GetSnapGridWidthY()));
575*b1cdbd2cSJim Jagielski 				aSize.Width()  -= aSize.Width()  % aGridSize_.Width();
576*b1cdbd2cSJim Jagielski 				aSize.Height() -= aSize.Height() % aGridSize_.Height();
577*b1cdbd2cSJim Jagielski 
578*b1cdbd2cSJim Jagielski 				Point  aPos;
579*b1cdbd2cSJim Jagielski 				Size   aOutSize = pWindow->GetOutputSize();
580*b1cdbd2cSJim Jagielski 				aPos.X() = (aOutSize.Width()>>1)  -  (aSize.Width()>>1);
581*b1cdbd2cSJim Jagielski 				aPos.Y() = (aOutSize.Height()>>1) -  (aSize.Height()>>1);
582*b1cdbd2cSJim Jagielski 
583*b1cdbd2cSJim Jagielski 				// align with grid
584*b1cdbd2cSJim Jagielski 				aPos.X() -= aPos.X() % aGridSize_.Width();
585*b1cdbd2cSJim Jagielski 				aPos.Y() -= aPos.Y() % aGridSize_.Height();
586*b1cdbd2cSJim Jagielski 
587*b1cdbd2cSJim Jagielski 				// don't put in the corner
588*b1cdbd2cSJim Jagielski 				Point aMinPos = pWindow->PixelToLogic( Point( 30, 20 ) );
589*b1cdbd2cSJim Jagielski 				if( (aPos.X() < aMinPos.X()) || (aPos.Y() < aMinPos.Y()) )
590*b1cdbd2cSJim Jagielski 				{
591*b1cdbd2cSJim Jagielski 					aPos = aMinPos;
592*b1cdbd2cSJim Jagielski 					aPos.X() -= aPos.X() % aGridSize_.Width();
593*b1cdbd2cSJim Jagielski 					aPos.Y() -= aPos.Y() % aGridSize_.Height();
594*b1cdbd2cSJim Jagielski 				}
595*b1cdbd2cSJim Jagielski 
596*b1cdbd2cSJim Jagielski 				// set dialog position and size
597*b1cdbd2cSJim Jagielski 				pDlgEdForm->SetSnapRect( Rectangle( aPos, aSize ) );
598*b1cdbd2cSJim Jagielski 				pDlgEdForm->EndListening(sal_False);
599*b1cdbd2cSJim Jagielski 				pDlgEdForm->SetPropsFromRect();
600*b1cdbd2cSJim Jagielski 				pDlgEdForm->GetDlgEditor()->SetDialogModelChanged(sal_True);
601*b1cdbd2cSJim Jagielski 				pDlgEdForm->StartListening();
602*b1cdbd2cSJim Jagielski 
603*b1cdbd2cSJim Jagielski 				// set position and size of controls
604*b1cdbd2cSJim Jagielski 				sal_uLong nObjCount;
605*b1cdbd2cSJim Jagielski 				if ( pDlgEdPage && ( ( nObjCount = pDlgEdPage->GetObjCount() ) > 0 ) )
606*b1cdbd2cSJim Jagielski 				{
607*b1cdbd2cSJim Jagielski 					for ( sal_uLong i = 0 ; i < nObjCount ; i++ )
608*b1cdbd2cSJim Jagielski 					{
609*b1cdbd2cSJim Jagielski 						SdrObject* pObj = pDlgEdPage->GetObj(i);
610*b1cdbd2cSJim Jagielski 						DlgEdObj* pDlgEdObj = PTR_CAST(DlgEdObj, pObj);
611*b1cdbd2cSJim Jagielski 						if ( pDlgEdObj && !pDlgEdObj->ISA(DlgEdForm) )
612*b1cdbd2cSJim Jagielski 							pDlgEdObj->SetRectFromProps();
613*b1cdbd2cSJim Jagielski 					}
614*b1cdbd2cSJim Jagielski 				}
615*b1cdbd2cSJim Jagielski 			}
616*b1cdbd2cSJim Jagielski 		}
617*b1cdbd2cSJim Jagielski 	}
618*b1cdbd2cSJim Jagielski 
619*b1cdbd2cSJim Jagielski 	// repaint, get PageView and prepare Region
620*b1cdbd2cSJim Jagielski     SdrPageView* pPgView = pDlgEdView->GetSdrPageView();
621*b1cdbd2cSJim Jagielski 	const Region aPaintRectRegion(aPaintRect);
622*b1cdbd2cSJim Jagielski 
623*b1cdbd2cSJim Jagielski 
624*b1cdbd2cSJim Jagielski 	// #i74769#
625*b1cdbd2cSJim Jagielski 	SdrPaintWindow* pTargetPaintWindow = 0;
626*b1cdbd2cSJim Jagielski 
627*b1cdbd2cSJim Jagielski 	// mark repaint start
628*b1cdbd2cSJim Jagielski 	if(pPgView)
629*b1cdbd2cSJim Jagielski 	{
630*b1cdbd2cSJim Jagielski 		pTargetPaintWindow = pPgView->GetView().BeginDrawLayers(pWindow, aPaintRectRegion);
631*b1cdbd2cSJim Jagielski 		OSL_ENSURE(pTargetPaintWindow, "BeginDrawLayers: Got no SdrPaintWindow (!)");
632*b1cdbd2cSJim Jagielski 	}
633*b1cdbd2cSJim Jagielski 
634*b1cdbd2cSJim Jagielski 	// draw background self using wallpaper
635*b1cdbd2cSJim Jagielski 	// #i79128# ...and use correct OutDev for that
636*b1cdbd2cSJim Jagielski     if(pTargetPaintWindow)
637*b1cdbd2cSJim Jagielski 	{
638*b1cdbd2cSJim Jagielski 		OutputDevice& rTargetOutDev = pTargetPaintWindow->GetTargetOutputDevice();
639*b1cdbd2cSJim Jagielski 		rTargetOutDev.DrawWallpaper(aPaintRect, Wallpaper(Color(COL_WHITE)));
640*b1cdbd2cSJim Jagielski 	}
641*b1cdbd2cSJim Jagielski 
642*b1cdbd2cSJim Jagielski     // do paint (unbuffered) and mark repaint end
643*b1cdbd2cSJim Jagielski     if(pPgView)
644*b1cdbd2cSJim Jagielski 	{
645*b1cdbd2cSJim Jagielski 		// paint of control layer is done in EndDrawLayers anyway...
646*b1cdbd2cSJim Jagielski 		pPgView->GetView().EndDrawLayers(*pTargetPaintWindow, true);
647*b1cdbd2cSJim Jagielski 	}
648*b1cdbd2cSJim Jagielski 
649*b1cdbd2cSJim Jagielski 	mnPaintGuard--;
650*b1cdbd2cSJim Jagielski 
651*b1cdbd2cSJim Jagielski 	DBG_ASSERT(pWindow,"Window not set");
652*b1cdbd2cSJim Jagielski 	return 0;
653*b1cdbd2cSJim Jagielski }
654*b1cdbd2cSJim Jagielski 
655*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
656*b1cdbd2cSJim Jagielski 
IMPL_LINK(DlgEditor,MarkTimeout,Timer *,EMPTYARG)657*b1cdbd2cSJim Jagielski IMPL_LINK( DlgEditor, MarkTimeout, Timer *, EMPTYARG )
658*b1cdbd2cSJim Jagielski {
659*b1cdbd2cSJim Jagielski     BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
660*b1cdbd2cSJim Jagielski 
661*b1cdbd2cSJim Jagielski     SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL;
662*b1cdbd2cSJim Jagielski     SfxChildWindow* pChildWin = pViewFrame ? pViewFrame->GetChildWindow( SID_SHOW_PROPERTYBROWSER ) : NULL;
663*b1cdbd2cSJim Jagielski     if ( !pChildWin )
664*b1cdbd2cSJim Jagielski         return 0L;
665*b1cdbd2cSJim Jagielski 
666*b1cdbd2cSJim Jagielski     ((PropBrw*)(pChildWin->GetWindow()))->Update( pIDEShell );
667*b1cdbd2cSJim Jagielski 
668*b1cdbd2cSJim Jagielski     return 1;
669*b1cdbd2cSJim Jagielski }
670*b1cdbd2cSJim Jagielski 
671*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
672*b1cdbd2cSJim Jagielski 
SetMode(DlgEdMode eNewMode)673*b1cdbd2cSJim Jagielski void DlgEditor::SetMode( DlgEdMode eNewMode )
674*b1cdbd2cSJim Jagielski {
675*b1cdbd2cSJim Jagielski 	if ( eNewMode != eMode )
676*b1cdbd2cSJim Jagielski 	{
677*b1cdbd2cSJim Jagielski 		delete pFunc;
678*b1cdbd2cSJim Jagielski 
679*b1cdbd2cSJim Jagielski 		if ( eNewMode == DLGED_INSERT )
680*b1cdbd2cSJim Jagielski 			pFunc = new DlgEdFuncInsert( this );
681*b1cdbd2cSJim Jagielski 		else
682*b1cdbd2cSJim Jagielski 			pFunc = new DlgEdFuncSelect( this );
683*b1cdbd2cSJim Jagielski 
684*b1cdbd2cSJim Jagielski 		if ( eNewMode == DLGED_READONLY )
685*b1cdbd2cSJim Jagielski 			pDlgEdModel->SetReadOnly( sal_True );
686*b1cdbd2cSJim Jagielski 		else
687*b1cdbd2cSJim Jagielski 			pDlgEdModel->SetReadOnly( sal_False );
688*b1cdbd2cSJim Jagielski 	}
689*b1cdbd2cSJim Jagielski 
690*b1cdbd2cSJim Jagielski 	if ( eNewMode == DLGED_TEST )
691*b1cdbd2cSJim Jagielski 		ShowDialog();
692*b1cdbd2cSJim Jagielski 
693*b1cdbd2cSJim Jagielski 	eMode = eNewMode;
694*b1cdbd2cSJim Jagielski }
695*b1cdbd2cSJim Jagielski 
696*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
697*b1cdbd2cSJim Jagielski 
SetInsertObj(sal_uInt16 eObj)698*b1cdbd2cSJim Jagielski void DlgEditor::SetInsertObj( sal_uInt16 eObj )
699*b1cdbd2cSJim Jagielski {
700*b1cdbd2cSJim Jagielski 	eActObj = eObj;
701*b1cdbd2cSJim Jagielski 
702*b1cdbd2cSJim Jagielski 	if( pDlgEdView )
703*b1cdbd2cSJim Jagielski 		pDlgEdView->SetCurrentObj( eActObj, DlgInventor );
704*b1cdbd2cSJim Jagielski }
705*b1cdbd2cSJim Jagielski 
706*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
707*b1cdbd2cSJim Jagielski 
GetInsertObj() const708*b1cdbd2cSJim Jagielski sal_uInt16 DlgEditor::GetInsertObj() const
709*b1cdbd2cSJim Jagielski {
710*b1cdbd2cSJim Jagielski 	return eActObj;
711*b1cdbd2cSJim Jagielski }
712*b1cdbd2cSJim Jagielski 
713*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
714*b1cdbd2cSJim Jagielski 
CreateDefaultObject()715*b1cdbd2cSJim Jagielski void DlgEditor::CreateDefaultObject()
716*b1cdbd2cSJim Jagielski {
717*b1cdbd2cSJim Jagielski 	// create object by factory
718*b1cdbd2cSJim Jagielski 	SdrObject* pObj = SdrObjFactory::MakeNewObject( pDlgEdView->GetCurrentObjInventor(), pDlgEdView->GetCurrentObjIdentifier(), pDlgEdPage );
719*b1cdbd2cSJim Jagielski 
720*b1cdbd2cSJim Jagielski 	DlgEdObj* pDlgEdObj = PTR_CAST( DlgEdObj, pObj );
721*b1cdbd2cSJim Jagielski 	if ( pDlgEdObj )
722*b1cdbd2cSJim Jagielski 	{
723*b1cdbd2cSJim Jagielski 		// set position and size
724*b1cdbd2cSJim Jagielski 		Size aSize = pWindow->PixelToLogic( Size( 96, 24 ) );
725*b1cdbd2cSJim Jagielski 		Point aPoint = (pDlgEdForm->GetSnapRect()).Center();
726*b1cdbd2cSJim Jagielski 		aPoint.X() -= aSize.Width() / 2;
727*b1cdbd2cSJim Jagielski 		aPoint.Y() -= aSize.Height() / 2;
728*b1cdbd2cSJim Jagielski 		pDlgEdObj->SetSnapRect( Rectangle( aPoint, aSize ) );
729*b1cdbd2cSJim Jagielski 
730*b1cdbd2cSJim Jagielski 		// set default property values
731*b1cdbd2cSJim Jagielski 		pDlgEdObj->SetDefaults();
732*b1cdbd2cSJim Jagielski 
733*b1cdbd2cSJim Jagielski 		// insert object into drawing page
734*b1cdbd2cSJim Jagielski 		SdrPageView* pPageView = pDlgEdView->GetSdrPageView();
735*b1cdbd2cSJim Jagielski 		pDlgEdView->InsertObjectAtView( pDlgEdObj, *pPageView);
736*b1cdbd2cSJim Jagielski 
737*b1cdbd2cSJim Jagielski 		// start listening
738*b1cdbd2cSJim Jagielski 		pDlgEdObj->StartListening();
739*b1cdbd2cSJim Jagielski 	}
740*b1cdbd2cSJim Jagielski }
741*b1cdbd2cSJim Jagielski 
742*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
743*b1cdbd2cSJim Jagielski 
Cut()744*b1cdbd2cSJim Jagielski void DlgEditor::Cut()
745*b1cdbd2cSJim Jagielski {
746*b1cdbd2cSJim Jagielski 	Copy();
747*b1cdbd2cSJim Jagielski 	Delete();
748*b1cdbd2cSJim Jagielski }
749*b1cdbd2cSJim Jagielski 
750*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
751*b1cdbd2cSJim Jagielski 
implCopyStreamToByteSequence(Reference<XInputStream> xStream,Sequence<sal_Int8> & bytes)752*b1cdbd2cSJim Jagielski void implCopyStreamToByteSequence( Reference< XInputStream > xStream,
753*b1cdbd2cSJim Jagielski 	Sequence< sal_Int8 >& bytes )
754*b1cdbd2cSJim Jagielski {
755*b1cdbd2cSJim Jagielski 	sal_Int32 nRead = xStream->readBytes( bytes, xStream->available() );
756*b1cdbd2cSJim Jagielski 	for (;;)
757*b1cdbd2cSJim Jagielski 	{
758*b1cdbd2cSJim Jagielski 		Sequence< sal_Int8 > readBytes;
759*b1cdbd2cSJim Jagielski 		nRead = xStream->readBytes( readBytes, 1024 );
760*b1cdbd2cSJim Jagielski 		if (! nRead)
761*b1cdbd2cSJim Jagielski 			break;
762*b1cdbd2cSJim Jagielski 
763*b1cdbd2cSJim Jagielski 		sal_Int32 nPos = bytes.getLength();
764*b1cdbd2cSJim Jagielski 		bytes.realloc( nPos + nRead );
765*b1cdbd2cSJim Jagielski 		::rtl_copyMemory( bytes.getArray() + nPos, readBytes.getConstArray(), (sal_uInt32)nRead );
766*b1cdbd2cSJim Jagielski 	}
767*b1cdbd2cSJim Jagielski }
768*b1cdbd2cSJim Jagielski 
Copy()769*b1cdbd2cSJim Jagielski void DlgEditor::Copy()
770*b1cdbd2cSJim Jagielski {
771*b1cdbd2cSJim Jagielski 	if( !pDlgEdView->AreObjectsMarked() )
772*b1cdbd2cSJim Jagielski 		return;
773*b1cdbd2cSJim Jagielski 
774*b1cdbd2cSJim Jagielski 	// stop all drawing actions
775*b1cdbd2cSJim Jagielski 	pDlgEdView->BrkAction();
776*b1cdbd2cSJim Jagielski 
777*b1cdbd2cSJim Jagielski 	// create an empty clipboard dialog model
778*b1cdbd2cSJim Jagielski 	Reference< util::XCloneable > xClone( m_xUnoControlDialogModel, UNO_QUERY );
779*b1cdbd2cSJim Jagielski 	Reference< util::XCloneable > xNewClone = xClone->createClone();
780*b1cdbd2cSJim Jagielski 	Reference< container::XNameContainer > xClipDialogModel( xNewClone, UNO_QUERY );
781*b1cdbd2cSJim Jagielski 
782*b1cdbd2cSJim Jagielski 	Reference< container::XNameAccess > xNAcc( xClipDialogModel, UNO_QUERY );
783*b1cdbd2cSJim Jagielski 	if ( xNAcc.is() )
784*b1cdbd2cSJim Jagielski 	{
785*b1cdbd2cSJim Jagielski    		Sequence< OUString > aNames = xNAcc->getElementNames();
786*b1cdbd2cSJim Jagielski    		const OUString* pNames = aNames.getConstArray();
787*b1cdbd2cSJim Jagielski 		sal_uInt32 nCtrls = aNames.getLength();
788*b1cdbd2cSJim Jagielski 
789*b1cdbd2cSJim Jagielski 		for ( sal_uInt32 n = 0; n < nCtrls; n++ )
790*b1cdbd2cSJim Jagielski 		{
791*b1cdbd2cSJim Jagielski    			xClipDialogModel->removeByName( pNames[n] );
792*b1cdbd2cSJim Jagielski 		}
793*b1cdbd2cSJim Jagielski 	}
794*b1cdbd2cSJim Jagielski 
795*b1cdbd2cSJim Jagielski 	// insert control models of marked objects into clipboard dialog model
796*b1cdbd2cSJim Jagielski 	sal_uLong nMark = pDlgEdView->GetMarkedObjectList().GetMarkCount();
797*b1cdbd2cSJim Jagielski 	for( sal_uLong i = 0; i < nMark; i++ )
798*b1cdbd2cSJim Jagielski 	{
799*b1cdbd2cSJim Jagielski 		SdrObject* pObj = pDlgEdView->GetMarkedObjectList().GetMark(i)->GetMarkedSdrObj();
800*b1cdbd2cSJim Jagielski 		DlgEdObj* pDlgEdObj = PTR_CAST(DlgEdObj, pObj);
801*b1cdbd2cSJim Jagielski 
802*b1cdbd2cSJim Jagielski 		if (pDlgEdObj && !pDlgEdObj->ISA(DlgEdForm) )
803*b1cdbd2cSJim Jagielski 		{
804*b1cdbd2cSJim Jagielski 			::rtl::OUString aName;
805*b1cdbd2cSJim Jagielski 			Reference< beans::XPropertySet >  xMarkPSet(pDlgEdObj->GetUnoControlModel(), uno::UNO_QUERY);
806*b1cdbd2cSJim Jagielski 			if (xMarkPSet.is())
807*b1cdbd2cSJim Jagielski 			{
808*b1cdbd2cSJim Jagielski 				xMarkPSet->getPropertyValue( DLGED_PROP_NAME ) >>= aName;
809*b1cdbd2cSJim Jagielski 			}
810*b1cdbd2cSJim Jagielski 
811*b1cdbd2cSJim Jagielski 			Reference< container::XNameAccess > xNameAcc(m_xUnoControlDialogModel, UNO_QUERY );
812*b1cdbd2cSJim Jagielski 			if ( xNameAcc.is() && xNameAcc->hasByName(aName) )
813*b1cdbd2cSJim Jagielski 			{
814*b1cdbd2cSJim Jagielski 				Any aCtrl = xNameAcc->getByName( aName );
815*b1cdbd2cSJim Jagielski 
816*b1cdbd2cSJim Jagielski 				// clone control model
817*b1cdbd2cSJim Jagielski 				Reference< util::XCloneable > xCtrl;
818*b1cdbd2cSJim Jagielski    				aCtrl >>= xCtrl;
819*b1cdbd2cSJim Jagielski 				Reference< util::XCloneable > xNewCtrl = xCtrl->createClone();
820*b1cdbd2cSJim Jagielski 				Any aNewCtrl;
821*b1cdbd2cSJim Jagielski 				aNewCtrl <<= xNewCtrl;
822*b1cdbd2cSJim Jagielski 
823*b1cdbd2cSJim Jagielski 				if (xClipDialogModel.is())
824*b1cdbd2cSJim Jagielski 					xClipDialogModel->insertByName( aName , aNewCtrl );
825*b1cdbd2cSJim Jagielski 			}
826*b1cdbd2cSJim Jagielski 		}
827*b1cdbd2cSJim Jagielski 	}
828*b1cdbd2cSJim Jagielski 
829*b1cdbd2cSJim Jagielski 	// export clipboard dialog model to xml
830*b1cdbd2cSJim Jagielski     Reference< XComponentContext > xContext;
831*b1cdbd2cSJim Jagielski     Reference< beans::XPropertySet > xProps( ::comphelper::getProcessServiceFactory(), UNO_QUERY );
832*b1cdbd2cSJim Jagielski     OSL_ASSERT( xProps.is() );
833*b1cdbd2cSJim Jagielski     OSL_VERIFY( xProps->getPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultContext")) ) >>= xContext );
834*b1cdbd2cSJim Jagielski 	Reference< XInputStreamProvider > xISP = ::xmlscript::exportDialogModel( xClipDialogModel, xContext );
835*b1cdbd2cSJim Jagielski 	Reference< XInputStream > xStream( xISP->createInputStream() );
836*b1cdbd2cSJim Jagielski 	Sequence< sal_Int8 > DialogModelBytes;
837*b1cdbd2cSJim Jagielski 	implCopyStreamToByteSequence( xStream, DialogModelBytes );
838*b1cdbd2cSJim Jagielski 	xStream->closeInput();
839*b1cdbd2cSJim Jagielski 
840*b1cdbd2cSJim Jagielski 	// set clipboard content
841*b1cdbd2cSJim Jagielski 	Reference< datatransfer::clipboard::XClipboard > xClipboard = GetWindow()->GetClipboard();
842*b1cdbd2cSJim Jagielski 	if ( xClipboard.is() )
843*b1cdbd2cSJim Jagielski 	{
844*b1cdbd2cSJim Jagielski 		// With resource?
845*b1cdbd2cSJim Jagielski 		uno::Reference< beans::XPropertySet > xDialogModelPropSet( m_xUnoControlDialogModel, uno::UNO_QUERY );
846*b1cdbd2cSJim Jagielski 		uno::Reference< resource::XStringResourcePersistence > xStringResourcePersistence;
847*b1cdbd2cSJim Jagielski 		if( xDialogModelPropSet.is() )
848*b1cdbd2cSJim Jagielski 		{
849*b1cdbd2cSJim Jagielski 			try
850*b1cdbd2cSJim Jagielski 			{
851*b1cdbd2cSJim Jagielski 				Any aResourceResolver = xDialogModelPropSet->getPropertyValue( aResourceResolverPropName );
852*b1cdbd2cSJim Jagielski 				aResourceResolver >>= xStringResourcePersistence;
853*b1cdbd2cSJim Jagielski 			}
854*b1cdbd2cSJim Jagielski 			catch( UnknownPropertyException& )
855*b1cdbd2cSJim Jagielski 			{}
856*b1cdbd2cSJim Jagielski 		}
857*b1cdbd2cSJim Jagielski 
858*b1cdbd2cSJim Jagielski 		DlgEdTransferableImpl* pTrans = NULL;
859*b1cdbd2cSJim Jagielski 		if( xStringResourcePersistence.is() )
860*b1cdbd2cSJim Jagielski 		{
861*b1cdbd2cSJim Jagielski 			// With resource, support old and new format
862*b1cdbd2cSJim Jagielski 
863*b1cdbd2cSJim Jagielski 			// Export xClipDialogModel another time with ids replaced by current language string
864*b1cdbd2cSJim Jagielski 			uno::Reference< resource::XStringResourceManager >
865*b1cdbd2cSJim Jagielski 				xStringResourceManager( xStringResourcePersistence, uno::UNO_QUERY );
866*b1cdbd2cSJim Jagielski 			LocalizationMgr::resetResourceForDialog( xClipDialogModel, xStringResourceManager );
867*b1cdbd2cSJim Jagielski 			Reference< XInputStreamProvider > xISP2 = ::xmlscript::exportDialogModel( xClipDialogModel, xContext );
868*b1cdbd2cSJim Jagielski 			Reference< XInputStream > xStream2( xISP2->createInputStream() );
869*b1cdbd2cSJim Jagielski 			Sequence< sal_Int8 > NoResourceDialogModelBytes;
870*b1cdbd2cSJim Jagielski 			implCopyStreamToByteSequence( xStream2, NoResourceDialogModelBytes );
871*b1cdbd2cSJim Jagielski 			xStream2->closeInput();
872*b1cdbd2cSJim Jagielski 
873*b1cdbd2cSJim Jagielski 			// Old format contains dialog with replaced ids
874*b1cdbd2cSJim Jagielski 			Sequence< Any > aSeqData(2);
875*b1cdbd2cSJim Jagielski 			Any aNoResourceDialogModelBytesAny;
876*b1cdbd2cSJim Jagielski 			aNoResourceDialogModelBytesAny <<= NoResourceDialogModelBytes;
877*b1cdbd2cSJim Jagielski 			aSeqData[0] = aNoResourceDialogModelBytesAny;
878*b1cdbd2cSJim Jagielski 
879*b1cdbd2cSJim Jagielski 			// New format contains dialog and resource
880*b1cdbd2cSJim Jagielski 			Sequence< sal_Int8 > aResData = xStringResourcePersistence->exportBinary();
881*b1cdbd2cSJim Jagielski 
882*b1cdbd2cSJim Jagielski 			// Create sequence for combined dialog and resource
883*b1cdbd2cSJim Jagielski 			sal_Int32 nDialogDataLen = DialogModelBytes.getLength();
884*b1cdbd2cSJim Jagielski 			sal_Int32 nResDataLen = aResData.getLength();
885*b1cdbd2cSJim Jagielski 
886*b1cdbd2cSJim Jagielski 			// Combined data = 4 Bytes 32Bit Offset to begin of resource data, lowest byte first
887*b1cdbd2cSJim Jagielski 			// + nDialogDataLen bytes dialog data + nResDataLen resource data
888*b1cdbd2cSJim Jagielski 			sal_Int32 nTotalLen = 4 + nDialogDataLen + nResDataLen;
889*b1cdbd2cSJim Jagielski 			sal_Int32 nResOffset = 4 + nDialogDataLen;
890*b1cdbd2cSJim Jagielski 			Sequence< sal_Int8 > aCombinedData( nTotalLen );
891*b1cdbd2cSJim Jagielski 			sal_Int8* pCombinedData = aCombinedData.getArray();
892*b1cdbd2cSJim Jagielski 
893*b1cdbd2cSJim Jagielski 			// Write offset
894*b1cdbd2cSJim Jagielski 			sal_Int32 n = nResOffset;
895*b1cdbd2cSJim Jagielski 			for( sal_Int16 i = 0 ; i < 4 ; i++ )
896*b1cdbd2cSJim Jagielski 			{
897*b1cdbd2cSJim Jagielski 				pCombinedData[i] = sal_Int8( n & 0xff );
898*b1cdbd2cSJim Jagielski 				n >>= 8;
899*b1cdbd2cSJim Jagielski 			}
900*b1cdbd2cSJim Jagielski 			::rtl_copyMemory( pCombinedData + 4, DialogModelBytes.getConstArray(), nDialogDataLen );
901*b1cdbd2cSJim Jagielski 			::rtl_copyMemory( pCombinedData + nResOffset, aResData.getConstArray(), nResDataLen );
902*b1cdbd2cSJim Jagielski 
903*b1cdbd2cSJim Jagielski 			Any aCombinedDataAny;
904*b1cdbd2cSJim Jagielski 			aCombinedDataAny <<= aCombinedData;
905*b1cdbd2cSJim Jagielski 			aSeqData[1] = aCombinedDataAny;
906*b1cdbd2cSJim Jagielski 
907*b1cdbd2cSJim Jagielski 			pTrans = new DlgEdTransferableImpl( m_ClipboardDataFlavorsResource, aSeqData );
908*b1cdbd2cSJim Jagielski 		}
909*b1cdbd2cSJim Jagielski 		else
910*b1cdbd2cSJim Jagielski 		{
911*b1cdbd2cSJim Jagielski 			// No resource, support only old format
912*b1cdbd2cSJim Jagielski 			Sequence< Any > aSeqData(1);
913*b1cdbd2cSJim Jagielski 			Any aDialogModelBytesAny;
914*b1cdbd2cSJim Jagielski 			aDialogModelBytesAny <<= DialogModelBytes;
915*b1cdbd2cSJim Jagielski 			aSeqData[0] = aDialogModelBytesAny;
916*b1cdbd2cSJim Jagielski 			pTrans = new DlgEdTransferableImpl( m_ClipboardDataFlavors , aSeqData );
917*b1cdbd2cSJim Jagielski 		}
918*b1cdbd2cSJim Jagielski 		const sal_uInt32 nRef = Application::ReleaseSolarMutex();
919*b1cdbd2cSJim Jagielski 		xClipboard->setContents( pTrans , pTrans );
920*b1cdbd2cSJim Jagielski 		Application::AcquireSolarMutex( nRef );
921*b1cdbd2cSJim Jagielski 	}
922*b1cdbd2cSJim Jagielski }
923*b1cdbd2cSJim Jagielski 
924*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
925*b1cdbd2cSJim Jagielski 
Paste()926*b1cdbd2cSJim Jagielski void DlgEditor::Paste()
927*b1cdbd2cSJim Jagielski {
928*b1cdbd2cSJim Jagielski 	// stop all drawing actions
929*b1cdbd2cSJim Jagielski 	pDlgEdView->BrkAction();
930*b1cdbd2cSJim Jagielski 
931*b1cdbd2cSJim Jagielski 	// unmark all objects
932*b1cdbd2cSJim Jagielski 	pDlgEdView->UnmarkAll();
933*b1cdbd2cSJim Jagielski 
934*b1cdbd2cSJim Jagielski 	// get clipboard
935*b1cdbd2cSJim Jagielski 	Reference< datatransfer::clipboard::XClipboard > xClipboard = GetWindow()->GetClipboard();
936*b1cdbd2cSJim Jagielski 	if ( xClipboard.is() )
937*b1cdbd2cSJim Jagielski 	{
938*b1cdbd2cSJim Jagielski 		// get clipboard content
939*b1cdbd2cSJim Jagielski 		const sal_uInt32 nRef = Application::ReleaseSolarMutex();
940*b1cdbd2cSJim Jagielski 		Reference< datatransfer::XTransferable > xTransf = xClipboard->getContents();
941*b1cdbd2cSJim Jagielski 		Application::AcquireSolarMutex( nRef );
942*b1cdbd2cSJim Jagielski 		if ( xTransf.is() )
943*b1cdbd2cSJim Jagielski 		{
944*b1cdbd2cSJim Jagielski 			// Is target dialog (library) localized?
945*b1cdbd2cSJim Jagielski 			uno::Reference< beans::XPropertySet > xDialogModelPropSet( m_xUnoControlDialogModel, uno::UNO_QUERY );
946*b1cdbd2cSJim Jagielski 			uno::Reference< resource::XStringResourceManager > xStringResourceManager;
947*b1cdbd2cSJim Jagielski 			if( xDialogModelPropSet.is() )
948*b1cdbd2cSJim Jagielski 			{
949*b1cdbd2cSJim Jagielski 				try
950*b1cdbd2cSJim Jagielski 				{
951*b1cdbd2cSJim Jagielski 					Any aResourceResolver = xDialogModelPropSet->getPropertyValue( aResourceResolverPropName );
952*b1cdbd2cSJim Jagielski 					aResourceResolver >>= xStringResourceManager;
953*b1cdbd2cSJim Jagielski 				}
954*b1cdbd2cSJim Jagielski 				catch( UnknownPropertyException& )
955*b1cdbd2cSJim Jagielski 				{}
956*b1cdbd2cSJim Jagielski 			}
957*b1cdbd2cSJim Jagielski 			bool bLocalized = false;
958*b1cdbd2cSJim Jagielski 			if( xStringResourceManager.is() )
959*b1cdbd2cSJim Jagielski 				bLocalized = ( xStringResourceManager->getLocales().getLength() > 0 );
960*b1cdbd2cSJim Jagielski 
961*b1cdbd2cSJim Jagielski 			if ( xTransf->isDataFlavorSupported( m_ClipboardDataFlavors[0] ) )
962*b1cdbd2cSJim Jagielski 			{
963*b1cdbd2cSJim Jagielski 				// create clipboard dialog model from xml
964*b1cdbd2cSJim Jagielski 				Reference< lang::XMultiServiceFactory > xMSF = getProcessServiceFactory();
965*b1cdbd2cSJim Jagielski 				Reference< container::XNameContainer > xClipDialogModel( xMSF->createInstance
966*b1cdbd2cSJim Jagielski 					( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlDialogModel" ) ) ),
967*b1cdbd2cSJim Jagielski 						uno::UNO_QUERY );
968*b1cdbd2cSJim Jagielski 
969*b1cdbd2cSJim Jagielski 				bool bSourceIsLocalized = false;
970*b1cdbd2cSJim Jagielski 				Sequence< sal_Int8 > DialogModelBytes;
971*b1cdbd2cSJim Jagielski 				Sequence< sal_Int8 > aResData;
972*b1cdbd2cSJim Jagielski 				if( bLocalized && xTransf->isDataFlavorSupported( m_ClipboardDataFlavorsResource[1] ) )
973*b1cdbd2cSJim Jagielski 				{
974*b1cdbd2cSJim Jagielski 					bSourceIsLocalized = true;
975*b1cdbd2cSJim Jagielski 
976*b1cdbd2cSJim Jagielski 					Any aCombinedDataAny = xTransf->getTransferData( m_ClipboardDataFlavorsResource[1] );
977*b1cdbd2cSJim Jagielski 					Sequence< sal_Int8 > aCombinedData;
978*b1cdbd2cSJim Jagielski 					aCombinedDataAny >>= aCombinedData;
979*b1cdbd2cSJim Jagielski 					const sal_Int8* pCombinedData = aCombinedData.getConstArray();
980*b1cdbd2cSJim Jagielski 
981*b1cdbd2cSJim Jagielski 					sal_Int32 nTotalLen = aCombinedData.getLength();
982*b1cdbd2cSJim Jagielski 
983*b1cdbd2cSJim Jagielski 					// Reading offset
984*b1cdbd2cSJim Jagielski 					sal_Int32 nResOffset = 0;
985*b1cdbd2cSJim Jagielski 					sal_Int32 nFactor = 1;
986*b1cdbd2cSJim Jagielski 					for( sal_Int16 i = 0; i < 4; i++ )
987*b1cdbd2cSJim Jagielski 					{
988*b1cdbd2cSJim Jagielski 						nResOffset += nFactor * sal_uInt8( pCombinedData[i] );
989*b1cdbd2cSJim Jagielski 						nFactor *= 256;
990*b1cdbd2cSJim Jagielski 					}
991*b1cdbd2cSJim Jagielski 
992*b1cdbd2cSJim Jagielski 					sal_Int32 nResDataLen = nTotalLen - nResOffset;
993*b1cdbd2cSJim Jagielski 					sal_Int32 nDialogDataLen = nTotalLen - nResDataLen - 4;
994*b1cdbd2cSJim Jagielski 
995*b1cdbd2cSJim Jagielski 					DialogModelBytes.realloc( nDialogDataLen );
996*b1cdbd2cSJim Jagielski 					::rtl_copyMemory( DialogModelBytes.getArray(), pCombinedData + 4, nDialogDataLen );
997*b1cdbd2cSJim Jagielski 
998*b1cdbd2cSJim Jagielski 					aResData.realloc( nResDataLen );
999*b1cdbd2cSJim Jagielski 					::rtl_copyMemory( aResData.getArray(), pCombinedData + nResOffset, nResDataLen );
1000*b1cdbd2cSJim Jagielski 				}
1001*b1cdbd2cSJim Jagielski 				else
1002*b1cdbd2cSJim Jagielski 				{
1003*b1cdbd2cSJim Jagielski 					Any aAny = xTransf->getTransferData( m_ClipboardDataFlavors[0] );
1004*b1cdbd2cSJim Jagielski 					aAny >>= DialogModelBytes;
1005*b1cdbd2cSJim Jagielski 				}
1006*b1cdbd2cSJim Jagielski 
1007*b1cdbd2cSJim Jagielski 				if ( xClipDialogModel.is() )
1008*b1cdbd2cSJim Jagielski 				{
1009*b1cdbd2cSJim Jagielski                     Reference< XComponentContext > xContext;
1010*b1cdbd2cSJim Jagielski                     Reference< beans::XPropertySet > xProps( xMSF, UNO_QUERY );
1011*b1cdbd2cSJim Jagielski                     OSL_ASSERT( xProps.is() );
1012*b1cdbd2cSJim Jagielski                     OSL_VERIFY( xProps->getPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultContext")) ) >>= xContext );
1013*b1cdbd2cSJim Jagielski 					::xmlscript::importDialogModel( ::xmlscript::createInputStream( *((::rtl::ByteSequence*)(&DialogModelBytes)) ) , xClipDialogModel, xContext );
1014*b1cdbd2cSJim Jagielski 				}
1015*b1cdbd2cSJim Jagielski 
1016*b1cdbd2cSJim Jagielski 				// get control models from clipboard dialog model
1017*b1cdbd2cSJim Jagielski 				Reference< ::com::sun::star::container::XNameAccess > xNameAcc( xClipDialogModel, UNO_QUERY );
1018*b1cdbd2cSJim Jagielski 				if ( xNameAcc.is() )
1019*b1cdbd2cSJim Jagielski 				{
1020*b1cdbd2cSJim Jagielski    					Sequence< OUString > aNames = xNameAcc->getElementNames();
1021*b1cdbd2cSJim Jagielski    					const OUString* pNames = aNames.getConstArray();
1022*b1cdbd2cSJim Jagielski 					sal_uInt32 nCtrls = aNames.getLength();
1023*b1cdbd2cSJim Jagielski 
1024*b1cdbd2cSJim Jagielski 					Reference< resource::XStringResourcePersistence > xStringResourcePersistence;
1025*b1cdbd2cSJim Jagielski 					if( nCtrls > 0 && bSourceIsLocalized )
1026*b1cdbd2cSJim Jagielski 					{
1027*b1cdbd2cSJim Jagielski 						Reference< lang::XMultiServiceFactory > xSMgr = getProcessServiceFactory();
1028*b1cdbd2cSJim Jagielski 						xStringResourcePersistence = Reference< resource::XStringResourcePersistence >( xSMgr->createInstance
1029*b1cdbd2cSJim Jagielski 							( ::rtl::OUString::createFromAscii( "com.sun.star.resource.StringResource" ) ), UNO_QUERY );
1030*b1cdbd2cSJim Jagielski 						if( xStringResourcePersistence.is() )
1031*b1cdbd2cSJim Jagielski 							xStringResourcePersistence->importBinary( aResData );
1032*b1cdbd2cSJim Jagielski 					}
1033*b1cdbd2cSJim Jagielski 					for( sal_uInt32 n = 0; n < nCtrls; n++ )
1034*b1cdbd2cSJim Jagielski 					{
1035*b1cdbd2cSJim Jagielski    						Any aA = xNameAcc->getByName( pNames[n] );
1036*b1cdbd2cSJim Jagielski 						Reference< ::com::sun::star::awt::XControlModel > xCM;
1037*b1cdbd2cSJim Jagielski    						aA >>= xCM;
1038*b1cdbd2cSJim Jagielski 
1039*b1cdbd2cSJim Jagielski 						// clone the control model
1040*b1cdbd2cSJim Jagielski 						Reference< util::XCloneable > xClone( xCM, uno::UNO_QUERY );
1041*b1cdbd2cSJim Jagielski 						Reference< awt::XControlModel > xCtrlModel( xClone->createClone(), uno::UNO_QUERY );
1042*b1cdbd2cSJim Jagielski 
1043*b1cdbd2cSJim Jagielski 						DlgEdObj* pCtrlObj = new DlgEdObj();
1044*b1cdbd2cSJim Jagielski 						pCtrlObj->SetDlgEdForm(pDlgEdForm);			// set parent form
1045*b1cdbd2cSJim Jagielski 						pDlgEdForm->AddChild(pCtrlObj);				// add child to parent form
1046*b1cdbd2cSJim Jagielski 						pCtrlObj->SetUnoControlModel( xCtrlModel ); // set control model
1047*b1cdbd2cSJim Jagielski 
1048*b1cdbd2cSJim Jagielski 						// set new name
1049*b1cdbd2cSJim Jagielski 						::rtl::OUString aOUniqueName( pCtrlObj->GetUniqueName() );
1050*b1cdbd2cSJim Jagielski 						Reference< beans::XPropertySet > xPSet( xCtrlModel , UNO_QUERY );
1051*b1cdbd2cSJim Jagielski 						Any aUniqueName;
1052*b1cdbd2cSJim Jagielski 						aUniqueName <<= aOUniqueName;
1053*b1cdbd2cSJim Jagielski 						xPSet->setPropertyValue( DLGED_PROP_NAME, aUniqueName );
1054*b1cdbd2cSJim Jagielski 
1055*b1cdbd2cSJim Jagielski 						// set tabindex
1056*b1cdbd2cSJim Jagielski 						Reference< container::XNameAccess > xNA( m_xUnoControlDialogModel , UNO_QUERY );
1057*b1cdbd2cSJim Jagielski    						Sequence< OUString > aNames_ = xNA->getElementNames();
1058*b1cdbd2cSJim Jagielski 						Any aTabIndex;
1059*b1cdbd2cSJim Jagielski 						aTabIndex <<= (sal_Int16) aNames_.getLength();
1060*b1cdbd2cSJim Jagielski 						xPSet->setPropertyValue( DLGED_PROP_TABINDEX, aTabIndex );
1061*b1cdbd2cSJim Jagielski 
1062*b1cdbd2cSJim Jagielski 						if( bLocalized )
1063*b1cdbd2cSJim Jagielski 						{
1064*b1cdbd2cSJim Jagielski 							Any aControlAny;
1065*b1cdbd2cSJim Jagielski 							aControlAny <<= xCtrlModel;
1066*b1cdbd2cSJim Jagielski 							if( bSourceIsLocalized && xStringResourcePersistence.is() )
1067*b1cdbd2cSJim Jagielski 							{
1068*b1cdbd2cSJim Jagielski 								Reference< resource::XStringResourceResolver >
1069*b1cdbd2cSJim Jagielski 									xSourceStringResolver( xStringResourcePersistence, UNO_QUERY );
1070*b1cdbd2cSJim Jagielski 								LocalizationMgr::copyResourcesForPastedEditorObject( this,
1071*b1cdbd2cSJim Jagielski 									aControlAny, aOUniqueName, xSourceStringResolver );
1072*b1cdbd2cSJim Jagielski 							}
1073*b1cdbd2cSJim Jagielski 							else
1074*b1cdbd2cSJim Jagielski 							{
1075*b1cdbd2cSJim Jagielski 								LocalizationMgr::setControlResourceIDsForNewEditorObject
1076*b1cdbd2cSJim Jagielski 									( this, aControlAny, aOUniqueName );
1077*b1cdbd2cSJim Jagielski 							}
1078*b1cdbd2cSJim Jagielski 						}
1079*b1cdbd2cSJim Jagielski 
1080*b1cdbd2cSJim Jagielski 						// insert control model in editor dialog model
1081*b1cdbd2cSJim Jagielski 						Any aCtrlModel;
1082*b1cdbd2cSJim Jagielski 						aCtrlModel <<= xCtrlModel;
1083*b1cdbd2cSJim Jagielski 						m_xUnoControlDialogModel->insertByName( aOUniqueName , aCtrlModel );
1084*b1cdbd2cSJim Jagielski 
1085*b1cdbd2cSJim Jagielski 						// insert object into drawing page
1086*b1cdbd2cSJim Jagielski 						pDlgEdModel->GetPage(0)->InsertObject( pCtrlObj );
1087*b1cdbd2cSJim Jagielski 						pCtrlObj->SetRectFromProps();
1088*b1cdbd2cSJim Jagielski 						pCtrlObj->UpdateStep();
1089*b1cdbd2cSJim Jagielski                         pDlgEdForm->UpdateTabOrderAndGroups();              // #110559#
1090*b1cdbd2cSJim Jagielski 						pCtrlObj->StartListening();							// start listening
1091*b1cdbd2cSJim Jagielski 
1092*b1cdbd2cSJim Jagielski 						// mark object
1093*b1cdbd2cSJim Jagielski 						SdrPageView* pPgView = pDlgEdView->GetSdrPageView();
1094*b1cdbd2cSJim Jagielski 						pDlgEdView->MarkObj( pCtrlObj, pPgView, sal_False, sal_True);
1095*b1cdbd2cSJim Jagielski 					}
1096*b1cdbd2cSJim Jagielski 
1097*b1cdbd2cSJim Jagielski 					// center marked objects in dialog editor form
1098*b1cdbd2cSJim Jagielski 					Point aMarkCenter = (pDlgEdView->GetMarkedObjRect()).Center();
1099*b1cdbd2cSJim Jagielski 					Point aFormCenter = (pDlgEdForm->GetSnapRect()).Center();
1100*b1cdbd2cSJim Jagielski 					Point aPoint = aFormCenter - aMarkCenter;
1101*b1cdbd2cSJim Jagielski 					Size  aSize( aPoint.X() , aPoint.Y() );
1102*b1cdbd2cSJim Jagielski 					pDlgEdView->MoveMarkedObj( aSize );						// update of control model properties (position + size) in NbcMove
1103*b1cdbd2cSJim Jagielski 					pDlgEdView->MarkListHasChanged();
1104*b1cdbd2cSJim Jagielski 
1105*b1cdbd2cSJim Jagielski 					// dialog model changed
1106*b1cdbd2cSJim Jagielski 					SetDialogModelChanged(sal_True);
1107*b1cdbd2cSJim Jagielski 				}
1108*b1cdbd2cSJim Jagielski 			}
1109*b1cdbd2cSJim Jagielski 		}
1110*b1cdbd2cSJim Jagielski 	}
1111*b1cdbd2cSJim Jagielski }
1112*b1cdbd2cSJim Jagielski 
1113*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1114*b1cdbd2cSJim Jagielski 
Delete()1115*b1cdbd2cSJim Jagielski void DlgEditor::Delete()
1116*b1cdbd2cSJim Jagielski {
1117*b1cdbd2cSJim Jagielski 	if( !pDlgEdView->AreObjectsMarked() )
1118*b1cdbd2cSJim Jagielski 		return;
1119*b1cdbd2cSJim Jagielski 
1120*b1cdbd2cSJim Jagielski 	// remove control models of marked objects from dialog model
1121*b1cdbd2cSJim Jagielski 	sal_uLong nMark = pDlgEdView->GetMarkedObjectList().GetMarkCount();
1122*b1cdbd2cSJim Jagielski 
1123*b1cdbd2cSJim Jagielski 	for( sal_uLong i = 0; i < nMark; i++ )
1124*b1cdbd2cSJim Jagielski 	{
1125*b1cdbd2cSJim Jagielski 		SdrObject* pObj = pDlgEdView->GetMarkedObjectList().GetMark(i)->GetMarkedSdrObj();
1126*b1cdbd2cSJim Jagielski 		DlgEdObj* pDlgEdObj = PTR_CAST(DlgEdObj, pObj);
1127*b1cdbd2cSJim Jagielski 
1128*b1cdbd2cSJim Jagielski 		if ( pDlgEdObj && !pDlgEdObj->ISA(DlgEdForm) )
1129*b1cdbd2cSJim Jagielski 		{
1130*b1cdbd2cSJim Jagielski 			// get name from property
1131*b1cdbd2cSJim Jagielski 			::rtl::OUString aName;
1132*b1cdbd2cSJim Jagielski 			uno::Reference< beans::XPropertySet >  xPSet(pDlgEdObj->GetUnoControlModel(), uno::UNO_QUERY);
1133*b1cdbd2cSJim Jagielski 			if (xPSet.is())
1134*b1cdbd2cSJim Jagielski 			{
1135*b1cdbd2cSJim Jagielski 				xPSet->getPropertyValue( DLGED_PROP_NAME ) >>= aName;
1136*b1cdbd2cSJim Jagielski 			}
1137*b1cdbd2cSJim Jagielski 
1138*b1cdbd2cSJim Jagielski 			// remove control from dialog model
1139*b1cdbd2cSJim Jagielski 			Reference< ::com::sun::star::container::XNameAccess > xNameAcc(pDlgEdObj->GetDlgEdForm()->GetUnoControlModel(), UNO_QUERY );
1140*b1cdbd2cSJim Jagielski 			if ( xNameAcc.is() && xNameAcc->hasByName(aName) )
1141*b1cdbd2cSJim Jagielski 			{
1142*b1cdbd2cSJim Jagielski 				Reference< ::com::sun::star::container::XNameContainer > xCont(xNameAcc, UNO_QUERY );
1143*b1cdbd2cSJim Jagielski 				if ( xCont.is() )
1144*b1cdbd2cSJim Jagielski 				{
1145*b1cdbd2cSJim Jagielski 					if( xCont->hasByName( aName ) )
1146*b1cdbd2cSJim Jagielski 					{
1147*b1cdbd2cSJim Jagielski 						Any aAny = xCont->getByName( aName );
1148*b1cdbd2cSJim Jagielski 						LocalizationMgr::deleteControlResourceIDsForDeletedEditorObject( this, aAny, aName );
1149*b1cdbd2cSJim Jagielski 					}
1150*b1cdbd2cSJim Jagielski 					xCont->removeByName( aName );
1151*b1cdbd2cSJim Jagielski 				}
1152*b1cdbd2cSJim Jagielski 			}
1153*b1cdbd2cSJim Jagielski 
1154*b1cdbd2cSJim Jagielski 			// remove child from parent form
1155*b1cdbd2cSJim Jagielski 			pDlgEdForm->RemoveChild( pDlgEdObj );
1156*b1cdbd2cSJim Jagielski 		}
1157*b1cdbd2cSJim Jagielski 	}
1158*b1cdbd2cSJim Jagielski 
1159*b1cdbd2cSJim Jagielski 	// update tab indices
1160*b1cdbd2cSJim Jagielski 	pDlgEdForm->UpdateTabIndices();
1161*b1cdbd2cSJim Jagielski 
1162*b1cdbd2cSJim Jagielski 	pDlgEdView->BrkAction();
1163*b1cdbd2cSJim Jagielski 
1164*b1cdbd2cSJim Jagielski 	sal_Bool bDlgMarked = UnmarkDialog();
1165*b1cdbd2cSJim Jagielski 	pDlgEdView->DeleteMarked();
1166*b1cdbd2cSJim Jagielski 	if( bDlgMarked )
1167*b1cdbd2cSJim Jagielski 		RemarkDialog();
1168*b1cdbd2cSJim Jagielski }
1169*b1cdbd2cSJim Jagielski 
1170*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1171*b1cdbd2cSJim Jagielski 
IsPasteAllowed()1172*b1cdbd2cSJim Jagielski sal_Bool DlgEditor::IsPasteAllowed()
1173*b1cdbd2cSJim Jagielski {
1174*b1cdbd2cSJim Jagielski     sal_Bool bPaste = sal_False;
1175*b1cdbd2cSJim Jagielski 
1176*b1cdbd2cSJim Jagielski     // get clipboard
1177*b1cdbd2cSJim Jagielski 	Reference< datatransfer::clipboard::XClipboard > xClipboard = GetWindow()->GetClipboard();
1178*b1cdbd2cSJim Jagielski 	if ( xClipboard.is() )
1179*b1cdbd2cSJim Jagielski 	{
1180*b1cdbd2cSJim Jagielski 		// get clipboard content
1181*b1cdbd2cSJim Jagielski 		const sal_uInt32 nRef = Application::ReleaseSolarMutex();
1182*b1cdbd2cSJim Jagielski 		Reference< datatransfer::XTransferable > xTransf = xClipboard->getContents();
1183*b1cdbd2cSJim Jagielski 		Application::AcquireSolarMutex( nRef );
1184*b1cdbd2cSJim Jagielski 		if ( xTransf.is() )
1185*b1cdbd2cSJim Jagielski 		{
1186*b1cdbd2cSJim Jagielski 			if ( xTransf->isDataFlavorSupported( m_ClipboardDataFlavors[0] ) )
1187*b1cdbd2cSJim Jagielski 			{
1188*b1cdbd2cSJim Jagielski                 bPaste = sal_True;
1189*b1cdbd2cSJim Jagielski             }
1190*b1cdbd2cSJim Jagielski         }
1191*b1cdbd2cSJim Jagielski     }
1192*b1cdbd2cSJim Jagielski 
1193*b1cdbd2cSJim Jagielski     return bPaste;
1194*b1cdbd2cSJim Jagielski }
1195*b1cdbd2cSJim Jagielski 
1196*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1197*b1cdbd2cSJim Jagielski 
ShowProperties()1198*b1cdbd2cSJim Jagielski void DlgEditor::ShowProperties()
1199*b1cdbd2cSJim Jagielski {
1200*b1cdbd2cSJim Jagielski     BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
1201*b1cdbd2cSJim Jagielski     SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL;
1202*b1cdbd2cSJim Jagielski     if ( pViewFrame && !pViewFrame->HasChildWindow( SID_SHOW_PROPERTYBROWSER ) )
1203*b1cdbd2cSJim Jagielski         pViewFrame->ToggleChildWindow( SID_SHOW_PROPERTYBROWSER );
1204*b1cdbd2cSJim Jagielski }
1205*b1cdbd2cSJim Jagielski 
1206*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1207*b1cdbd2cSJim Jagielski 
UpdatePropertyBrowserDelayed()1208*b1cdbd2cSJim Jagielski void DlgEditor::UpdatePropertyBrowserDelayed()
1209*b1cdbd2cSJim Jagielski {
1210*b1cdbd2cSJim Jagielski     aMarkTimer.Start();
1211*b1cdbd2cSJim Jagielski }
1212*b1cdbd2cSJim Jagielski 
1213*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1214*b1cdbd2cSJim Jagielski 
IsModified() const1215*b1cdbd2cSJim Jagielski sal_Bool DlgEditor::IsModified() const
1216*b1cdbd2cSJim Jagielski {
1217*b1cdbd2cSJim Jagielski 	return pDlgEdModel->IsChanged() || bDialogModelChanged;
1218*b1cdbd2cSJim Jagielski }
1219*b1cdbd2cSJim Jagielski 
1220*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1221*b1cdbd2cSJim Jagielski 
ClearModifyFlag()1222*b1cdbd2cSJim Jagielski void DlgEditor::ClearModifyFlag()
1223*b1cdbd2cSJim Jagielski {
1224*b1cdbd2cSJim Jagielski 	pDlgEdModel->SetChanged( sal_False );
1225*b1cdbd2cSJim Jagielski 	bDialogModelChanged = sal_False;
1226*b1cdbd2cSJim Jagielski }
1227*b1cdbd2cSJim Jagielski 
1228*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1229*b1cdbd2cSJim Jagielski 
1230*b1cdbd2cSJim Jagielski #define LMARGPRN		1700
1231*b1cdbd2cSJim Jagielski #define RMARGPRN		 900
1232*b1cdbd2cSJim Jagielski #define TMARGPRN    	2000
1233*b1cdbd2cSJim Jagielski #define BMARGPRN    	1000
1234*b1cdbd2cSJim Jagielski #define BORDERPRN		300
1235*b1cdbd2cSJim Jagielski 
1236*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1237*b1cdbd2cSJim Jagielski 
lcl_PrintHeader(Printer * pPrinter,const String & rTitle)1238*b1cdbd2cSJim Jagielski void lcl_PrintHeader( Printer* pPrinter, const String& rTitle )	// not working yet
1239*b1cdbd2cSJim Jagielski {
1240*b1cdbd2cSJim Jagielski 	pPrinter->Push();
1241*b1cdbd2cSJim Jagielski 
1242*b1cdbd2cSJim Jagielski 	short nLeftMargin = LMARGPRN;
1243*b1cdbd2cSJim Jagielski 	Size aSz = pPrinter->GetOutputSize();
1244*b1cdbd2cSJim Jagielski 	short nBorder = BORDERPRN;
1245*b1cdbd2cSJim Jagielski 
1246*b1cdbd2cSJim Jagielski 	pPrinter->SetLineColor( COL_BLACK );
1247*b1cdbd2cSJim Jagielski 	pPrinter->SetFillColor();
1248*b1cdbd2cSJim Jagielski 
1249*b1cdbd2cSJim Jagielski 	Font aFont( pPrinter->GetFont() );
1250*b1cdbd2cSJim Jagielski 	aFont.SetWeight( WEIGHT_BOLD );
1251*b1cdbd2cSJim Jagielski 	aFont.SetAlign( ALIGN_BOTTOM );
1252*b1cdbd2cSJim Jagielski 	pPrinter->SetFont( aFont );
1253*b1cdbd2cSJim Jagielski 
1254*b1cdbd2cSJim Jagielski 	long nFontHeight = pPrinter->GetTextHeight();
1255*b1cdbd2cSJim Jagielski 
1256*b1cdbd2cSJim Jagielski 	// 1.Border => Strich, 2+3 Border = Freiraum.
1257*b1cdbd2cSJim Jagielski 	long nYTop = TMARGPRN-3*nBorder-nFontHeight;
1258*b1cdbd2cSJim Jagielski 
1259*b1cdbd2cSJim Jagielski 	long nXLeft = nLeftMargin-nBorder;
1260*b1cdbd2cSJim Jagielski 	long nXRight = aSz.Width()-RMARGPRN+nBorder;
1261*b1cdbd2cSJim Jagielski 
1262*b1cdbd2cSJim Jagielski 	pPrinter->DrawRect( Rectangle(
1263*b1cdbd2cSJim Jagielski 		Point( nXLeft, nYTop ),
1264*b1cdbd2cSJim Jagielski 		Size( nXRight-nXLeft, aSz.Height() - nYTop - BMARGPRN + nBorder ) ) );
1265*b1cdbd2cSJim Jagielski 
1266*b1cdbd2cSJim Jagielski 	long nY = TMARGPRN-2*nBorder;
1267*b1cdbd2cSJim Jagielski 	Point aPos( nLeftMargin, nY );
1268*b1cdbd2cSJim Jagielski 	pPrinter->DrawText( aPos, rTitle );
1269*b1cdbd2cSJim Jagielski 
1270*b1cdbd2cSJim Jagielski 	nY = TMARGPRN-nBorder;
1271*b1cdbd2cSJim Jagielski 
1272*b1cdbd2cSJim Jagielski 	pPrinter->DrawLine( Point( nXLeft, nY ), Point( nXRight, nY ) );
1273*b1cdbd2cSJim Jagielski 
1274*b1cdbd2cSJim Jagielski 	pPrinter->Pop();
1275*b1cdbd2cSJim Jagielski }
1276*b1cdbd2cSJim Jagielski 
1277*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1278*b1cdbd2cSJim Jagielski 
countPages(Printer *)1279*b1cdbd2cSJim Jagielski sal_Int32 DlgEditor::countPages( Printer* )
1280*b1cdbd2cSJim Jagielski {
1281*b1cdbd2cSJim Jagielski     return 1;
1282*b1cdbd2cSJim Jagielski }
1283*b1cdbd2cSJim Jagielski 
printPage(sal_Int32 nPage,Printer * pPrinter,const String & rTitle)1284*b1cdbd2cSJim Jagielski void DlgEditor::printPage( sal_Int32 nPage, Printer* pPrinter, const String& rTitle )
1285*b1cdbd2cSJim Jagielski {
1286*b1cdbd2cSJim Jagielski     if( nPage == 0 )
1287*b1cdbd2cSJim Jagielski         Print( pPrinter, rTitle );
1288*b1cdbd2cSJim Jagielski }
1289*b1cdbd2cSJim Jagielski 
1290*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1291*b1cdbd2cSJim Jagielski 
Print(Printer * pPrinter,const String & rTitle)1292*b1cdbd2cSJim Jagielski void DlgEditor::Print( Printer* pPrinter, const String& rTitle )	// not working yet
1293*b1cdbd2cSJim Jagielski {
1294*b1cdbd2cSJim Jagielski 	if( pDlgEdView )
1295*b1cdbd2cSJim Jagielski 	{
1296*b1cdbd2cSJim Jagielski 		MapMode aOldMap( pPrinter->GetMapMode());
1297*b1cdbd2cSJim Jagielski 		Font aOldFont( pPrinter->GetFont() );
1298*b1cdbd2cSJim Jagielski 
1299*b1cdbd2cSJim Jagielski 		MapMode aMap( MAP_100TH_MM );
1300*b1cdbd2cSJim Jagielski 		pPrinter->SetMapMode( aMap );
1301*b1cdbd2cSJim Jagielski 		Font aFont;
1302*b1cdbd2cSJim Jagielski 		aFont.SetAlign( ALIGN_BOTTOM );
1303*b1cdbd2cSJim Jagielski 		aFont.SetSize( Size( 0, 360 ));
1304*b1cdbd2cSJim Jagielski 		pPrinter->SetFont( aFont );
1305*b1cdbd2cSJim Jagielski 
1306*b1cdbd2cSJim Jagielski 		Size aPaperSz = pPrinter->GetOutputSize();
1307*b1cdbd2cSJim Jagielski 		aPaperSz.Width() -= (LMARGPRN+RMARGPRN);
1308*b1cdbd2cSJim Jagielski 		aPaperSz.Height() -= (TMARGPRN+BMARGPRN);
1309*b1cdbd2cSJim Jagielski 
1310*b1cdbd2cSJim Jagielski 		lcl_PrintHeader( pPrinter, rTitle );
1311*b1cdbd2cSJim Jagielski 
1312*b1cdbd2cSJim Jagielski 		Bitmap aDlg;
1313*b1cdbd2cSJim Jagielski 		Size aBmpSz( pPrinter->PixelToLogic( aDlg.GetSizePixel() ) );
1314*b1cdbd2cSJim Jagielski 		double nPaperSzWidth = aPaperSz.Width();
1315*b1cdbd2cSJim Jagielski 		double nPaperSzHeight = aPaperSz.Height();
1316*b1cdbd2cSJim Jagielski 		double nBmpSzWidth = aBmpSz.Width();
1317*b1cdbd2cSJim Jagielski 		double nBmpSzHeight = aBmpSz.Height();
1318*b1cdbd2cSJim Jagielski 		double nScaleX = (nPaperSzWidth / nBmpSzWidth );
1319*b1cdbd2cSJim Jagielski 		double nScaleY = (nPaperSzHeight / nBmpSzHeight );
1320*b1cdbd2cSJim Jagielski 
1321*b1cdbd2cSJim Jagielski 		Size aOutputSz;
1322*b1cdbd2cSJim Jagielski 		if( nBmpSzHeight * nScaleX <= nPaperSzHeight )
1323*b1cdbd2cSJim Jagielski 		{
1324*b1cdbd2cSJim Jagielski 			aOutputSz.Width() = (long)(((double)nBmpSzWidth) * nScaleX);
1325*b1cdbd2cSJim Jagielski 			aOutputSz.Height() = (long)(((double)nBmpSzHeight) * nScaleX);
1326*b1cdbd2cSJim Jagielski 		}
1327*b1cdbd2cSJim Jagielski 		else
1328*b1cdbd2cSJim Jagielski 		{
1329*b1cdbd2cSJim Jagielski 			aOutputSz.Width() = (long)(((double)nBmpSzWidth) * nScaleY);
1330*b1cdbd2cSJim Jagielski 			aOutputSz.Height() = (long)(((double)nBmpSzHeight) * nScaleY);
1331*b1cdbd2cSJim Jagielski 		}
1332*b1cdbd2cSJim Jagielski 
1333*b1cdbd2cSJim Jagielski 		Point aPosOffs(
1334*b1cdbd2cSJim Jagielski 			(aPaperSz.Width() / 2) - (aOutputSz.Width() / 2),
1335*b1cdbd2cSJim Jagielski 			(aPaperSz.Height()/ 2) - (aOutputSz.Height() / 2));
1336*b1cdbd2cSJim Jagielski 
1337*b1cdbd2cSJim Jagielski 		aPosOffs.X() += LMARGPRN;
1338*b1cdbd2cSJim Jagielski 		aPosOffs.Y() += TMARGPRN;
1339*b1cdbd2cSJim Jagielski 
1340*b1cdbd2cSJim Jagielski 		pPrinter->DrawBitmap( aPosOffs, aOutputSz, aDlg );
1341*b1cdbd2cSJim Jagielski 
1342*b1cdbd2cSJim Jagielski 		pPrinter->SetMapMode( aOldMap );
1343*b1cdbd2cSJim Jagielski 		pPrinter->SetFont( aOldFont );
1344*b1cdbd2cSJim Jagielski 	}
1345*b1cdbd2cSJim Jagielski }
1346*b1cdbd2cSJim Jagielski 
1347*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1348*b1cdbd2cSJim Jagielski 
AdjustPageSize()1349*b1cdbd2cSJim Jagielski bool DlgEditor::AdjustPageSize()
1350*b1cdbd2cSJim Jagielski {
1351*b1cdbd2cSJim Jagielski     bool bAdjustedPageSize = false;
1352*b1cdbd2cSJim Jagielski     Reference< beans::XPropertySet > xPSet( m_xUnoControlDialogModel, UNO_QUERY );
1353*b1cdbd2cSJim Jagielski     if ( xPSet.is() )
1354*b1cdbd2cSJim Jagielski     {
1355*b1cdbd2cSJim Jagielski         sal_Int32 nFormXIn = 0, nFormYIn = 0, nFormWidthIn = 0, nFormHeightIn = 0;
1356*b1cdbd2cSJim Jagielski         xPSet->getPropertyValue( DLGED_PROP_POSITIONX ) >>= nFormXIn;
1357*b1cdbd2cSJim Jagielski         xPSet->getPropertyValue( DLGED_PROP_POSITIONY ) >>= nFormYIn;
1358*b1cdbd2cSJim Jagielski         xPSet->getPropertyValue( DLGED_PROP_WIDTH ) >>= nFormWidthIn;
1359*b1cdbd2cSJim Jagielski         xPSet->getPropertyValue( DLGED_PROP_HEIGHT ) >>= nFormHeightIn;
1360*b1cdbd2cSJim Jagielski 
1361*b1cdbd2cSJim Jagielski         sal_Int32 nFormX, nFormY, nFormWidth, nFormHeight;
1362*b1cdbd2cSJim Jagielski         if ( pDlgEdForm && pDlgEdForm->TransformFormToSdrCoordinates( nFormXIn, nFormYIn, nFormWidthIn, nFormHeightIn, nFormX, nFormY, nFormWidth, nFormHeight ) )
1363*b1cdbd2cSJim Jagielski         {
1364*b1cdbd2cSJim Jagielski             Size aPageSizeDelta( 400, 300 );
1365*b1cdbd2cSJim Jagielski             DBG_ASSERT( pWindow, "DlgEditor::AdjustPageSize: no window!" );
1366*b1cdbd2cSJim Jagielski             if ( pWindow )
1367*b1cdbd2cSJim Jagielski                 aPageSizeDelta = pWindow->PixelToLogic( aPageSizeDelta, MapMode( MAP_100TH_MM ) );
1368*b1cdbd2cSJim Jagielski 
1369*b1cdbd2cSJim Jagielski             sal_Int32 nNewPageWidth = nFormX + nFormWidth + aPageSizeDelta.Width();
1370*b1cdbd2cSJim Jagielski             sal_Int32 nNewPageHeight = nFormY + nFormHeight + aPageSizeDelta.Height();
1371*b1cdbd2cSJim Jagielski 
1372*b1cdbd2cSJim Jagielski             Size aPageSizeMin( DLGED_PAGE_WIDTH_MIN, DLGED_PAGE_HEIGHT_MIN );
1373*b1cdbd2cSJim Jagielski             DBG_ASSERT( pWindow, "DlgEditor::AdjustPageSize: no window!" );
1374*b1cdbd2cSJim Jagielski             if ( pWindow )
1375*b1cdbd2cSJim Jagielski                 aPageSizeMin = pWindow->PixelToLogic( aPageSizeMin, MapMode( MAP_100TH_MM ) );
1376*b1cdbd2cSJim Jagielski             sal_Int32 nPageWidthMin = aPageSizeMin.Width();
1377*b1cdbd2cSJim Jagielski             sal_Int32 nPageHeightMin = aPageSizeMin.Height();
1378*b1cdbd2cSJim Jagielski 
1379*b1cdbd2cSJim Jagielski             if ( nNewPageWidth < nPageWidthMin )
1380*b1cdbd2cSJim Jagielski                 nNewPageWidth = nPageWidthMin;
1381*b1cdbd2cSJim Jagielski 
1382*b1cdbd2cSJim Jagielski             if ( nNewPageHeight < nPageHeightMin )
1383*b1cdbd2cSJim Jagielski                 nNewPageHeight = nPageHeightMin;
1384*b1cdbd2cSJim Jagielski 
1385*b1cdbd2cSJim Jagielski             if ( pDlgEdPage )
1386*b1cdbd2cSJim Jagielski             {
1387*b1cdbd2cSJim Jagielski                 Size aPageSize = pDlgEdPage->GetSize();
1388*b1cdbd2cSJim Jagielski                 if ( nNewPageWidth != aPageSize.Width() || nNewPageHeight != aPageSize.Height() )
1389*b1cdbd2cSJim Jagielski                 {
1390*b1cdbd2cSJim Jagielski                     Size aNewPageSize( nNewPageWidth, nNewPageHeight );
1391*b1cdbd2cSJim Jagielski                     pDlgEdPage->SetSize( aNewPageSize );
1392*b1cdbd2cSJim Jagielski                     DBG_ASSERT( pDlgEdView, "DlgEditor::AdjustPageSize: no view!" );
1393*b1cdbd2cSJim Jagielski                     if ( pDlgEdView )
1394*b1cdbd2cSJim Jagielski                         pDlgEdView->SetWorkArea( Rectangle( Point( 0, 0 ), aNewPageSize ) );
1395*b1cdbd2cSJim Jagielski                     bAdjustedPageSize = true;
1396*b1cdbd2cSJim Jagielski                 }
1397*b1cdbd2cSJim Jagielski             }
1398*b1cdbd2cSJim Jagielski         }
1399*b1cdbd2cSJim Jagielski     }
1400*b1cdbd2cSJim Jagielski 
1401*b1cdbd2cSJim Jagielski     return bAdjustedPageSize;
1402*b1cdbd2cSJim Jagielski }
1403*b1cdbd2cSJim Jagielski 
1404*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1405