xref: /AOO41X/main/svx/source/form/datanavi.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir  /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_svx.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #include "datanavi.hxx"
32*cdf0e10cSrcweir #include "fmservs.hxx"
33*cdf0e10cSrcweir 
34*cdf0e10cSrcweir #include "datanavi.hrc"
35*cdf0e10cSrcweir #include "svx/fmresids.hrc"
36*cdf0e10cSrcweir #include "fmhelp.hrc"
37*cdf0e10cSrcweir #include <svx/svxids.hrc>
38*cdf0e10cSrcweir #include <tools/rcid.h>
39*cdf0e10cSrcweir #include <tools/diagnose_ex.h>
40*cdf0e10cSrcweir #include "svx/xmlexchg.hxx"
41*cdf0e10cSrcweir #include <svx/dialmgr.hxx>
42*cdf0e10cSrcweir #include <svx/fmshell.hxx>
43*cdf0e10cSrcweir #include <svtools/miscopt.hxx>
44*cdf0e10cSrcweir #include <unotools/pathoptions.hxx>
45*cdf0e10cSrcweir #include <unotools/viewoptions.hxx>
46*cdf0e10cSrcweir #include <svtools/svtools.hrc>
47*cdf0e10cSrcweir #include <sfx2/app.hxx>
48*cdf0e10cSrcweir #include <sfx2/filedlghelper.hxx>
49*cdf0e10cSrcweir #include <sfx2/objitem.hxx>
50*cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
51*cdf0e10cSrcweir #include <sfx2/objsh.hxx>
52*cdf0e10cSrcweir #include <sfx2/bindings.hxx>
53*cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
54*cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp>
55*cdf0e10cSrcweir #include <com/sun/star/container/XSet.hpp>
56*cdf0e10cSrcweir #include <com/sun/star/datatransfer/XTransferable.hpp>
57*cdf0e10cSrcweir #include <com/sun/star/frame/XController.hpp>
58*cdf0e10cSrcweir #include <com/sun/star/frame/XFramesSupplier.hpp>
59*cdf0e10cSrcweir #include <com/sun/star/frame/XModel.hpp>
60*cdf0e10cSrcweir #include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
61*cdf0e10cSrcweir #include <com/sun/star/xforms/XFormsSupplier.hpp>
62*cdf0e10cSrcweir #include <com/sun/star/xml/dom/XDocument.hpp>
63*cdf0e10cSrcweir #include <com/sun/star/xml/dom/DOMException.hpp>
64*cdf0e10cSrcweir #include <com/sun/star/form/binding/XValueBinding.hpp>
65*cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
66*cdf0e10cSrcweir #include <rtl/logfile.hxx>
67*cdf0e10cSrcweir 
68*cdf0e10cSrcweir using namespace ::com::sun::star::beans;
69*cdf0e10cSrcweir using namespace ::com::sun::star::container;
70*cdf0e10cSrcweir using namespace ::com::sun::star::datatransfer;
71*cdf0e10cSrcweir using namespace ::com::sun::star::frame;
72*cdf0e10cSrcweir using namespace ::com::sun::star::uno;
73*cdf0e10cSrcweir using namespace ::com::sun::star::xml::dom::events;
74*cdf0e10cSrcweir using namespace ::svx;
75*cdf0e10cSrcweir 
76*cdf0e10cSrcweir namespace css = ::com::sun::star;
77*cdf0e10cSrcweir 
78*cdf0e10cSrcweir #define CFGNAME_DATANAVIGATOR		DEFINE_CONST_UNICODE("DataNavigator")
79*cdf0e10cSrcweir #define CFGNAME_SHOWDETAILS			DEFINE_CONST_UNICODE("ShowDetails")
80*cdf0e10cSrcweir #define MSG_VARIABLE				DEFINE_CONST_UNICODE("%1")
81*cdf0e10cSrcweir #define MODELNAME					DEFINE_CONST_UNICODE("$MODELNAME")
82*cdf0e10cSrcweir #define INSTANCENAME				DEFINE_CONST_UNICODE("$INSTANCENAME")
83*cdf0e10cSrcweir #define ELEMENTNAME					DEFINE_CONST_UNICODE("$ELEMENTNAME")
84*cdf0e10cSrcweir #define ATTRIBUTENAME               DEFINE_CONST_UNICODE("$ATTRIBUTENAME")
85*cdf0e10cSrcweir #define SUBMISSIONNAME              DEFINE_CONST_UNICODE("$SUBMISSIONNAME")
86*cdf0e10cSrcweir #define BINDINGNAME                 DEFINE_CONST_UNICODE("$BINDINGNAME")
87*cdf0e10cSrcweir 
88*cdf0e10cSrcweir //............................................................................
89*cdf0e10cSrcweir namespace svxform
90*cdf0e10cSrcweir {
91*cdf0e10cSrcweir //............................................................................
92*cdf0e10cSrcweir 
93*cdf0e10cSrcweir 	// properties of instance
94*cdf0e10cSrcweir 	#define PN_INSTANCE_MODEL		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Instance" ) )
95*cdf0e10cSrcweir 	#define PN_INSTANCE_ID			::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ID" ) )
96*cdf0e10cSrcweir     #define PN_INSTANCE_URL         ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "URL" ) )
97*cdf0e10cSrcweir     #define PN_INSTANCE_URLONCE     ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "URLOnce" ) )
98*cdf0e10cSrcweir 
99*cdf0e10cSrcweir 	// properties of binding
100*cdf0e10cSrcweir 	#define PN_BINDING_ID			::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "BindingID" ) )
101*cdf0e10cSrcweir 	#define PN_BINDING_EXPR			::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "BindingExpression" ) )
102*cdf0e10cSrcweir 	#define PN_BINDING_MODEL		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Model" ) )
103*cdf0e10cSrcweir 	#define PN_BINDING_NAMESPACES	::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ModelNamespaces" ) )
104*cdf0e10cSrcweir 	#define PN_BINDING_MODELID		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ModelID" ) )
105*cdf0e10cSrcweir 	#define PN_READONLY_EXPR		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ReadonlyExpression" ) )
106*cdf0e10cSrcweir 	#define PN_RELEVANT_EXPR		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "RelevantExpression" ) )
107*cdf0e10cSrcweir 	#define PN_REQUIRED_EXPR		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "RequiredExpression" ) )
108*cdf0e10cSrcweir 	#define PN_CONSTRAINT_EXPR		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ConstraintExpression" ) )
109*cdf0e10cSrcweir 	#define PN_CALCULATE_EXPR		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CalculateExpression" ) )
110*cdf0e10cSrcweir 	#define PN_BINDING_TYPE			::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Type" ) )
111*cdf0e10cSrcweir 	#define PN_BINDING_READONLY		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ReadOnly" ) )
112*cdf0e10cSrcweir 	#define PN_BINDING_ENABLED		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Enabled" ) )
113*cdf0e10cSrcweir 
114*cdf0e10cSrcweir 	// properties of submission
115*cdf0e10cSrcweir 	#define PN_SUBMISSION_ID		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ID" ) )
116*cdf0e10cSrcweir 	#define PN_SUBMISSION_BIND		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Bind" ) )
117*cdf0e10cSrcweir 	#define PN_SUBMISSION_REF		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Ref" ) )
118*cdf0e10cSrcweir 	#define PN_SUBMISSION_ACTION	::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Action" ) )
119*cdf0e10cSrcweir 	#define PN_SUBMISSION_METHOD	::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Method" ) )
120*cdf0e10cSrcweir 	#define PN_SUBMISSION_MODEL		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Model" ) )
121*cdf0e10cSrcweir 	#define PN_SUBMISSION_REPLACE	::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Replace" ) )
122*cdf0e10cSrcweir 
123*cdf0e10cSrcweir 	// submission methods
124*cdf0e10cSrcweir 	#define SUBMITMETHOD_POST		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "post" ) )
125*cdf0e10cSrcweir 	#define SUBMITMETHOD_GET		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "get" ) )
126*cdf0e10cSrcweir 	#define SUBMITMETHOD_PUT		::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "put" ) )
127*cdf0e10cSrcweir 
128*cdf0e10cSrcweir 	// other const strings
129*cdf0e10cSrcweir 	#define TRUE_VALUE				::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "true()" ) )
130*cdf0e10cSrcweir 	#define FALSE_VALUE				::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "false()" ) )
131*cdf0e10cSrcweir 	#define NEW_ELEMENT				::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "newElement" ) )
132*cdf0e10cSrcweir     #define NEW_ATTRIBUTE           ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "newAttribute" ) )
133*cdf0e10cSrcweir     #define EVENTTYPE_SUBTREE       ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DOMSubtreeModified" ) )
134*cdf0e10cSrcweir     #define EVENTTYPE_CHARDATA      ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DOMCharacterDataModified" ) )
135*cdf0e10cSrcweir     #define EVENTTYPE_ATTR          ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DOMAttrModified" ) )
136*cdf0e10cSrcweir 
137*cdf0e10cSrcweir 	#define MIN_PAGE_COUNT			3 // at least one instance, one submission and one binding page
138*cdf0e10cSrcweir 
139*cdf0e10cSrcweir 	struct ItemNode
140*cdf0e10cSrcweir 	{
141*cdf0e10cSrcweir 		Reference< css::xml::dom::XNode >	m_xNode;
142*cdf0e10cSrcweir 		Reference< XPropertySet > 			m_xPropSet;
143*cdf0e10cSrcweir 
144*cdf0e10cSrcweir 		ItemNode( const Reference< css::xml::dom::XNode >& _rxNode ) :
145*cdf0e10cSrcweir 			m_xNode( _rxNode ) {}
146*cdf0e10cSrcweir 		ItemNode( const Reference< XPropertySet >& _rxSet ) :
147*cdf0e10cSrcweir 			m_xPropSet( _rxSet ) {}
148*cdf0e10cSrcweir 
149*cdf0e10cSrcweir 		DataGroupType	GetDataGroupType() const;
150*cdf0e10cSrcweir 	};
151*cdf0e10cSrcweir 
152*cdf0e10cSrcweir 	//========================================================================
153*cdf0e10cSrcweir 	// class DataTreeListBox
154*cdf0e10cSrcweir 	//========================================================================
155*cdf0e10cSrcweir 	DataTreeListBox::DataTreeListBox( XFormsPage* pPage, DataGroupType _eGroup, const ResId& rResId ) :
156*cdf0e10cSrcweir 
157*cdf0e10cSrcweir 		SvTreeListBox( pPage, rResId ),
158*cdf0e10cSrcweir 
159*cdf0e10cSrcweir 		m_pXFormsPage	( pPage ),
160*cdf0e10cSrcweir 		m_eGroup		( _eGroup )
161*cdf0e10cSrcweir 
162*cdf0e10cSrcweir 	{
163*cdf0e10cSrcweir 		EnableContextMenuHandling();
164*cdf0e10cSrcweir 
165*cdf0e10cSrcweir 		if ( DGTInstance == m_eGroup )
166*cdf0e10cSrcweir 			SetDragDropMode( SV_DRAGDROP_CTRL_MOVE |SV_DRAGDROP_CTRL_COPY | SV_DRAGDROP_APP_COPY );
167*cdf0e10cSrcweir 	}
168*cdf0e10cSrcweir 
169*cdf0e10cSrcweir 	DataTreeListBox::~DataTreeListBox()
170*cdf0e10cSrcweir 	{
171*cdf0e10cSrcweir 		DeleteAndClear();
172*cdf0e10cSrcweir 	}
173*cdf0e10cSrcweir 
174*cdf0e10cSrcweir 	sal_Int8 DataTreeListBox::AcceptDrop( const AcceptDropEvent& /*rEvt*/ )
175*cdf0e10cSrcweir 	{
176*cdf0e10cSrcweir 		return DND_ACTION_NONE;
177*cdf0e10cSrcweir 	}
178*cdf0e10cSrcweir 	sal_Int8 DataTreeListBox::ExecuteDrop( const ExecuteDropEvent& /*rEvt*/ )
179*cdf0e10cSrcweir 	{
180*cdf0e10cSrcweir 		return DND_ACTION_NONE;
181*cdf0e10cSrcweir 	}
182*cdf0e10cSrcweir 	void DataTreeListBox::StartDrag( sal_Int8 /*_nAction*/, const Point& /*_rPosPixel*/ )
183*cdf0e10cSrcweir 	{
184*cdf0e10cSrcweir 		SvLBoxEntry* pSelected = FirstSelected();
185*cdf0e10cSrcweir 		if ( !pSelected )
186*cdf0e10cSrcweir 			// no drag without an entry
187*cdf0e10cSrcweir 			return;
188*cdf0e10cSrcweir 
189*cdf0e10cSrcweir         if ( m_eGroup == DGTBinding )
190*cdf0e10cSrcweir             // for the moment, bindings cannot be dragged.
191*cdf0e10cSrcweir             // #i59395# / 2005-12-15 / frank.schoenheit@sun.com
192*cdf0e10cSrcweir             return;
193*cdf0e10cSrcweir 
194*cdf0e10cSrcweir 		// GetServiceNameForNode() requires a datatype repository which
195*cdf0e10cSrcweir 		// will be automatically build if requested???
196*cdf0e10cSrcweir 		Reference< css::xforms::XModel > xModel( m_pXFormsPage->GetXFormsHelper(), UNO_QUERY );
197*cdf0e10cSrcweir         Reference< css::xforms::XDataTypeRepository > xDataTypes =
198*cdf0e10cSrcweir             xModel->getDataTypeRepository();
199*cdf0e10cSrcweir         if(!xDataTypes.is())
200*cdf0e10cSrcweir 			return;
201*cdf0e10cSrcweir 
202*cdf0e10cSrcweir 		using namespace ::com::sun::star::uno;
203*cdf0e10cSrcweir 		typedef com::sun::star::form::binding::XValueBinding XValueBinding_t;
204*cdf0e10cSrcweir 
205*cdf0e10cSrcweir 		ItemNode *pItemNode = static_cast<ItemNode*>(pSelected->GetUserData());
206*cdf0e10cSrcweir 
207*cdf0e10cSrcweir         if ( !pItemNode )
208*cdf0e10cSrcweir         {
209*cdf0e10cSrcweir             // the only known (and allowed?) case where this happens are sub-entries of a submission
210*cdf0e10cSrcweir             // entry
211*cdf0e10cSrcweir             DBG_ASSERT( DGTSubmission == m_eGroup, "DataTreeListBox::StartDrag: how this?" );
212*cdf0e10cSrcweir             pSelected = GetParent( pSelected );
213*cdf0e10cSrcweir             DBG_ASSERT( pSelected && !GetParent( pSelected ), "DataTreeListBox::StartDrag: what kind of entry *is* this?" );
214*cdf0e10cSrcweir                 // on the submission page, we have only top-level entries (the submission themself)
215*cdf0e10cSrcweir                 // plus direct children of those (facets of a submission)
216*cdf0e10cSrcweir             pItemNode = pSelected ? static_cast< ItemNode* >( pSelected->GetUserData() ) : NULL;
217*cdf0e10cSrcweir             if ( !pItemNode )
218*cdf0e10cSrcweir                 return;
219*cdf0e10cSrcweir         }
220*cdf0e10cSrcweir 
221*cdf0e10cSrcweir 		OXFormsDescriptor desc;
222*cdf0e10cSrcweir 		desc.szName = GetEntryText(pSelected);
223*cdf0e10cSrcweir 		if(pItemNode->m_xNode.is()) {
224*cdf0e10cSrcweir 			// a valid node interface tells us that we need to create a control from a binding
225*cdf0e10cSrcweir 			desc.szServiceName = m_pXFormsPage->GetServiceNameForNode(pItemNode->m_xNode);
226*cdf0e10cSrcweir 			desc.xPropSet = m_pXFormsPage->GetBindingForNode(pItemNode->m_xNode);
227*cdf0e10cSrcweir 			DBG_ASSERT( desc.xPropSet.is(), "DataTreeListBox::StartDrag(): invalid node binding" );
228*cdf0e10cSrcweir 		}
229*cdf0e10cSrcweir 		else {
230*cdf0e10cSrcweir 			desc.szServiceName = FM_COMPONENT_COMMANDBUTTON;
231*cdf0e10cSrcweir 			desc.xPropSet = pItemNode->m_xPropSet;
232*cdf0e10cSrcweir 		}
233*cdf0e10cSrcweir 		OXFormsTransferable *pTransferable = new OXFormsTransferable(desc);
234*cdf0e10cSrcweir 		Reference< XTransferable > xEnsureDelete = pTransferable;
235*cdf0e10cSrcweir 		if(pTransferable) {
236*cdf0e10cSrcweir 			EndSelection();
237*cdf0e10cSrcweir 			pTransferable->StartDrag( this, DND_ACTION_COPY );
238*cdf0e10cSrcweir 		}
239*cdf0e10cSrcweir 	}
240*cdf0e10cSrcweir 
241*cdf0e10cSrcweir 	PopupMenu* DataTreeListBox::CreateContextMenu()
242*cdf0e10cSrcweir 	{
243*cdf0e10cSrcweir 		PopupMenu* pMenu = new PopupMenu( SVX_RES( RID_MENU_DATANAVIGATOR ) );
244*cdf0e10cSrcweir 		if ( DGTInstance == m_eGroup )
245*cdf0e10cSrcweir 		    pMenu->RemoveItem( pMenu->GetItemPos( TBI_ITEM_ADD ) );
246*cdf0e10cSrcweir 		else
247*cdf0e10cSrcweir 		{
248*cdf0e10cSrcweir 		    pMenu->RemoveItem( pMenu->GetItemPos( TBI_ITEM_ADD_ELEMENT ) );
249*cdf0e10cSrcweir 		    pMenu->RemoveItem( pMenu->GetItemPos( TBI_ITEM_ADD_ATTRIBUTE ) );
250*cdf0e10cSrcweir 
251*cdf0e10cSrcweir 			if ( DGTSubmission == m_eGroup )
252*cdf0e10cSrcweir 			{
253*cdf0e10cSrcweir 				pMenu->SetItemText( TBI_ITEM_ADD, SVX_RESSTR( RID_STR_DATANAV_ADD_SUBMISSION ) );
254*cdf0e10cSrcweir 				pMenu->SetItemText( TBI_ITEM_EDIT, SVX_RESSTR( RID_STR_DATANAV_EDIT_SUBMISSION ) );
255*cdf0e10cSrcweir 				pMenu->SetItemText( TBI_ITEM_REMOVE, SVX_RESSTR( RID_STR_DATANAV_REMOVE_SUBMISSION ) );
256*cdf0e10cSrcweir 			}
257*cdf0e10cSrcweir 			else
258*cdf0e10cSrcweir 			{
259*cdf0e10cSrcweir 				pMenu->SetItemText( TBI_ITEM_ADD, SVX_RESSTR( RID_STR_DATANAV_ADD_BINDING ) );
260*cdf0e10cSrcweir 				pMenu->SetItemText( TBI_ITEM_EDIT, SVX_RESSTR( RID_STR_DATANAV_EDIT_BINDING ) );
261*cdf0e10cSrcweir 				pMenu->SetItemText( TBI_ITEM_REMOVE, SVX_RESSTR( RID_STR_DATANAV_REMOVE_BINDING ) );
262*cdf0e10cSrcweir 			}
263*cdf0e10cSrcweir 		}
264*cdf0e10cSrcweir 		m_pXFormsPage->EnableMenuItems( pMenu );
265*cdf0e10cSrcweir 		return pMenu;
266*cdf0e10cSrcweir 	}
267*cdf0e10cSrcweir 
268*cdf0e10cSrcweir 	void DataTreeListBox::ExcecuteContextMenuAction( sal_uInt16 _nSelectedPopupEntry )
269*cdf0e10cSrcweir 	{
270*cdf0e10cSrcweir 		m_pXFormsPage->DoMenuAction( _nSelectedPopupEntry );
271*cdf0e10cSrcweir 	}
272*cdf0e10cSrcweir 
273*cdf0e10cSrcweir 	void DataTreeListBox::RemoveEntry( SvLBoxEntry* _pEntry )
274*cdf0e10cSrcweir 	{
275*cdf0e10cSrcweir 		if ( _pEntry )
276*cdf0e10cSrcweir 		{
277*cdf0e10cSrcweir 			delete static_cast< ItemNode* >( _pEntry->GetUserData() );
278*cdf0e10cSrcweir 			SvTreeListBox::GetModel()->Remove( _pEntry );
279*cdf0e10cSrcweir 		}
280*cdf0e10cSrcweir 	}
281*cdf0e10cSrcweir 
282*cdf0e10cSrcweir 	void DataTreeListBox::DeleteAndClear()
283*cdf0e10cSrcweir 	{
284*cdf0e10cSrcweir 		sal_uIntPtr i, nCount = GetEntryCount();
285*cdf0e10cSrcweir 		for ( i = 0; i < nCount; ++i )
286*cdf0e10cSrcweir 		{
287*cdf0e10cSrcweir 			SvLBoxEntry* pEntry = GetEntry(i);
288*cdf0e10cSrcweir 			if ( pEntry )
289*cdf0e10cSrcweir 				delete static_cast< ItemNode* >( pEntry->GetUserData() );
290*cdf0e10cSrcweir 		}
291*cdf0e10cSrcweir 
292*cdf0e10cSrcweir 		Clear();
293*cdf0e10cSrcweir 	}
294*cdf0e10cSrcweir 
295*cdf0e10cSrcweir 	//========================================================================
296*cdf0e10cSrcweir 	// class XFormsPage
297*cdf0e10cSrcweir 	//========================================================================
298*cdf0e10cSrcweir 	XFormsPage::XFormsPage( Window* pParent, DataNavigatorWindow* _pNaviWin, DataGroupType _eGroup ) :
299*cdf0e10cSrcweir 
300*cdf0e10cSrcweir 		TabPage( pParent, SVX_RES( RID_SVX_XFORMS_TABPAGES ) ),
301*cdf0e10cSrcweir 
302*cdf0e10cSrcweir 		m_aToolBox		( this, SVX_RES( TB_ITEMS ) ),
303*cdf0e10cSrcweir 		m_aItemList		( this, _eGroup, SVX_RES( LB_ITEMS ) ),
304*cdf0e10cSrcweir 		m_pNaviWin		( _pNaviWin ),
305*cdf0e10cSrcweir 		m_bHasModel		( false ),
306*cdf0e10cSrcweir 		m_eGroup		( _eGroup ),
307*cdf0e10cSrcweir 		m_TbxImageList	( SVX_RES( IL_TBX_BMPS ) ),
308*cdf0e10cSrcweir 		m_TbxHCImageList( SVX_RES( IL_TBX_BMPS_HC ) )
309*cdf0e10cSrcweir 
310*cdf0e10cSrcweir 	{
311*cdf0e10cSrcweir 		FreeResource();
312*cdf0e10cSrcweir 
313*cdf0e10cSrcweir 		const ImageList& rImageList =
314*cdf0e10cSrcweir 			GetBackground().GetColor().IsDark() ? m_TbxHCImageList : m_TbxImageList;
315*cdf0e10cSrcweir 		m_aToolBox.SetItemImage( TBI_ITEM_ADD, rImageList.GetImage( IID_ITEM_ADD ) );
316*cdf0e10cSrcweir 		m_aToolBox.SetItemImage( TBI_ITEM_ADD_ELEMENT, rImageList.GetImage( IID_ITEM_ADD_ELEMENT ) );
317*cdf0e10cSrcweir 		m_aToolBox.SetItemImage( TBI_ITEM_ADD_ATTRIBUTE, rImageList.GetImage( IID_ITEM_ADD_ATTRIBUTE ) );
318*cdf0e10cSrcweir 		m_aToolBox.SetItemImage( TBI_ITEM_EDIT, rImageList.GetImage( IID_ITEM_EDIT ) );
319*cdf0e10cSrcweir 		m_aToolBox.SetItemImage( TBI_ITEM_REMOVE, rImageList.GetImage( IID_ITEM_REMOVE ) );
320*cdf0e10cSrcweir 
321*cdf0e10cSrcweir 		if ( DGTInstance == m_eGroup )
322*cdf0e10cSrcweir 		    m_aToolBox.RemoveItem( m_aToolBox.GetItemPos( TBI_ITEM_ADD ) );
323*cdf0e10cSrcweir 		else
324*cdf0e10cSrcweir 		{
325*cdf0e10cSrcweir 		    m_aToolBox.RemoveItem( m_aToolBox.GetItemPos( TBI_ITEM_ADD_ELEMENT ) );
326*cdf0e10cSrcweir 		    m_aToolBox.RemoveItem( m_aToolBox.GetItemPos( TBI_ITEM_ADD_ATTRIBUTE ) );
327*cdf0e10cSrcweir 
328*cdf0e10cSrcweir 			if ( DGTSubmission == m_eGroup )
329*cdf0e10cSrcweir 			{
330*cdf0e10cSrcweir 				m_aToolBox.SetItemText( TBI_ITEM_ADD, SVX_RESSTR( RID_STR_DATANAV_ADD_SUBMISSION ) );
331*cdf0e10cSrcweir 				m_aToolBox.SetItemText( TBI_ITEM_EDIT, SVX_RESSTR( RID_STR_DATANAV_EDIT_SUBMISSION ) );
332*cdf0e10cSrcweir 				m_aToolBox.SetItemText( TBI_ITEM_REMOVE, SVX_RESSTR( RID_STR_DATANAV_REMOVE_SUBMISSION ) );
333*cdf0e10cSrcweir 			}
334*cdf0e10cSrcweir 			else
335*cdf0e10cSrcweir 			{
336*cdf0e10cSrcweir 				m_aToolBox.SetItemText( TBI_ITEM_ADD, SVX_RESSTR( RID_STR_DATANAV_ADD_BINDING ) );
337*cdf0e10cSrcweir 				m_aToolBox.SetItemText( TBI_ITEM_EDIT, SVX_RESSTR( RID_STR_DATANAV_EDIT_BINDING ) );
338*cdf0e10cSrcweir 				m_aToolBox.SetItemText( TBI_ITEM_REMOVE, SVX_RESSTR( RID_STR_DATANAV_REMOVE_BINDING ) );
339*cdf0e10cSrcweir 			}
340*cdf0e10cSrcweir 		}
341*cdf0e10cSrcweir 
342*cdf0e10cSrcweir 		const Size aTbxSz( m_aToolBox.CalcWindowSizePixel() );
343*cdf0e10cSrcweir 		m_aToolBox.SetSizePixel( aTbxSz );
344*cdf0e10cSrcweir 	    m_aToolBox.SetOutStyle( SvtMiscOptions().GetToolboxStyle() );
345*cdf0e10cSrcweir 		m_aToolBox.SetSelectHdl( LINK( this, XFormsPage, TbxSelectHdl ) );
346*cdf0e10cSrcweir 		Point aPos = m_aItemList.GetPosPixel();
347*cdf0e10cSrcweir 		aPos.Y() = aTbxSz.Height();
348*cdf0e10cSrcweir 		m_aItemList.SetPosPixel( aPos );
349*cdf0e10cSrcweir 
350*cdf0e10cSrcweir 		m_aItemList.SetSelectHdl( LINK( this, XFormsPage, ItemSelectHdl ) );
351*cdf0e10cSrcweir 		m_aItemList.SetNodeDefaultImages();
352*cdf0e10cSrcweir 		WinBits nBits = WB_BORDER | WB_TABSTOP | WB_HIDESELECTION | WB_NOINITIALSELECTION;
353*cdf0e10cSrcweir 		if ( DGTInstance == m_eGroup || DGTSubmission == m_eGroup )
354*cdf0e10cSrcweir 			nBits |= WB_HASBUTTONS | WB_HASLINES | WB_HASLINESATROOT | WB_HASBUTTONSATROOT;
355*cdf0e10cSrcweir 		m_aItemList.SetStyle( m_aItemList.GetStyle() | nBits  );
356*cdf0e10cSrcweir 		m_aItemList.Show();
357*cdf0e10cSrcweir 		ItemSelectHdl( &m_aItemList );
358*cdf0e10cSrcweir 	}
359*cdf0e10cSrcweir 	//------------------------------------------------------------------------
360*cdf0e10cSrcweir 	XFormsPage::~XFormsPage()
361*cdf0e10cSrcweir 	{
362*cdf0e10cSrcweir 	}
363*cdf0e10cSrcweir 	//------------------------------------------------------------------------
364*cdf0e10cSrcweir 	IMPL_LINK( XFormsPage, TbxSelectHdl, ToolBox *, EMPTYARG )
365*cdf0e10cSrcweir 	{
366*cdf0e10cSrcweir 		DoToolBoxAction( m_aToolBox.GetCurItemId() );
367*cdf0e10cSrcweir 		return 0;
368*cdf0e10cSrcweir 	}
369*cdf0e10cSrcweir 	//------------------------------------------------------------------------
370*cdf0e10cSrcweir 	IMPL_LINK( XFormsPage, ItemSelectHdl, DataTreeListBox *, EMPTYARG )
371*cdf0e10cSrcweir 	{
372*cdf0e10cSrcweir 		EnableMenuItems( NULL );
373*cdf0e10cSrcweir 		return 0;
374*cdf0e10cSrcweir 	}
375*cdf0e10cSrcweir 	//------------------------------------------------------------------------
376*cdf0e10cSrcweir 	void XFormsPage::AddChildren(
377*cdf0e10cSrcweir 		SvLBoxEntry* _pParent, const ImageList& _rImgLst,
378*cdf0e10cSrcweir 		const Reference< css::xml::dom::XNode >& _xNode )
379*cdf0e10cSrcweir 	{
380*cdf0e10cSrcweir 		DBG_ASSERT( m_xUIHelper.is(), "XFormsPage::AddChildren(): invalid UIHelper" );
381*cdf0e10cSrcweir 
382*cdf0e10cSrcweir 		try
383*cdf0e10cSrcweir 		{
384*cdf0e10cSrcweir 			Reference< css::xml::dom::XNodeList > xNodeList = _xNode->getChildNodes();
385*cdf0e10cSrcweir 			if ( xNodeList.is() )
386*cdf0e10cSrcweir 			{
387*cdf0e10cSrcweir 				bool bShowDetails = m_pNaviWin->IsShowDetails();
388*cdf0e10cSrcweir 				sal_Int32 i, nNodeCount = xNodeList->getLength();
389*cdf0e10cSrcweir 				for ( i = 0; i < nNodeCount; ++i )
390*cdf0e10cSrcweir 				{
391*cdf0e10cSrcweir 					Reference< css::xml::dom::XNode > xChild = xNodeList->item(i);
392*cdf0e10cSrcweir 					css::xml::dom::NodeType eChildType = xChild->getNodeType();
393*cdf0e10cSrcweir 					Image aExpImg, aCollImg;
394*cdf0e10cSrcweir 					switch ( eChildType )
395*cdf0e10cSrcweir 					{
396*cdf0e10cSrcweir 					    case css::xml::dom::NodeType_ATTRIBUTE_NODE:
397*cdf0e10cSrcweir 							aExpImg = aCollImg = _rImgLst.GetImage( IID_ATTRIBUTE );
398*cdf0e10cSrcweir 							break;
399*cdf0e10cSrcweir 					    case css::xml::dom::NodeType_ELEMENT_NODE:
400*cdf0e10cSrcweir 							aExpImg = aCollImg = _rImgLst.GetImage( IID_ELEMENT );
401*cdf0e10cSrcweir 							break;
402*cdf0e10cSrcweir 						case css::xml::dom::NodeType_TEXT_NODE:
403*cdf0e10cSrcweir 							aExpImg = aCollImg = _rImgLst.GetImage( IID_TEXT );
404*cdf0e10cSrcweir 							break;
405*cdf0e10cSrcweir 						default:
406*cdf0e10cSrcweir 							aExpImg = aCollImg = _rImgLst.GetImage( IID_OTHER );
407*cdf0e10cSrcweir 					}
408*cdf0e10cSrcweir 
409*cdf0e10cSrcweir 					::rtl::OUString sName = m_xUIHelper->getNodeDisplayName( xChild, bShowDetails );
410*cdf0e10cSrcweir 					if ( sName.getLength() > 0 )
411*cdf0e10cSrcweir 					{
412*cdf0e10cSrcweir 						ItemNode* pNode = new ItemNode( xChild );
413*cdf0e10cSrcweir 						SvLBoxEntry* pEntry = m_aItemList.InsertEntry(
414*cdf0e10cSrcweir 							sName, aExpImg, aCollImg, _pParent, sal_False, LIST_APPEND, pNode );
415*cdf0e10cSrcweir 						if ( xChild->hasAttributes() )
416*cdf0e10cSrcweir 						{
417*cdf0e10cSrcweir 							Reference< css::xml::dom::XNamedNodeMap > xMap = xChild->getAttributes();
418*cdf0e10cSrcweir 							if ( xMap.is() )
419*cdf0e10cSrcweir 							{
420*cdf0e10cSrcweir 								aExpImg = aCollImg = _rImgLst.GetImage( IID_ATTRIBUTE );
421*cdf0e10cSrcweir 								sal_Int32 j, nMapLen = xMap->getLength();
422*cdf0e10cSrcweir 								for ( j = 0; j < nMapLen; ++j )
423*cdf0e10cSrcweir 								{
424*cdf0e10cSrcweir 									Reference< css::xml::dom::XNode > xAttr = xMap->item(j);
425*cdf0e10cSrcweir 									pNode = new ItemNode( xAttr );
426*cdf0e10cSrcweir 									::rtl::OUString sAttrName =
427*cdf0e10cSrcweir 										m_xUIHelper->getNodeDisplayName( xAttr, bShowDetails );
428*cdf0e10cSrcweir 									m_aItemList.InsertEntry(
429*cdf0e10cSrcweir 										sAttrName, aExpImg, aCollImg,
430*cdf0e10cSrcweir 										pEntry, sal_False, LIST_APPEND, pNode );
431*cdf0e10cSrcweir 								}
432*cdf0e10cSrcweir 							}
433*cdf0e10cSrcweir 						}
434*cdf0e10cSrcweir 						if ( xChild->hasChildNodes() )
435*cdf0e10cSrcweir 							AddChildren( pEntry, _rImgLst, xChild );
436*cdf0e10cSrcweir 					}
437*cdf0e10cSrcweir 				}
438*cdf0e10cSrcweir 			}
439*cdf0e10cSrcweir 		}
440*cdf0e10cSrcweir         catch( Exception& )
441*cdf0e10cSrcweir 		{
442*cdf0e10cSrcweir             DBG_UNHANDLED_EXCEPTION();
443*cdf0e10cSrcweir 		}
444*cdf0e10cSrcweir 	}
445*cdf0e10cSrcweir 	//------------------------------------------------------------------------
446*cdf0e10cSrcweir 	bool XFormsPage::DoToolBoxAction( sal_uInt16 _nToolBoxID ) {
447*cdf0e10cSrcweir 
448*cdf0e10cSrcweir 		bool bHandled = false;
449*cdf0e10cSrcweir         bool bIsDocModified = false;
450*cdf0e10cSrcweir         m_pNaviWin->DisableNotify( true );
451*cdf0e10cSrcweir 
452*cdf0e10cSrcweir         switch ( _nToolBoxID )
453*cdf0e10cSrcweir         {
454*cdf0e10cSrcweir         case TBI_ITEM_ADD:
455*cdf0e10cSrcweir         case TBI_ITEM_ADD_ELEMENT:
456*cdf0e10cSrcweir         case TBI_ITEM_ADD_ATTRIBUTE:
457*cdf0e10cSrcweir 		{
458*cdf0e10cSrcweir 			bHandled = true;
459*cdf0e10cSrcweir 			Reference< css::xforms::XModel > xModel( m_xUIHelper, UNO_QUERY );
460*cdf0e10cSrcweir 			DBG_ASSERT( xModel.is(), "XFormsPage::DoToolBoxAction(): Action without model" );
461*cdf0e10cSrcweir 			if ( DGTSubmission == m_eGroup )
462*cdf0e10cSrcweir 			{
463*cdf0e10cSrcweir 				AddSubmissionDialog aDlg( this, NULL, m_xUIHelper );
464*cdf0e10cSrcweir 				if ( aDlg.Execute() == RET_OK && aDlg.GetNewSubmission().is() )
465*cdf0e10cSrcweir 				{
466*cdf0e10cSrcweir 					try
467*cdf0e10cSrcweir 					{
468*cdf0e10cSrcweir 						Reference< css::xforms::XSubmission > xNewSubmission = aDlg.GetNewSubmission();
469*cdf0e10cSrcweir 						Reference< XSet > xSubmissions( xModel->getSubmissions(), UNO_QUERY );
470*cdf0e10cSrcweir 						xSubmissions->insert( makeAny( xNewSubmission ) );
471*cdf0e10cSrcweir 						Reference< XPropertySet > xNewPropSet( xNewSubmission, UNO_QUERY );
472*cdf0e10cSrcweir 						SvLBoxEntry* pEntry = AddEntry( xNewPropSet );
473*cdf0e10cSrcweir 						m_aItemList.Select( pEntry, sal_True );
474*cdf0e10cSrcweir                         bIsDocModified = true;
475*cdf0e10cSrcweir 					}
476*cdf0e10cSrcweir 					catch ( Exception& )
477*cdf0e10cSrcweir 					{
478*cdf0e10cSrcweir 						DBG_ERRORFILE( "XFormsPage::DoToolBoxAction(): exception while adding submission" );
479*cdf0e10cSrcweir 					}
480*cdf0e10cSrcweir 				}
481*cdf0e10cSrcweir 			}
482*cdf0e10cSrcweir 			else
483*cdf0e10cSrcweir 			{
484*cdf0e10cSrcweir 				DataItemType eType = DITElement;
485*cdf0e10cSrcweir 				SvLBoxEntry* pEntry = m_aItemList.FirstSelected();
486*cdf0e10cSrcweir 				ItemNode* pNode = NULL;
487*cdf0e10cSrcweir 				Reference< css::xml::dom::XNode > xParentNode;
488*cdf0e10cSrcweir 				Reference< XPropertySet > xNewBinding;
489*cdf0e10cSrcweir 				sal_uInt16 nResId = 0;
490*cdf0e10cSrcweir 				bool bIsElement = true;
491*cdf0e10cSrcweir 				if ( DGTInstance == m_eGroup )
492*cdf0e10cSrcweir 				{
493*cdf0e10cSrcweir                     if ( m_sInstanceURL.Len() > 0 )
494*cdf0e10cSrcweir                     {
495*cdf0e10cSrcweir                         LinkedInstanceWarningBox aMsgBox( this );
496*cdf0e10cSrcweir                         if ( aMsgBox.Execute() != RET_OK )
497*cdf0e10cSrcweir                             return bHandled;
498*cdf0e10cSrcweir                     }
499*cdf0e10cSrcweir 
500*cdf0e10cSrcweir                     DBG_ASSERT( pEntry, "XFormsPage::DoToolBoxAction(): no entry" );
501*cdf0e10cSrcweir 					ItemNode* pParentNode = static_cast< ItemNode* >( pEntry->GetUserData() );
502*cdf0e10cSrcweir 					DBG_ASSERT( pParentNode, "XFormsPage::DoToolBoxAction(): no parent node" );
503*cdf0e10cSrcweir 					xParentNode = pParentNode->m_xNode;
504*cdf0e10cSrcweir 					Reference< css::xml::dom::XNode > xNewNode;
505*cdf0e10cSrcweir 					if ( TBI_ITEM_ADD_ELEMENT == _nToolBoxID )
506*cdf0e10cSrcweir 					{
507*cdf0e10cSrcweir 						try
508*cdf0e10cSrcweir 						{
509*cdf0e10cSrcweir 							nResId = RID_STR_DATANAV_ADD_ELEMENT;
510*cdf0e10cSrcweir 							xNewNode = m_xUIHelper->createElement( xParentNode, NEW_ELEMENT );
511*cdf0e10cSrcweir 						}
512*cdf0e10cSrcweir 						catch ( Exception& )
513*cdf0e10cSrcweir 						{
514*cdf0e10cSrcweir 							DBG_ERRORFILE( "XFormsPage::DoToolBoxAction(): exception while create element" );
515*cdf0e10cSrcweir 						}
516*cdf0e10cSrcweir 					}
517*cdf0e10cSrcweir 					else
518*cdf0e10cSrcweir 					{
519*cdf0e10cSrcweir 						nResId = RID_STR_DATANAV_ADD_ATTRIBUTE;
520*cdf0e10cSrcweir 						bIsElement = false;
521*cdf0e10cSrcweir 						eType = DITAttribute;
522*cdf0e10cSrcweir 						try
523*cdf0e10cSrcweir 						{
524*cdf0e10cSrcweir 							xNewNode = m_xUIHelper->createAttribute( xParentNode, NEW_ATTRIBUTE );
525*cdf0e10cSrcweir 						}
526*cdf0e10cSrcweir 						catch ( Exception& )
527*cdf0e10cSrcweir 						{
528*cdf0e10cSrcweir 							DBG_ERRORFILE( "XFormsPage::DoToolBoxAction(): exception while create attribute" );
529*cdf0e10cSrcweir 						}
530*cdf0e10cSrcweir 					}
531*cdf0e10cSrcweir 
532*cdf0e10cSrcweir 					try
533*cdf0e10cSrcweir 					{
534*cdf0e10cSrcweir 						xNewNode = xParentNode->appendChild( xNewNode );
535*cdf0e10cSrcweir 					}
536*cdf0e10cSrcweir 					catch ( css::xml::dom::DOMException& e )
537*cdf0e10cSrcweir 					{
538*cdf0e10cSrcweir 						if ( e.Code == css::xml::dom::DOMExceptionType_DOMSTRING_SIZE_ERR )
539*cdf0e10cSrcweir 						{
540*cdf0e10cSrcweir 							DBG_ERRORFILE( "XFormsPage::DoToolBoxAction(): domexception: size error" );
541*cdf0e10cSrcweir 						}
542*cdf0e10cSrcweir 						DBG_ERRORFILE( "XFormsPage::DoToolBoxAction(): domexception while append child" );
543*cdf0e10cSrcweir 					}
544*cdf0e10cSrcweir 					catch ( Exception& )
545*cdf0e10cSrcweir 					{
546*cdf0e10cSrcweir 						DBG_ERRORFILE( "XFormsPage::DoToolBoxAction(): exception while append child" );
547*cdf0e10cSrcweir 					}
548*cdf0e10cSrcweir 
549*cdf0e10cSrcweir 					try
550*cdf0e10cSrcweir 					{
551*cdf0e10cSrcweir 						Reference< css::xml::dom::XNode > xPNode;
552*cdf0e10cSrcweir 						if ( xNewNode.is() )
553*cdf0e10cSrcweir 						 	xPNode = xNewNode->getParentNode();
554*cdf0e10cSrcweir                         // attributes don't have parents in the DOM model
555*cdf0e10cSrcweir 						DBG_ASSERT( TBI_ITEM_ADD_ATTRIBUTE == _nToolBoxID
556*cdf0e10cSrcweir 									|| xPNode.is(), "XFormsPage::DoToolboxAction(): node not added" );
557*cdf0e10cSrcweir 					}
558*cdf0e10cSrcweir 					catch ( Exception& )
559*cdf0e10cSrcweir 					{
560*cdf0e10cSrcweir                         DBG_ERRORFILE( "XFormsPage::DoToolboxAction(): exception caught" );
561*cdf0e10cSrcweir 					}
562*cdf0e10cSrcweir 
563*cdf0e10cSrcweir 					try
564*cdf0e10cSrcweir 					{
565*cdf0e10cSrcweir 						m_xUIHelper->getBindingForNode( xNewNode, sal_True );
566*cdf0e10cSrcweir 					}
567*cdf0e10cSrcweir 					catch ( Exception& )
568*cdf0e10cSrcweir 					{
569*cdf0e10cSrcweir 						DBG_ERRORFILE( "XFormsPage::DoToolBoxAction(): exception while get binding for node" );
570*cdf0e10cSrcweir 					}
571*cdf0e10cSrcweir 					pNode = new ItemNode( xNewNode );
572*cdf0e10cSrcweir 				}
573*cdf0e10cSrcweir 				else
574*cdf0e10cSrcweir 				{
575*cdf0e10cSrcweir 					try
576*cdf0e10cSrcweir 					{
577*cdf0e10cSrcweir 						nResId = RID_STR_DATANAV_ADD_BINDING;
578*cdf0e10cSrcweir 						xNewBinding = xModel->createBinding();
579*cdf0e10cSrcweir 						Reference< XSet > xBindings( xModel->getBindings(), UNO_QUERY );
580*cdf0e10cSrcweir 						xBindings->insert( makeAny( xNewBinding ) );
581*cdf0e10cSrcweir 						pNode = new ItemNode( xNewBinding );
582*cdf0e10cSrcweir 						eType = DITBinding;
583*cdf0e10cSrcweir 					}
584*cdf0e10cSrcweir 					catch ( Exception& )
585*cdf0e10cSrcweir 					{
586*cdf0e10cSrcweir 						DBG_ERRORFILE( "XFormsPage::DoToolBoxAction(): exception while adding binding" );
587*cdf0e10cSrcweir 					}
588*cdf0e10cSrcweir 				}
589*cdf0e10cSrcweir 
590*cdf0e10cSrcweir 				AddDataItemDialog aDlg( this, pNode, m_xUIHelper );
591*cdf0e10cSrcweir 				aDlg.SetText( SVX_RESSTR( nResId ) );
592*cdf0e10cSrcweir 				aDlg.InitText( eType );
593*cdf0e10cSrcweir 				short nReturn = aDlg.Execute();
594*cdf0e10cSrcweir 				if (  DGTInstance == m_eGroup )
595*cdf0e10cSrcweir 				{
596*cdf0e10cSrcweir 					if ( RET_OK == nReturn )
597*cdf0e10cSrcweir 					{
598*cdf0e10cSrcweir 						SvLBoxEntry* pNewEntry = AddEntry( pNode, bIsElement );
599*cdf0e10cSrcweir 						m_aItemList.MakeVisible( pNewEntry );
600*cdf0e10cSrcweir 						m_aItemList.Select( pNewEntry, sal_True );
601*cdf0e10cSrcweir                         bIsDocModified = true;
602*cdf0e10cSrcweir 					}
603*cdf0e10cSrcweir 					else
604*cdf0e10cSrcweir 					{
605*cdf0e10cSrcweir 						try
606*cdf0e10cSrcweir 						{
607*cdf0e10cSrcweir 							Reference< css::xml::dom::XNode > xPNode;
608*cdf0e10cSrcweir 							Reference< css::xml::dom::XNode > xNode =
609*cdf0e10cSrcweir 								xParentNode->removeChild( pNode->m_xNode );
610*cdf0e10cSrcweir 							if ( xNode.is() )
611*cdf0e10cSrcweir 								xPNode = xNode->getParentNode();
612*cdf0e10cSrcweir 							DBG_ASSERT( !xPNode.is(), "XFormsPage::RemoveEntry(): node not removed" );
613*cdf0e10cSrcweir 							delete pNode;
614*cdf0e10cSrcweir 						}
615*cdf0e10cSrcweir 						catch ( Exception& )
616*cdf0e10cSrcweir 						{
617*cdf0e10cSrcweir                             DBG_ERRORFILE( "XFormsPage::DoToolboxAction(): exception caught" );
618*cdf0e10cSrcweir 						}
619*cdf0e10cSrcweir 					}
620*cdf0e10cSrcweir 				}
621*cdf0e10cSrcweir 				else
622*cdf0e10cSrcweir 				{
623*cdf0e10cSrcweir 					if ( RET_OK == nReturn )
624*cdf0e10cSrcweir 					{
625*cdf0e10cSrcweir 						SvLBoxEntry* pNewEntry = AddEntry( xNewBinding );
626*cdf0e10cSrcweir                         m_aItemList.Select( pNewEntry, sal_True );
627*cdf0e10cSrcweir                         bIsDocModified = true;
628*cdf0e10cSrcweir 					}
629*cdf0e10cSrcweir 					else
630*cdf0e10cSrcweir 					{
631*cdf0e10cSrcweir 						try
632*cdf0e10cSrcweir 						{
633*cdf0e10cSrcweir 							Reference< XSet > xBindings( xModel->getBindings(), UNO_QUERY );
634*cdf0e10cSrcweir 							xBindings->remove( makeAny( xNewBinding ) );
635*cdf0e10cSrcweir 						}
636*cdf0e10cSrcweir 						catch ( Exception& )
637*cdf0e10cSrcweir 						{
638*cdf0e10cSrcweir                             DBG_ERRORFILE( "XFormsPage::DoToolboxAction(): exception caught" );
639*cdf0e10cSrcweir 						}
640*cdf0e10cSrcweir 					}
641*cdf0e10cSrcweir 					delete pNode;
642*cdf0e10cSrcweir 				}
643*cdf0e10cSrcweir 			}
644*cdf0e10cSrcweir 		}
645*cdf0e10cSrcweir         break;
646*cdf0e10cSrcweir 
647*cdf0e10cSrcweir         case TBI_ITEM_EDIT:
648*cdf0e10cSrcweir 		{
649*cdf0e10cSrcweir 			bHandled = true;
650*cdf0e10cSrcweir 			SvLBoxEntry* pEntry = m_aItemList.FirstSelected();
651*cdf0e10cSrcweir 			if ( pEntry )
652*cdf0e10cSrcweir 			{
653*cdf0e10cSrcweir 				if ( DGTSubmission == m_eGroup && m_aItemList.GetParent( pEntry ) )
654*cdf0e10cSrcweir 					pEntry = m_aItemList.GetParent( pEntry );
655*cdf0e10cSrcweir 				ItemNode* pNode = static_cast< ItemNode* >( pEntry->GetUserData() );
656*cdf0e10cSrcweir 				if ( DGTInstance == m_eGroup || DGTBinding == m_eGroup )
657*cdf0e10cSrcweir 				{
658*cdf0e10cSrcweir                     if ( DGTInstance == m_eGroup && m_sInstanceURL.Len() > 0 )
659*cdf0e10cSrcweir                     {
660*cdf0e10cSrcweir                         LinkedInstanceWarningBox aMsgBox( this );
661*cdf0e10cSrcweir                         if ( aMsgBox.Execute() != RET_OK )
662*cdf0e10cSrcweir                             return bHandled;
663*cdf0e10cSrcweir                     }
664*cdf0e10cSrcweir 
665*cdf0e10cSrcweir 					AddDataItemDialog aDlg( this, pNode, m_xUIHelper );
666*cdf0e10cSrcweir 					DataItemType eType = DITElement;
667*cdf0e10cSrcweir 					sal_uInt16 nResId = RID_STR_DATANAV_EDIT_ELEMENT;
668*cdf0e10cSrcweir 					if ( pNode && pNode->m_xNode.is() )
669*cdf0e10cSrcweir 					{
670*cdf0e10cSrcweir 						try
671*cdf0e10cSrcweir 						{
672*cdf0e10cSrcweir 							css::xml::dom::NodeType eChildType = pNode->m_xNode->getNodeType();
673*cdf0e10cSrcweir 							if ( eChildType == css::xml::dom::NodeType_ATTRIBUTE_NODE )
674*cdf0e10cSrcweir 							{
675*cdf0e10cSrcweir 								nResId = RID_STR_DATANAV_EDIT_ATTRIBUTE;
676*cdf0e10cSrcweir 								eType = DITAttribute;
677*cdf0e10cSrcweir 							}
678*cdf0e10cSrcweir 						}
679*cdf0e10cSrcweir 						catch ( Exception& )
680*cdf0e10cSrcweir 						{
681*cdf0e10cSrcweir                             DBG_ERRORFILE( "XFormsPage::DoToolboxAction(): exception caught" );
682*cdf0e10cSrcweir 						}
683*cdf0e10cSrcweir 					}
684*cdf0e10cSrcweir 					else if ( DGTBinding == m_eGroup )
685*cdf0e10cSrcweir 					{
686*cdf0e10cSrcweir 						nResId = RID_STR_DATANAV_EDIT_BINDING;
687*cdf0e10cSrcweir 						eType = DITBinding;
688*cdf0e10cSrcweir 					}
689*cdf0e10cSrcweir 					aDlg.SetText( SVX_RESSTR( nResId ) );
690*cdf0e10cSrcweir 					aDlg.InitText( eType );
691*cdf0e10cSrcweir 					if ( aDlg.Execute() == RET_OK )
692*cdf0e10cSrcweir 					{
693*cdf0e10cSrcweir 						// Set the new name
694*cdf0e10cSrcweir 						String sNewName;
695*cdf0e10cSrcweir 						if ( DGTInstance == m_eGroup )
696*cdf0e10cSrcweir 						{
697*cdf0e10cSrcweir 							try
698*cdf0e10cSrcweir 							{
699*cdf0e10cSrcweir 								sNewName = m_xUIHelper->getNodeDisplayName(
700*cdf0e10cSrcweir 									pNode->m_xNode, m_pNaviWin->IsShowDetails() );
701*cdf0e10cSrcweir 							}
702*cdf0e10cSrcweir 							catch ( Exception& )
703*cdf0e10cSrcweir 							{
704*cdf0e10cSrcweir                                 DBG_ERRORFILE( "XFormsPage::DoToolboxAction(): exception caught" );
705*cdf0e10cSrcweir 							}
706*cdf0e10cSrcweir 						}
707*cdf0e10cSrcweir 						else
708*cdf0e10cSrcweir 						{
709*cdf0e10cSrcweir 							try
710*cdf0e10cSrcweir 							{
711*cdf0e10cSrcweir 								String sDelim( RTL_CONSTASCII_STRINGPARAM( ": " ) );
712*cdf0e10cSrcweir 								::rtl::OUString sTemp;
713*cdf0e10cSrcweir 								pNode->m_xPropSet->getPropertyValue( PN_BINDING_ID ) >>= sTemp;
714*cdf0e10cSrcweir 								sNewName += String( sTemp );
715*cdf0e10cSrcweir 								sNewName += sDelim;
716*cdf0e10cSrcweir 								pNode->m_xPropSet->getPropertyValue( PN_BINDING_EXPR ) >>= sTemp;
717*cdf0e10cSrcweir 								sNewName += String( sTemp );
718*cdf0e10cSrcweir 							}
719*cdf0e10cSrcweir 							catch ( Exception& )
720*cdf0e10cSrcweir 							{
721*cdf0e10cSrcweir                                 DBG_ERRORFILE( "XFormsPage::DoToolboxAction(): exception caught" );
722*cdf0e10cSrcweir 							}
723*cdf0e10cSrcweir 						}
724*cdf0e10cSrcweir 
725*cdf0e10cSrcweir 						m_aItemList.SetEntryText( pEntry, sNewName );
726*cdf0e10cSrcweir                         bIsDocModified = true;
727*cdf0e10cSrcweir 					}
728*cdf0e10cSrcweir 				}
729*cdf0e10cSrcweir 				else
730*cdf0e10cSrcweir 				{
731*cdf0e10cSrcweir 					AddSubmissionDialog aDlg( this, pNode, m_xUIHelper );
732*cdf0e10cSrcweir 					aDlg.SetText( SVX_RESSTR( RID_STR_DATANAV_EDIT_SUBMISSION ) );
733*cdf0e10cSrcweir 					if ( aDlg.Execute() == RET_OK )
734*cdf0e10cSrcweir                     {
735*cdf0e10cSrcweir 						EditEntry( pNode->m_xPropSet );
736*cdf0e10cSrcweir                         bIsDocModified = true;
737*cdf0e10cSrcweir                     }
738*cdf0e10cSrcweir 				}
739*cdf0e10cSrcweir 			}
740*cdf0e10cSrcweir 		}
741*cdf0e10cSrcweir         break;
742*cdf0e10cSrcweir 
743*cdf0e10cSrcweir         case TBI_ITEM_REMOVE:
744*cdf0e10cSrcweir         {
745*cdf0e10cSrcweir 			bHandled = true;
746*cdf0e10cSrcweir             if ( DGTInstance == m_eGroup && m_sInstanceURL.Len() > 0 )
747*cdf0e10cSrcweir             {
748*cdf0e10cSrcweir                 LinkedInstanceWarningBox aMsgBox( this );
749*cdf0e10cSrcweir                 if ( aMsgBox.Execute() != RET_OK )
750*cdf0e10cSrcweir                     return bHandled;
751*cdf0e10cSrcweir             }
752*cdf0e10cSrcweir             bIsDocModified = RemoveEntry();
753*cdf0e10cSrcweir         }
754*cdf0e10cSrcweir         break;
755*cdf0e10cSrcweir 
756*cdf0e10cSrcweir         case MID_INSERT_CONTROL:
757*cdf0e10cSrcweir         {
758*cdf0e10cSrcweir             OSL_ENSURE( false, "XFormsPage::DoToolboxAction: MID_INSERT_CONTROL not implemented, yet!" );
759*cdf0e10cSrcweir         }
760*cdf0e10cSrcweir         break;
761*cdf0e10cSrcweir 
762*cdf0e10cSrcweir         default:
763*cdf0e10cSrcweir             OSL_ENSURE( false, "XFormsPage::DoToolboxAction: unknown ID!" );
764*cdf0e10cSrcweir             break;
765*cdf0e10cSrcweir         }
766*cdf0e10cSrcweir 
767*cdf0e10cSrcweir         m_pNaviWin->DisableNotify( false );
768*cdf0e10cSrcweir 		EnableMenuItems( NULL );
769*cdf0e10cSrcweir         if ( bIsDocModified )
770*cdf0e10cSrcweir             m_pNaviWin->SetDocModified();
771*cdf0e10cSrcweir 		return bHandled;
772*cdf0e10cSrcweir 	}
773*cdf0e10cSrcweir 
774*cdf0e10cSrcweir 	//------------------------------------------------------------------------
775*cdf0e10cSrcweir 	SvLBoxEntry* XFormsPage::AddEntry( ItemNode* _pNewNode, bool _bIsElement )
776*cdf0e10cSrcweir 	{
777*cdf0e10cSrcweir 		SvLBoxEntry* pParent = m_aItemList.FirstSelected();
778*cdf0e10cSrcweir 		const ImageList& rImageList = GetSettings().GetStyleSettings().GetHighContrastMode()
779*cdf0e10cSrcweir 			? m_pNaviWin->GetItemHCImageList()
780*cdf0e10cSrcweir 			: m_pNaviWin->GetItemImageList();
781*cdf0e10cSrcweir 		sal_uInt16 nImageID = ( _bIsElement ) ? IID_ELEMENT : IID_ATTRIBUTE;
782*cdf0e10cSrcweir 		Image aImage = rImageList.GetImage( nImageID );
783*cdf0e10cSrcweir 		::rtl::OUString sName;
784*cdf0e10cSrcweir 		try
785*cdf0e10cSrcweir 		{
786*cdf0e10cSrcweir 			sName = m_xUIHelper->getNodeDisplayName(
787*cdf0e10cSrcweir 				_pNewNode->m_xNode, m_pNaviWin->IsShowDetails() );
788*cdf0e10cSrcweir 		}
789*cdf0e10cSrcweir 		catch ( Exception& )
790*cdf0e10cSrcweir 		{
791*cdf0e10cSrcweir             DBG_UNHANDLED_EXCEPTION();
792*cdf0e10cSrcweir 		}
793*cdf0e10cSrcweir 		return m_aItemList.InsertEntry(
794*cdf0e10cSrcweir 			sName, aImage, aImage, pParent, sal_False, LIST_APPEND, _pNewNode );
795*cdf0e10cSrcweir 	}
796*cdf0e10cSrcweir 	//------------------------------------------------------------------------
797*cdf0e10cSrcweir     class lcl_ResourceString
798*cdf0e10cSrcweir     {
799*cdf0e10cSrcweir     protected:
800*cdf0e10cSrcweir         lcl_ResourceString()
801*cdf0e10cSrcweir         {
802*cdf0e10cSrcweir         }
803*cdf0e10cSrcweir 
804*cdf0e10cSrcweir         lcl_ResourceString( const lcl_ResourceString& );
805*cdf0e10cSrcweir 
806*cdf0e10cSrcweir         virtual ~lcl_ResourceString()
807*cdf0e10cSrcweir         {
808*cdf0e10cSrcweir         }
809*cdf0e10cSrcweir 
810*cdf0e10cSrcweir         // load UI resources from resource file
811*cdf0e10cSrcweir         void init()
812*cdf0e10cSrcweir         {
813*cdf0e10cSrcweir             // create a resource manager, for the svx resource file
814*cdf0e10cSrcweir             // and the UI locale
815*cdf0e10cSrcweir             ByteString aResourceFile( "svx" );
816*cdf0e10cSrcweir             ResMgr* pResMgr = ResMgr::CreateResMgr(
817*cdf0e10cSrcweir                 aResourceFile.GetBuffer(),
818*cdf0e10cSrcweir                 Application::GetSettings().GetUILocale() );
819*cdf0e10cSrcweir 
820*cdf0e10cSrcweir             // load the resources for the AddSubmission modal dialog.
821*cdf0e10cSrcweir             // This will create our own resource context.
822*cdf0e10cSrcweir             ResId aRes( RID_SVXDLG_ADD_SUBMISSION, *pResMgr );
823*cdf0e10cSrcweir             aRes.SetRT( RSC_MODALDIALOG );
824*cdf0e10cSrcweir             pResMgr->GetResource( aRes );
825*cdf0e10cSrcweir 
826*cdf0e10cSrcweir             // now, we can access the local resources from the dialog's
827*cdf0e10cSrcweir             // resource context
828*cdf0e10cSrcweir             _initResources(pResMgr);
829*cdf0e10cSrcweir 
830*cdf0e10cSrcweir             // clean up: remove context, and delete the resource manager
831*cdf0e10cSrcweir             // ( Increment(..) is needed since PopContext() requires that
832*cdf0e10cSrcweir             //   the file pointer is at the end. )
833*cdf0e10cSrcweir             pResMgr->Increment( pResMgr->GetRemainSize() );
834*cdf0e10cSrcweir             pResMgr->PopContext();
835*cdf0e10cSrcweir             delete pResMgr;
836*cdf0e10cSrcweir         }
837*cdf0e10cSrcweir 
838*cdf0e10cSrcweir         // load resources... to be overloaded in sub-classes
839*cdf0e10cSrcweir         virtual void _initResources( ResMgr* pMgr ) = 0;
840*cdf0e10cSrcweir     };
841*cdf0e10cSrcweir 
842*cdf0e10cSrcweir     class lcl_ReplaceString : public lcl_ResourceString
843*cdf0e10cSrcweir     {
844*cdf0e10cSrcweir         rtl::OUString m_sDoc_UI;
845*cdf0e10cSrcweir         rtl::OUString m_sInstance_UI;
846*cdf0e10cSrcweir         rtl::OUString m_sNone_UI;
847*cdf0e10cSrcweir 
848*cdf0e10cSrcweir         rtl::OUString m_sDoc_API;
849*cdf0e10cSrcweir         rtl::OUString m_sInstance_API;
850*cdf0e10cSrcweir         rtl::OUString m_sNone_API;
851*cdf0e10cSrcweir 
852*cdf0e10cSrcweir         lcl_ReplaceString() :
853*cdf0e10cSrcweir             lcl_ResourceString(),
854*cdf0e10cSrcweir             m_sDoc_API(      RTL_CONSTASCII_USTRINGPARAM("all") ),
855*cdf0e10cSrcweir             m_sInstance_API( RTL_CONSTASCII_USTRINGPARAM("instance") ),
856*cdf0e10cSrcweir             m_sNone_API(     RTL_CONSTASCII_USTRINGPARAM("none") )
857*cdf0e10cSrcweir         {
858*cdf0e10cSrcweir             init();
859*cdf0e10cSrcweir         }
860*cdf0e10cSrcweir 
861*cdf0e10cSrcweir         lcl_ReplaceString( const lcl_ReplaceString& );
862*cdf0e10cSrcweir 
863*cdf0e10cSrcweir         virtual ~lcl_ReplaceString()
864*cdf0e10cSrcweir         {
865*cdf0e10cSrcweir         }
866*cdf0e10cSrcweir 
867*cdf0e10cSrcweir         // load UI resources from resource file
868*cdf0e10cSrcweir         virtual void _initResources( ResMgr * pMgr )
869*cdf0e10cSrcweir         {
870*cdf0e10cSrcweir             // now, we can access the local resources from the dialog's
871*cdf0e10cSrcweir             // resource context
872*cdf0e10cSrcweir             m_sDoc_UI      = String( ResId( STR_REPLACE_DOC, *pMgr ) );
873*cdf0e10cSrcweir             m_sInstance_UI = String( ResId( STR_REPLACE_INST, *pMgr ) );
874*cdf0e10cSrcweir             m_sNone_UI     = String( ResId( STR_REPLACE_NONE, *pMgr ) );
875*cdf0e10cSrcweir         }
876*cdf0e10cSrcweir 
877*cdf0e10cSrcweir     public:
878*cdf0e10cSrcweir 
879*cdf0e10cSrcweir         /** create and obtain the singleton instance */
880*cdf0e10cSrcweir         static const lcl_ReplaceString& get()
881*cdf0e10cSrcweir         {
882*cdf0e10cSrcweir             // keep the singleton instance here
883*cdf0e10cSrcweir             static lcl_ReplaceString* m_pInstance = NULL;
884*cdf0e10cSrcweir 
885*cdf0e10cSrcweir             if( m_pInstance == NULL )
886*cdf0e10cSrcweir                 m_pInstance = new lcl_ReplaceString();
887*cdf0e10cSrcweir             return *m_pInstance;
888*cdf0e10cSrcweir         }
889*cdf0e10cSrcweir 
890*cdf0e10cSrcweir         /** convert submission replace string from API value to UI value.
891*cdf0e10cSrcweir             Use 'none' as default. */
892*cdf0e10cSrcweir         rtl::OUString toUI( const rtl::OUString& rStr ) const
893*cdf0e10cSrcweir         {
894*cdf0e10cSrcweir             if( rStr == m_sDoc_API )
895*cdf0e10cSrcweir                 return m_sDoc_UI;
896*cdf0e10cSrcweir             else if( rStr == m_sInstance_API )
897*cdf0e10cSrcweir                 return m_sInstance_UI;
898*cdf0e10cSrcweir             else
899*cdf0e10cSrcweir                 return m_sNone_UI;
900*cdf0e10cSrcweir         }
901*cdf0e10cSrcweir 
902*cdf0e10cSrcweir         /** convert submission replace string from UI to API.
903*cdf0e10cSrcweir             Use 'none' as default. */
904*cdf0e10cSrcweir         rtl::OUString toAPI( const rtl::OUString& rStr ) const
905*cdf0e10cSrcweir         {
906*cdf0e10cSrcweir             if( rStr == m_sDoc_UI )
907*cdf0e10cSrcweir                 return m_sDoc_API;
908*cdf0e10cSrcweir             else if( rStr == m_sInstance_UI )
909*cdf0e10cSrcweir                 return m_sInstance_API;
910*cdf0e10cSrcweir             else
911*cdf0e10cSrcweir                 return m_sNone_API;
912*cdf0e10cSrcweir         }
913*cdf0e10cSrcweir     };
914*cdf0e10cSrcweir 
915*cdf0e10cSrcweir     class lcl_MethodString : public lcl_ResourceString
916*cdf0e10cSrcweir     {
917*cdf0e10cSrcweir         rtl::OUString m_sPost_UI;
918*cdf0e10cSrcweir         rtl::OUString m_sPut_UI;
919*cdf0e10cSrcweir         rtl::OUString m_sGet_UI;
920*cdf0e10cSrcweir 
921*cdf0e10cSrcweir         rtl::OUString m_sPost_API;
922*cdf0e10cSrcweir         rtl::OUString m_sPut_API;
923*cdf0e10cSrcweir         rtl::OUString m_sGet_API;
924*cdf0e10cSrcweir 
925*cdf0e10cSrcweir         lcl_MethodString() :
926*cdf0e10cSrcweir             lcl_ResourceString(),
927*cdf0e10cSrcweir             m_sPost_API( RTL_CONSTASCII_USTRINGPARAM("post") ),
928*cdf0e10cSrcweir             m_sPut_API(  RTL_CONSTASCII_USTRINGPARAM("put") ),
929*cdf0e10cSrcweir             m_sGet_API(  RTL_CONSTASCII_USTRINGPARAM("get") )
930*cdf0e10cSrcweir         {
931*cdf0e10cSrcweir             init();
932*cdf0e10cSrcweir         }
933*cdf0e10cSrcweir 
934*cdf0e10cSrcweir         lcl_MethodString( const lcl_MethodString& );
935*cdf0e10cSrcweir 
936*cdf0e10cSrcweir         virtual ~lcl_MethodString()
937*cdf0e10cSrcweir         {
938*cdf0e10cSrcweir         }
939*cdf0e10cSrcweir 
940*cdf0e10cSrcweir         // load UI resources from resource file
941*cdf0e10cSrcweir         virtual void _initResources(ResMgr* pMgr)
942*cdf0e10cSrcweir         {
943*cdf0e10cSrcweir             m_sPost_UI = String( ResId( STR_METHOD_POST, *pMgr ) );
944*cdf0e10cSrcweir             m_sPut_UI  = String( ResId( STR_METHOD_PUT, *pMgr ) );
945*cdf0e10cSrcweir             m_sGet_UI  = String( ResId( STR_METHOD_GET, *pMgr ) );
946*cdf0e10cSrcweir         }
947*cdf0e10cSrcweir 
948*cdf0e10cSrcweir     public:
949*cdf0e10cSrcweir 
950*cdf0e10cSrcweir         /** create and obtain the singleton instance */
951*cdf0e10cSrcweir         static const lcl_MethodString& get()
952*cdf0e10cSrcweir         {
953*cdf0e10cSrcweir             // keep the singleton instance here
954*cdf0e10cSrcweir             static lcl_MethodString* m_pInstance = NULL;
955*cdf0e10cSrcweir 
956*cdf0e10cSrcweir             if( m_pInstance == NULL )
957*cdf0e10cSrcweir                 m_pInstance = new lcl_MethodString();
958*cdf0e10cSrcweir             return *m_pInstance;
959*cdf0e10cSrcweir         }
960*cdf0e10cSrcweir 
961*cdf0e10cSrcweir         /** convert from API to UI; put is default. */
962*cdf0e10cSrcweir         rtl::OUString toUI( const rtl::OUString& rStr ) const
963*cdf0e10cSrcweir         {
964*cdf0e10cSrcweir             if( rStr == m_sGet_API )
965*cdf0e10cSrcweir                 return m_sGet_UI;
966*cdf0e10cSrcweir             else if( rStr == m_sPost_API )
967*cdf0e10cSrcweir                 return m_sPost_UI;
968*cdf0e10cSrcweir             else
969*cdf0e10cSrcweir                 return m_sPut_UI;
970*cdf0e10cSrcweir         }
971*cdf0e10cSrcweir 
972*cdf0e10cSrcweir         /** convert from UI to API; put is default */
973*cdf0e10cSrcweir         rtl::OUString toAPI( const rtl::OUString& rStr ) const
974*cdf0e10cSrcweir         {
975*cdf0e10cSrcweir             if( rStr == m_sGet_UI )
976*cdf0e10cSrcweir                 return m_sGet_API;
977*cdf0e10cSrcweir             else if( rStr == m_sPost_UI )
978*cdf0e10cSrcweir                 return m_sPost_API;
979*cdf0e10cSrcweir             else
980*cdf0e10cSrcweir                 return m_sPut_API;
981*cdf0e10cSrcweir         }
982*cdf0e10cSrcweir     };
983*cdf0e10cSrcweir 
984*cdf0e10cSrcweir 	//------------------------------------------------------------------------
985*cdf0e10cSrcweir 	SvLBoxEntry* XFormsPage::AddEntry( const Reference< XPropertySet >& _rEntry )
986*cdf0e10cSrcweir 	{
987*cdf0e10cSrcweir 		SvLBoxEntry* pEntry = NULL;
988*cdf0e10cSrcweir 		const ImageList& rImageList = GetSettings().GetStyleSettings().GetHighContrastMode()
989*cdf0e10cSrcweir 			? m_pNaviWin->GetItemHCImageList()
990*cdf0e10cSrcweir 			: m_pNaviWin->GetItemImageList();
991*cdf0e10cSrcweir 		Image aImage = rImageList.GetImage( IID_ELEMENT );
992*cdf0e10cSrcweir 
993*cdf0e10cSrcweir 		ItemNode* pNode = new ItemNode( _rEntry );
994*cdf0e10cSrcweir 		rtl::OUString sTemp;
995*cdf0e10cSrcweir 
996*cdf0e10cSrcweir 		if ( DGTSubmission == m_eGroup )
997*cdf0e10cSrcweir 		{
998*cdf0e10cSrcweir 			try
999*cdf0e10cSrcweir 			{
1000*cdf0e10cSrcweir 				// ID
1001*cdf0e10cSrcweir 				_rEntry->getPropertyValue( PN_SUBMISSION_ID ) >>= sTemp;
1002*cdf0e10cSrcweir 				pEntry = m_aItemList.InsertEntry( sTemp, aImage, aImage, NULL, sal_False, LIST_APPEND, pNode );
1003*cdf0e10cSrcweir 				// Action
1004*cdf0e10cSrcweir 				_rEntry->getPropertyValue( PN_SUBMISSION_ACTION ) >>= sTemp;
1005*cdf0e10cSrcweir 				String sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_ACTION );
1006*cdf0e10cSrcweir 				sEntry += String( sTemp );
1007*cdf0e10cSrcweir 				m_aItemList.InsertEntry( sEntry, aImage, aImage, pEntry );
1008*cdf0e10cSrcweir 				// Method
1009*cdf0e10cSrcweir 				_rEntry->getPropertyValue( PN_SUBMISSION_METHOD ) >>= sTemp;
1010*cdf0e10cSrcweir 				sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_METHOD );
1011*cdf0e10cSrcweir 				sEntry += String( lcl_MethodString::get().toUI( sTemp ) );
1012*cdf0e10cSrcweir 				m_aItemList.InsertEntry( sEntry, aImage, aImage, pEntry );
1013*cdf0e10cSrcweir 				// Ref
1014*cdf0e10cSrcweir 				_rEntry->getPropertyValue( PN_SUBMISSION_REF ) >>= sTemp;
1015*cdf0e10cSrcweir 				sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_REF );
1016*cdf0e10cSrcweir 				sEntry += String( sTemp );
1017*cdf0e10cSrcweir 				m_aItemList.InsertEntry( sEntry, aImage, aImage, pEntry );
1018*cdf0e10cSrcweir 				// Bind
1019*cdf0e10cSrcweir 				_rEntry->getPropertyValue( PN_SUBMISSION_BIND ) >>= sTemp;
1020*cdf0e10cSrcweir 				sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_BIND );
1021*cdf0e10cSrcweir 				sEntry += String( sTemp );
1022*cdf0e10cSrcweir 				m_aItemList.InsertEntry( sEntry, aImage, aImage, pEntry );
1023*cdf0e10cSrcweir 				// Replace
1024*cdf0e10cSrcweir 				_rEntry->getPropertyValue( PN_SUBMISSION_REPLACE ) >>= sTemp;
1025*cdf0e10cSrcweir 				sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_REPLACE );
1026*cdf0e10cSrcweir 				sEntry += String( lcl_ReplaceString::get().toUI( sTemp ) );
1027*cdf0e10cSrcweir 				m_aItemList.InsertEntry( sEntry, aImage, aImage, pEntry );
1028*cdf0e10cSrcweir 			}
1029*cdf0e10cSrcweir 			catch ( Exception& )
1030*cdf0e10cSrcweir 			{
1031*cdf0e10cSrcweir                 DBG_ERRORFILE( "XFormsPage::AddEntry(Ref): exception caught" );
1032*cdf0e10cSrcweir 			}
1033*cdf0e10cSrcweir 		}
1034*cdf0e10cSrcweir 		else // then Binding Page
1035*cdf0e10cSrcweir 		{
1036*cdf0e10cSrcweir 			try
1037*cdf0e10cSrcweir 			{
1038*cdf0e10cSrcweir 				String sDelim( RTL_CONSTASCII_STRINGPARAM( ": " ) );
1039*cdf0e10cSrcweir 				::rtl::OUString sName;
1040*cdf0e10cSrcweir 				_rEntry->getPropertyValue( PN_BINDING_ID ) >>= sTemp;
1041*cdf0e10cSrcweir 				sName += String( sTemp );
1042*cdf0e10cSrcweir 				sName += sDelim;
1043*cdf0e10cSrcweir 				_rEntry->getPropertyValue( PN_BINDING_EXPR ) >>= sTemp;
1044*cdf0e10cSrcweir 				sName += String( sTemp );
1045*cdf0e10cSrcweir 				pEntry = m_aItemList.InsertEntry(
1046*cdf0e10cSrcweir 					sName, aImage, aImage, NULL, sal_False, LIST_APPEND, pNode );
1047*cdf0e10cSrcweir 			}
1048*cdf0e10cSrcweir 			catch ( Exception& )
1049*cdf0e10cSrcweir 			{
1050*cdf0e10cSrcweir                 DBG_ERRORFILE( "XFormsPage::AddEntry(Ref): exception caught" );
1051*cdf0e10cSrcweir 			}
1052*cdf0e10cSrcweir 		}
1053*cdf0e10cSrcweir 
1054*cdf0e10cSrcweir 		return pEntry;
1055*cdf0e10cSrcweir 	}
1056*cdf0e10cSrcweir 
1057*cdf0e10cSrcweir 	//------------------------------------------------------------------------
1058*cdf0e10cSrcweir 	void XFormsPage::EditEntry( const Reference< XPropertySet >& _rEntry )
1059*cdf0e10cSrcweir 	{
1060*cdf0e10cSrcweir 		SvLBoxEntry* pEntry = NULL;
1061*cdf0e10cSrcweir 		rtl::OUString sTemp;
1062*cdf0e10cSrcweir 
1063*cdf0e10cSrcweir 		if ( DGTSubmission == m_eGroup )
1064*cdf0e10cSrcweir 		{
1065*cdf0e10cSrcweir 			try
1066*cdf0e10cSrcweir 			{
1067*cdf0e10cSrcweir 				pEntry = m_aItemList.FirstSelected();
1068*cdf0e10cSrcweir 
1069*cdf0e10cSrcweir                 // #i36262# may be called for submission entry *or* for
1070*cdf0e10cSrcweir                 // submission children. If we don't have any children, we
1071*cdf0e10cSrcweir                 // assume the latter case and use the parent
1072*cdf0e10cSrcweir                 if( m_aItemList.GetEntry( pEntry, 0 ) == NULL )
1073*cdf0e10cSrcweir                 {
1074*cdf0e10cSrcweir                     pEntry = m_aItemList.GetModel()->GetParent( pEntry );
1075*cdf0e10cSrcweir                 }
1076*cdf0e10cSrcweir 
1077*cdf0e10cSrcweir 				_rEntry->getPropertyValue( PN_SUBMISSION_ID ) >>= sTemp;
1078*cdf0e10cSrcweir 				m_aItemList.SetEntryText( pEntry, sTemp );
1079*cdf0e10cSrcweir 
1080*cdf0e10cSrcweir 				_rEntry->getPropertyValue( PN_SUBMISSION_BIND ) >>= sTemp;
1081*cdf0e10cSrcweir 				String sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_BIND );
1082*cdf0e10cSrcweir 				sEntry += String( sTemp );
1083*cdf0e10cSrcweir 				sal_uIntPtr nPos = 0;
1084*cdf0e10cSrcweir 				SvLBoxEntry* pChild = m_aItemList.GetEntry( pEntry, nPos++ );
1085*cdf0e10cSrcweir 				m_aItemList.SetEntryText( pChild, sEntry );
1086*cdf0e10cSrcweir 				_rEntry->getPropertyValue( PN_SUBMISSION_REF ) >>= sTemp;
1087*cdf0e10cSrcweir 				sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_REF );
1088*cdf0e10cSrcweir 				sEntry += String( sTemp );
1089*cdf0e10cSrcweir 				pChild = m_aItemList.GetEntry( pEntry, nPos++ );
1090*cdf0e10cSrcweir 				m_aItemList.SetEntryText( pChild, sEntry );
1091*cdf0e10cSrcweir 				_rEntry->getPropertyValue( PN_SUBMISSION_ACTION ) >>= sTemp;
1092*cdf0e10cSrcweir 				sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_ACTION );
1093*cdf0e10cSrcweir 				sEntry += String( sTemp );
1094*cdf0e10cSrcweir 				pChild = m_aItemList.GetEntry( pEntry, nPos++ );
1095*cdf0e10cSrcweir 				m_aItemList.SetEntryText( pChild, sEntry );
1096*cdf0e10cSrcweir 				_rEntry->getPropertyValue( PN_SUBMISSION_METHOD ) >>= sTemp;
1097*cdf0e10cSrcweir 				sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_METHOD );
1098*cdf0e10cSrcweir 				sEntry += String( lcl_MethodString::get().toUI( sTemp ) );
1099*cdf0e10cSrcweir 				pChild = m_aItemList.GetEntry( pEntry, nPos++ );
1100*cdf0e10cSrcweir 				m_aItemList.SetEntryText( pChild, sEntry );
1101*cdf0e10cSrcweir 				_rEntry->getPropertyValue( PN_SUBMISSION_REPLACE ) >>= sTemp;
1102*cdf0e10cSrcweir 				sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_REPLACE );
1103*cdf0e10cSrcweir 				sEntry += String( lcl_ReplaceString::get().toUI( sTemp ) );
1104*cdf0e10cSrcweir 				pChild = m_aItemList.GetEntry( pEntry, nPos++ );
1105*cdf0e10cSrcweir 				m_aItemList.SetEntryText( pChild, sEntry );
1106*cdf0e10cSrcweir 			}
1107*cdf0e10cSrcweir 			catch ( Exception& )
1108*cdf0e10cSrcweir 			{
1109*cdf0e10cSrcweir                 DBG_ERRORFILE( "XFormsPage::EditEntry(): exception caught" );
1110*cdf0e10cSrcweir 			}
1111*cdf0e10cSrcweir 		}
1112*cdf0e10cSrcweir 	}
1113*cdf0e10cSrcweir 
1114*cdf0e10cSrcweir 	//------------------------------------------------------------------------
1115*cdf0e10cSrcweir     bool XFormsPage::RemoveEntry()
1116*cdf0e10cSrcweir 	{
1117*cdf0e10cSrcweir         bool bRet = false;
1118*cdf0e10cSrcweir 		SvLBoxEntry* pEntry = m_aItemList.FirstSelected();
1119*cdf0e10cSrcweir 		if ( pEntry &&
1120*cdf0e10cSrcweir              ( DGTInstance != m_eGroup || m_aItemList.GetParent( pEntry ) ) )
1121*cdf0e10cSrcweir 		{
1122*cdf0e10cSrcweir 			Reference< css::xforms::XModel > xModel( m_xUIHelper, UNO_QUERY );
1123*cdf0e10cSrcweir 			DBG_ASSERT( xModel.is(), "XFormsPage::RemoveEntry(): no model" );
1124*cdf0e10cSrcweir 			ItemNode* pNode = static_cast< ItemNode* >( pEntry->GetUserData() );
1125*cdf0e10cSrcweir 			DBG_ASSERT( pNode, "XFormsPage::RemoveEntry(): no node" );
1126*cdf0e10cSrcweir 
1127*cdf0e10cSrcweir 			if ( DGTInstance == m_eGroup )
1128*cdf0e10cSrcweir 			{
1129*cdf0e10cSrcweir 				try
1130*cdf0e10cSrcweir 				{
1131*cdf0e10cSrcweir 					DBG_ASSERT( pNode->m_xNode.is(), "XFormsPage::RemoveEntry(): no XNode" );
1132*cdf0e10cSrcweir 					css::xml::dom::NodeType eChildType = pNode->m_xNode->getNodeType();
1133*cdf0e10cSrcweir 					bool bIsElement = ( eChildType == css::xml::dom::NodeType_ELEMENT_NODE );
1134*cdf0e10cSrcweir 					sal_uInt16 nResId = bIsElement ? RID_QRY_REMOVE_ELEMENT : RID_QRY_REMOVE_ATTRIBUTE;
1135*cdf0e10cSrcweir 					String sVar = bIsElement ? ELEMENTNAME : ATTRIBUTENAME;
1136*cdf0e10cSrcweir 					QueryBox aQBox( this, SVX_RES( nResId ) );
1137*cdf0e10cSrcweir 					String sMessText = aQBox.GetMessText();
1138*cdf0e10cSrcweir 					sMessText.SearchAndReplace(
1139*cdf0e10cSrcweir 						sVar, m_xUIHelper->getNodeDisplayName( pNode->m_xNode, sal_False ) );
1140*cdf0e10cSrcweir 					aQBox.SetMessText( sMessText );
1141*cdf0e10cSrcweir 					if ( aQBox.Execute() == RET_YES )
1142*cdf0e10cSrcweir 					{
1143*cdf0e10cSrcweir 						SvLBoxEntry* pParent = m_aItemList.GetParent( pEntry );
1144*cdf0e10cSrcweir 						DBG_ASSERT( pParent, "XFormsPage::RemoveEntry(): no parent entry" );
1145*cdf0e10cSrcweir 						ItemNode* pParentNode = static_cast< ItemNode* >( pParent->GetUserData() );
1146*cdf0e10cSrcweir 						DBG_ASSERT( pParentNode && pParentNode->m_xNode.is(), "XFormsPage::RemoveEntry(): no parent XNode" );
1147*cdf0e10cSrcweir 
1148*cdf0e10cSrcweir 						Reference< css::xml::dom::XNode > xPNode;
1149*cdf0e10cSrcweir 						Reference< css::xml::dom::XNode > xNode =
1150*cdf0e10cSrcweir 							pParentNode->m_xNode->removeChild( pNode->m_xNode );
1151*cdf0e10cSrcweir 						if ( xNode.is() )
1152*cdf0e10cSrcweir 							xPNode = xNode->getParentNode();
1153*cdf0e10cSrcweir 						DBG_ASSERT( !xPNode.is(), "XFormsPage::RemoveEntry(): node not removed" );
1154*cdf0e10cSrcweir                         bRet = true;
1155*cdf0e10cSrcweir 					}
1156*cdf0e10cSrcweir 				}
1157*cdf0e10cSrcweir 				catch ( Exception& )
1158*cdf0e10cSrcweir 				{
1159*cdf0e10cSrcweir                     DBG_ERRORFILE( "XFormsPage::RemoveEntry(): exception caught" );
1160*cdf0e10cSrcweir 				}
1161*cdf0e10cSrcweir 			}
1162*cdf0e10cSrcweir 			else
1163*cdf0e10cSrcweir 			{
1164*cdf0e10cSrcweir                 DBG_ASSERT( pNode->m_xPropSet.is(), "XFormsPage::RemoveEntry(): no propset" );
1165*cdf0e10cSrcweir                 bool bSubmission = ( DGTSubmission == m_eGroup );
1166*cdf0e10cSrcweir                 sal_uInt16 nResId = bSubmission ? RID_QRY_REMOVE_SUBMISSION : RID_QRY_REMOVE_BINDING;
1167*cdf0e10cSrcweir                 rtl::OUString sProperty = bSubmission ? PN_SUBMISSION_ID : PN_BINDING_ID;
1168*cdf0e10cSrcweir                 String sSearch = bSubmission ? SUBMISSIONNAME : BINDINGNAME;
1169*cdf0e10cSrcweir                 rtl::OUString sName;
1170*cdf0e10cSrcweir                 try
1171*cdf0e10cSrcweir                 {
1172*cdf0e10cSrcweir                     pNode->m_xPropSet->getPropertyValue( sProperty ) >>= sName;
1173*cdf0e10cSrcweir                 }
1174*cdf0e10cSrcweir                 catch ( Exception& )
1175*cdf0e10cSrcweir                 {
1176*cdf0e10cSrcweir                     DBG_ERRORFILE( "XFormsPage::RemoveEntry(): exception caught" );
1177*cdf0e10cSrcweir                 }
1178*cdf0e10cSrcweir                 QueryBox aQBox( this, SVX_RES( nResId ) );
1179*cdf0e10cSrcweir                 String sMessText = aQBox.GetMessText();
1180*cdf0e10cSrcweir                 sMessText.SearchAndReplace( sSearch, String( sName ) );
1181*cdf0e10cSrcweir                 aQBox.SetMessText( sMessText );
1182*cdf0e10cSrcweir                 if ( aQBox.Execute() == RET_YES )
1183*cdf0e10cSrcweir                 {
1184*cdf0e10cSrcweir                     try
1185*cdf0e10cSrcweir                     {
1186*cdf0e10cSrcweir                         if ( bSubmission )
1187*cdf0e10cSrcweir                             xModel->getSubmissions()->remove( makeAny( pNode->m_xPropSet ) );
1188*cdf0e10cSrcweir                         else // then Binding Page
1189*cdf0e10cSrcweir                             xModel->getBindings()->remove( makeAny( pNode->m_xPropSet ) );
1190*cdf0e10cSrcweir                         bRet = true;
1191*cdf0e10cSrcweir                     }
1192*cdf0e10cSrcweir                     catch ( Exception& )
1193*cdf0e10cSrcweir                     {
1194*cdf0e10cSrcweir                         DBG_ERRORFILE( "XFormsPage::RemoveEntry(): exception caught" );
1195*cdf0e10cSrcweir                     }
1196*cdf0e10cSrcweir                 }
1197*cdf0e10cSrcweir 			}
1198*cdf0e10cSrcweir 
1199*cdf0e10cSrcweir             if ( bRet )
1200*cdf0e10cSrcweir                 m_aItemList.RemoveEntry( pEntry );
1201*cdf0e10cSrcweir 		}
1202*cdf0e10cSrcweir 
1203*cdf0e10cSrcweir         return bRet;
1204*cdf0e10cSrcweir 	}
1205*cdf0e10cSrcweir 
1206*cdf0e10cSrcweir 	//------------------------------------------------------------------------
1207*cdf0e10cSrcweir 	long XFormsPage::Notify( NotifyEvent& rNEvt )
1208*cdf0e10cSrcweir 	{
1209*cdf0e10cSrcweir 		long nHandled = 0;
1210*cdf0e10cSrcweir 
1211*cdf0e10cSrcweir 		if ( rNEvt.GetType() == EVENT_KEYINPUT )
1212*cdf0e10cSrcweir 		{
1213*cdf0e10cSrcweir 			sal_uInt16 nCode = rNEvt.GetKeyEvent()->GetKeyCode().GetCode();
1214*cdf0e10cSrcweir 
1215*cdf0e10cSrcweir 			switch ( nCode )
1216*cdf0e10cSrcweir 			{
1217*cdf0e10cSrcweir 				case KEY_DELETE:
1218*cdf0e10cSrcweir 					nHandled = DoMenuAction( TBI_ITEM_REMOVE );
1219*cdf0e10cSrcweir 					break;
1220*cdf0e10cSrcweir 			}
1221*cdf0e10cSrcweir 		}
1222*cdf0e10cSrcweir 
1223*cdf0e10cSrcweir 		return nHandled ? nHandled : Window::Notify( rNEvt );
1224*cdf0e10cSrcweir 	}
1225*cdf0e10cSrcweir 	//------------------------------------------------------------------------
1226*cdf0e10cSrcweir 	void XFormsPage::Resize()
1227*cdf0e10cSrcweir 	{
1228*cdf0e10cSrcweir 		Size aSize = GetOutputSizePixel();
1229*cdf0e10cSrcweir 		Size aTbxSize = m_aToolBox.GetSizePixel();
1230*cdf0e10cSrcweir 		aTbxSize.Width() = aSize.Width();
1231*cdf0e10cSrcweir 		m_aToolBox.SetSizePixel( aTbxSize );
1232*cdf0e10cSrcweir 		aSize.Width() -= 4;
1233*cdf0e10cSrcweir 		aSize.Height() -= ( 4 + aTbxSize.Height() );
1234*cdf0e10cSrcweir 		m_aItemList.SetPosSizePixel( Point( 2, 2 + aTbxSize.Height() ), aSize );
1235*cdf0e10cSrcweir 	}
1236*cdf0e10cSrcweir 	//------------------------------------------------------------------------
1237*cdf0e10cSrcweir     String XFormsPage::SetModel( const Reference< css::xforms::XModel >& _xModel, sal_uInt16 _nPagePos )
1238*cdf0e10cSrcweir 	{
1239*cdf0e10cSrcweir 		DBG_ASSERT( _xModel.is(), "XFormsPage::SetModel(): invalid model" );
1240*cdf0e10cSrcweir 
1241*cdf0e10cSrcweir 		m_xUIHelper = Reference< css::xforms::XFormsUIHelper1 >( _xModel, UNO_QUERY );
1242*cdf0e10cSrcweir 		String sRet;
1243*cdf0e10cSrcweir 		m_bHasModel = true;
1244*cdf0e10cSrcweir 		const ImageList& rImageList = GetSettings().GetStyleSettings().GetHighContrastMode()
1245*cdf0e10cSrcweir 			? m_pNaviWin->GetItemHCImageList()
1246*cdf0e10cSrcweir 			: m_pNaviWin->GetItemImageList();
1247*cdf0e10cSrcweir 
1248*cdf0e10cSrcweir 		switch ( m_eGroup )
1249*cdf0e10cSrcweir 		{
1250*cdf0e10cSrcweir 			case DGTInstance :
1251*cdf0e10cSrcweir 			{
1252*cdf0e10cSrcweir                 DBG_ASSERT( _nPagePos != TAB_PAGE_NOTFOUND, "XFormsPage::SetModel(): invalid page position" );
1253*cdf0e10cSrcweir 				try
1254*cdf0e10cSrcweir 				{
1255*cdf0e10cSrcweir                     Reference< XContainer > xContainer( _xModel->getInstances(), UNO_QUERY );
1256*cdf0e10cSrcweir                     if ( xContainer.is() )
1257*cdf0e10cSrcweir                         m_pNaviWin->AddContainerBroadcaster( xContainer );
1258*cdf0e10cSrcweir 
1259*cdf0e10cSrcweir 					sal_uInt16 nIter = 0;
1260*cdf0e10cSrcweir 					Reference< XEnumerationAccess > xNumAccess( _xModel->getInstances(), UNO_QUERY );
1261*cdf0e10cSrcweir 					if ( xNumAccess.is() )
1262*cdf0e10cSrcweir 					{
1263*cdf0e10cSrcweir 						Reference < XEnumeration > xNum = xNumAccess->createEnumeration();
1264*cdf0e10cSrcweir 						if ( xNum.is() && xNum->hasMoreElements() )
1265*cdf0e10cSrcweir 						{
1266*cdf0e10cSrcweir 							while ( xNum->hasMoreElements() )
1267*cdf0e10cSrcweir 							{
1268*cdf0e10cSrcweir                                 if ( nIter == _nPagePos )
1269*cdf0e10cSrcweir 								{
1270*cdf0e10cSrcweir 									Sequence< PropertyValue > xPropSeq;
1271*cdf0e10cSrcweir 									Any aAny = xNum->nextElement();
1272*cdf0e10cSrcweir 									if ( aAny >>= xPropSeq )
1273*cdf0e10cSrcweir 										sRet = LoadInstance( xPropSeq, rImageList );
1274*cdf0e10cSrcweir 									else
1275*cdf0e10cSrcweir 									{
1276*cdf0e10cSrcweir 										DBG_ERRORFILE( "XFormsPage::SetModel(): invalid instance" );
1277*cdf0e10cSrcweir 									}
1278*cdf0e10cSrcweir 									break;
1279*cdf0e10cSrcweir 								}
1280*cdf0e10cSrcweir 								else
1281*cdf0e10cSrcweir 								{
1282*cdf0e10cSrcweir 									xNum->nextElement();
1283*cdf0e10cSrcweir 									nIter++;
1284*cdf0e10cSrcweir 								}
1285*cdf0e10cSrcweir 							}
1286*cdf0e10cSrcweir 						}
1287*cdf0e10cSrcweir 					}
1288*cdf0e10cSrcweir 				}
1289*cdf0e10cSrcweir 			    catch( Exception& )
1290*cdf0e10cSrcweir 				{
1291*cdf0e10cSrcweir 					DBG_ERRORFILE( "XFormsPage::SetModel(): exception caught" );
1292*cdf0e10cSrcweir 				}
1293*cdf0e10cSrcweir 				break;
1294*cdf0e10cSrcweir 			}
1295*cdf0e10cSrcweir 
1296*cdf0e10cSrcweir 			case DGTSubmission :
1297*cdf0e10cSrcweir 			{
1298*cdf0e10cSrcweir                 DBG_ASSERT( TAB_PAGE_NOTFOUND == _nPagePos, "XFormsPage::SetModel(): invalid page position" );
1299*cdf0e10cSrcweir 				try
1300*cdf0e10cSrcweir 				{
1301*cdf0e10cSrcweir                     Reference< XContainer > xContainer( _xModel->getSubmissions(), UNO_QUERY );
1302*cdf0e10cSrcweir                     if ( xContainer.is() )
1303*cdf0e10cSrcweir                         m_pNaviWin->AddContainerBroadcaster( xContainer );
1304*cdf0e10cSrcweir 
1305*cdf0e10cSrcweir                     Reference< XEnumerationAccess > xNumAccess( _xModel->getSubmissions(), UNO_QUERY );
1306*cdf0e10cSrcweir 					if ( xNumAccess.is() )
1307*cdf0e10cSrcweir 					{
1308*cdf0e10cSrcweir 						Reference < XEnumeration > xNum = xNumAccess->createEnumeration();
1309*cdf0e10cSrcweir 						if ( xNum.is() && xNum->hasMoreElements() )
1310*cdf0e10cSrcweir 						{
1311*cdf0e10cSrcweir 							while ( xNum->hasMoreElements() )
1312*cdf0e10cSrcweir 							{
1313*cdf0e10cSrcweir 								Reference< XPropertySet > xPropSet;
1314*cdf0e10cSrcweir 								Any aAny = xNum->nextElement();
1315*cdf0e10cSrcweir 								if ( aAny >>= xPropSet )
1316*cdf0e10cSrcweir 									AddEntry( xPropSet );
1317*cdf0e10cSrcweir 							}
1318*cdf0e10cSrcweir 						}
1319*cdf0e10cSrcweir 					}
1320*cdf0e10cSrcweir 				}
1321*cdf0e10cSrcweir 			    catch( Exception& )
1322*cdf0e10cSrcweir 				{
1323*cdf0e10cSrcweir 					DBG_ERRORFILE( "XFormsPage::SetModel(): exception caught" );
1324*cdf0e10cSrcweir 				}
1325*cdf0e10cSrcweir 				break;
1326*cdf0e10cSrcweir 			}
1327*cdf0e10cSrcweir 
1328*cdf0e10cSrcweir 			case DGTBinding :
1329*cdf0e10cSrcweir 			{
1330*cdf0e10cSrcweir                 DBG_ASSERT( TAB_PAGE_NOTFOUND == _nPagePos, "XFormsPage::SetModel(): invalid page position" );
1331*cdf0e10cSrcweir 				try
1332*cdf0e10cSrcweir 				{
1333*cdf0e10cSrcweir                     Reference< XContainer > xContainer( _xModel->getBindings(), UNO_QUERY );
1334*cdf0e10cSrcweir                     if ( xContainer.is() )
1335*cdf0e10cSrcweir                         m_pNaviWin->AddContainerBroadcaster( xContainer );
1336*cdf0e10cSrcweir 
1337*cdf0e10cSrcweir 					Reference< XEnumerationAccess > xNumAccess( _xModel->getBindings(), UNO_QUERY );
1338*cdf0e10cSrcweir 					if ( xNumAccess.is() )
1339*cdf0e10cSrcweir 					{
1340*cdf0e10cSrcweir 						Reference < XEnumeration > xNum = xNumAccess->createEnumeration();
1341*cdf0e10cSrcweir 						if ( xNum.is() && xNum->hasMoreElements() )
1342*cdf0e10cSrcweir 						{
1343*cdf0e10cSrcweir 							Image aImage1 = rImageList.GetImage( IID_ELEMENT );
1344*cdf0e10cSrcweir 							Image aImage2 = rImageList.GetImage( IID_ELEMENT );
1345*cdf0e10cSrcweir 							String sDelim( RTL_CONSTASCII_STRINGPARAM( ": " ) );
1346*cdf0e10cSrcweir 							while ( xNum->hasMoreElements() )
1347*cdf0e10cSrcweir 							{
1348*cdf0e10cSrcweir 								Reference< XPropertySet > xPropSet;
1349*cdf0e10cSrcweir 								Any aAny = xNum->nextElement();
1350*cdf0e10cSrcweir 								if ( aAny >>= xPropSet )
1351*cdf0e10cSrcweir 								{
1352*cdf0e10cSrcweir 									String sEntry;
1353*cdf0e10cSrcweir 									rtl::OUString sTemp;
1354*cdf0e10cSrcweir 									xPropSet->getPropertyValue( PN_BINDING_ID ) >>= sTemp;
1355*cdf0e10cSrcweir 									sEntry += String( sTemp );
1356*cdf0e10cSrcweir 									sEntry += sDelim;
1357*cdf0e10cSrcweir 									xPropSet->getPropertyValue( PN_BINDING_EXPR ) >>= sTemp;
1358*cdf0e10cSrcweir 									sEntry += String( sTemp );
1359*cdf0e10cSrcweir 
1360*cdf0e10cSrcweir 									ItemNode* pNode = new ItemNode( xPropSet );
1361*cdf0e10cSrcweir 									m_aItemList.InsertEntry(
1362*cdf0e10cSrcweir 										sEntry, aImage1, aImage2, NULL, sal_False, LIST_APPEND, pNode );
1363*cdf0e10cSrcweir 								}
1364*cdf0e10cSrcweir 							}
1365*cdf0e10cSrcweir 						}
1366*cdf0e10cSrcweir 					}
1367*cdf0e10cSrcweir 				}
1368*cdf0e10cSrcweir 			    catch( Exception& )
1369*cdf0e10cSrcweir 				{
1370*cdf0e10cSrcweir 					DBG_ERRORFILE( "XFormsPage::SetModel(): exception caught" );
1371*cdf0e10cSrcweir 				}
1372*cdf0e10cSrcweir 				break;
1373*cdf0e10cSrcweir 			}
1374*cdf0e10cSrcweir             default:
1375*cdf0e10cSrcweir                 DBG_ERROR( "XFormsPage::SetModel: unknown group!" );
1376*cdf0e10cSrcweir                 break;
1377*cdf0e10cSrcweir 		}
1378*cdf0e10cSrcweir 
1379*cdf0e10cSrcweir         EnableMenuItems( NULL );
1380*cdf0e10cSrcweir 
1381*cdf0e10cSrcweir         return sRet;
1382*cdf0e10cSrcweir 	}
1383*cdf0e10cSrcweir 	//------------------------------------------------------------------------
1384*cdf0e10cSrcweir 	void XFormsPage::ClearModel()
1385*cdf0e10cSrcweir 	{
1386*cdf0e10cSrcweir 		m_bHasModel = false;
1387*cdf0e10cSrcweir 		m_aItemList.DeleteAndClear();
1388*cdf0e10cSrcweir 	}
1389*cdf0e10cSrcweir 	//------------------------------------------------------------------------
1390*cdf0e10cSrcweir 	String XFormsPage::LoadInstance(
1391*cdf0e10cSrcweir 		const Sequence< PropertyValue >& _xPropSeq, const ImageList& _rImgLst )
1392*cdf0e10cSrcweir 	{
1393*cdf0e10cSrcweir 		String sRet;
1394*cdf0e10cSrcweir 		rtl::OUString sTemp;
1395*cdf0e10cSrcweir 		rtl::OUString sInstModel = PN_INSTANCE_MODEL;
1396*cdf0e10cSrcweir 		rtl::OUString sInstName = PN_INSTANCE_ID;
1397*cdf0e10cSrcweir         rtl::OUString sInstURL = PN_INSTANCE_URL;
1398*cdf0e10cSrcweir 		const PropertyValue* pProps = _xPropSeq.getConstArray();
1399*cdf0e10cSrcweir 		const PropertyValue* pPropsEnd = pProps + _xPropSeq.getLength();
1400*cdf0e10cSrcweir 		for ( ; pProps != pPropsEnd; ++pProps )
1401*cdf0e10cSrcweir 		{
1402*cdf0e10cSrcweir 			if ( sInstModel.compareTo( pProps->Name ) == 0 )
1403*cdf0e10cSrcweir 			{
1404*cdf0e10cSrcweir 				Reference< css::xml::dom::XNode > xRoot;
1405*cdf0e10cSrcweir 				if ( pProps->Value >>= xRoot )
1406*cdf0e10cSrcweir 				{
1407*cdf0e10cSrcweir 					try
1408*cdf0e10cSrcweir 					{
1409*cdf0e10cSrcweir                         Reference< XEventTarget > xTarget( xRoot, UNO_QUERY );
1410*cdf0e10cSrcweir                         if ( xTarget.is() )
1411*cdf0e10cSrcweir                             m_pNaviWin->AddEventBroadcaster( xTarget );
1412*cdf0e10cSrcweir 
1413*cdf0e10cSrcweir                     #if OSL_DEBUG_LEVEL > 0
1414*cdf0e10cSrcweir 						css::xml::dom::NodeType eNodeType = xRoot->getNodeType(); (void)eNodeType;
1415*cdf0e10cSrcweir                     #endif
1416*cdf0e10cSrcweir 						::rtl::OUString sNodeName =
1417*cdf0e10cSrcweir 							m_xUIHelper->getNodeDisplayName( xRoot, m_pNaviWin->IsShowDetails() );
1418*cdf0e10cSrcweir 						if ( sNodeName.getLength() == 0 )
1419*cdf0e10cSrcweir 							sNodeName = xRoot->getNodeName();
1420*cdf0e10cSrcweir 						if ( xRoot->hasChildNodes() )
1421*cdf0e10cSrcweir 							AddChildren( NULL, _rImgLst, xRoot );
1422*cdf0e10cSrcweir 					}
1423*cdf0e10cSrcweir 					catch ( Exception& )
1424*cdf0e10cSrcweir 					{
1425*cdf0e10cSrcweir                         DBG_ERRORFILE( "XFormsPage::LoadInstance(): exception caught" );
1426*cdf0e10cSrcweir 					}
1427*cdf0e10cSrcweir 				}
1428*cdf0e10cSrcweir 			}
1429*cdf0e10cSrcweir 			else if ( sInstName.compareTo( pProps->Name ) == 0 && ( pProps->Value >>= sTemp ) )
1430*cdf0e10cSrcweir 				m_sInstanceName = sRet = sTemp;
1431*cdf0e10cSrcweir 			else if ( sInstURL.compareTo( pProps->Name ) == 0 && ( pProps->Value >>= sTemp ) )
1432*cdf0e10cSrcweir 				m_sInstanceURL = sTemp;
1433*cdf0e10cSrcweir 		}
1434*cdf0e10cSrcweir 
1435*cdf0e10cSrcweir 		return sRet;
1436*cdf0e10cSrcweir 	}
1437*cdf0e10cSrcweir 
1438*cdf0e10cSrcweir 	//------------------------------------------------------------------------
1439*cdf0e10cSrcweir 	bool XFormsPage::DoMenuAction( sal_uInt16 _nMenuID )
1440*cdf0e10cSrcweir 	{
1441*cdf0e10cSrcweir 		return DoToolBoxAction( _nMenuID );
1442*cdf0e10cSrcweir 	}
1443*cdf0e10cSrcweir 
1444*cdf0e10cSrcweir 	//------------------------------------------------------------------------
1445*cdf0e10cSrcweir 	void XFormsPage::EnableMenuItems( Menu* _pMenu )
1446*cdf0e10cSrcweir 	{
1447*cdf0e10cSrcweir 		sal_Bool bEnableAdd = sal_False;
1448*cdf0e10cSrcweir 		sal_Bool bEnableEdit = sal_False;
1449*cdf0e10cSrcweir 		sal_Bool bEnableRemove = sal_False;
1450*cdf0e10cSrcweir 
1451*cdf0e10cSrcweir 		SvLBoxEntry* pEntry = m_aItemList.FirstSelected();
1452*cdf0e10cSrcweir 		if ( pEntry )
1453*cdf0e10cSrcweir 		{
1454*cdf0e10cSrcweir 			bEnableAdd = sal_True;
1455*cdf0e10cSrcweir 			bool bSubmitChild = false;
1456*cdf0e10cSrcweir 			if ( DGTSubmission == m_eGroup && m_aItemList.GetParent( pEntry ) )
1457*cdf0e10cSrcweir 			{
1458*cdf0e10cSrcweir 				pEntry = m_aItemList.GetParent( pEntry );
1459*cdf0e10cSrcweir 				bSubmitChild = true;
1460*cdf0e10cSrcweir 			}
1461*cdf0e10cSrcweir 			ItemNode* pNode = static_cast< ItemNode* >( pEntry->GetUserData() );
1462*cdf0e10cSrcweir 			if ( pNode && ( pNode->m_xNode.is() || pNode->m_xPropSet.is() ) )
1463*cdf0e10cSrcweir 			{
1464*cdf0e10cSrcweir 				bEnableEdit = sal_True;
1465*cdf0e10cSrcweir 				bEnableRemove = ( bSubmitChild != true );
1466*cdf0e10cSrcweir 				if ( DGTInstance == m_eGroup && !m_aItemList.GetParent( pEntry ) )
1467*cdf0e10cSrcweir 					bEnableRemove = sal_False;
1468*cdf0e10cSrcweir 				if ( pNode->m_xNode.is() )
1469*cdf0e10cSrcweir 				{
1470*cdf0e10cSrcweir 					try
1471*cdf0e10cSrcweir 					{
1472*cdf0e10cSrcweir 						css::xml::dom::NodeType eChildType = pNode->m_xNode->getNodeType();
1473*cdf0e10cSrcweir 						if ( eChildType != css::xml::dom::NodeType_ELEMENT_NODE
1474*cdf0e10cSrcweir 							&& eChildType != css::xml::dom::NodeType_DOCUMENT_NODE )
1475*cdf0e10cSrcweir 						{
1476*cdf0e10cSrcweir 							bEnableAdd = sal_False;
1477*cdf0e10cSrcweir 						}
1478*cdf0e10cSrcweir 					}
1479*cdf0e10cSrcweir 					catch ( Exception& )
1480*cdf0e10cSrcweir 					{
1481*cdf0e10cSrcweir                        DBG_ERRORFILE( "XFormsPage::EnableMenuItems(): exception caught" );
1482*cdf0e10cSrcweir 					}
1483*cdf0e10cSrcweir 				}
1484*cdf0e10cSrcweir 			}
1485*cdf0e10cSrcweir 		}
1486*cdf0e10cSrcweir 		else if ( m_eGroup != DGTInstance )
1487*cdf0e10cSrcweir 			bEnableAdd = sal_True;
1488*cdf0e10cSrcweir 
1489*cdf0e10cSrcweir 		m_aToolBox.EnableItem( TBI_ITEM_ADD, bEnableAdd );
1490*cdf0e10cSrcweir 		m_aToolBox.EnableItem( TBI_ITEM_ADD_ELEMENT, bEnableAdd );
1491*cdf0e10cSrcweir 		m_aToolBox.EnableItem( TBI_ITEM_ADD_ATTRIBUTE, bEnableAdd );
1492*cdf0e10cSrcweir 		m_aToolBox.EnableItem( TBI_ITEM_EDIT, bEnableEdit );
1493*cdf0e10cSrcweir 		m_aToolBox.EnableItem( TBI_ITEM_REMOVE, bEnableRemove );
1494*cdf0e10cSrcweir 
1495*cdf0e10cSrcweir 		if ( _pMenu )
1496*cdf0e10cSrcweir 		{
1497*cdf0e10cSrcweir 			_pMenu->EnableItem( TBI_ITEM_ADD, bEnableAdd );
1498*cdf0e10cSrcweir 			_pMenu->EnableItem( TBI_ITEM_ADD_ELEMENT, bEnableAdd );
1499*cdf0e10cSrcweir 			_pMenu->EnableItem( TBI_ITEM_ADD_ATTRIBUTE, bEnableAdd );
1500*cdf0e10cSrcweir 			_pMenu->EnableItem( TBI_ITEM_EDIT, bEnableEdit );
1501*cdf0e10cSrcweir 			_pMenu->EnableItem( TBI_ITEM_REMOVE, bEnableRemove );
1502*cdf0e10cSrcweir 		}
1503*cdf0e10cSrcweir 		if ( DGTInstance == m_eGroup )
1504*cdf0e10cSrcweir 		{
1505*cdf0e10cSrcweir 			sal_uInt16 nResId1 = RID_STR_DATANAV_EDIT_ELEMENT;
1506*cdf0e10cSrcweir 			sal_uInt16 nResId2 = RID_STR_DATANAV_REMOVE_ELEMENT;
1507*cdf0e10cSrcweir 			if ( pEntry )
1508*cdf0e10cSrcweir 			{
1509*cdf0e10cSrcweir 				ItemNode* pNode = static_cast< ItemNode* >( pEntry->GetUserData() );
1510*cdf0e10cSrcweir 				if ( pNode && pNode->m_xNode.is() )
1511*cdf0e10cSrcweir 				{
1512*cdf0e10cSrcweir 					try
1513*cdf0e10cSrcweir 					{
1514*cdf0e10cSrcweir 						css::xml::dom::NodeType eChildType = pNode->m_xNode->getNodeType();
1515*cdf0e10cSrcweir 						if ( eChildType == css::xml::dom::NodeType_ATTRIBUTE_NODE )
1516*cdf0e10cSrcweir 						{
1517*cdf0e10cSrcweir 							nResId1 = RID_STR_DATANAV_EDIT_ATTRIBUTE;
1518*cdf0e10cSrcweir 							nResId2 = RID_STR_DATANAV_REMOVE_ATTRIBUTE;
1519*cdf0e10cSrcweir 						}
1520*cdf0e10cSrcweir 					}
1521*cdf0e10cSrcweir 					catch ( Exception& )
1522*cdf0e10cSrcweir 					{
1523*cdf0e10cSrcweir                        DBG_ERRORFILE( "XFormsPage::EnableMenuItems(): exception caught" );
1524*cdf0e10cSrcweir 					}
1525*cdf0e10cSrcweir 				}
1526*cdf0e10cSrcweir 			}
1527*cdf0e10cSrcweir 			m_aToolBox.SetItemText( TBI_ITEM_EDIT, SVX_RESSTR( nResId1 ) );
1528*cdf0e10cSrcweir 			m_aToolBox.SetItemText( TBI_ITEM_REMOVE, SVX_RESSTR( nResId2 ) );
1529*cdf0e10cSrcweir 			if ( _pMenu )
1530*cdf0e10cSrcweir 			{
1531*cdf0e10cSrcweir 				_pMenu->SetItemText( TBI_ITEM_EDIT, SVX_RESSTR( nResId1 ) );
1532*cdf0e10cSrcweir 				_pMenu->SetItemText( TBI_ITEM_REMOVE, SVX_RESSTR( nResId2 ) );
1533*cdf0e10cSrcweir 			}
1534*cdf0e10cSrcweir 		}
1535*cdf0e10cSrcweir 	}
1536*cdf0e10cSrcweir 
1537*cdf0e10cSrcweir 
1538*cdf0e10cSrcweir 	//========================================================================
1539*cdf0e10cSrcweir 	// class DataNavigatorWindow
1540*cdf0e10cSrcweir 	//========================================================================
1541*cdf0e10cSrcweir 	DataNavigatorWindow::DataNavigatorWindow( Window* pParent, SfxBindings* pBindings ) :
1542*cdf0e10cSrcweir 
1543*cdf0e10cSrcweir 		Window( pParent, SVX_RES( RID_SVXWIN_DATANAVIGATOR ) ),
1544*cdf0e10cSrcweir 
1545*cdf0e10cSrcweir 		m_aModelsBox		( this, SVX_RES( LB_MODELS ) ),
1546*cdf0e10cSrcweir 		m_aModelBtn			( this, SVX_RES( MB_MODELS ) ),
1547*cdf0e10cSrcweir 		m_aTabCtrl			( this, SVX_RES( TC_ITEMS ) ),
1548*cdf0e10cSrcweir 		m_aInstanceBtn		( this, SVX_RES( MB_INSTANCES ) ),
1549*cdf0e10cSrcweir 
1550*cdf0e10cSrcweir 		m_pInstPage			( NULL ),
1551*cdf0e10cSrcweir 		m_pSubmissionPage	( NULL ),
1552*cdf0e10cSrcweir 		m_pBindingPage		( NULL ),
1553*cdf0e10cSrcweir 
1554*cdf0e10cSrcweir 		m_nMinWidth			( 0 ),
1555*cdf0e10cSrcweir 		m_nMinHeight		( 0 ),
1556*cdf0e10cSrcweir 		m_nBorderHeight		( 0 ),
1557*cdf0e10cSrcweir 		m_nLastSelectedPos	( LISTBOX_ENTRY_NOTFOUND ),
1558*cdf0e10cSrcweir 		m_bShowDetails		( false ),
1559*cdf0e10cSrcweir         m_bIsNotifyDisabled ( false ),
1560*cdf0e10cSrcweir 
1561*cdf0e10cSrcweir 		m_aItemImageList	(		SVX_RES( IL_ITEM_BMPS ) ),
1562*cdf0e10cSrcweir         m_aItemHCImageList  (       SVX_RES( IL_ITEM_BMPS_HC ) ),
1563*cdf0e10cSrcweir         m_xDataListener     ( new DataListener( this ) )
1564*cdf0e10cSrcweir 
1565*cdf0e10cSrcweir 	{
1566*cdf0e10cSrcweir 		FreeResource();
1567*cdf0e10cSrcweir 
1568*cdf0e10cSrcweir 		// init minimal metric
1569*cdf0e10cSrcweir 		m_a2Size = LogicToPixel( Size( 2, 2 ), MAP_APPFONT );
1570*cdf0e10cSrcweir 		m_a3Size = LogicToPixel( Size( 3, 3 ), MAP_APPFONT );
1571*cdf0e10cSrcweir 		Size aOutSz = GetOutputSizePixel();
1572*cdf0e10cSrcweir 		Size aLogSize = PixelToLogic( aOutSz, MAP_APPFONT );
1573*cdf0e10cSrcweir 		m_nMinWidth = aLogSize.Width();
1574*cdf0e10cSrcweir 		m_nMinHeight = aLogSize.Height();
1575*cdf0e10cSrcweir 		m_nBorderHeight = 4*m_a3Size.Height() +
1576*cdf0e10cSrcweir 			m_aModelBtn.GetSizePixel().Height() + m_aInstanceBtn.GetSizePixel().Height();
1577*cdf0e10cSrcweir 
1578*cdf0e10cSrcweir 		// handler
1579*cdf0e10cSrcweir 		m_aModelsBox.SetSelectHdl( LINK( this, DataNavigatorWindow, ModelSelectHdl ) );
1580*cdf0e10cSrcweir 		Link aLink = LINK( this, DataNavigatorWindow, MenuSelectHdl );
1581*cdf0e10cSrcweir 		m_aModelBtn.SetSelectHdl( aLink );
1582*cdf0e10cSrcweir 		m_aInstanceBtn.SetSelectHdl( aLink );
1583*cdf0e10cSrcweir 		aLink = LINK( this, DataNavigatorWindow, MenuActivateHdl );
1584*cdf0e10cSrcweir 		m_aModelBtn.SetActivateHdl( aLink );
1585*cdf0e10cSrcweir 		m_aInstanceBtn.SetActivateHdl( aLink );
1586*cdf0e10cSrcweir 		m_aTabCtrl.SetActivatePageHdl( LINK( this, DataNavigatorWindow, ActivatePageHdl ) );
1587*cdf0e10cSrcweir         m_aUpdateTimer.SetTimeout( 2000 );
1588*cdf0e10cSrcweir         m_aUpdateTimer.SetTimeoutHdl( LINK( this, DataNavigatorWindow, UpdateHdl ) );
1589*cdf0e10cSrcweir 
1590*cdf0e10cSrcweir 		// init tabcontrol
1591*cdf0e10cSrcweir 		m_aTabCtrl.Show();
1592*cdf0e10cSrcweir 		sal_Int32 nPageId = TID_INSTANCE;
1593*cdf0e10cSrcweir 		SvtViewOptions aViewOpt( E_TABDIALOG, CFGNAME_DATANAVIGATOR );
1594*cdf0e10cSrcweir 		if ( aViewOpt.Exists() )
1595*cdf0e10cSrcweir 		{
1596*cdf0e10cSrcweir 			nPageId = aViewOpt.GetPageID();
1597*cdf0e10cSrcweir 			aViewOpt.GetUserItem(CFGNAME_SHOWDETAILS) >>= m_bShowDetails;
1598*cdf0e10cSrcweir 		}
1599*cdf0e10cSrcweir 
1600*cdf0e10cSrcweir 		Menu* pMenu = m_aInstanceBtn.GetPopupMenu();
1601*cdf0e10cSrcweir 		pMenu->SetItemBits( MID_SHOW_DETAILS, MIB_CHECKABLE );
1602*cdf0e10cSrcweir 		pMenu->CheckItem( MID_SHOW_DETAILS, m_bShowDetails );
1603*cdf0e10cSrcweir 
1604*cdf0e10cSrcweir 		m_aTabCtrl.SetCurPageId( static_cast< sal_uInt16 >( nPageId ) );
1605*cdf0e10cSrcweir 		ActivatePageHdl( &m_aTabCtrl );
1606*cdf0e10cSrcweir 
1607*cdf0e10cSrcweir         // get our frame
1608*cdf0e10cSrcweir         DBG_ASSERT( pBindings != NULL,
1609*cdf0e10cSrcweir                     "DataNavigatorWindow::LoadModels(): no SfxBindings; can't get frame" );
1610*cdf0e10cSrcweir         m_xFrame = Reference<XFrame>(
1611*cdf0e10cSrcweir             pBindings->GetDispatcher()->GetFrame()->GetFrame().GetFrameInterface(),
1612*cdf0e10cSrcweir             UNO_QUERY );
1613*cdf0e10cSrcweir         DBG_ASSERT( m_xFrame.is(), "DataNavigatorWindow::LoadModels(): no frame" );
1614*cdf0e10cSrcweir         // add frameaction listener
1615*cdf0e10cSrcweir         Reference< XFrameActionListener > xListener(
1616*cdf0e10cSrcweir             static_cast< XFrameActionListener* >( m_xDataListener.get() ), UNO_QUERY );
1617*cdf0e10cSrcweir         m_xFrame->addFrameActionListener( xListener );
1618*cdf0e10cSrcweir 
1619*cdf0e10cSrcweir         // load xforms models of the current document
1620*cdf0e10cSrcweir 		LoadModels();
1621*cdf0e10cSrcweir 	}
1622*cdf0e10cSrcweir 	//------------------------------------------------------------------------
1623*cdf0e10cSrcweir 	DataNavigatorWindow::~DataNavigatorWindow()
1624*cdf0e10cSrcweir 	{
1625*cdf0e10cSrcweir 		SvtViewOptions aViewOpt( E_TABDIALOG, CFGNAME_DATANAVIGATOR );
1626*cdf0e10cSrcweir 		aViewOpt.SetPageID( static_cast< sal_Int32 >( m_aTabCtrl.GetCurPageId() ) );
1627*cdf0e10cSrcweir 		Any aAny;
1628*cdf0e10cSrcweir 		aAny <<= m_bShowDetails;
1629*cdf0e10cSrcweir 		aViewOpt.SetUserItem(CFGNAME_SHOWDETAILS,aAny);
1630*cdf0e10cSrcweir 
1631*cdf0e10cSrcweir 		delete m_pInstPage;
1632*cdf0e10cSrcweir 		delete m_pSubmissionPage;
1633*cdf0e10cSrcweir 		delete m_pBindingPage;
1634*cdf0e10cSrcweir 
1635*cdf0e10cSrcweir 		sal_Int32 i, nCount = m_aPageList.size();
1636*cdf0e10cSrcweir 		for ( i = 0; i < nCount; ++i )
1637*cdf0e10cSrcweir 			delete m_aPageList[i];
1638*cdf0e10cSrcweir         Reference< XFrameActionListener > xListener(
1639*cdf0e10cSrcweir             static_cast< XFrameActionListener* >( m_xDataListener.get() ), UNO_QUERY );
1640*cdf0e10cSrcweir         m_xFrame->removeFrameActionListener( xListener );
1641*cdf0e10cSrcweir         RemoveBroadcaster();
1642*cdf0e10cSrcweir         m_xDataListener.clear();
1643*cdf0e10cSrcweir     }
1644*cdf0e10cSrcweir 
1645*cdf0e10cSrcweir 	// -----------------------------------------------------------------------
1646*cdf0e10cSrcweir 	IMPL_LINK( DataNavigatorWindow, ModelSelectHdl, ListBox *, pBox )
1647*cdf0e10cSrcweir 	{
1648*cdf0e10cSrcweir 		sal_uInt16 nPos = m_aModelsBox.GetSelectEntryPos();
1649*cdf0e10cSrcweir         // pBox == NULL, if you want to force a new fill.
1650*cdf0e10cSrcweir 		if ( nPos != m_nLastSelectedPos || !pBox )
1651*cdf0e10cSrcweir 		{
1652*cdf0e10cSrcweir 			m_nLastSelectedPos = nPos;
1653*cdf0e10cSrcweir             ClearAllPageModels( pBox != NULL );
1654*cdf0e10cSrcweir 			InitPages();
1655*cdf0e10cSrcweir 			SetPageModel();
1656*cdf0e10cSrcweir 		}
1657*cdf0e10cSrcweir 
1658*cdf0e10cSrcweir 		return 0;
1659*cdf0e10cSrcweir 	}
1660*cdf0e10cSrcweir 	// -----------------------------------------------------------------------
1661*cdf0e10cSrcweir 	IMPL_LINK( DataNavigatorWindow, MenuSelectHdl, MenuButton *, pBtn )
1662*cdf0e10cSrcweir 	{
1663*cdf0e10cSrcweir         bool bIsDocModified = false;
1664*cdf0e10cSrcweir 		Reference< css::xforms::XFormsUIHelper1 > xUIHelper;
1665*cdf0e10cSrcweir 		sal_uInt16 nSelectedPos = m_aModelsBox.GetSelectEntryPos();
1666*cdf0e10cSrcweir         ::rtl::OUString sSelectedModel( m_aModelsBox.GetEntry( nSelectedPos ) );
1667*cdf0e10cSrcweir 		Reference< css::xforms::XModel > xModel;
1668*cdf0e10cSrcweir 		try
1669*cdf0e10cSrcweir 		{
1670*cdf0e10cSrcweir 			Any aAny = m_xDataContainer->getByName( sSelectedModel );
1671*cdf0e10cSrcweir 			if ( aAny >>= xModel )
1672*cdf0e10cSrcweir 				xUIHelper = Reference< css::xforms::XFormsUIHelper1 >( xModel, UNO_QUERY );
1673*cdf0e10cSrcweir 		}
1674*cdf0e10cSrcweir 		catch ( Exception& )
1675*cdf0e10cSrcweir 		{
1676*cdf0e10cSrcweir             DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
1677*cdf0e10cSrcweir 		}
1678*cdf0e10cSrcweir 		DBG_ASSERT( xUIHelper.is(), "DataNavigatorWindow::MenuSelectHdl(): no UIHelper" );
1679*cdf0e10cSrcweir 
1680*cdf0e10cSrcweir         m_bIsNotifyDisabled = true;
1681*cdf0e10cSrcweir 
1682*cdf0e10cSrcweir         if ( &m_aModelBtn == pBtn )
1683*cdf0e10cSrcweir 		{
1684*cdf0e10cSrcweir 			switch ( pBtn->GetCurItemId() )
1685*cdf0e10cSrcweir 			{
1686*cdf0e10cSrcweir 				case MID_MODELS_ADD :
1687*cdf0e10cSrcweir 				{
1688*cdf0e10cSrcweir                     AddModelDialog aDlg( this, false );
1689*cdf0e10cSrcweir 					bool bShowDialog = true;
1690*cdf0e10cSrcweir 					while ( bShowDialog )
1691*cdf0e10cSrcweir 					{
1692*cdf0e10cSrcweir 						bShowDialog = false;
1693*cdf0e10cSrcweir 						if ( aDlg.Execute() == RET_OK )
1694*cdf0e10cSrcweir 						{
1695*cdf0e10cSrcweir 							String sNewName = aDlg.GetName();
1696*cdf0e10cSrcweir                             sal_Bool bDocumentData = aDlg.GetModifyDoc();
1697*cdf0e10cSrcweir 
1698*cdf0e10cSrcweir 							if ( m_aModelsBox.GetEntryPos( sNewName ) != LISTBOX_ENTRY_NOTFOUND )
1699*cdf0e10cSrcweir 							{
1700*cdf0e10cSrcweir 								// error: model name already exists
1701*cdf0e10cSrcweir 								ErrorBox aErrBox( this, SVX_RES( RID_ERR_DOUBLE_MODELNAME ) );
1702*cdf0e10cSrcweir 								String sMessText = aErrBox.GetMessText();
1703*cdf0e10cSrcweir 								sMessText.SearchAndReplace( MSG_VARIABLE, sNewName );
1704*cdf0e10cSrcweir 								aErrBox.SetMessText( sMessText );
1705*cdf0e10cSrcweir 								aErrBox.Execute();
1706*cdf0e10cSrcweir 								bShowDialog = true;
1707*cdf0e10cSrcweir 							}
1708*cdf0e10cSrcweir 							else
1709*cdf0e10cSrcweir 							{
1710*cdf0e10cSrcweir 								try
1711*cdf0e10cSrcweir 								{
1712*cdf0e10cSrcweir 									// add new model to frame model
1713*cdf0e10cSrcweir 									Reference< css::xforms::XModel > xNewModel(
1714*cdf0e10cSrcweir                                         xUIHelper->newModel( m_xFrameModel, sNewName ), UNO_SET_THROW );
1715*cdf0e10cSrcweir 
1716*cdf0e10cSrcweir                                     Reference< XPropertySet > xModelProps( xNewModel, UNO_QUERY_THROW );
1717*cdf0e10cSrcweir                                     xModelProps->setPropertyValue(
1718*cdf0e10cSrcweir                                         ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ExternalData" ) ),
1719*cdf0e10cSrcweir                                         makeAny( sal_Bool( !bDocumentData ) ) );
1720*cdf0e10cSrcweir 
1721*cdf0e10cSrcweir                                     sal_uInt16 nNewPos = m_aModelsBox.InsertEntry( sNewName );
1722*cdf0e10cSrcweir 									m_aModelsBox.SelectEntryPos( nNewPos );
1723*cdf0e10cSrcweir 									ModelSelectHdl( &m_aModelsBox );
1724*cdf0e10cSrcweir                                     bIsDocModified = true;
1725*cdf0e10cSrcweir 								}
1726*cdf0e10cSrcweir 								catch ( Exception& )
1727*cdf0e10cSrcweir 								{
1728*cdf0e10cSrcweir                                     DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
1729*cdf0e10cSrcweir 								}
1730*cdf0e10cSrcweir 							}
1731*cdf0e10cSrcweir 						}
1732*cdf0e10cSrcweir 					}
1733*cdf0e10cSrcweir 					break;
1734*cdf0e10cSrcweir 				}
1735*cdf0e10cSrcweir 				case MID_MODELS_EDIT :
1736*cdf0e10cSrcweir 				{
1737*cdf0e10cSrcweir                     AddModelDialog aDlg( this, true );
1738*cdf0e10cSrcweir 					aDlg.SetName( sSelectedModel );
1739*cdf0e10cSrcweir 
1740*cdf0e10cSrcweir                     bool bDocumentData( false );
1741*cdf0e10cSrcweir                     try
1742*cdf0e10cSrcweir                     {
1743*cdf0e10cSrcweir 				        Reference< css::xforms::XFormsSupplier > xFormsSupp( m_xFrameModel, UNO_QUERY_THROW );
1744*cdf0e10cSrcweir 				        Reference< XNameContainer > xXForms( xFormsSupp->getXForms(), UNO_SET_THROW );
1745*cdf0e10cSrcweir                         Reference< XPropertySet > xModelProps( xXForms->getByName( sSelectedModel ), UNO_QUERY_THROW );
1746*cdf0e10cSrcweir                         sal_Bool bExternalData = sal_False;
1747*cdf0e10cSrcweir                         OSL_VERIFY( xModelProps->getPropertyValue(
1748*cdf0e10cSrcweir                             ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ExternalData" ) ) ) >>= bExternalData );
1749*cdf0e10cSrcweir                         bDocumentData = ( bExternalData == sal_False );
1750*cdf0e10cSrcweir                     }
1751*cdf0e10cSrcweir                     catch( const Exception& )
1752*cdf0e10cSrcweir                     {
1753*cdf0e10cSrcweir                     	DBG_UNHANDLED_EXCEPTION();
1754*cdf0e10cSrcweir                     }
1755*cdf0e10cSrcweir                     aDlg.SetModifyDoc( bDocumentData );
1756*cdf0e10cSrcweir 
1757*cdf0e10cSrcweir 					if ( aDlg.Execute() == RET_OK )
1758*cdf0e10cSrcweir 					{
1759*cdf0e10cSrcweir                         if ( aDlg.GetModifyDoc() != bool( bDocumentData ) )
1760*cdf0e10cSrcweir                         {
1761*cdf0e10cSrcweir                             bDocumentData = aDlg.GetModifyDoc();
1762*cdf0e10cSrcweir                             try
1763*cdf0e10cSrcweir                             {
1764*cdf0e10cSrcweir 				                Reference< css::xforms::XFormsSupplier > xFormsSupp( m_xFrameModel, UNO_QUERY_THROW );
1765*cdf0e10cSrcweir 				                Reference< XNameContainer > xXForms( xFormsSupp->getXForms(), UNO_SET_THROW );
1766*cdf0e10cSrcweir                                 Reference< XPropertySet > xModelProps( xXForms->getByName( sSelectedModel ), UNO_QUERY_THROW );
1767*cdf0e10cSrcweir                                 xModelProps->setPropertyValue(
1768*cdf0e10cSrcweir                                     ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ExternalData" ) ),
1769*cdf0e10cSrcweir                                     makeAny( sal_Bool( !bDocumentData ) ) );
1770*cdf0e10cSrcweir                                 bIsDocModified = true;
1771*cdf0e10cSrcweir                             }
1772*cdf0e10cSrcweir                             catch( const Exception& )
1773*cdf0e10cSrcweir                             {
1774*cdf0e10cSrcweir                             	DBG_UNHANDLED_EXCEPTION();
1775*cdf0e10cSrcweir                             }
1776*cdf0e10cSrcweir                         }
1777*cdf0e10cSrcweir 
1778*cdf0e10cSrcweir                         String sNewName = aDlg.GetName();
1779*cdf0e10cSrcweir 						if ( sNewName.Len() > 0 && ( sNewName != String( sSelectedModel ) ) )
1780*cdf0e10cSrcweir 						{
1781*cdf0e10cSrcweir 							try
1782*cdf0e10cSrcweir 							{
1783*cdf0e10cSrcweir 								xUIHelper->renameModel( m_xFrameModel, sSelectedModel, sNewName );
1784*cdf0e10cSrcweir 
1785*cdf0e10cSrcweir 								m_aModelsBox.RemoveEntry( nSelectedPos );
1786*cdf0e10cSrcweir 								nSelectedPos = m_aModelsBox.InsertEntry( sNewName );
1787*cdf0e10cSrcweir 								m_aModelsBox.SelectEntryPos( nSelectedPos );
1788*cdf0e10cSrcweir                                 bIsDocModified = true;
1789*cdf0e10cSrcweir 							}
1790*cdf0e10cSrcweir 							catch ( Exception& )
1791*cdf0e10cSrcweir 							{
1792*cdf0e10cSrcweir 								DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
1793*cdf0e10cSrcweir 							}
1794*cdf0e10cSrcweir 						}
1795*cdf0e10cSrcweir 					}
1796*cdf0e10cSrcweir 					break;
1797*cdf0e10cSrcweir 				}
1798*cdf0e10cSrcweir 				case MID_MODELS_REMOVE :
1799*cdf0e10cSrcweir 				{
1800*cdf0e10cSrcweir 					QueryBox aQBox( this, SVX_RES( RID_QRY_REMOVE_MODEL ) );
1801*cdf0e10cSrcweir 					String sText = aQBox.GetMessText();
1802*cdf0e10cSrcweir 					sText.SearchAndReplace( MODELNAME, sSelectedModel );
1803*cdf0e10cSrcweir 					aQBox.SetMessText( sText );
1804*cdf0e10cSrcweir 					if ( aQBox.Execute() == RET_YES )
1805*cdf0e10cSrcweir 					{
1806*cdf0e10cSrcweir 						try
1807*cdf0e10cSrcweir 						{
1808*cdf0e10cSrcweir 							xUIHelper->removeModel( m_xFrameModel, sSelectedModel );
1809*cdf0e10cSrcweir 						}
1810*cdf0e10cSrcweir 						catch ( Exception& )
1811*cdf0e10cSrcweir 						{
1812*cdf0e10cSrcweir                             DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
1813*cdf0e10cSrcweir 						}
1814*cdf0e10cSrcweir 						m_aModelsBox.RemoveEntry( nSelectedPos );
1815*cdf0e10cSrcweir 						if ( m_aModelsBox.GetEntryCount() <= nSelectedPos )
1816*cdf0e10cSrcweir 							nSelectedPos = m_aModelsBox.GetEntryCount() - 1;
1817*cdf0e10cSrcweir 						m_aModelsBox.SelectEntryPos( nSelectedPos );
1818*cdf0e10cSrcweir 						ModelSelectHdl( &m_aModelsBox );
1819*cdf0e10cSrcweir                         bIsDocModified = true;
1820*cdf0e10cSrcweir 					}
1821*cdf0e10cSrcweir 					break;
1822*cdf0e10cSrcweir 				}
1823*cdf0e10cSrcweir 				default:
1824*cdf0e10cSrcweir 				{
1825*cdf0e10cSrcweir 					DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): wrong menu item" );
1826*cdf0e10cSrcweir 				}
1827*cdf0e10cSrcweir 			}
1828*cdf0e10cSrcweir 		}
1829*cdf0e10cSrcweir 		else if ( &m_aInstanceBtn == pBtn )
1830*cdf0e10cSrcweir 		{
1831*cdf0e10cSrcweir 			switch ( pBtn->GetCurItemId() )
1832*cdf0e10cSrcweir 			{
1833*cdf0e10cSrcweir 				case MID_INSTANCES_ADD :
1834*cdf0e10cSrcweir 				{
1835*cdf0e10cSrcweir                     AddInstanceDialog aDlg( this, false );
1836*cdf0e10cSrcweir 					if ( aDlg.Execute() == RET_OK )
1837*cdf0e10cSrcweir 					{
1838*cdf0e10cSrcweir                         sal_uInt16 nInst = GetNewPageId();
1839*cdf0e10cSrcweir 						::rtl::OUString sName = aDlg.GetName();
1840*cdf0e10cSrcweir 						::rtl::OUString sURL = aDlg.GetURL();
1841*cdf0e10cSrcweir 						bool bLinkOnce = aDlg.IsLinkInstance();
1842*cdf0e10cSrcweir 						try
1843*cdf0e10cSrcweir 						{
1844*cdf0e10cSrcweir 							Reference< css::xml::dom::XDocument > xNewInst =
1845*cdf0e10cSrcweir 								xUIHelper->newInstance( sName, sURL, !bLinkOnce );
1846*cdf0e10cSrcweir 						}
1847*cdf0e10cSrcweir 						catch ( Exception& )
1848*cdf0e10cSrcweir 						{
1849*cdf0e10cSrcweir                             DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
1850*cdf0e10cSrcweir 						}
1851*cdf0e10cSrcweir 						ModelSelectHdl( NULL );
1852*cdf0e10cSrcweir 						m_aTabCtrl.SetCurPageId( nInst );
1853*cdf0e10cSrcweir 						XFormsPage* pPage = GetCurrentPage( nInst );
1854*cdf0e10cSrcweir 						pPage->SetInstanceName(sName);
1855*cdf0e10cSrcweir 						pPage->SetInstanceURL(sURL);
1856*cdf0e10cSrcweir 						pPage->SetLinkOnce(bLinkOnce);
1857*cdf0e10cSrcweir 						ActivatePageHdl( &m_aTabCtrl );
1858*cdf0e10cSrcweir                         bIsDocModified = true;
1859*cdf0e10cSrcweir 					}
1860*cdf0e10cSrcweir 					break;
1861*cdf0e10cSrcweir 				}
1862*cdf0e10cSrcweir 				case MID_INSTANCES_EDIT :
1863*cdf0e10cSrcweir 				{
1864*cdf0e10cSrcweir 					sal_uInt16 nId = 0;
1865*cdf0e10cSrcweir 					XFormsPage* pPage = GetCurrentPage( nId );
1866*cdf0e10cSrcweir 					if ( pPage )
1867*cdf0e10cSrcweir 					{
1868*cdf0e10cSrcweir                         AddInstanceDialog aDlg( this, true );
1869*cdf0e10cSrcweir 						aDlg.SetName( pPage->GetInstanceName() );
1870*cdf0e10cSrcweir 						aDlg.SetURL( pPage->GetInstanceURL() );
1871*cdf0e10cSrcweir 						aDlg.SetLinkInstance( pPage->GetLinkOnce() );
1872*cdf0e10cSrcweir 						String sOldName = aDlg.GetName();
1873*cdf0e10cSrcweir 						if ( aDlg.Execute() == RET_OK )
1874*cdf0e10cSrcweir 						{
1875*cdf0e10cSrcweir 							String sNewName = aDlg.GetName();
1876*cdf0e10cSrcweir 							::rtl::OUString sURL = aDlg.GetURL();
1877*cdf0e10cSrcweir 							bool bLinkOnce = aDlg.IsLinkInstance();
1878*cdf0e10cSrcweir 							try
1879*cdf0e10cSrcweir 							{
1880*cdf0e10cSrcweir 								xUIHelper->renameInstance( sOldName,
1881*cdf0e10cSrcweir 														   sNewName,
1882*cdf0e10cSrcweir 														   sURL,
1883*cdf0e10cSrcweir 														   !bLinkOnce );
1884*cdf0e10cSrcweir 							}
1885*cdf0e10cSrcweir 							catch ( Exception& )
1886*cdf0e10cSrcweir 							{
1887*cdf0e10cSrcweir                                 DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
1888*cdf0e10cSrcweir 							}
1889*cdf0e10cSrcweir 							pPage->SetInstanceName(sNewName);
1890*cdf0e10cSrcweir 							pPage->SetInstanceURL(sURL);
1891*cdf0e10cSrcweir 							pPage->SetLinkOnce(bLinkOnce);
1892*cdf0e10cSrcweir 							m_aTabCtrl.SetPageText( nId, sNewName );
1893*cdf0e10cSrcweir                             bIsDocModified = true;
1894*cdf0e10cSrcweir 						}
1895*cdf0e10cSrcweir 					}
1896*cdf0e10cSrcweir 					break;
1897*cdf0e10cSrcweir 				}
1898*cdf0e10cSrcweir 				case MID_INSTANCES_REMOVE :
1899*cdf0e10cSrcweir 				{
1900*cdf0e10cSrcweir 					sal_uInt16 nId = 0;
1901*cdf0e10cSrcweir 					XFormsPage* pPage = GetCurrentPage( nId );
1902*cdf0e10cSrcweir 					if ( pPage )
1903*cdf0e10cSrcweir 					{
1904*cdf0e10cSrcweir 						String sInstName = pPage->GetInstanceName();
1905*cdf0e10cSrcweir 						QueryBox aQBox( this, SVX_RES( RID_QRY_REMOVE_INSTANCE ) );
1906*cdf0e10cSrcweir 						String sMessText = aQBox.GetMessText();
1907*cdf0e10cSrcweir 						sMessText.SearchAndReplace( INSTANCENAME, sInstName );
1908*cdf0e10cSrcweir 						aQBox.SetMessText( sMessText );
1909*cdf0e10cSrcweir 						if ( aQBox.Execute() == RET_YES )
1910*cdf0e10cSrcweir 						{
1911*cdf0e10cSrcweir 							bool bDoRemove = false;
1912*cdf0e10cSrcweir 							if ( nId > TID_INSTANCE )
1913*cdf0e10cSrcweir 							{
1914*cdf0e10cSrcweir 								PageList::iterator aPageListEnd = m_aPageList.end();
1915*cdf0e10cSrcweir 								PageList::iterator aFoundPage =
1916*cdf0e10cSrcweir 									std::find( m_aPageList.begin(), aPageListEnd, pPage );
1917*cdf0e10cSrcweir 								if ( aFoundPage != aPageListEnd )
1918*cdf0e10cSrcweir 								{
1919*cdf0e10cSrcweir 									m_aPageList.erase( aFoundPage );
1920*cdf0e10cSrcweir 									delete pPage;
1921*cdf0e10cSrcweir 									bDoRemove = true;
1922*cdf0e10cSrcweir 								}
1923*cdf0e10cSrcweir 							}
1924*cdf0e10cSrcweir 							else
1925*cdf0e10cSrcweir 							{
1926*cdf0e10cSrcweir 								DELETEZ( m_pInstPage );
1927*cdf0e10cSrcweir 								bDoRemove = true;
1928*cdf0e10cSrcweir 							}
1929*cdf0e10cSrcweir 
1930*cdf0e10cSrcweir 							if ( bDoRemove )
1931*cdf0e10cSrcweir 							{
1932*cdf0e10cSrcweir 								try
1933*cdf0e10cSrcweir 								{
1934*cdf0e10cSrcweir 									xUIHelper->removeInstance( sInstName );
1935*cdf0e10cSrcweir 								}
1936*cdf0e10cSrcweir 								catch ( Exception& )
1937*cdf0e10cSrcweir 								{
1938*cdf0e10cSrcweir                                     DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
1939*cdf0e10cSrcweir 								}
1940*cdf0e10cSrcweir 								m_aTabCtrl.RemovePage( nId );
1941*cdf0e10cSrcweir 								m_aTabCtrl.SetCurPageId( TID_INSTANCE );
1942*cdf0e10cSrcweir 								ModelSelectHdl( NULL );
1943*cdf0e10cSrcweir                                 bIsDocModified = true;
1944*cdf0e10cSrcweir 							}
1945*cdf0e10cSrcweir 						}
1946*cdf0e10cSrcweir 					}
1947*cdf0e10cSrcweir 					break;
1948*cdf0e10cSrcweir 				}
1949*cdf0e10cSrcweir 				case MID_SHOW_DETAILS :
1950*cdf0e10cSrcweir 				{
1951*cdf0e10cSrcweir 					m_bShowDetails = !m_bShowDetails;
1952*cdf0e10cSrcweir 					m_aInstanceBtn.GetPopupMenu()->CheckItem( MID_SHOW_DETAILS, m_bShowDetails );
1953*cdf0e10cSrcweir                     ModelSelectHdl( &m_aModelsBox );
1954*cdf0e10cSrcweir 					break;
1955*cdf0e10cSrcweir 				}
1956*cdf0e10cSrcweir 				default:
1957*cdf0e10cSrcweir 				{
1958*cdf0e10cSrcweir 					DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): wrong menu item" );
1959*cdf0e10cSrcweir 				}
1960*cdf0e10cSrcweir 			}
1961*cdf0e10cSrcweir 		}
1962*cdf0e10cSrcweir 		else
1963*cdf0e10cSrcweir 		{
1964*cdf0e10cSrcweir 			DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): wrong button" );
1965*cdf0e10cSrcweir 		}
1966*cdf0e10cSrcweir 
1967*cdf0e10cSrcweir         m_bIsNotifyDisabled = false;
1968*cdf0e10cSrcweir 
1969*cdf0e10cSrcweir         if ( bIsDocModified )
1970*cdf0e10cSrcweir             SetDocModified();
1971*cdf0e10cSrcweir         return 0;
1972*cdf0e10cSrcweir 	}
1973*cdf0e10cSrcweir 	// -----------------------------------------------------------------------
1974*cdf0e10cSrcweir 	IMPL_LINK( DataNavigatorWindow, MenuActivateHdl, MenuButton *, pBtn )
1975*cdf0e10cSrcweir 	{
1976*cdf0e10cSrcweir 		Menu* pMenu = pBtn->GetPopupMenu();
1977*cdf0e10cSrcweir 
1978*cdf0e10cSrcweir 		if ( &m_aInstanceBtn == pBtn )
1979*cdf0e10cSrcweir 		{
1980*cdf0e10cSrcweir 			bool bIsInstPage = ( m_aTabCtrl.GetCurPageId() >= TID_INSTANCE );
1981*cdf0e10cSrcweir 			pMenu->EnableItem( MID_INSTANCES_EDIT, bIsInstPage );
1982*cdf0e10cSrcweir 			pMenu->EnableItem( MID_INSTANCES_REMOVE,
1983*cdf0e10cSrcweir 				bIsInstPage && m_aTabCtrl.GetPageCount() > MIN_PAGE_COUNT );
1984*cdf0e10cSrcweir 			pMenu->EnableItem( MID_SHOW_DETAILS, bIsInstPage );
1985*cdf0e10cSrcweir 		}
1986*cdf0e10cSrcweir 		else if ( &m_aModelBtn == pBtn )
1987*cdf0e10cSrcweir 		{
1988*cdf0e10cSrcweir 			// we need at least one model!
1989*cdf0e10cSrcweir 			pMenu->EnableItem( MID_MODELS_REMOVE, m_aModelsBox.GetEntryCount() > 1 );
1990*cdf0e10cSrcweir 		}
1991*cdf0e10cSrcweir 		else
1992*cdf0e10cSrcweir 		{
1993*cdf0e10cSrcweir 			DBG_ERRORFILE( "DataNavigatorWindow::MenuActivateHdl(): wrong button" );
1994*cdf0e10cSrcweir 		}
1995*cdf0e10cSrcweir 		return 0;
1996*cdf0e10cSrcweir 	}
1997*cdf0e10cSrcweir     // -----------------------------------------------------------------------
1998*cdf0e10cSrcweir     IMPL_LINK( DataNavigatorWindow, ActivatePageHdl, TabControl *, EMPTYARG )
1999*cdf0e10cSrcweir     {
2000*cdf0e10cSrcweir         sal_uInt16 nId = 0;
2001*cdf0e10cSrcweir         XFormsPage* pPage = GetCurrentPage( nId );
2002*cdf0e10cSrcweir         if ( pPage )
2003*cdf0e10cSrcweir         {
2004*cdf0e10cSrcweir             m_aTabCtrl.SetTabPage( nId, pPage );
2005*cdf0e10cSrcweir             if ( m_xDataContainer.is() && !pPage->HasModel() )
2006*cdf0e10cSrcweir                 SetPageModel();
2007*cdf0e10cSrcweir         }
2008*cdf0e10cSrcweir 
2009*cdf0e10cSrcweir         return 0;
2010*cdf0e10cSrcweir     }
2011*cdf0e10cSrcweir     // -----------------------------------------------------------------------
2012*cdf0e10cSrcweir     IMPL_LINK( DataNavigatorWindow, UpdateHdl, Timer *, EMPTYARG )
2013*cdf0e10cSrcweir     {
2014*cdf0e10cSrcweir         ModelSelectHdl( NULL );
2015*cdf0e10cSrcweir         return 0;
2016*cdf0e10cSrcweir     }
2017*cdf0e10cSrcweir 	// -----------------------------------------------------------------------
2018*cdf0e10cSrcweir 	XFormsPage* DataNavigatorWindow::GetCurrentPage( sal_uInt16& rCurId )
2019*cdf0e10cSrcweir 	{
2020*cdf0e10cSrcweir 		rCurId = m_aTabCtrl.GetCurPageId();
2021*cdf0e10cSrcweir 		XFormsPage* pPage = NULL;
2022*cdf0e10cSrcweir 		switch ( rCurId )
2023*cdf0e10cSrcweir 		{
2024*cdf0e10cSrcweir 			case TID_SUBMISSION:
2025*cdf0e10cSrcweir 			{
2026*cdf0e10cSrcweir 				if ( !m_pSubmissionPage )
2027*cdf0e10cSrcweir 					m_pSubmissionPage = new XFormsPage( &m_aTabCtrl, this, DGTSubmission );
2028*cdf0e10cSrcweir 				pPage = m_pSubmissionPage;
2029*cdf0e10cSrcweir 				break;
2030*cdf0e10cSrcweir 			}
2031*cdf0e10cSrcweir 
2032*cdf0e10cSrcweir 			case TID_BINDINGS:
2033*cdf0e10cSrcweir 			{
2034*cdf0e10cSrcweir 				if ( !m_pBindingPage )
2035*cdf0e10cSrcweir 					m_pBindingPage = new XFormsPage( &m_aTabCtrl, this, DGTBinding );
2036*cdf0e10cSrcweir 				pPage = m_pBindingPage;
2037*cdf0e10cSrcweir 				break;
2038*cdf0e10cSrcweir 			}
2039*cdf0e10cSrcweir 
2040*cdf0e10cSrcweir 			case TID_INSTANCE:
2041*cdf0e10cSrcweir 			{
2042*cdf0e10cSrcweir 				if ( !m_pInstPage )
2043*cdf0e10cSrcweir 					m_pInstPage = new XFormsPage( &m_aTabCtrl, this, DGTInstance );
2044*cdf0e10cSrcweir 				pPage = m_pInstPage;
2045*cdf0e10cSrcweir 				break;
2046*cdf0e10cSrcweir 			}
2047*cdf0e10cSrcweir 		}
2048*cdf0e10cSrcweir 
2049*cdf0e10cSrcweir 		if ( rCurId > TID_INSTANCE )
2050*cdf0e10cSrcweir 		{
2051*cdf0e10cSrcweir             sal_uInt16 nPos = m_aTabCtrl.GetPagePos( rCurId );
2052*cdf0e10cSrcweir             if ( HasFirstInstancePage() && nPos > 0 )
2053*cdf0e10cSrcweir                 nPos--;
2054*cdf0e10cSrcweir 			if ( m_aPageList.size() > nPos )
2055*cdf0e10cSrcweir 				pPage = m_aPageList[nPos];
2056*cdf0e10cSrcweir 			else
2057*cdf0e10cSrcweir 			{
2058*cdf0e10cSrcweir 				pPage = new XFormsPage( &m_aTabCtrl, this, DGTInstance );
2059*cdf0e10cSrcweir 				m_aPageList.push_back( pPage );
2060*cdf0e10cSrcweir 			}
2061*cdf0e10cSrcweir 		}
2062*cdf0e10cSrcweir 
2063*cdf0e10cSrcweir 		return pPage;
2064*cdf0e10cSrcweir 	}
2065*cdf0e10cSrcweir 	// -----------------------------------------------------------------------
2066*cdf0e10cSrcweir 	void DataNavigatorWindow::LoadModels()
2067*cdf0e10cSrcweir 	{
2068*cdf0e10cSrcweir 		if ( !m_xFrameModel.is() )
2069*cdf0e10cSrcweir 		{
2070*cdf0e10cSrcweir             // get model of active frame
2071*cdf0e10cSrcweir             Reference< XController > xCtrl = m_xFrame->getController();
2072*cdf0e10cSrcweir 	        if ( xCtrl.is() )
2073*cdf0e10cSrcweir 			{
2074*cdf0e10cSrcweir 				try
2075*cdf0e10cSrcweir 				{
2076*cdf0e10cSrcweir 				    m_xFrameModel = xCtrl->getModel();
2077*cdf0e10cSrcweir 				}
2078*cdf0e10cSrcweir 				catch ( Exception& )
2079*cdf0e10cSrcweir 				{
2080*cdf0e10cSrcweir 					DBG_ERRORFILE( "DataNavigatorWindow::LoadModels(): exception caught" );
2081*cdf0e10cSrcweir 				}
2082*cdf0e10cSrcweir 			}
2083*cdf0e10cSrcweir 		}
2084*cdf0e10cSrcweir 
2085*cdf0e10cSrcweir 		if ( m_xFrameModel.is() )
2086*cdf0e10cSrcweir 		{
2087*cdf0e10cSrcweir 			try
2088*cdf0e10cSrcweir 			{
2089*cdf0e10cSrcweir 				::rtl::OUString sURL = m_xFrameModel->getURL();
2090*cdf0e10cSrcweir 				Reference< css::xforms::XFormsSupplier > xFormsSupp( m_xFrameModel, UNO_QUERY );
2091*cdf0e10cSrcweir 				if ( xFormsSupp.is() )
2092*cdf0e10cSrcweir 				{
2093*cdf0e10cSrcweir 					Reference< XNameContainer > xContainer = xFormsSupp->getXForms();
2094*cdf0e10cSrcweir 					if ( xContainer.is() )
2095*cdf0e10cSrcweir 					{
2096*cdf0e10cSrcweir 						m_xDataContainer = xContainer;
2097*cdf0e10cSrcweir 						Sequence< ::rtl::OUString > aNameList = m_xDataContainer->getElementNames();
2098*cdf0e10cSrcweir 						sal_Int32 i, nCount = aNameList.getLength();
2099*cdf0e10cSrcweir 						::rtl::OUString* pNames = aNameList.getArray();
2100*cdf0e10cSrcweir 						for ( i = 0; i < nCount; ++i )
2101*cdf0e10cSrcweir 						{
2102*cdf0e10cSrcweir 							Any aAny = m_xDataContainer->getByName( pNames[i] );
2103*cdf0e10cSrcweir 							Reference< css::xforms::XModel > xFormsModel;
2104*cdf0e10cSrcweir 							if ( aAny >>= xFormsModel )
2105*cdf0e10cSrcweir 								m_aModelsBox.InsertEntry( xFormsModel->getID() );
2106*cdf0e10cSrcweir 						}
2107*cdf0e10cSrcweir 					}
2108*cdf0e10cSrcweir 				}
2109*cdf0e10cSrcweir 			}
2110*cdf0e10cSrcweir 			catch( Exception& )
2111*cdf0e10cSrcweir 			{
2112*cdf0e10cSrcweir 				DBG_ERRORFILE( "DataNavigatorWindow::LoadModels(): exception caught" );
2113*cdf0e10cSrcweir 			}
2114*cdf0e10cSrcweir 		}
2115*cdf0e10cSrcweir 
2116*cdf0e10cSrcweir 		if ( m_aModelsBox.GetEntryCount() > 0 )
2117*cdf0e10cSrcweir 		{
2118*cdf0e10cSrcweir 			m_aModelsBox.SelectEntryPos(0);
2119*cdf0e10cSrcweir 			ModelSelectHdl( &m_aModelsBox );
2120*cdf0e10cSrcweir 		}
2121*cdf0e10cSrcweir 	}
2122*cdf0e10cSrcweir 	// -----------------------------------------------------------------------
2123*cdf0e10cSrcweir 	void DataNavigatorWindow::SetPageModel()
2124*cdf0e10cSrcweir 	{
2125*cdf0e10cSrcweir 		rtl::OUString sModel( m_aModelsBox.GetSelectEntry() );
2126*cdf0e10cSrcweir 		try
2127*cdf0e10cSrcweir 		{
2128*cdf0e10cSrcweir 			Any aAny = m_xDataContainer->getByName( sModel );
2129*cdf0e10cSrcweir 			Reference< css::xforms::XModel > xFormsModel;
2130*cdf0e10cSrcweir 			if ( aAny >>= xFormsModel )
2131*cdf0e10cSrcweir 			{
2132*cdf0e10cSrcweir                 sal_uInt16 nPagePos = TAB_PAGE_NOTFOUND;
2133*cdf0e10cSrcweir 				sal_uInt16 nId = 0;
2134*cdf0e10cSrcweir 				XFormsPage* pPage = GetCurrentPage( nId );
2135*cdf0e10cSrcweir                 DBG_ASSERT( pPage, "DataNavigatorWindow::SetPageModel(): no page" );
2136*cdf0e10cSrcweir                 if ( nId >= TID_INSTANCE )
2137*cdf0e10cSrcweir                     // instance page
2138*cdf0e10cSrcweir                     nPagePos = m_aTabCtrl.GetPagePos( nId );
2139*cdf0e10cSrcweir                 m_bIsNotifyDisabled = true;
2140*cdf0e10cSrcweir                 String sText = pPage->SetModel( xFormsModel, nPagePos );
2141*cdf0e10cSrcweir                 m_bIsNotifyDisabled = false;
2142*cdf0e10cSrcweir 				if ( sText.Len() > 0 )
2143*cdf0e10cSrcweir 					m_aTabCtrl.SetPageText( nId, sText );
2144*cdf0e10cSrcweir 			}
2145*cdf0e10cSrcweir 		}
2146*cdf0e10cSrcweir 		catch ( NoSuchElementException& )
2147*cdf0e10cSrcweir 		{
2148*cdf0e10cSrcweir 			DBG_ERRORFILE( "DataNavigatorWindow::SetPageModel(): no such element" );
2149*cdf0e10cSrcweir 		}
2150*cdf0e10cSrcweir         catch( Exception& )
2151*cdf0e10cSrcweir 		{
2152*cdf0e10cSrcweir 			DBG_ERRORFILE( "DataNavigatorWindow::SetPageModel(): unexpected exception" );
2153*cdf0e10cSrcweir 		}
2154*cdf0e10cSrcweir 	}
2155*cdf0e10cSrcweir 	// -----------------------------------------------------------------------
2156*cdf0e10cSrcweir 	void DataNavigatorWindow::InitPages()
2157*cdf0e10cSrcweir 	{
2158*cdf0e10cSrcweir 		rtl::OUString sModel( m_aModelsBox.GetSelectEntry() );
2159*cdf0e10cSrcweir 		try
2160*cdf0e10cSrcweir 		{
2161*cdf0e10cSrcweir 			Any aAny = m_xDataContainer->getByName( sModel );
2162*cdf0e10cSrcweir 			Reference< css::xforms::XModel > xModel;
2163*cdf0e10cSrcweir 			if ( aAny >>= xModel )
2164*cdf0e10cSrcweir 			{
2165*cdf0e10cSrcweir 				Reference< XEnumerationAccess > xNumAccess( xModel->getInstances(), UNO_QUERY );
2166*cdf0e10cSrcweir 				if ( xNumAccess.is() )
2167*cdf0e10cSrcweir 				{
2168*cdf0e10cSrcweir 					Reference < XEnumeration > xNum = xNumAccess->createEnumeration();
2169*cdf0e10cSrcweir 					if ( xNum.is() && xNum->hasMoreElements() )
2170*cdf0e10cSrcweir 					{
2171*cdf0e10cSrcweir 						sal_Int32 nAlreadyLoadedCount = m_aPageList.size();
2172*cdf0e10cSrcweir                         if ( !HasFirstInstancePage() && nAlreadyLoadedCount > 0 )
2173*cdf0e10cSrcweir                             nAlreadyLoadedCount--;
2174*cdf0e10cSrcweir 						sal_Int32 nIdx = 0;
2175*cdf0e10cSrcweir 						while ( xNum->hasMoreElements() )
2176*cdf0e10cSrcweir 						{
2177*cdf0e10cSrcweir 							if ( nIdx > nAlreadyLoadedCount )
2178*cdf0e10cSrcweir 							{
2179*cdf0e10cSrcweir 								Sequence< PropertyValue > xPropSeq;
2180*cdf0e10cSrcweir 								if ( xNum->nextElement() >>= xPropSeq )
2181*cdf0e10cSrcweir 									CreateInstancePage( xPropSeq );
2182*cdf0e10cSrcweir 								else
2183*cdf0e10cSrcweir 								{
2184*cdf0e10cSrcweir 									DBG_ERRORFILE( "DataNavigator::InitPages(): invalid instance" );
2185*cdf0e10cSrcweir 								}
2186*cdf0e10cSrcweir 							}
2187*cdf0e10cSrcweir 							else
2188*cdf0e10cSrcweir 								xNum->nextElement();
2189*cdf0e10cSrcweir 							nIdx++;
2190*cdf0e10cSrcweir 						}
2191*cdf0e10cSrcweir 					}
2192*cdf0e10cSrcweir 				}
2193*cdf0e10cSrcweir 			}
2194*cdf0e10cSrcweir 		}
2195*cdf0e10cSrcweir 		catch ( NoSuchElementException& )
2196*cdf0e10cSrcweir 		{
2197*cdf0e10cSrcweir 			DBG_ERRORFILE( "DataNavigatorWindow::SetPageModel(): no such element" );
2198*cdf0e10cSrcweir 		}
2199*cdf0e10cSrcweir         catch( Exception& )
2200*cdf0e10cSrcweir 		{
2201*cdf0e10cSrcweir 			DBG_ERRORFILE( "DataNavigatorWindow::SetPageModel(): unexpected exception" );
2202*cdf0e10cSrcweir 		}
2203*cdf0e10cSrcweir 	}
2204*cdf0e10cSrcweir 	// -----------------------------------------------------------------------
2205*cdf0e10cSrcweir     void DataNavigatorWindow::ClearAllPageModels( bool bClearPages )
2206*cdf0e10cSrcweir 	{
2207*cdf0e10cSrcweir 		if ( m_pInstPage )
2208*cdf0e10cSrcweir 			m_pInstPage->ClearModel();
2209*cdf0e10cSrcweir 		if ( m_pSubmissionPage )
2210*cdf0e10cSrcweir 			m_pSubmissionPage->ClearModel();
2211*cdf0e10cSrcweir 		if ( m_pBindingPage )
2212*cdf0e10cSrcweir 			m_pBindingPage->ClearModel();
2213*cdf0e10cSrcweir 
2214*cdf0e10cSrcweir 		sal_Int32 i, nCount = m_aPageList.size();
2215*cdf0e10cSrcweir         for ( i = 0; i < nCount; ++i )
2216*cdf0e10cSrcweir         {
2217*cdf0e10cSrcweir             XFormsPage* pPage = m_aPageList[i];
2218*cdf0e10cSrcweir             pPage->ClearModel();
2219*cdf0e10cSrcweir             if ( bClearPages )
2220*cdf0e10cSrcweir                 delete pPage;
2221*cdf0e10cSrcweir         }
2222*cdf0e10cSrcweir 
2223*cdf0e10cSrcweir         if ( bClearPages )
2224*cdf0e10cSrcweir         {
2225*cdf0e10cSrcweir             m_aPageList.clear();
2226*cdf0e10cSrcweir             while ( m_aTabCtrl.GetPageCount() > MIN_PAGE_COUNT )
2227*cdf0e10cSrcweir                 m_aTabCtrl.RemovePage( m_aTabCtrl.GetPageId( 1 ) );
2228*cdf0e10cSrcweir         }
2229*cdf0e10cSrcweir 	}
2230*cdf0e10cSrcweir 	// -----------------------------------------------------------------------
2231*cdf0e10cSrcweir 	void DataNavigatorWindow::CreateInstancePage( const Sequence< PropertyValue >& _xPropSeq )
2232*cdf0e10cSrcweir 	{
2233*cdf0e10cSrcweir 		rtl::OUString sInstName;
2234*cdf0e10cSrcweir 		rtl::OUString sID( PN_INSTANCE_ID );
2235*cdf0e10cSrcweir 		const PropertyValue* pProps = _xPropSeq.getConstArray();
2236*cdf0e10cSrcweir 		const PropertyValue* pPropsEnd = pProps + _xPropSeq.getLength();
2237*cdf0e10cSrcweir 		for ( ; pProps != pPropsEnd; ++pProps )
2238*cdf0e10cSrcweir 		{
2239*cdf0e10cSrcweir 			if ( sID.compareTo( pProps->Name ) == 0 )
2240*cdf0e10cSrcweir 			{
2241*cdf0e10cSrcweir 				pProps->Value >>= sInstName;
2242*cdf0e10cSrcweir 				break;
2243*cdf0e10cSrcweir 			}
2244*cdf0e10cSrcweir 		}
2245*cdf0e10cSrcweir 
2246*cdf0e10cSrcweir         sal_uInt16 nPageId = GetNewPageId();
2247*cdf0e10cSrcweir 		if ( sInstName.getLength() == 0 )
2248*cdf0e10cSrcweir 		{
2249*cdf0e10cSrcweir             DBG_ERRORFILE( "DataNavigatorWindow::CreateInstancePage(): instance without name" );
2250*cdf0e10cSrcweir             String sTemp = String::CreateFromAscii( "untitled" );
2251*cdf0e10cSrcweir             sTemp += String::CreateFromInt32( nPageId );
2252*cdf0e10cSrcweir 			sInstName = sTemp;
2253*cdf0e10cSrcweir 		}
2254*cdf0e10cSrcweir         m_aTabCtrl.InsertPage( nPageId, sInstName, m_aTabCtrl.GetPageCount() - 2 );
2255*cdf0e10cSrcweir 	}
2256*cdf0e10cSrcweir 
2257*cdf0e10cSrcweir     //------------------------------------------------------------------------
2258*cdf0e10cSrcweir     bool DataNavigatorWindow::HasFirstInstancePage() const
2259*cdf0e10cSrcweir     {
2260*cdf0e10cSrcweir         return ( m_aTabCtrl.GetPageId( 0 ) == TID_INSTANCE );
2261*cdf0e10cSrcweir     }
2262*cdf0e10cSrcweir 
2263*cdf0e10cSrcweir     //------------------------------------------------------------------------
2264*cdf0e10cSrcweir     sal_uInt16 DataNavigatorWindow::GetNewPageId() const
2265*cdf0e10cSrcweir     {
2266*cdf0e10cSrcweir         sal_uInt16 i, nMax = 0, nCount = m_aTabCtrl.GetPageCount();
2267*cdf0e10cSrcweir         for ( i = 0; i < nCount; ++i )
2268*cdf0e10cSrcweir         {
2269*cdf0e10cSrcweir             if ( nMax < m_aTabCtrl.GetPageId(i) )
2270*cdf0e10cSrcweir                 nMax = m_aTabCtrl.GetPageId(i);
2271*cdf0e10cSrcweir         }
2272*cdf0e10cSrcweir         return ( nMax + 1 );
2273*cdf0e10cSrcweir     }
2274*cdf0e10cSrcweir 
2275*cdf0e10cSrcweir 	//------------------------------------------------------------------------
2276*cdf0e10cSrcweir 	void DataNavigatorWindow::Resize()
2277*cdf0e10cSrcweir 	{
2278*cdf0e10cSrcweir 		Window::Resize();
2279*cdf0e10cSrcweir 
2280*cdf0e10cSrcweir 		Size aOutSz = GetOutputSizePixel();
2281*cdf0e10cSrcweir 		long nWidth = Max( aOutSz.Width(), m_nMinWidth );
2282*cdf0e10cSrcweir 		long nHeight = Max( aOutSz.Height(), m_nMinHeight );
2283*cdf0e10cSrcweir 
2284*cdf0e10cSrcweir 		Size aSz = m_aModelsBox.GetSizePixel();
2285*cdf0e10cSrcweir 		aSz.Width() = nWidth - 3*m_a3Size.Width() - m_aModelBtn.GetSizePixel().Width();
2286*cdf0e10cSrcweir 		m_aModelsBox.SetSizePixel( aSz );
2287*cdf0e10cSrcweir 		Point aPos = m_aModelBtn.GetPosPixel();
2288*cdf0e10cSrcweir 		aPos.X() = m_aModelsBox.GetPosPixel().X() + aSz.Width() + m_a3Size.Width();
2289*cdf0e10cSrcweir 		m_aModelBtn.SetPosPixel( aPos );
2290*cdf0e10cSrcweir 
2291*cdf0e10cSrcweir 		aSz = m_aTabCtrl.GetSizePixel();
2292*cdf0e10cSrcweir 		aSz.Width() = nWidth - 2*m_a3Size.Width();
2293*cdf0e10cSrcweir 		aSz.Height() = nHeight - m_nBorderHeight;
2294*cdf0e10cSrcweir 		m_aTabCtrl.SetSizePixel( aSz );
2295*cdf0e10cSrcweir 		// Instance button positioning
2296*cdf0e10cSrcweir 		aPos = m_aInstanceBtn.GetPosPixel();
2297*cdf0e10cSrcweir 		// right aligned
2298*cdf0e10cSrcweir 		aPos.X() = nWidth - m_aInstanceBtn.GetSizePixel().Width() - m_a3Size.Width();
2299*cdf0e10cSrcweir 		// under the tabcontrol
2300*cdf0e10cSrcweir 		aPos.Y() = m_aTabCtrl.GetPosPixel().Y() + aSz.Height() + m_a3Size.Height();
2301*cdf0e10cSrcweir 		m_aInstanceBtn.SetPosPixel( aPos );
2302*cdf0e10cSrcweir 	}
2303*cdf0e10cSrcweir 
2304*cdf0e10cSrcweir     //------------------------------------------------------------------------
2305*cdf0e10cSrcweir     void DataNavigatorWindow::SetDocModified()
2306*cdf0e10cSrcweir     {
2307*cdf0e10cSrcweir         SfxObjectShell* pCurrentDoc = SfxObjectShell::Current();
2308*cdf0e10cSrcweir         DBG_ASSERT( pCurrentDoc, "DataNavigatorWindow::SetDocModified(): no objectshell" );
2309*cdf0e10cSrcweir         if ( !pCurrentDoc->IsModified() && pCurrentDoc->IsEnableSetModified() )
2310*cdf0e10cSrcweir             pCurrentDoc->SetModified();
2311*cdf0e10cSrcweir     }
2312*cdf0e10cSrcweir 
2313*cdf0e10cSrcweir     //------------------------------------------------------------------------
2314*cdf0e10cSrcweir     void DataNavigatorWindow::NotifyChanges( bool _bLoadAll )
2315*cdf0e10cSrcweir     {
2316*cdf0e10cSrcweir         if ( !m_bIsNotifyDisabled )
2317*cdf0e10cSrcweir         {
2318*cdf0e10cSrcweir             if ( _bLoadAll )
2319*cdf0e10cSrcweir             {
2320*cdf0e10cSrcweir                 // reset all members
2321*cdf0e10cSrcweir                 RemoveBroadcaster();
2322*cdf0e10cSrcweir                 m_xDataContainer.clear();
2323*cdf0e10cSrcweir                 m_xFrameModel.clear();
2324*cdf0e10cSrcweir                 m_aModelsBox.Clear();
2325*cdf0e10cSrcweir                 m_nLastSelectedPos = LISTBOX_ENTRY_NOTFOUND;
2326*cdf0e10cSrcweir                 // for a reload
2327*cdf0e10cSrcweir                 LoadModels();
2328*cdf0e10cSrcweir             }
2329*cdf0e10cSrcweir             else
2330*cdf0e10cSrcweir                 m_aUpdateTimer.Start();
2331*cdf0e10cSrcweir         }
2332*cdf0e10cSrcweir     }
2333*cdf0e10cSrcweir 
2334*cdf0e10cSrcweir     //------------------------------------------------------------------------
2335*cdf0e10cSrcweir     void DataNavigatorWindow::AddContainerBroadcaster( const XContainer_ref& xContainer )
2336*cdf0e10cSrcweir     {
2337*cdf0e10cSrcweir         Reference< XContainerListener > xListener(
2338*cdf0e10cSrcweir             static_cast< XContainerListener* >( m_xDataListener.get() ), UNO_QUERY );
2339*cdf0e10cSrcweir         xContainer->addContainerListener( xListener );
2340*cdf0e10cSrcweir         m_aContainerList.push_back( xContainer );
2341*cdf0e10cSrcweir     }
2342*cdf0e10cSrcweir 
2343*cdf0e10cSrcweir     //------------------------------------------------------------------------
2344*cdf0e10cSrcweir     void DataNavigatorWindow::AddEventBroadcaster( const XEventTarget_ref& xTarget )
2345*cdf0e10cSrcweir     {
2346*cdf0e10cSrcweir         Reference< XEventListener > xListener(
2347*cdf0e10cSrcweir             static_cast< XEventListener* >( m_xDataListener.get() ), UNO_QUERY );
2348*cdf0e10cSrcweir         xTarget->addEventListener( EVENTTYPE_CHARDATA, xListener, true );
2349*cdf0e10cSrcweir         xTarget->addEventListener( EVENTTYPE_CHARDATA, xListener, false );
2350*cdf0e10cSrcweir         xTarget->addEventListener( EVENTTYPE_ATTR, xListener, true );
2351*cdf0e10cSrcweir         xTarget->addEventListener( EVENTTYPE_ATTR, xListener, false );
2352*cdf0e10cSrcweir         m_aEventTargetList.push_back( xTarget );
2353*cdf0e10cSrcweir     }
2354*cdf0e10cSrcweir 
2355*cdf0e10cSrcweir     //------------------------------------------------------------------------
2356*cdf0e10cSrcweir     void DataNavigatorWindow::RemoveBroadcaster()
2357*cdf0e10cSrcweir     {
2358*cdf0e10cSrcweir         Reference< XContainerListener > xContainerListener(
2359*cdf0e10cSrcweir             static_cast< XContainerListener* >( m_xDataListener.get() ), UNO_QUERY );
2360*cdf0e10cSrcweir         sal_Int32 i, nCount = m_aContainerList.size();
2361*cdf0e10cSrcweir         for ( i = 0; i < nCount; ++i )
2362*cdf0e10cSrcweir             m_aContainerList[i]->removeContainerListener( xContainerListener );
2363*cdf0e10cSrcweir         Reference< XEventListener > xEventListener(
2364*cdf0e10cSrcweir             static_cast< XEventListener* >( m_xDataListener.get() ), UNO_QUERY );
2365*cdf0e10cSrcweir         nCount = m_aEventTargetList.size();
2366*cdf0e10cSrcweir         for ( i = 0; i < nCount; ++i )
2367*cdf0e10cSrcweir         {
2368*cdf0e10cSrcweir             m_aEventTargetList[i]->removeEventListener( EVENTTYPE_CHARDATA, xEventListener, true );
2369*cdf0e10cSrcweir             m_aEventTargetList[i]->removeEventListener( EVENTTYPE_CHARDATA, xEventListener, false );
2370*cdf0e10cSrcweir             m_aEventTargetList[i]->removeEventListener( EVENTTYPE_ATTR, xEventListener, true );
2371*cdf0e10cSrcweir             m_aEventTargetList[i]->removeEventListener( EVENTTYPE_ATTR, xEventListener, false );
2372*cdf0e10cSrcweir         }
2373*cdf0e10cSrcweir     }
2374*cdf0e10cSrcweir 
2375*cdf0e10cSrcweir     //========================================================================
2376*cdf0e10cSrcweir 	// class DataNavigator
2377*cdf0e10cSrcweir 	//========================================================================
2378*cdf0e10cSrcweir 	DBG_NAME(DataNavigator)
2379*cdf0e10cSrcweir 	//------------------------------------------------------------------------
2380*cdf0e10cSrcweir 	DataNavigator::DataNavigator( SfxBindings* _pBindings, SfxChildWindow* _pMgr, Window* _pParent ) :
2381*cdf0e10cSrcweir 
2382*cdf0e10cSrcweir 		SfxDockingWindow( _pBindings, _pMgr, _pParent,
2383*cdf0e10cSrcweir 						  WinBits(WB_STDMODELESS|WB_SIZEABLE|WB_ROLLABLE|WB_3DLOOK|WB_DOCKABLE) ),
2384*cdf0e10cSrcweir 		SfxControllerItem( SID_FM_DATANAVIGATOR_CONTROL, *_pBindings ),
2385*cdf0e10cSrcweir 
2386*cdf0e10cSrcweir 		m_aDataWin( this, _pBindings )
2387*cdf0e10cSrcweir 
2388*cdf0e10cSrcweir 	{
2389*cdf0e10cSrcweir 		DBG_CTOR(DataNavigator,NULL);
2390*cdf0e10cSrcweir 
2391*cdf0e10cSrcweir 		SetHelpId( HID_DATA_NAVIGATOR_WIN );
2392*cdf0e10cSrcweir 		SetText( SVX_RES( RID_STR_DATANAVIGATOR ) );
2393*cdf0e10cSrcweir 
2394*cdf0e10cSrcweir 		Size aSize = m_aDataWin.GetOutputSizePixel();
2395*cdf0e10cSrcweir 		Size aLogSize = PixelToLogic( aSize, MAP_APPFONT );
2396*cdf0e10cSrcweir 		SfxDockingWindow::SetFloatingSize( aLogSize );
2397*cdf0e10cSrcweir 
2398*cdf0e10cSrcweir 		m_aDataWin.Show();
2399*cdf0e10cSrcweir 	}
2400*cdf0e10cSrcweir 
2401*cdf0e10cSrcweir 	//------------------------------------------------------------------------
2402*cdf0e10cSrcweir 	DataNavigator::~DataNavigator()
2403*cdf0e10cSrcweir 	{
2404*cdf0e10cSrcweir 		DBG_DTOR(DataNavigator,NULL);
2405*cdf0e10cSrcweir 	}
2406*cdf0e10cSrcweir 
2407*cdf0e10cSrcweir 	//-----------------------------------------------------------------------
2408*cdf0e10cSrcweir 	void DataNavigator::Update( FmFormShell* /*pFormShell*/ )
2409*cdf0e10cSrcweir 	{
2410*cdf0e10cSrcweir 	}
2411*cdf0e10cSrcweir 	//-----------------------------------------------------------------------
2412*cdf0e10cSrcweir 	void DataNavigator::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
2413*cdf0e10cSrcweir 	{
2414*cdf0e10cSrcweir 		if ( !pState  || SID_FM_DATANAVIGATOR_CONTROL != nSID )
2415*cdf0e10cSrcweir 			return;
2416*cdf0e10cSrcweir 
2417*cdf0e10cSrcweir 		if ( eState >= SFX_ITEM_AVAILABLE )
2418*cdf0e10cSrcweir 		{
2419*cdf0e10cSrcweir 			FmFormShell* pShell = PTR_CAST( FmFormShell,((SfxObjectItem*)pState)->GetShell() );
2420*cdf0e10cSrcweir 			Update( pShell );
2421*cdf0e10cSrcweir 		}
2422*cdf0e10cSrcweir 		else
2423*cdf0e10cSrcweir 			Update( NULL );
2424*cdf0e10cSrcweir 	}
2425*cdf0e10cSrcweir 
2426*cdf0e10cSrcweir 	//-----------------------------------------------------------------------
2427*cdf0e10cSrcweir 	void DataNavigator::GetFocus()
2428*cdf0e10cSrcweir 	{
2429*cdf0e10cSrcweir 		SfxDockingWindow::GetFocus();
2430*cdf0e10cSrcweir 	}
2431*cdf0e10cSrcweir 
2432*cdf0e10cSrcweir 	//-----------------------------------------------------------------------
2433*cdf0e10cSrcweir 	sal_Bool DataNavigator::Close()
2434*cdf0e10cSrcweir 	{
2435*cdf0e10cSrcweir 		Update( NULL );
2436*cdf0e10cSrcweir 		return SfxDockingWindow::Close();
2437*cdf0e10cSrcweir 	}
2438*cdf0e10cSrcweir 
2439*cdf0e10cSrcweir 	//-----------------------------------------------------------------------
2440*cdf0e10cSrcweir 	Size DataNavigator::CalcDockingSize( SfxChildAlignment eAlign )
2441*cdf0e10cSrcweir 	{
2442*cdf0e10cSrcweir         if ( ( eAlign == SFX_ALIGN_TOP ) || ( eAlign == SFX_ALIGN_BOTTOM ) )
2443*cdf0e10cSrcweir 			return Size();
2444*cdf0e10cSrcweir 
2445*cdf0e10cSrcweir 		return SfxDockingWindow::CalcDockingSize( eAlign );
2446*cdf0e10cSrcweir 	}
2447*cdf0e10cSrcweir 
2448*cdf0e10cSrcweir 	//-----------------------------------------------------------------------
2449*cdf0e10cSrcweir 	SfxChildAlignment DataNavigator::CheckAlignment( SfxChildAlignment eActAlign, SfxChildAlignment eAlign )
2450*cdf0e10cSrcweir 	{
2451*cdf0e10cSrcweir 		switch ( eAlign )
2452*cdf0e10cSrcweir 		{
2453*cdf0e10cSrcweir 			case SFX_ALIGN_LEFT:
2454*cdf0e10cSrcweir 			case SFX_ALIGN_RIGHT:
2455*cdf0e10cSrcweir 			case SFX_ALIGN_NOALIGNMENT:
2456*cdf0e10cSrcweir 				return eAlign;
2457*cdf0e10cSrcweir             default:
2458*cdf0e10cSrcweir                 break;
2459*cdf0e10cSrcweir 		}
2460*cdf0e10cSrcweir 		return eActAlign;
2461*cdf0e10cSrcweir 	}
2462*cdf0e10cSrcweir 
2463*cdf0e10cSrcweir 	//------------------------------------------------------------------------
2464*cdf0e10cSrcweir 	void DataNavigator::Resize()
2465*cdf0e10cSrcweir 	{
2466*cdf0e10cSrcweir 		SfxDockingWindow::Resize();
2467*cdf0e10cSrcweir 
2468*cdf0e10cSrcweir 		Size aLogOutputSize = PixelToLogic( GetOutputSizePixel(), MAP_APPFONT );
2469*cdf0e10cSrcweir 		Size aLogExplSize = aLogOutputSize;
2470*cdf0e10cSrcweir 		aLogExplSize.Width() -= 2;
2471*cdf0e10cSrcweir 		aLogExplSize.Height() -= 2;
2472*cdf0e10cSrcweir 
2473*cdf0e10cSrcweir 		Point aExplPos = LogicToPixel( Point(1,1), MAP_APPFONT );
2474*cdf0e10cSrcweir 		Size aExplSize = LogicToPixel( aLogExplSize, MAP_APPFONT );
2475*cdf0e10cSrcweir 
2476*cdf0e10cSrcweir 		m_aDataWin.SetPosSizePixel( aExplPos, aExplSize );
2477*cdf0e10cSrcweir 	}
2478*cdf0e10cSrcweir 
2479*cdf0e10cSrcweir 
2480*cdf0e10cSrcweir 	//========================================================================
2481*cdf0e10cSrcweir 	// class NavigatorFrameManager
2482*cdf0e10cSrcweir 	//========================================================================
2483*cdf0e10cSrcweir 
2484*cdf0e10cSrcweir 	//-----------------------------------------------------------------------
2485*cdf0e10cSrcweir 	SFX_IMPL_DOCKINGWINDOW( DataNavigatorManager, SID_FM_SHOW_DATANAVIGATOR )
2486*cdf0e10cSrcweir 
2487*cdf0e10cSrcweir 	//-----------------------------------------------------------------------
2488*cdf0e10cSrcweir 	DataNavigatorManager::DataNavigatorManager(
2489*cdf0e10cSrcweir 		Window* _pParent, sal_uInt16 _nId, SfxBindings* _pBindings, SfxChildWinInfo* _pInfo ) :
2490*cdf0e10cSrcweir 
2491*cdf0e10cSrcweir 		SfxChildWindow( _pParent, _nId )
2492*cdf0e10cSrcweir 
2493*cdf0e10cSrcweir 	{
2494*cdf0e10cSrcweir 		pWindow = new DataNavigator( _pBindings, this, _pParent );
2495*cdf0e10cSrcweir 		eChildAlignment = SFX_ALIGN_RIGHT;
2496*cdf0e10cSrcweir         pWindow->SetSizePixel( Size( 250, 400 ) );
2497*cdf0e10cSrcweir 		( (SfxDockingWindow*)pWindow )->Initialize( _pInfo );
2498*cdf0e10cSrcweir 	}
2499*cdf0e10cSrcweir 
2500*cdf0e10cSrcweir 	//========================================================================
2501*cdf0e10cSrcweir 	// class AddDataItemDialog
2502*cdf0e10cSrcweir 	//========================================================================
2503*cdf0e10cSrcweir 
2504*cdf0e10cSrcweir 	AddDataItemDialog::AddDataItemDialog(
2505*cdf0e10cSrcweir 		Window* pParent, ItemNode* _pNode,
2506*cdf0e10cSrcweir 		const Reference< css::xforms::XFormsUIHelper1 >& _rUIHelper ) :
2507*cdf0e10cSrcweir 
2508*cdf0e10cSrcweir 		ModalDialog( pParent, SVX_RES( RID_SVXDLG_ADD_DATAITEM ) ),
2509*cdf0e10cSrcweir 
2510*cdf0e10cSrcweir 		m_aItemFL		( this, SVX_RES( FL_ITEM ) ),
2511*cdf0e10cSrcweir 		m_aNameFT		( this, SVX_RES( FT_NAME ) ),
2512*cdf0e10cSrcweir 		m_aNameED		( this, SVX_RES( ED_NAME ) ),
2513*cdf0e10cSrcweir 		m_aDefaultFT	( this, SVX_RES( FT_DEFAULT ) ),
2514*cdf0e10cSrcweir 		m_aDefaultED	( this, SVX_RES( ED_DEFAULT ) ),
2515*cdf0e10cSrcweir 		m_aDefaultBtn	( this, SVX_RES( PB_DEFAULT ) ),
2516*cdf0e10cSrcweir 		m_aSettingsFL	( this, SVX_RES( FL_SETTINGS ) ),
2517*cdf0e10cSrcweir 		m_aDataTypeFT	( this, SVX_RES( FT_DATATYPE ) ),
2518*cdf0e10cSrcweir 		m_aDataTypeLB	( this, SVX_RES( LB_DATATYPE ) ),
2519*cdf0e10cSrcweir 		m_aRequiredCB	( this, SVX_RES( CB_REQUIRED ) ),
2520*cdf0e10cSrcweir 		m_aRequiredBtn	( this, SVX_RES( PB_REQUIRED ) ),
2521*cdf0e10cSrcweir 		m_aRelevantCB	( this, SVX_RES( CB_RELEVANT ) ),
2522*cdf0e10cSrcweir 		m_aRelevantBtn	( this, SVX_RES( PB_RELEVANT ) ),
2523*cdf0e10cSrcweir 		m_aConstraintCB	( this, SVX_RES( CB_CONSTRAINT ) ),
2524*cdf0e10cSrcweir 		m_aConstraintBtn( this, SVX_RES( PB_CONSTRAINT ) ),
2525*cdf0e10cSrcweir 		m_aReadonlyCB	( this, SVX_RES( CB_READONLY ) ),
2526*cdf0e10cSrcweir 		m_aReadonlyBtn	( this, SVX_RES( PB_READONLY ) ),
2527*cdf0e10cSrcweir 		m_aCalculateCB	( this, SVX_RES( CB_CALCULATE ) ),
2528*cdf0e10cSrcweir 		m_aCalculateBtn	( this, SVX_RES( PB_CALCULATE ) ),
2529*cdf0e10cSrcweir 		m_aButtonsFL	( this, SVX_RES( FL_DATANAV_BTN ) ),
2530*cdf0e10cSrcweir 		m_aOKBtn		( this, SVX_RES( BTN_DATANAV_OK ) ),
2531*cdf0e10cSrcweir 		m_aEscBtn		( this, SVX_RES( BTN_DATANAV_ESC ) ),
2532*cdf0e10cSrcweir 		m_aHelpBtn		( this, SVX_RES( BTN_DATANAV_HELP ) ),
2533*cdf0e10cSrcweir 
2534*cdf0e10cSrcweir 		m_xUIHelper		( _rUIHelper ),
2535*cdf0e10cSrcweir 		m_pItemNode		( _pNode ),
2536*cdf0e10cSrcweir 		m_eItemType		( DITNone ),
2537*cdf0e10cSrcweir 		m_sFL_Element	( SVX_RES( STR_FIXEDLINE_ELEMENT ) ),
2538*cdf0e10cSrcweir 		m_sFL_Attribute	( SVX_RES( STR_FIXEDLINE_ATTRIBUTE ) ),
2539*cdf0e10cSrcweir         m_sFL_Binding   ( SVX_RES( STR_FIXEDLINE_BINDING ) ),
2540*cdf0e10cSrcweir         m_sFT_BindingExp( SVX_RES( STR_FIXEDTEXT_BINDING ) )
2541*cdf0e10cSrcweir 
2542*cdf0e10cSrcweir 	{
2543*cdf0e10cSrcweir 		FreeResource();
2544*cdf0e10cSrcweir         m_aDataTypeLB.SetDropDownLineCount( 10 );
2545*cdf0e10cSrcweir 
2546*cdf0e10cSrcweir         InitDialog();
2547*cdf0e10cSrcweir 		InitFromNode();
2548*cdf0e10cSrcweir 		InitDataTypeBox();
2549*cdf0e10cSrcweir 		CheckHdl( NULL );
2550*cdf0e10cSrcweir 	}
2551*cdf0e10cSrcweir 
2552*cdf0e10cSrcweir 	//------------------------------------------------------------------------
2553*cdf0e10cSrcweir 	AddDataItemDialog::~AddDataItemDialog()
2554*cdf0e10cSrcweir 	{
2555*cdf0e10cSrcweir 		if ( m_xTempBinding.is() )
2556*cdf0e10cSrcweir 		{
2557*cdf0e10cSrcweir 			Reference< css::xforms::XModel > xModel( m_xUIHelper, UNO_QUERY );
2558*cdf0e10cSrcweir 			if ( xModel.is() )
2559*cdf0e10cSrcweir 			{
2560*cdf0e10cSrcweir 				try
2561*cdf0e10cSrcweir 				{
2562*cdf0e10cSrcweir 					Reference < XSet > xBindings = xModel->getBindings();
2563*cdf0e10cSrcweir 					if ( xBindings.is() )
2564*cdf0e10cSrcweir 						xBindings->remove( makeAny( m_xTempBinding ) );
2565*cdf0e10cSrcweir 				}
2566*cdf0e10cSrcweir 				catch ( Exception& )
2567*cdf0e10cSrcweir 				{
2568*cdf0e10cSrcweir 					DBG_ERRORFILE( "AddDataItemDialog::Dtor(): exception caught" );
2569*cdf0e10cSrcweir 				}
2570*cdf0e10cSrcweir 			}
2571*cdf0e10cSrcweir 		}
2572*cdf0e10cSrcweir         if( m_xUIHelper.is()  &&  m_xBinding.is() )
2573*cdf0e10cSrcweir         {
2574*cdf0e10cSrcweir             // remove binding, if it does not convey 'useful' information
2575*cdf0e10cSrcweir             m_xUIHelper->removeBindingIfUseless( m_xBinding );
2576*cdf0e10cSrcweir         }
2577*cdf0e10cSrcweir 	}
2578*cdf0e10cSrcweir 
2579*cdf0e10cSrcweir 	//------------------------------------------------------------------------
2580*cdf0e10cSrcweir 	IMPL_LINK( AddDataItemDialog, CheckHdl, CheckBox *, pBox )
2581*cdf0e10cSrcweir 	{
2582*cdf0e10cSrcweir 		// Condition buttons are only enable if their check box is checked
2583*cdf0e10cSrcweir 		m_aReadonlyBtn.Enable( m_aReadonlyCB.IsChecked() );
2584*cdf0e10cSrcweir 		m_aRequiredBtn.Enable( m_aRequiredCB.IsChecked() );
2585*cdf0e10cSrcweir 		m_aRelevantBtn.Enable( m_aRelevantCB.IsChecked() );
2586*cdf0e10cSrcweir 		m_aConstraintBtn.Enable( m_aConstraintCB.IsChecked() );
2587*cdf0e10cSrcweir 		m_aCalculateBtn.Enable( m_aCalculateCB.IsChecked() );
2588*cdf0e10cSrcweir 
2589*cdf0e10cSrcweir 		if ( pBox && m_xTempBinding.is() )
2590*cdf0e10cSrcweir 		{
2591*cdf0e10cSrcweir 			::rtl::OUString sTemp, sPropName;
2592*cdf0e10cSrcweir 			if ( &m_aRequiredCB == pBox )
2593*cdf0e10cSrcweir 				sPropName = PN_REQUIRED_EXPR;
2594*cdf0e10cSrcweir 			else if ( &m_aRelevantCB == pBox )
2595*cdf0e10cSrcweir 				sPropName = PN_RELEVANT_EXPR;
2596*cdf0e10cSrcweir 			else if ( &m_aConstraintCB == pBox )
2597*cdf0e10cSrcweir 				sPropName = PN_CONSTRAINT_EXPR;
2598*cdf0e10cSrcweir 			else if ( &m_aReadonlyCB == pBox )
2599*cdf0e10cSrcweir 				sPropName = PN_READONLY_EXPR;
2600*cdf0e10cSrcweir 			else if ( &m_aCalculateCB == pBox )
2601*cdf0e10cSrcweir 				sPropName = PN_CALCULATE_EXPR;
2602*cdf0e10cSrcweir 			bool bIsChecked = ( pBox->IsChecked() != sal_False );
2603*cdf0e10cSrcweir 			m_xTempBinding->getPropertyValue( sPropName ) >>= sTemp;
2604*cdf0e10cSrcweir 			if ( bIsChecked && sTemp.getLength() == 0 )
2605*cdf0e10cSrcweir 				sTemp = TRUE_VALUE;
2606*cdf0e10cSrcweir 			else if ( !bIsChecked && sTemp.getLength() > 0 )
2607*cdf0e10cSrcweir 				sTemp = ::rtl::OUString();
2608*cdf0e10cSrcweir 			m_xTempBinding->setPropertyValue( sPropName, makeAny( sTemp ) );
2609*cdf0e10cSrcweir 		}
2610*cdf0e10cSrcweir 
2611*cdf0e10cSrcweir 		return 0;
2612*cdf0e10cSrcweir 	}
2613*cdf0e10cSrcweir 
2614*cdf0e10cSrcweir 	//------------------------------------------------------------------------
2615*cdf0e10cSrcweir 	IMPL_LINK( AddDataItemDialog, ConditionHdl, PushButton *, pBtn )
2616*cdf0e10cSrcweir 	{
2617*cdf0e10cSrcweir 		::rtl::OUString sTemp, sPropName;
2618*cdf0e10cSrcweir 		if ( &m_aDefaultBtn == pBtn )
2619*cdf0e10cSrcweir 			sPropName = PN_BINDING_EXPR;
2620*cdf0e10cSrcweir 		else if ( &m_aRequiredBtn == pBtn )
2621*cdf0e10cSrcweir 			sPropName = PN_REQUIRED_EXPR;
2622*cdf0e10cSrcweir 		else if ( &m_aRelevantBtn == pBtn )
2623*cdf0e10cSrcweir 			sPropName = PN_RELEVANT_EXPR;
2624*cdf0e10cSrcweir 		else if ( &m_aConstraintBtn == pBtn )
2625*cdf0e10cSrcweir 			sPropName = PN_CONSTRAINT_EXPR;
2626*cdf0e10cSrcweir 		else if ( &m_aReadonlyBtn == pBtn )
2627*cdf0e10cSrcweir 			sPropName = PN_READONLY_EXPR;
2628*cdf0e10cSrcweir 		else if ( &m_aCalculateBtn == pBtn )
2629*cdf0e10cSrcweir 			sPropName = PN_CALCULATE_EXPR;
2630*cdf0e10cSrcweir 		AddConditionDialog aDlg( this, sPropName, m_xTempBinding );
2631*cdf0e10cSrcweir 		bool bIsDefBtn = ( &m_aDefaultBtn == pBtn );
2632*cdf0e10cSrcweir 		String sCondition;
2633*cdf0e10cSrcweir 		if ( bIsDefBtn )
2634*cdf0e10cSrcweir 			sCondition = m_aDefaultED.GetText();
2635*cdf0e10cSrcweir 		else
2636*cdf0e10cSrcweir 		{
2637*cdf0e10cSrcweir 			m_xTempBinding->getPropertyValue( sPropName ) >>= sTemp;
2638*cdf0e10cSrcweir 			if ( sTemp.getLength() == 0 )
2639*cdf0e10cSrcweir 				sTemp = TRUE_VALUE;
2640*cdf0e10cSrcweir 			sCondition = sTemp;
2641*cdf0e10cSrcweir 		}
2642*cdf0e10cSrcweir 		aDlg.SetCondition( sCondition );
2643*cdf0e10cSrcweir 
2644*cdf0e10cSrcweir 		if ( aDlg.Execute() == RET_OK )
2645*cdf0e10cSrcweir 		{
2646*cdf0e10cSrcweir 			String sNewCondition = aDlg.GetCondition();
2647*cdf0e10cSrcweir 			if ( bIsDefBtn )
2648*cdf0e10cSrcweir 				m_aDefaultED.SetText( sNewCondition );
2649*cdf0e10cSrcweir 			else
2650*cdf0e10cSrcweir 			{
2651*cdf0e10cSrcweir 
2652*cdf0e10cSrcweir 				m_xTempBinding->setPropertyValue(
2653*cdf0e10cSrcweir 					sPropName, makeAny( ::rtl::OUString( sNewCondition ) ) );
2654*cdf0e10cSrcweir 			}
2655*cdf0e10cSrcweir 		}
2656*cdf0e10cSrcweir 		return 0;
2657*cdf0e10cSrcweir 	}
2658*cdf0e10cSrcweir 
2659*cdf0e10cSrcweir 	void copyPropSet( const Reference< XPropertySet >& xFrom, Reference< XPropertySet >& xTo )
2660*cdf0e10cSrcweir 	{
2661*cdf0e10cSrcweir 	    DBG_ASSERT( xFrom.is(), "copyPropSet(): no source" );
2662*cdf0e10cSrcweir 	    DBG_ASSERT( xTo.is(), "copyPropSet(): no target" );
2663*cdf0e10cSrcweir 
2664*cdf0e10cSrcweir 		try
2665*cdf0e10cSrcweir 		{
2666*cdf0e10cSrcweir 		    // get property names & infos, and iterate over target properties
2667*cdf0e10cSrcweir 		    Sequence< Property > aProperties = xTo->getPropertySetInfo()->getProperties();
2668*cdf0e10cSrcweir 		    sal_Int32 nProperties = aProperties.getLength();
2669*cdf0e10cSrcweir 		    const Property* pProperties = aProperties.getConstArray();
2670*cdf0e10cSrcweir 		    Reference< XPropertySetInfo > xFromInfo = xFrom->getPropertySetInfo();
2671*cdf0e10cSrcweir 		    for ( sal_Int32 i = 0; i < nProperties; ++i )
2672*cdf0e10cSrcweir 		    {
2673*cdf0e10cSrcweir 		        const ::rtl::OUString& rName = pProperties[i].Name;
2674*cdf0e10cSrcweir 
2675*cdf0e10cSrcweir 		        // if both set have the property, copy the value
2676*cdf0e10cSrcweir 		        // (catch and ignore exceptions, if any)
2677*cdf0e10cSrcweir 		        if ( xFromInfo->hasPropertyByName( rName ) )
2678*cdf0e10cSrcweir 		        {
2679*cdf0e10cSrcweir 					// don't set readonly properties
2680*cdf0e10cSrcweir 		            Property aProperty = xFromInfo->getPropertyByName( rName );
2681*cdf0e10cSrcweir 		            if ( ( aProperty.Attributes & PropertyAttribute::READONLY ) == 0 )
2682*cdf0e10cSrcweir 		                xTo->setPropertyValue(rName, xFrom->getPropertyValue( rName ));
2683*cdf0e10cSrcweir 		        }
2684*cdf0e10cSrcweir 		        // else: no property? then ignore.
2685*cdf0e10cSrcweir 		    }
2686*cdf0e10cSrcweir 		}
2687*cdf0e10cSrcweir 		catch ( Exception& )
2688*cdf0e10cSrcweir 		{
2689*cdf0e10cSrcweir             DBG_ERRORFILE( "copyPropSet(): exception caught" );
2690*cdf0e10cSrcweir 		}
2691*cdf0e10cSrcweir 	}
2692*cdf0e10cSrcweir 
2693*cdf0e10cSrcweir 	//------------------------------------------------------------------------
2694*cdf0e10cSrcweir 	IMPL_LINK( AddDataItemDialog, OKHdl, OKButton *, EMPTYARG )
2695*cdf0e10cSrcweir 	{
2696*cdf0e10cSrcweir         bool bIsHandleBinding = ( DITBinding == m_eItemType );
2697*cdf0e10cSrcweir         bool bIsHandleText = ( DITText == m_eItemType );
2698*cdf0e10cSrcweir 		::rtl::OUString sNewName( m_aNameED.GetText() );
2699*cdf0e10cSrcweir 
2700*cdf0e10cSrcweir         if ( ( !bIsHandleBinding && !bIsHandleText && !m_xUIHelper->isValidXMLName( sNewName ) ) ||
2701*cdf0e10cSrcweir 			 ( bIsHandleBinding && sNewName.getLength() == 0 ) )
2702*cdf0e10cSrcweir 		{
2703*cdf0e10cSrcweir 			// Error and don't close the dialog
2704*cdf0e10cSrcweir 			ErrorBox aErrBox( this, SVX_RES( RID_ERR_INVALID_XMLNAME ) );
2705*cdf0e10cSrcweir 			String sMessText = aErrBox.GetMessText();
2706*cdf0e10cSrcweir 			sMessText.SearchAndReplace( MSG_VARIABLE, sNewName );
2707*cdf0e10cSrcweir 			aErrBox.SetMessText( sMessText );
2708*cdf0e10cSrcweir 			aErrBox.Execute();
2709*cdf0e10cSrcweir 			return 0;
2710*cdf0e10cSrcweir 		}
2711*cdf0e10cSrcweir 
2712*cdf0e10cSrcweir         ::rtl::OUString sDataType( m_aDataTypeLB.GetSelectEntry() );
2713*cdf0e10cSrcweir         m_xTempBinding->setPropertyValue( PN_BINDING_TYPE, makeAny( sDataType ) );
2714*cdf0e10cSrcweir 
2715*cdf0e10cSrcweir         if ( bIsHandleBinding )
2716*cdf0e10cSrcweir 		{
2717*cdf0e10cSrcweir 			// copy properties from temp binding to original binding
2718*cdf0e10cSrcweir             copyPropSet( m_xTempBinding, m_pItemNode->m_xPropSet );
2719*cdf0e10cSrcweir 			try
2720*cdf0e10cSrcweir 			{
2721*cdf0e10cSrcweir                 ::rtl::OUString sValue = m_aNameED.GetText();
2722*cdf0e10cSrcweir 				m_pItemNode->m_xPropSet->setPropertyValue( PN_BINDING_ID, makeAny( sValue ) );
2723*cdf0e10cSrcweir 				sValue = m_aDefaultED.GetText();
2724*cdf0e10cSrcweir 				m_pItemNode->m_xPropSet->setPropertyValue( PN_BINDING_EXPR, makeAny( sValue ) );
2725*cdf0e10cSrcweir 			}
2726*cdf0e10cSrcweir 			catch ( Exception& )
2727*cdf0e10cSrcweir 			{
2728*cdf0e10cSrcweir                 DBG_ERRORFILE( "AddDataDialog::OKHdl(): exception caught" );
2729*cdf0e10cSrcweir 			}
2730*cdf0e10cSrcweir 		}
2731*cdf0e10cSrcweir 		else
2732*cdf0e10cSrcweir 		{
2733*cdf0e10cSrcweir 			// copy properties from temp binding to original binding
2734*cdf0e10cSrcweir 			copyPropSet( m_xTempBinding, m_xBinding );
2735*cdf0e10cSrcweir 			try
2736*cdf0e10cSrcweir 			{
2737*cdf0e10cSrcweir                 if ( bIsHandleText )
2738*cdf0e10cSrcweir                     m_xUIHelper->setNodeValue( m_pItemNode->m_xNode, m_aDefaultED.GetText() );
2739*cdf0e10cSrcweir                 else
2740*cdf0e10cSrcweir                 {
2741*cdf0e10cSrcweir                     Reference< css::xml::dom::XNode > xNewNode =
2742*cdf0e10cSrcweir                         m_xUIHelper->renameNode( m_pItemNode->m_xNode, m_aNameED.GetText() );
2743*cdf0e10cSrcweir                     m_xUIHelper->setNodeValue( xNewNode, m_aDefaultED.GetText() );
2744*cdf0e10cSrcweir                     m_pItemNode->m_xNode = xNewNode;
2745*cdf0e10cSrcweir                 }
2746*cdf0e10cSrcweir 			}
2747*cdf0e10cSrcweir 			catch ( Exception& )
2748*cdf0e10cSrcweir 			{
2749*cdf0e10cSrcweir                 DBG_ERRORFILE( "AddDataDialog::OKHdl(): exception caught" );
2750*cdf0e10cSrcweir 			}
2751*cdf0e10cSrcweir 		}
2752*cdf0e10cSrcweir 		// then close the dialog
2753*cdf0e10cSrcweir 		EndDialog( RET_OK );
2754*cdf0e10cSrcweir 		return 0;
2755*cdf0e10cSrcweir 	}
2756*cdf0e10cSrcweir 
2757*cdf0e10cSrcweir 	//------------------------------------------------------------------------
2758*cdf0e10cSrcweir 	void AddDataItemDialog::InitDialog()
2759*cdf0e10cSrcweir 	{
2760*cdf0e10cSrcweir 		// set handler
2761*cdf0e10cSrcweir 		Link aLink = LINK( this, AddDataItemDialog, CheckHdl );
2762*cdf0e10cSrcweir 		m_aRequiredCB.SetClickHdl( aLink );
2763*cdf0e10cSrcweir 		m_aRelevantCB.SetClickHdl( aLink );
2764*cdf0e10cSrcweir 		m_aConstraintCB.SetClickHdl( aLink );
2765*cdf0e10cSrcweir 		m_aReadonlyCB.SetClickHdl( aLink );
2766*cdf0e10cSrcweir 		m_aCalculateCB.SetClickHdl( aLink );
2767*cdf0e10cSrcweir 
2768*cdf0e10cSrcweir 		aLink = LINK( this, AddDataItemDialog, ConditionHdl );
2769*cdf0e10cSrcweir 		m_aDefaultBtn.SetClickHdl( aLink );
2770*cdf0e10cSrcweir 		m_aRequiredBtn.SetClickHdl( aLink );
2771*cdf0e10cSrcweir 		m_aRelevantBtn.SetClickHdl( aLink );
2772*cdf0e10cSrcweir 		m_aConstraintBtn.SetClickHdl( aLink );
2773*cdf0e10cSrcweir 		m_aReadonlyBtn.SetClickHdl( aLink );
2774*cdf0e10cSrcweir 		m_aCalculateBtn.SetClickHdl( aLink );
2775*cdf0e10cSrcweir 
2776*cdf0e10cSrcweir 		m_aOKBtn.SetClickHdl( LINK( this, AddDataItemDialog, OKHdl ) );
2777*cdf0e10cSrcweir 	}
2778*cdf0e10cSrcweir 
2779*cdf0e10cSrcweir 	//------------------------------------------------------------------------
2780*cdf0e10cSrcweir 	void AddDataItemDialog::InitFromNode()
2781*cdf0e10cSrcweir 	{
2782*cdf0e10cSrcweir 		if ( m_pItemNode )
2783*cdf0e10cSrcweir 		{
2784*cdf0e10cSrcweir 			if ( m_pItemNode->m_xNode.is() )
2785*cdf0e10cSrcweir 			{
2786*cdf0e10cSrcweir 				try
2787*cdf0e10cSrcweir 				{
2788*cdf0e10cSrcweir 					// detect type of the node
2789*cdf0e10cSrcweir 					css::xml::dom::NodeType eChildType = m_pItemNode->m_xNode->getNodeType();
2790*cdf0e10cSrcweir 					switch ( eChildType )
2791*cdf0e10cSrcweir 					{
2792*cdf0e10cSrcweir 						case css::xml::dom::NodeType_ATTRIBUTE_NODE:
2793*cdf0e10cSrcweir 							m_eItemType = DITAttribute;
2794*cdf0e10cSrcweir 							break;
2795*cdf0e10cSrcweir 						case css::xml::dom::NodeType_ELEMENT_NODE:
2796*cdf0e10cSrcweir 							m_eItemType = DITElement;
2797*cdf0e10cSrcweir 							break;
2798*cdf0e10cSrcweir 						case css::xml::dom::NodeType_TEXT_NODE:
2799*cdf0e10cSrcweir 							m_eItemType = DITText;
2800*cdf0e10cSrcweir 							break;
2801*cdf0e10cSrcweir                         default:
2802*cdf0e10cSrcweir                             DBG_ERROR( "AddDataItemDialog::InitFronNode: cannot handle this node type!" );
2803*cdf0e10cSrcweir                             break;
2804*cdf0e10cSrcweir 					}
2805*cdf0e10cSrcweir 
2806*cdf0e10cSrcweir 					/** Get binding of the node and clone it
2807*cdf0e10cSrcweir 						Then use this temporary binding in the dialog.
2808*cdf0e10cSrcweir 						When the user click OK the temporary binding will be copied
2809*cdf0e10cSrcweir 						into the original binding.
2810*cdf0e10cSrcweir 					 */
2811*cdf0e10cSrcweir 
2812*cdf0e10cSrcweir 					Reference< css::xml::dom::XNode > xNode = m_pItemNode->m_xNode;
2813*cdf0e10cSrcweir                     m_xBinding = m_xUIHelper->getBindingForNode( xNode, sal_True );
2814*cdf0e10cSrcweir                     if ( m_xBinding.is() )
2815*cdf0e10cSrcweir                     {
2816*cdf0e10cSrcweir                         Reference< css::xforms::XModel > xModel( m_xUIHelper, UNO_QUERY );
2817*cdf0e10cSrcweir                         if ( xModel.is() )
2818*cdf0e10cSrcweir                         {
2819*cdf0e10cSrcweir                             m_xTempBinding = m_xUIHelper->cloneBindingAsGhost( m_xBinding );
2820*cdf0e10cSrcweir                             Reference < XSet > xBindings = xModel->getBindings();
2821*cdf0e10cSrcweir                             if ( xBindings.is() )
2822*cdf0e10cSrcweir                                 xBindings->insert( makeAny( m_xTempBinding ) );
2823*cdf0e10cSrcweir                         }
2824*cdf0e10cSrcweir                     }
2825*cdf0e10cSrcweir 
2826*cdf0e10cSrcweir                     if ( m_eItemType != DITText )
2827*cdf0e10cSrcweir                     {
2828*cdf0e10cSrcweir                         ::rtl::OUString sName( m_xUIHelper->getNodeName( m_pItemNode->m_xNode ) );
2829*cdf0e10cSrcweir                         m_aNameED.SetText( sName );
2830*cdf0e10cSrcweir                     }
2831*cdf0e10cSrcweir 					m_aDefaultED.SetText( m_pItemNode->m_xNode->getNodeValue() );
2832*cdf0e10cSrcweir 				}
2833*cdf0e10cSrcweir 				catch( Exception& )
2834*cdf0e10cSrcweir 				{
2835*cdf0e10cSrcweir 					DBG_ERRORFILE( "AddDataItemDialog::InitFromNode(): exception caught" );
2836*cdf0e10cSrcweir 				}
2837*cdf0e10cSrcweir 			}
2838*cdf0e10cSrcweir 			else if ( m_pItemNode->m_xPropSet.is() )
2839*cdf0e10cSrcweir 			{
2840*cdf0e10cSrcweir 				m_eItemType = DITBinding;
2841*cdf0e10cSrcweir 				Reference< css::xforms::XModel > xModel( m_xUIHelper, UNO_QUERY );
2842*cdf0e10cSrcweir 				if ( xModel.is() )
2843*cdf0e10cSrcweir                 {
2844*cdf0e10cSrcweir 					try
2845*cdf0e10cSrcweir 					{
2846*cdf0e10cSrcweir 						m_xTempBinding = m_xUIHelper->cloneBindingAsGhost( m_pItemNode->m_xPropSet );
2847*cdf0e10cSrcweir 						Reference < XSet > xBindings = xModel->getBindings();
2848*cdf0e10cSrcweir 						if ( xBindings.is() )
2849*cdf0e10cSrcweir 							xBindings->insert( makeAny( m_xTempBinding ) );
2850*cdf0e10cSrcweir 					}
2851*cdf0e10cSrcweir 					catch ( Exception& )
2852*cdf0e10cSrcweir 					{
2853*cdf0e10cSrcweir                         DBG_ERRORFILE( "AddDataItemDialog::InitFromNode(): exception caught" );
2854*cdf0e10cSrcweir 					}
2855*cdf0e10cSrcweir                 }
2856*cdf0e10cSrcweir 				rtl::OUString sTemp;
2857*cdf0e10cSrcweir 				try
2858*cdf0e10cSrcweir 				{
2859*cdf0e10cSrcweir 					Reference< XPropertySetInfo > xInfo = m_pItemNode->m_xPropSet->getPropertySetInfo();
2860*cdf0e10cSrcweir 					if ( xInfo->hasPropertyByName( PN_BINDING_ID ) )
2861*cdf0e10cSrcweir 					{
2862*cdf0e10cSrcweir 						m_pItemNode->m_xPropSet->getPropertyValue( PN_BINDING_ID ) >>= sTemp;
2863*cdf0e10cSrcweir 						m_aNameED.SetText( sTemp );
2864*cdf0e10cSrcweir 						m_pItemNode->m_xPropSet->getPropertyValue( PN_BINDING_EXPR ) >>= sTemp;
2865*cdf0e10cSrcweir 						m_aDefaultED.SetText( sTemp );
2866*cdf0e10cSrcweir 					}
2867*cdf0e10cSrcweir 					else if ( xInfo->hasPropertyByName( PN_SUBMISSION_BIND ) )
2868*cdf0e10cSrcweir 					{
2869*cdf0e10cSrcweir 						m_pItemNode->m_xPropSet->getPropertyValue( PN_SUBMISSION_ID ) >>= sTemp;
2870*cdf0e10cSrcweir 						m_aNameED.SetText( sTemp );
2871*cdf0e10cSrcweir 					}
2872*cdf0e10cSrcweir 				}
2873*cdf0e10cSrcweir 				catch( Exception& )
2874*cdf0e10cSrcweir 				{
2875*cdf0e10cSrcweir 					DBG_ERRORFILE( "AddDataItemDialog::InitFromNode(): exception caught" );
2876*cdf0e10cSrcweir 				}
2877*cdf0e10cSrcweir 
2878*cdf0e10cSrcweir 				Size a3and1Sz = LogicToPixel( Size( 3, 1 ), MAP_APPFONT );
2879*cdf0e10cSrcweir 				Size aNewSz = m_aDefaultED.GetSizePixel();
2880*cdf0e10cSrcweir 				Point aNewPnt = m_aDefaultED.GetPosPixel();
2881*cdf0e10cSrcweir 				aNewPnt.Y() += a3and1Sz.Height();
2882*cdf0e10cSrcweir 				aNewSz.Width() -= ( m_aDefaultBtn.GetSizePixel().Width() + a3and1Sz.Width() );
2883*cdf0e10cSrcweir 				m_aDefaultED.SetPosSizePixel( aNewPnt, aNewSz );
2884*cdf0e10cSrcweir 				m_aDefaultBtn.Show();
2885*cdf0e10cSrcweir 			}
2886*cdf0e10cSrcweir 
2887*cdf0e10cSrcweir             if ( m_xTempBinding.is() )
2888*cdf0e10cSrcweir 			{
2889*cdf0e10cSrcweir 				::rtl::OUString sTemp;
2890*cdf0e10cSrcweir 				try
2891*cdf0e10cSrcweir 				{
2892*cdf0e10cSrcweir 					if ( ( m_xTempBinding->getPropertyValue( PN_REQUIRED_EXPR ) >>= sTemp )
2893*cdf0e10cSrcweir 	    				&& sTemp.getLength() > 0 )
2894*cdf0e10cSrcweir 						m_aRequiredCB.Check( sal_True );
2895*cdf0e10cSrcweir 					if ( ( m_xTempBinding->getPropertyValue( PN_RELEVANT_EXPR ) >>= sTemp )
2896*cdf0e10cSrcweir 						&& sTemp.getLength() > 0 )
2897*cdf0e10cSrcweir 						m_aRelevantCB.Check( sal_True );
2898*cdf0e10cSrcweir 					if ( ( m_xTempBinding->getPropertyValue( PN_CONSTRAINT_EXPR ) >>= sTemp )
2899*cdf0e10cSrcweir 						&& sTemp.getLength() > 0 )
2900*cdf0e10cSrcweir 						m_aConstraintCB.Check( sal_True );
2901*cdf0e10cSrcweir 					if ( ( m_xTempBinding->getPropertyValue( PN_READONLY_EXPR ) >>= sTemp )
2902*cdf0e10cSrcweir 						&& sTemp.getLength() > 0 )
2903*cdf0e10cSrcweir 						m_aReadonlyCB.Check( sal_True );
2904*cdf0e10cSrcweir 					if ( ( m_xTempBinding->getPropertyValue( PN_CALCULATE_EXPR ) >>= sTemp )
2905*cdf0e10cSrcweir 						&& sTemp.getLength() > 0 )
2906*cdf0e10cSrcweir 						m_aCalculateCB.Check( sal_True );
2907*cdf0e10cSrcweir 				}
2908*cdf0e10cSrcweir 				catch ( Exception& )
2909*cdf0e10cSrcweir 				{
2910*cdf0e10cSrcweir                     DBG_ERRORFILE( "AddDataItemDialog::InitFromNode(): exception caught" );
2911*cdf0e10cSrcweir 				}
2912*cdf0e10cSrcweir 			}
2913*cdf0e10cSrcweir 		}
2914*cdf0e10cSrcweir 
2915*cdf0e10cSrcweir         if ( DITText == m_eItemType )
2916*cdf0e10cSrcweir         {
2917*cdf0e10cSrcweir             long nDelta = m_aButtonsFL.GetPosPixel().Y() - m_aSettingsFL.GetPosPixel().Y();
2918*cdf0e10cSrcweir             size_t i = 0;
2919*cdf0e10cSrcweir             Window* pWinsForHide[] =
2920*cdf0e10cSrcweir             {
2921*cdf0e10cSrcweir                 &m_aSettingsFL, &m_aDataTypeFT, &m_aDataTypeLB, &m_aRequiredCB,
2922*cdf0e10cSrcweir                 &m_aRequiredBtn, &m_aRelevantCB, &m_aRelevantBtn, &m_aConstraintCB,
2923*cdf0e10cSrcweir                 &m_aConstraintBtn, &m_aReadonlyCB, &m_aReadonlyBtn, &m_aCalculateCB,
2924*cdf0e10cSrcweir                 &m_aCalculateBtn
2925*cdf0e10cSrcweir             };
2926*cdf0e10cSrcweir             Window** pCurrent = pWinsForHide;
2927*cdf0e10cSrcweir             for ( ; i < sizeof( pWinsForHide ) / sizeof( pWinsForHide[ 0 ] ); ++i, ++pCurrent )
2928*cdf0e10cSrcweir                 (*pCurrent)->Hide();
2929*cdf0e10cSrcweir 
2930*cdf0e10cSrcweir             Window* pWinsForMove[] =
2931*cdf0e10cSrcweir             {
2932*cdf0e10cSrcweir                 &m_aButtonsFL, &m_aOKBtn, &m_aEscBtn, &m_aHelpBtn
2933*cdf0e10cSrcweir             };
2934*cdf0e10cSrcweir             pCurrent = pWinsForMove;
2935*cdf0e10cSrcweir             for ( i = 0; i < sizeof( pWinsForMove ) / sizeof( pWinsForMove[ 0 ] ); ++i, ++pCurrent )
2936*cdf0e10cSrcweir             {
2937*cdf0e10cSrcweir                 Point aNewPos = (*pCurrent)->GetPosPixel();
2938*cdf0e10cSrcweir                 aNewPos.Y() -= nDelta;
2939*cdf0e10cSrcweir                 (*pCurrent)->SetPosPixel( aNewPos );
2940*cdf0e10cSrcweir             }
2941*cdf0e10cSrcweir             Size aNewWinSz = GetSizePixel();
2942*cdf0e10cSrcweir             aNewWinSz.Height() -= nDelta;
2943*cdf0e10cSrcweir             SetSizePixel( aNewWinSz );
2944*cdf0e10cSrcweir 
2945*cdf0e10cSrcweir             m_aNameFT.Disable();
2946*cdf0e10cSrcweir             m_aNameED.Disable();
2947*cdf0e10cSrcweir         }
2948*cdf0e10cSrcweir 	}
2949*cdf0e10cSrcweir 
2950*cdf0e10cSrcweir 	//------------------------------------------------------------------------
2951*cdf0e10cSrcweir 	void AddDataItemDialog::InitDataTypeBox()
2952*cdf0e10cSrcweir 	{
2953*cdf0e10cSrcweir         if ( m_eItemType != DITText )
2954*cdf0e10cSrcweir         {
2955*cdf0e10cSrcweir             Reference< css::xforms::XModel > xModel( m_xUIHelper, UNO_QUERY );
2956*cdf0e10cSrcweir             if ( xModel.is() )
2957*cdf0e10cSrcweir             {
2958*cdf0e10cSrcweir                 try
2959*cdf0e10cSrcweir                 {
2960*cdf0e10cSrcweir                     Reference< css::xforms::XDataTypeRepository > xDataTypes =
2961*cdf0e10cSrcweir                         xModel->getDataTypeRepository();
2962*cdf0e10cSrcweir                     if ( xDataTypes.is() )
2963*cdf0e10cSrcweir                     {
2964*cdf0e10cSrcweir                         Sequence< ::rtl::OUString > aNameList = xDataTypes->getElementNames();
2965*cdf0e10cSrcweir                         sal_Int32 i, nCount = aNameList.getLength();
2966*cdf0e10cSrcweir                         ::rtl::OUString* pNames = aNameList.getArray();
2967*cdf0e10cSrcweir                         for ( i = 0; i < nCount; ++i )
2968*cdf0e10cSrcweir                             m_aDataTypeLB.InsertEntry( pNames[i] );
2969*cdf0e10cSrcweir                     }
2970*cdf0e10cSrcweir 
2971*cdf0e10cSrcweir                     if ( m_xTempBinding.is() )
2972*cdf0e10cSrcweir                     {
2973*cdf0e10cSrcweir                         rtl::OUString sTemp;
2974*cdf0e10cSrcweir                         if ( m_xTempBinding->getPropertyValue( PN_BINDING_TYPE ) >>= sTemp )
2975*cdf0e10cSrcweir                         {
2976*cdf0e10cSrcweir                             sal_uInt16 nPos = m_aDataTypeLB.GetEntryPos( String( sTemp ) );
2977*cdf0e10cSrcweir                             if ( LISTBOX_ENTRY_NOTFOUND == nPos )
2978*cdf0e10cSrcweir                                 nPos = m_aDataTypeLB.InsertEntry( sTemp );
2979*cdf0e10cSrcweir                             m_aDataTypeLB.SelectEntryPos( nPos );
2980*cdf0e10cSrcweir                         }
2981*cdf0e10cSrcweir                     }
2982*cdf0e10cSrcweir                 }
2983*cdf0e10cSrcweir                 catch ( Exception& )
2984*cdf0e10cSrcweir                 {
2985*cdf0e10cSrcweir                     DBG_ERRORFILE( "AddDataItemDialog::InitDataTypeBox(): exception caught" );
2986*cdf0e10cSrcweir                 }
2987*cdf0e10cSrcweir             }
2988*cdf0e10cSrcweir         }
2989*cdf0e10cSrcweir 	}
2990*cdf0e10cSrcweir 
2991*cdf0e10cSrcweir 	void AddDataItemDialog::InitText( DataItemType _eType )
2992*cdf0e10cSrcweir 	{
2993*cdf0e10cSrcweir 		String sText;
2994*cdf0e10cSrcweir 
2995*cdf0e10cSrcweir 		switch ( _eType )
2996*cdf0e10cSrcweir 		{
2997*cdf0e10cSrcweir 			case DITAttribute :
2998*cdf0e10cSrcweir 			{
2999*cdf0e10cSrcweir 				sText = m_sFL_Attribute;
3000*cdf0e10cSrcweir 				break;
3001*cdf0e10cSrcweir 			}
3002*cdf0e10cSrcweir 
3003*cdf0e10cSrcweir 			case DITBinding :
3004*cdf0e10cSrcweir 			{
3005*cdf0e10cSrcweir 				sText = m_sFL_Binding;
3006*cdf0e10cSrcweir                 m_aDefaultFT.SetText( m_sFT_BindingExp );
3007*cdf0e10cSrcweir 				break;
3008*cdf0e10cSrcweir 			}
3009*cdf0e10cSrcweir 
3010*cdf0e10cSrcweir 			default:
3011*cdf0e10cSrcweir 			{
3012*cdf0e10cSrcweir 				sText = m_sFL_Element;
3013*cdf0e10cSrcweir 			}
3014*cdf0e10cSrcweir 		}
3015*cdf0e10cSrcweir 
3016*cdf0e10cSrcweir 		m_aItemFL.SetText( sText );
3017*cdf0e10cSrcweir 	}
3018*cdf0e10cSrcweir 
3019*cdf0e10cSrcweir 	//========================================================================
3020*cdf0e10cSrcweir 	// class AddConditionDialog
3021*cdf0e10cSrcweir 	//========================================================================
3022*cdf0e10cSrcweir 
3023*cdf0e10cSrcweir 	AddConditionDialog::AddConditionDialog(
3024*cdf0e10cSrcweir 		Window* pParent, const ::rtl::OUString& _rPropertyName,
3025*cdf0e10cSrcweir 		const Reference< XPropertySet >& _rPropSet ) :
3026*cdf0e10cSrcweir 
3027*cdf0e10cSrcweir 		ModalDialog( pParent, SVX_RES( RID_SVXDLG_ADD_CONDITION ) ),
3028*cdf0e10cSrcweir 
3029*cdf0e10cSrcweir 		m_aConditionFT		( this, SVX_RES( FT_CONDITION ) ),
3030*cdf0e10cSrcweir 		m_aConditionED		( this, SVX_RES( ED_CONDITION ) ),
3031*cdf0e10cSrcweir 		m_aResultFT			( this, SVX_RES( FT_RESULT ) ),
3032*cdf0e10cSrcweir 		m_aResultWin		( this, SVX_RES( FT_RESULT_PREVIEW ) ),
3033*cdf0e10cSrcweir 		m_aEditNamespacesBtn( this, SVX_RES( PB_EDIT_NAMESPACES ) ),
3034*cdf0e10cSrcweir 		m_aButtonsFL		( this, SVX_RES( FL_DATANAV_BTN ) ),
3035*cdf0e10cSrcweir 		m_aOKBtn			( this, SVX_RES( BTN_DATANAV_OK ) ),
3036*cdf0e10cSrcweir 		m_aEscBtn			( this, SVX_RES( BTN_DATANAV_ESC ) ),
3037*cdf0e10cSrcweir 		m_aHelpBtn			( this, SVX_RES( BTN_DATANAV_HELP ) ),
3038*cdf0e10cSrcweir 
3039*cdf0e10cSrcweir 		m_sPropertyName		( _rPropertyName ),
3040*cdf0e10cSrcweir 		m_xBinding			( _rPropSet )
3041*cdf0e10cSrcweir 
3042*cdf0e10cSrcweir 	{
3043*cdf0e10cSrcweir 		FreeResource();
3044*cdf0e10cSrcweir 
3045*cdf0e10cSrcweir 		DBG_ASSERT( m_xBinding.is(), "AddConditionDialog::Ctor(): no Binding" );
3046*cdf0e10cSrcweir 
3047*cdf0e10cSrcweir 		m_aResultWin.SetBackground( m_aConditionED.GetBackground() );
3048*cdf0e10cSrcweir 		m_aConditionED.SetModifyHdl( LINK( this, AddConditionDialog, ModifyHdl ) );
3049*cdf0e10cSrcweir 		m_aEditNamespacesBtn.SetClickHdl( LINK( this, AddConditionDialog, EditHdl ) );
3050*cdf0e10cSrcweir 		m_aOKBtn.SetClickHdl( LINK( this, AddConditionDialog, OKHdl ) );
3051*cdf0e10cSrcweir 		m_aResultTimer.SetTimeout( 500 );
3052*cdf0e10cSrcweir 		m_aResultTimer.SetTimeoutHdl( LINK( this, AddConditionDialog, ResultHdl ) );
3053*cdf0e10cSrcweir 
3054*cdf0e10cSrcweir 		if ( m_sPropertyName.getLength() > 0 )
3055*cdf0e10cSrcweir 		{
3056*cdf0e10cSrcweir 			try
3057*cdf0e10cSrcweir 			{
3058*cdf0e10cSrcweir 				rtl::OUString sTemp;
3059*cdf0e10cSrcweir 				if ( ( m_xBinding->getPropertyValue( m_sPropertyName ) >>= sTemp )
3060*cdf0e10cSrcweir 					&& sTemp.getLength() > 0 )
3061*cdf0e10cSrcweir 				{
3062*cdf0e10cSrcweir 					m_aConditionED.SetText( sTemp );
3063*cdf0e10cSrcweir 				}
3064*cdf0e10cSrcweir 				else
3065*cdf0e10cSrcweir 				{
3066*cdf0e10cSrcweir //!					m_xBinding->setPropertyValue( m_sPropertyName, makeAny( TRUE_VALUE ) );
3067*cdf0e10cSrcweir 					m_aConditionED.SetText( TRUE_VALUE );
3068*cdf0e10cSrcweir 				}
3069*cdf0e10cSrcweir 
3070*cdf0e10cSrcweir 				Reference< css::xforms::XModel > xModel;
3071*cdf0e10cSrcweir 				if ( ( m_xBinding->getPropertyValue( PN_BINDING_MODEL ) >>= xModel ) && xModel.is() )
3072*cdf0e10cSrcweir 					m_xUIHelper = Reference< css::xforms::XFormsUIHelper1 >( xModel, UNO_QUERY );
3073*cdf0e10cSrcweir 			}
3074*cdf0e10cSrcweir 			catch ( Exception& )
3075*cdf0e10cSrcweir 			{
3076*cdf0e10cSrcweir 				DBG_ERRORFILE( "AddConditionDialog::Ctor(): exception caught" );
3077*cdf0e10cSrcweir 			}
3078*cdf0e10cSrcweir 		}
3079*cdf0e10cSrcweir 
3080*cdf0e10cSrcweir 		DBG_ASSERT( m_xUIHelper.is(), "AddConditionDialog::Ctor(): no UIHelper" );
3081*cdf0e10cSrcweir 		ResultHdl( &m_aResultTimer );
3082*cdf0e10cSrcweir 	}
3083*cdf0e10cSrcweir 
3084*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3085*cdf0e10cSrcweir 	AddConditionDialog::~AddConditionDialog()
3086*cdf0e10cSrcweir 	{
3087*cdf0e10cSrcweir 	}
3088*cdf0e10cSrcweir 
3089*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3090*cdf0e10cSrcweir 	IMPL_LINK( AddConditionDialog, EditHdl, PushButton *, EMPTYARG )
3091*cdf0e10cSrcweir 	{
3092*cdf0e10cSrcweir 		Reference< XNameContainer > xNameContnr;
3093*cdf0e10cSrcweir 		try
3094*cdf0e10cSrcweir 		{
3095*cdf0e10cSrcweir 			m_xBinding->getPropertyValue( PN_BINDING_NAMESPACES ) >>= xNameContnr;
3096*cdf0e10cSrcweir 		}
3097*cdf0e10cSrcweir 		catch ( Exception& )
3098*cdf0e10cSrcweir 		{
3099*cdf0e10cSrcweir             DBG_ERRORFILE( "AddDataItemDialog::EditHdl(): exception caught" );
3100*cdf0e10cSrcweir 		}
3101*cdf0e10cSrcweir 		NamespaceItemDialog aDlg( this, xNameContnr );
3102*cdf0e10cSrcweir 		aDlg.Execute();
3103*cdf0e10cSrcweir 		try
3104*cdf0e10cSrcweir 		{
3105*cdf0e10cSrcweir 			m_xBinding->setPropertyValue( PN_BINDING_NAMESPACES, makeAny( xNameContnr ) );
3106*cdf0e10cSrcweir 		}
3107*cdf0e10cSrcweir 		catch ( Exception& )
3108*cdf0e10cSrcweir 		{
3109*cdf0e10cSrcweir 			DBG_ERRORFILE( "AddDataItemDialog::EditHdl(): exception caught" );
3110*cdf0e10cSrcweir 		}
3111*cdf0e10cSrcweir 		return 0;
3112*cdf0e10cSrcweir 	}
3113*cdf0e10cSrcweir 
3114*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3115*cdf0e10cSrcweir 	IMPL_LINK( AddConditionDialog, OKHdl, OKButton *, EMPTYARG )
3116*cdf0e10cSrcweir 	{
3117*cdf0e10cSrcweir /*!!!
3118*cdf0e10cSrcweir         try
3119*cdf0e10cSrcweir         {
3120*cdf0e10cSrcweir             if ( m_xBinding.is() )
3121*cdf0e10cSrcweir                 m_xBinding->setPropertyValue( m_sPropertyName, makeAny( ::rtl::OUString( m_aConditionED.GetText() ) ) );
3122*cdf0e10cSrcweir         }
3123*cdf0e10cSrcweir         catch( const Exception& )
3124*cdf0e10cSrcweir         {
3125*cdf0e10cSrcweir         	DBG_ERRORFILE( "AddConditionDialog, OKHdl: caught an exception!" );
3126*cdf0e10cSrcweir         }
3127*cdf0e10cSrcweir */
3128*cdf0e10cSrcweir 		EndDialog( RET_OK );
3129*cdf0e10cSrcweir 		return 0;
3130*cdf0e10cSrcweir 	}
3131*cdf0e10cSrcweir 
3132*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3133*cdf0e10cSrcweir 	IMPL_LINK( AddConditionDialog, ModifyHdl, MultiLineEdit *, EMPTYARG )
3134*cdf0e10cSrcweir 	{
3135*cdf0e10cSrcweir 		m_aResultTimer.Start();
3136*cdf0e10cSrcweir 		return 0;
3137*cdf0e10cSrcweir 	}
3138*cdf0e10cSrcweir 
3139*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3140*cdf0e10cSrcweir 	IMPL_LINK( AddConditionDialog, ResultHdl, Timer *, EMPTYARG )
3141*cdf0e10cSrcweir 	{
3142*cdf0e10cSrcweir 		String sCondition = m_aConditionED.GetText().EraseLeadingChars().EraseTrailingChars();
3143*cdf0e10cSrcweir 		String sResult;
3144*cdf0e10cSrcweir 		if ( sCondition.Len() > 0 )
3145*cdf0e10cSrcweir 		{
3146*cdf0e10cSrcweir 			try
3147*cdf0e10cSrcweir 			{
3148*cdf0e10cSrcweir 				sResult = m_xUIHelper->getResultForExpression( m_xBinding, ( m_sPropertyName == PN_BINDING_EXPR ), sCondition );
3149*cdf0e10cSrcweir 			}
3150*cdf0e10cSrcweir 			catch ( Exception& )
3151*cdf0e10cSrcweir 			{
3152*cdf0e10cSrcweir 				DBG_ERRORFILE( "AddConditionDialog::ResultHdl(): exception caught" );
3153*cdf0e10cSrcweir 			}
3154*cdf0e10cSrcweir 		}
3155*cdf0e10cSrcweir 		m_aResultWin.SetText( sResult );
3156*cdf0e10cSrcweir 		return 0;
3157*cdf0e10cSrcweir 	}
3158*cdf0e10cSrcweir 
3159*cdf0e10cSrcweir 	//========================================================================
3160*cdf0e10cSrcweir 	// class NamespaceItemDialog
3161*cdf0e10cSrcweir 	//========================================================================
3162*cdf0e10cSrcweir 
3163*cdf0e10cSrcweir 	NamespaceItemDialog::NamespaceItemDialog(
3164*cdf0e10cSrcweir 		AddConditionDialog* _pCondDlg, Reference< XNameContainer >& _rContainer ) :
3165*cdf0e10cSrcweir 
3166*cdf0e10cSrcweir 		ModalDialog( _pCondDlg, SVX_RES( RID_SVXDLG_NAMESPACE_ITEM ) ),
3167*cdf0e10cSrcweir 
3168*cdf0e10cSrcweir 		m_aNamespacesFT			( this, SVX_RES( FT_NAMESPACES ) ),
3169*cdf0e10cSrcweir 		m_aNamespacesList		( this, SVX_RES( LB_NAMESPACES ) ),
3170*cdf0e10cSrcweir 		m_aAddNamespaceBtn		( this, SVX_RES( PB_ADD_NAMESPACE ) ),
3171*cdf0e10cSrcweir 		m_aEditNamespaceBtn		( this, SVX_RES( PB_EDIT_NAMESPACE ) ),
3172*cdf0e10cSrcweir 		m_aDeleteNamespaceBtn	( this, SVX_RES( PB_DELETE_NAMESPACE ) ),
3173*cdf0e10cSrcweir 		m_aButtonsFL			( this, SVX_RES( FL_DATANAV_BTN ) ),
3174*cdf0e10cSrcweir 		m_aOKBtn				( this, SVX_RES( BTN_DATANAV_OK ) ),
3175*cdf0e10cSrcweir 		m_aEscBtn				( this, SVX_RES( BTN_DATANAV_ESC ) ),
3176*cdf0e10cSrcweir 		m_aHelpBtn				( this, SVX_RES( BTN_DATANAV_HELP ) ),
3177*cdf0e10cSrcweir 
3178*cdf0e10cSrcweir 		m_pConditionDlg			( _pCondDlg ),
3179*cdf0e10cSrcweir 		m_rNamespaces			( _rContainer )
3180*cdf0e10cSrcweir 
3181*cdf0e10cSrcweir 	{
3182*cdf0e10cSrcweir 		static long aStaticTabs[]= { 3, 0, 35, 200 };
3183*cdf0e10cSrcweir 		m_aNamespacesList.SvxSimpleTable::SetTabs( aStaticTabs );
3184*cdf0e10cSrcweir 		String sHeader = String( SVX_RES( STR_HEADER_PREFIX ) );
3185*cdf0e10cSrcweir 		sHeader += '\t';
3186*cdf0e10cSrcweir 		sHeader += String( SVX_RES( STR_HEADER_URL ) );
3187*cdf0e10cSrcweir 		m_aNamespacesList.InsertHeaderEntry(
3188*cdf0e10cSrcweir 			sHeader, HEADERBAR_APPEND, HIB_LEFT /*| HIB_FIXEDPOS | HIB_FIXED*/ );
3189*cdf0e10cSrcweir 
3190*cdf0e10cSrcweir 		FreeResource();
3191*cdf0e10cSrcweir 
3192*cdf0e10cSrcweir 		m_aNamespacesList.SetSelectHdl( LINK( this, NamespaceItemDialog, SelectHdl ) );
3193*cdf0e10cSrcweir 		Link aLink = LINK( this, NamespaceItemDialog, ClickHdl );
3194*cdf0e10cSrcweir 		m_aAddNamespaceBtn.SetClickHdl( aLink );
3195*cdf0e10cSrcweir 		m_aEditNamespaceBtn.SetClickHdl( aLink );
3196*cdf0e10cSrcweir 		m_aDeleteNamespaceBtn.SetClickHdl( aLink );
3197*cdf0e10cSrcweir 		m_aOKBtn.SetClickHdl( LINK( this, NamespaceItemDialog, OKHdl ) );
3198*cdf0e10cSrcweir 
3199*cdf0e10cSrcweir 		LoadNamespaces();
3200*cdf0e10cSrcweir 		SelectHdl( &m_aNamespacesList );
3201*cdf0e10cSrcweir 	}
3202*cdf0e10cSrcweir 
3203*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3204*cdf0e10cSrcweir 	NamespaceItemDialog::~NamespaceItemDialog()
3205*cdf0e10cSrcweir 	{
3206*cdf0e10cSrcweir 	}
3207*cdf0e10cSrcweir 
3208*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3209*cdf0e10cSrcweir 	IMPL_LINK( NamespaceItemDialog, SelectHdl, SvxSimpleTable *,  EMPTYARG )
3210*cdf0e10cSrcweir 	{
3211*cdf0e10cSrcweir 		sal_Bool bEnable = ( m_aNamespacesList.FirstSelected() != NULL );
3212*cdf0e10cSrcweir 		m_aEditNamespaceBtn.Enable( bEnable );
3213*cdf0e10cSrcweir 		m_aDeleteNamespaceBtn.Enable( bEnable );
3214*cdf0e10cSrcweir 
3215*cdf0e10cSrcweir 		return 0;
3216*cdf0e10cSrcweir 	}
3217*cdf0e10cSrcweir 
3218*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3219*cdf0e10cSrcweir 	IMPL_LINK( NamespaceItemDialog, ClickHdl, PushButton *, pBtn )
3220*cdf0e10cSrcweir 	{
3221*cdf0e10cSrcweir 		if ( &m_aAddNamespaceBtn == pBtn )
3222*cdf0e10cSrcweir 		{
3223*cdf0e10cSrcweir 			ManageNamespaceDialog aDlg( this, m_pConditionDlg, false );
3224*cdf0e10cSrcweir 			if ( aDlg.Execute() == RET_OK )
3225*cdf0e10cSrcweir 			{
3226*cdf0e10cSrcweir 				String sEntry = aDlg.GetPrefix();
3227*cdf0e10cSrcweir 				sEntry += '\t';
3228*cdf0e10cSrcweir 				sEntry += aDlg.GetURL();
3229*cdf0e10cSrcweir 				m_aNamespacesList.InsertEntry( sEntry );
3230*cdf0e10cSrcweir 			}
3231*cdf0e10cSrcweir 		}
3232*cdf0e10cSrcweir 		else if ( &m_aEditNamespaceBtn == pBtn )
3233*cdf0e10cSrcweir 		{
3234*cdf0e10cSrcweir 			ManageNamespaceDialog aDlg( this, m_pConditionDlg, true );
3235*cdf0e10cSrcweir 			SvLBoxEntry* pEntry = m_aNamespacesList.FirstSelected();
3236*cdf0e10cSrcweir 			DBG_ASSERT( pEntry, "NamespaceItemDialog::ClickHdl(): no entry" );
3237*cdf0e10cSrcweir 			String sPrefix( m_aNamespacesList.GetEntryText( pEntry, 0 ) );
3238*cdf0e10cSrcweir 			aDlg.SetNamespace(
3239*cdf0e10cSrcweir 				sPrefix,
3240*cdf0e10cSrcweir 				m_aNamespacesList.GetEntryText( pEntry, 1 ) );
3241*cdf0e10cSrcweir 			if ( aDlg.Execute() == RET_OK )
3242*cdf0e10cSrcweir 			{
3243*cdf0e10cSrcweir                 // if a prefix was changed, mark the old prefix as 'removed'
3244*cdf0e10cSrcweir                 if( sPrefix != aDlg.GetPrefix() )
3245*cdf0e10cSrcweir                     m_aRemovedList.push_back( sPrefix );
3246*cdf0e10cSrcweir 
3247*cdf0e10cSrcweir 				m_aNamespacesList.SetEntryText( aDlg.GetPrefix(), pEntry, 0 );
3248*cdf0e10cSrcweir 				m_aNamespacesList.SetEntryText( aDlg.GetURL(), pEntry, 1 );
3249*cdf0e10cSrcweir 			}
3250*cdf0e10cSrcweir 		}
3251*cdf0e10cSrcweir 		else if ( &m_aDeleteNamespaceBtn == pBtn )
3252*cdf0e10cSrcweir 		{
3253*cdf0e10cSrcweir 			SvLBoxEntry* pEntry = m_aNamespacesList.FirstSelected();
3254*cdf0e10cSrcweir 			DBG_ASSERT( pEntry, "NamespaceItemDialog::ClickHdl(): no entry" );
3255*cdf0e10cSrcweir 			::rtl::OUString sPrefix( m_aNamespacesList.GetEntryText( pEntry, 0 ) );
3256*cdf0e10cSrcweir 			m_aRemovedList.push_back( sPrefix );
3257*cdf0e10cSrcweir 			m_aNamespacesList.GetModel()->Remove( pEntry );
3258*cdf0e10cSrcweir 		}
3259*cdf0e10cSrcweir 		else
3260*cdf0e10cSrcweir 		{
3261*cdf0e10cSrcweir 			DBG_ERRORFILE( "NamespaceItemDialog::ClickHdl(): invalid button" );
3262*cdf0e10cSrcweir 		}
3263*cdf0e10cSrcweir 
3264*cdf0e10cSrcweir 		SelectHdl( &m_aNamespacesList );
3265*cdf0e10cSrcweir 		return 0;
3266*cdf0e10cSrcweir 	}
3267*cdf0e10cSrcweir 
3268*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3269*cdf0e10cSrcweir 	IMPL_LINK( NamespaceItemDialog, OKHdl, OKButton *, EMPTYARG )
3270*cdf0e10cSrcweir 	{
3271*cdf0e10cSrcweir 		try
3272*cdf0e10cSrcweir 		{
3273*cdf0e10cSrcweir 			// update namespace container
3274*cdf0e10cSrcweir 			sal_Int32 i, nRemovedCount = m_aRemovedList.size();
3275*cdf0e10cSrcweir 			for( i = 0; i < nRemovedCount; ++i )
3276*cdf0e10cSrcweir 				m_rNamespaces->removeByName( m_aRemovedList[i] );
3277*cdf0e10cSrcweir 
3278*cdf0e10cSrcweir 			sal_Int32 nEntryCount = m_aNamespacesList.GetEntryCount();
3279*cdf0e10cSrcweir 			for( i = 0; i < nEntryCount; ++i )
3280*cdf0e10cSrcweir 			{
3281*cdf0e10cSrcweir 				SvLBoxEntry* pEntry = m_aNamespacesList.GetEntry(i);
3282*cdf0e10cSrcweir 				::rtl::OUString sPrefix( m_aNamespacesList.GetEntryText( pEntry, 0 ) );
3283*cdf0e10cSrcweir 				::rtl::OUString sURL( m_aNamespacesList.GetEntryText( pEntry, 1 ) );
3284*cdf0e10cSrcweir 
3285*cdf0e10cSrcweir 				if ( m_rNamespaces->hasByName( sPrefix ) )
3286*cdf0e10cSrcweir 					m_rNamespaces->replaceByName( sPrefix, makeAny( sURL ) );
3287*cdf0e10cSrcweir 				else
3288*cdf0e10cSrcweir 					m_rNamespaces->insertByName( sPrefix, makeAny( sURL ) );
3289*cdf0e10cSrcweir 			}
3290*cdf0e10cSrcweir 		}
3291*cdf0e10cSrcweir 		catch ( Exception& )
3292*cdf0e10cSrcweir 		{
3293*cdf0e10cSrcweir             DBG_ERRORFILE( "NamespaceItemDialog::OKHdl(): exception caught" );
3294*cdf0e10cSrcweir 		}
3295*cdf0e10cSrcweir 		// and close the dialog
3296*cdf0e10cSrcweir 		EndDialog( RET_OK );
3297*cdf0e10cSrcweir 		return 0;
3298*cdf0e10cSrcweir 	}
3299*cdf0e10cSrcweir 
3300*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3301*cdf0e10cSrcweir 	void NamespaceItemDialog::LoadNamespaces()
3302*cdf0e10cSrcweir 	{
3303*cdf0e10cSrcweir 		try
3304*cdf0e10cSrcweir 		{
3305*cdf0e10cSrcweir 			Sequence< ::rtl::OUString > aAllNames = m_rNamespaces->getElementNames();
3306*cdf0e10cSrcweir 			const ::rtl::OUString* pAllNames = aAllNames.getConstArray();
3307*cdf0e10cSrcweir 			const ::rtl::OUString* pAllNamesEnd = pAllNames + aAllNames.getLength();
3308*cdf0e10cSrcweir 			for ( ; pAllNames != pAllNamesEnd; ++pAllNames )
3309*cdf0e10cSrcweir 			{
3310*cdf0e10cSrcweir 				::rtl::OUString sURL;
3311*cdf0e10cSrcweir 				::rtl::OUString sPrefix = *pAllNames;
3312*cdf0e10cSrcweir 				if ( m_rNamespaces->hasByName( sPrefix ) )
3313*cdf0e10cSrcweir 				{
3314*cdf0e10cSrcweir 					Any aAny = m_rNamespaces->getByName( sPrefix );
3315*cdf0e10cSrcweir 					if ( aAny >>= sURL )
3316*cdf0e10cSrcweir 					{
3317*cdf0e10cSrcweir 						String sEntry( sPrefix );
3318*cdf0e10cSrcweir 						sEntry += '\t';
3319*cdf0e10cSrcweir 						sEntry += String( sURL );
3320*cdf0e10cSrcweir 
3321*cdf0e10cSrcweir 						m_aNamespacesList.InsertEntry( sEntry );
3322*cdf0e10cSrcweir 					}
3323*cdf0e10cSrcweir 				}
3324*cdf0e10cSrcweir 			}
3325*cdf0e10cSrcweir 		}
3326*cdf0e10cSrcweir 		catch ( Exception& )
3327*cdf0e10cSrcweir 		{
3328*cdf0e10cSrcweir             DBG_ERRORFILE( "NamespaceItemDialog::LoadNamespaces(): exception caught" );
3329*cdf0e10cSrcweir 		}
3330*cdf0e10cSrcweir 	}
3331*cdf0e10cSrcweir 
3332*cdf0e10cSrcweir 	//========================================================================
3333*cdf0e10cSrcweir 	// class ManageNamespaceDialog
3334*cdf0e10cSrcweir 	//========================================================================
3335*cdf0e10cSrcweir 
3336*cdf0e10cSrcweir 	ManageNamespaceDialog::ManageNamespaceDialog(
3337*cdf0e10cSrcweir 		Window* pParent, AddConditionDialog* _pCondDlg, bool _bIsEdit ) :
3338*cdf0e10cSrcweir 
3339*cdf0e10cSrcweir 		ModalDialog( pParent, SVX_RES( RID_SVXDLG_MANAGE_NAMESPACE ) ),
3340*cdf0e10cSrcweir 
3341*cdf0e10cSrcweir 		m_aPrefixFT		( this, SVX_RES( FT_PREFIX ) ),
3342*cdf0e10cSrcweir 		m_aPrefixED		( this, SVX_RES( ED_PREFIX ) ),
3343*cdf0e10cSrcweir 		m_aUrlFT		( this, SVX_RES( FT_URL ) ),
3344*cdf0e10cSrcweir 		m_aUrlED		( this, SVX_RES( ED_URL ) ),
3345*cdf0e10cSrcweir 		m_aButtonsFL	( this, SVX_RES( FL_DATANAV_BTN ) ),
3346*cdf0e10cSrcweir 		m_aOKBtn		( this, SVX_RES( BTN_DATANAV_OK ) ),
3347*cdf0e10cSrcweir 		m_aEscBtn		( this, SVX_RES( BTN_DATANAV_ESC ) ),
3348*cdf0e10cSrcweir 		m_aHelpBtn		( this, SVX_RES( BTN_DATANAV_HELP ) ),
3349*cdf0e10cSrcweir 
3350*cdf0e10cSrcweir 		m_pConditionDlg	( _pCondDlg )
3351*cdf0e10cSrcweir 
3352*cdf0e10cSrcweir 	{
3353*cdf0e10cSrcweir 		if ( _bIsEdit )
3354*cdf0e10cSrcweir 			SetText( String( SVX_RES( STR_EDIT_TEXT ) ) );
3355*cdf0e10cSrcweir 
3356*cdf0e10cSrcweir 		FreeResource();
3357*cdf0e10cSrcweir 
3358*cdf0e10cSrcweir 		m_aOKBtn.SetClickHdl( LINK( this, ManageNamespaceDialog, OKHdl ) );
3359*cdf0e10cSrcweir 	}
3360*cdf0e10cSrcweir 
3361*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3362*cdf0e10cSrcweir 	ManageNamespaceDialog::~ManageNamespaceDialog()
3363*cdf0e10cSrcweir 	{
3364*cdf0e10cSrcweir 	}
3365*cdf0e10cSrcweir 
3366*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3367*cdf0e10cSrcweir 	IMPL_LINK( ManageNamespaceDialog, OKHdl, OKButton *, EMPTYARG )
3368*cdf0e10cSrcweir 	{
3369*cdf0e10cSrcweir 		String sPrefix = m_aPrefixED.GetText();
3370*cdf0e10cSrcweir 
3371*cdf0e10cSrcweir 		try
3372*cdf0e10cSrcweir 		{
3373*cdf0e10cSrcweir 			if ( !m_pConditionDlg->GetUIHelper()->isValidPrefixName( sPrefix ) )
3374*cdf0e10cSrcweir 			{
3375*cdf0e10cSrcweir 				ErrorBox aErrBox( this, SVX_RES( RID_ERR_INVALID_XMLPREFIX ) );
3376*cdf0e10cSrcweir 				String sMessText = aErrBox.GetMessText();
3377*cdf0e10cSrcweir 				sMessText.SearchAndReplace( MSG_VARIABLE, sPrefix );
3378*cdf0e10cSrcweir 				aErrBox.SetMessText( sMessText );
3379*cdf0e10cSrcweir 				aErrBox.Execute();
3380*cdf0e10cSrcweir 				return 0;
3381*cdf0e10cSrcweir 			}
3382*cdf0e10cSrcweir 		}
3383*cdf0e10cSrcweir 		catch ( Exception& )
3384*cdf0e10cSrcweir 		{
3385*cdf0e10cSrcweir             DBG_ERRORFILE( "ManageNamespacesDialog::OKHdl(): exception caught" );
3386*cdf0e10cSrcweir 		}
3387*cdf0e10cSrcweir 
3388*cdf0e10cSrcweir 		// no error so close the dialog
3389*cdf0e10cSrcweir 		EndDialog( RET_OK );
3390*cdf0e10cSrcweir 		return 0;
3391*cdf0e10cSrcweir 	}
3392*cdf0e10cSrcweir 
3393*cdf0e10cSrcweir 	//========================================================================
3394*cdf0e10cSrcweir 	// class AddSubmissionDialog
3395*cdf0e10cSrcweir 	//========================================================================
3396*cdf0e10cSrcweir 
3397*cdf0e10cSrcweir 	AddSubmissionDialog::AddSubmissionDialog(
3398*cdf0e10cSrcweir 		Window* pParent, ItemNode* _pNode,
3399*cdf0e10cSrcweir 		const Reference< css::xforms::XFormsUIHelper1 >& _rUIHelper ) :
3400*cdf0e10cSrcweir 
3401*cdf0e10cSrcweir 		ModalDialog( pParent, SVX_RES( RID_SVXDLG_ADD_SUBMISSION ) ),
3402*cdf0e10cSrcweir 
3403*cdf0e10cSrcweir 		m_aSubmissionFL	( this, SVX_RES( FL_SUBMISSION ) ),
3404*cdf0e10cSrcweir 		m_aNameFT		( this, SVX_RES( FT_SUBMIT_NAME ) ),
3405*cdf0e10cSrcweir 		m_aNameED		( this, SVX_RES( ED_SUBMIT_NAME ) ),
3406*cdf0e10cSrcweir 		m_aActionFT		( this, SVX_RES( FT_SUBMIT_ACTION ) ),
3407*cdf0e10cSrcweir 		m_aActionED		( this, SVX_RES( ED_SUBMIT_ACTION ) ),
3408*cdf0e10cSrcweir 		m_aMethodFT		( this, SVX_RES( FT_SUBMIT_METHOD ) ),
3409*cdf0e10cSrcweir 		m_aMethodLB		( this, SVX_RES( LB_SUBMIT_METHOD ) ),
3410*cdf0e10cSrcweir 		m_aRefFT		( this, SVX_RES( FT_SUBMIT_REF ) ),
3411*cdf0e10cSrcweir 		m_aRefED		( this, SVX_RES( ED_SUBMIT_REF ) ),
3412*cdf0e10cSrcweir 		m_aRefBtn		( this, SVX_RES( PB_SUBMIT_REF ) ),
3413*cdf0e10cSrcweir 		m_aBindFT		( this, SVX_RES( FT_SUBMIT_BIND ) ),
3414*cdf0e10cSrcweir 		m_aBindLB		( this, SVX_RES( LB_SUBMIT_BIND ) ),
3415*cdf0e10cSrcweir 		m_aReplaceFT	( this, SVX_RES( FT_SUBMIT_REPLACE ) ),
3416*cdf0e10cSrcweir 		m_aReplaceLB	( this, SVX_RES( LB_SUBMIT_REPLACE ) ),
3417*cdf0e10cSrcweir 
3418*cdf0e10cSrcweir 		m_aButtonsFL	( this, SVX_RES( FL_DATANAV_BTN ) ),
3419*cdf0e10cSrcweir 		m_aOKBtn		( this, SVX_RES( BTN_DATANAV_OK ) ),
3420*cdf0e10cSrcweir 		m_aEscBtn		( this, SVX_RES( BTN_DATANAV_ESC ) ),
3421*cdf0e10cSrcweir 		m_aHelpBtn		( this, SVX_RES( BTN_DATANAV_HELP ) ),
3422*cdf0e10cSrcweir 
3423*cdf0e10cSrcweir 		m_pItemNode		( _pNode ),
3424*cdf0e10cSrcweir 		m_xUIHelper		( _rUIHelper )
3425*cdf0e10cSrcweir 
3426*cdf0e10cSrcweir 	{
3427*cdf0e10cSrcweir 		FillAllBoxes(); // we need local resources here, so call before FreeResource!!!
3428*cdf0e10cSrcweir 
3429*cdf0e10cSrcweir 		FreeResource();
3430*cdf0e10cSrcweir 
3431*cdf0e10cSrcweir 		m_aRefBtn.SetClickHdl( LINK( this, AddSubmissionDialog, RefHdl ) );
3432*cdf0e10cSrcweir 		m_aOKBtn.SetClickHdl( LINK( this, AddSubmissionDialog, OKHdl ) );
3433*cdf0e10cSrcweir 	}
3434*cdf0e10cSrcweir 
3435*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3436*cdf0e10cSrcweir 	AddSubmissionDialog::~AddSubmissionDialog()
3437*cdf0e10cSrcweir 	{
3438*cdf0e10cSrcweir         // #i38991# if we have added a binding, we need to remove it as well.
3439*cdf0e10cSrcweir         if( m_xCreatedBinding.is() && m_xUIHelper.is() )
3440*cdf0e10cSrcweir             m_xUIHelper->removeBindingIfUseless( m_xCreatedBinding );
3441*cdf0e10cSrcweir 	}
3442*cdf0e10cSrcweir 
3443*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3444*cdf0e10cSrcweir 	IMPL_LINK( AddSubmissionDialog, RefHdl, PushButton *, EMPTYARG )
3445*cdf0e10cSrcweir 	{
3446*cdf0e10cSrcweir 		AddConditionDialog aDlg( this, PN_BINDING_EXPR, m_xTempBinding );
3447*cdf0e10cSrcweir 		aDlg.SetCondition( m_aRefED.GetText() );
3448*cdf0e10cSrcweir 		if ( aDlg.Execute() == RET_OK )
3449*cdf0e10cSrcweir 			m_aRefED.SetText( aDlg.GetCondition() );
3450*cdf0e10cSrcweir 
3451*cdf0e10cSrcweir 		return 0;
3452*cdf0e10cSrcweir 	}
3453*cdf0e10cSrcweir 
3454*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3455*cdf0e10cSrcweir 	IMPL_LINK( AddSubmissionDialog, OKHdl, OKButton *, EMPTYARG )
3456*cdf0e10cSrcweir 	{
3457*cdf0e10cSrcweir 		rtl::OUString sName(m_aNameED.GetText());
3458*cdf0e10cSrcweir 		if(!sName.getLength()) {
3459*cdf0e10cSrcweir 
3460*cdf0e10cSrcweir 	        ErrorBox aErrorBox(this,SVX_RES(RID_ERR_EMPTY_SUBMISSIONNAME));
3461*cdf0e10cSrcweir 			aErrorBox.SetText( Application::GetDisplayName() );
3462*cdf0e10cSrcweir 			aErrorBox.Execute();
3463*cdf0e10cSrcweir 			return 0;
3464*cdf0e10cSrcweir 		}
3465*cdf0e10cSrcweir 
3466*cdf0e10cSrcweir 		if ( !m_xSubmission.is() )
3467*cdf0e10cSrcweir 		{
3468*cdf0e10cSrcweir 			DBG_ASSERT( !m_xNewSubmission.is(),
3469*cdf0e10cSrcweir 				"AddSubmissionDialog::OKHdl(): new submission already exists" );
3470*cdf0e10cSrcweir 
3471*cdf0e10cSrcweir 			// add a new submission
3472*cdf0e10cSrcweir 			Reference< css::xforms::XModel > xModel( m_xUIHelper, UNO_QUERY );
3473*cdf0e10cSrcweir 			if ( xModel.is() )
3474*cdf0e10cSrcweir 			{
3475*cdf0e10cSrcweir 				try
3476*cdf0e10cSrcweir 				{
3477*cdf0e10cSrcweir 					m_xNewSubmission = xModel->createSubmission();
3478*cdf0e10cSrcweir 					m_xSubmission = Reference< XPropertySet >( m_xNewSubmission, UNO_QUERY );
3479*cdf0e10cSrcweir 				}
3480*cdf0e10cSrcweir 				catch ( Exception& )
3481*cdf0e10cSrcweir 				{
3482*cdf0e10cSrcweir                     DBG_ERRORFILE( "AddSubmissionDialog::OKHdl(): exception caught" );
3483*cdf0e10cSrcweir 				}
3484*cdf0e10cSrcweir 			}
3485*cdf0e10cSrcweir 		}
3486*cdf0e10cSrcweir 
3487*cdf0e10cSrcweir 		if ( m_xSubmission.is() )
3488*cdf0e10cSrcweir 		{
3489*cdf0e10cSrcweir 			rtl::OUString sTemp = m_aNameED.GetText();
3490*cdf0e10cSrcweir 			try
3491*cdf0e10cSrcweir 			{
3492*cdf0e10cSrcweir 				m_xSubmission->setPropertyValue( PN_SUBMISSION_ID, makeAny( sTemp ) );
3493*cdf0e10cSrcweir 				sTemp = m_aActionED.GetText();
3494*cdf0e10cSrcweir 				m_xSubmission->setPropertyValue( PN_SUBMISSION_ACTION, makeAny( sTemp ) );
3495*cdf0e10cSrcweir 				sTemp = lcl_MethodString::get().toAPI( m_aMethodLB.GetSelectEntry() );
3496*cdf0e10cSrcweir 				m_xSubmission->setPropertyValue( PN_SUBMISSION_METHOD, makeAny( sTemp ) );
3497*cdf0e10cSrcweir 				sTemp = m_aRefED.GetText();
3498*cdf0e10cSrcweir 				m_xSubmission->setPropertyValue( PN_SUBMISSION_REF, makeAny( sTemp ) );
3499*cdf0e10cSrcweir                 String sEntry = m_aBindLB.GetSelectEntry();
3500*cdf0e10cSrcweir                 sEntry.Erase( sEntry.Search( ':' ) );
3501*cdf0e10cSrcweir                 sTemp = sEntry;
3502*cdf0e10cSrcweir 				m_xSubmission->setPropertyValue( PN_SUBMISSION_BIND, makeAny( sTemp ) );
3503*cdf0e10cSrcweir 				sTemp = lcl_ReplaceString::get().toAPI( m_aReplaceLB.GetSelectEntry() );
3504*cdf0e10cSrcweir 				m_xSubmission->setPropertyValue( PN_SUBMISSION_REPLACE, makeAny( sTemp ) );
3505*cdf0e10cSrcweir 			}
3506*cdf0e10cSrcweir 			catch ( Exception& )
3507*cdf0e10cSrcweir 			{
3508*cdf0e10cSrcweir 				DBG_ERRORFILE( "AddSubmissionDialog::OKHdl(): exception caught" );
3509*cdf0e10cSrcweir 			}
3510*cdf0e10cSrcweir 		}
3511*cdf0e10cSrcweir 
3512*cdf0e10cSrcweir 		EndDialog( RET_OK );
3513*cdf0e10cSrcweir 		return 0;
3514*cdf0e10cSrcweir 	}
3515*cdf0e10cSrcweir 
3516*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3517*cdf0e10cSrcweir 	void AddSubmissionDialog::FillAllBoxes()
3518*cdf0e10cSrcweir 	{
3519*cdf0e10cSrcweir 		// method box
3520*cdf0e10cSrcweir 		m_aMethodLB.InsertEntry( String( SVX_RES( STR_METHOD_POST	) ) );
3521*cdf0e10cSrcweir 		m_aMethodLB.InsertEntry( String( SVX_RES( STR_METHOD_PUT ) ) );
3522*cdf0e10cSrcweir 		m_aMethodLB.InsertEntry( String( SVX_RES( STR_METHOD_GET ) ) );
3523*cdf0e10cSrcweir 		m_aMethodLB.SelectEntryPos(0);
3524*cdf0e10cSrcweir 
3525*cdf0e10cSrcweir 		// binding box
3526*cdf0e10cSrcweir 		Reference< css::xforms::XModel > xModel( m_xUIHelper, UNO_QUERY );
3527*cdf0e10cSrcweir 		if ( xModel.is() )
3528*cdf0e10cSrcweir 		{
3529*cdf0e10cSrcweir 			try
3530*cdf0e10cSrcweir 			{
3531*cdf0e10cSrcweir 				Reference< XEnumerationAccess > xNumAccess( xModel->getBindings(), UNO_QUERY );
3532*cdf0e10cSrcweir 				if ( xNumAccess.is() )
3533*cdf0e10cSrcweir 				{
3534*cdf0e10cSrcweir 					Reference < XEnumeration > xNum = xNumAccess->createEnumeration();
3535*cdf0e10cSrcweir 					if ( xNum.is() && xNum->hasMoreElements() )
3536*cdf0e10cSrcweir 					{
3537*cdf0e10cSrcweir 						String sDelim( RTL_CONSTASCII_STRINGPARAM( ": " ) );
3538*cdf0e10cSrcweir 						while ( xNum->hasMoreElements() )
3539*cdf0e10cSrcweir 						{
3540*cdf0e10cSrcweir 							Reference< XPropertySet > xPropSet;
3541*cdf0e10cSrcweir 							Any aAny = xNum->nextElement();
3542*cdf0e10cSrcweir 							if ( aAny >>= xPropSet )
3543*cdf0e10cSrcweir 							{
3544*cdf0e10cSrcweir 								String sEntry;
3545*cdf0e10cSrcweir 								rtl::OUString sTemp;
3546*cdf0e10cSrcweir 								xPropSet->getPropertyValue( PN_BINDING_ID ) >>= sTemp;
3547*cdf0e10cSrcweir 								sEntry += String( sTemp );
3548*cdf0e10cSrcweir 								sEntry += sDelim;
3549*cdf0e10cSrcweir 								xPropSet->getPropertyValue( PN_BINDING_EXPR ) >>= sTemp;
3550*cdf0e10cSrcweir 								sEntry += String( sTemp );
3551*cdf0e10cSrcweir 								m_aBindLB.InsertEntry( sEntry );
3552*cdf0e10cSrcweir 
3553*cdf0e10cSrcweir 								if ( !m_xTempBinding.is() )
3554*cdf0e10cSrcweir 									m_xTempBinding = xPropSet;
3555*cdf0e10cSrcweir 							}
3556*cdf0e10cSrcweir 						}
3557*cdf0e10cSrcweir 					}
3558*cdf0e10cSrcweir 				}
3559*cdf0e10cSrcweir 			}
3560*cdf0e10cSrcweir 			catch ( Exception& )
3561*cdf0e10cSrcweir 			{
3562*cdf0e10cSrcweir                 DBG_ERRORFILE( "AddSubmissionDialog::FillAllBoxes(): exception caught" );
3563*cdf0e10cSrcweir 			}
3564*cdf0e10cSrcweir 		}
3565*cdf0e10cSrcweir 
3566*cdf0e10cSrcweir         // #i36342# we need a temporary binding; create one if no existing binding
3567*cdf0e10cSrcweir         // is found
3568*cdf0e10cSrcweir         if( !m_xTempBinding.is() )
3569*cdf0e10cSrcweir         {
3570*cdf0e10cSrcweir             m_xCreatedBinding = m_xUIHelper->getBindingForNode(
3571*cdf0e10cSrcweir                 Reference<css::xml::dom::XNode>(
3572*cdf0e10cSrcweir                     xModel->getDefaultInstance()->getDocumentElement(),
3573*cdf0e10cSrcweir                     UNO_QUERY_THROW ),
3574*cdf0e10cSrcweir                 sal_True );
3575*cdf0e10cSrcweir             m_xTempBinding = m_xCreatedBinding;
3576*cdf0e10cSrcweir         }
3577*cdf0e10cSrcweir 
3578*cdf0e10cSrcweir 		// replace box
3579*cdf0e10cSrcweir 		m_aReplaceLB.InsertEntry( String( SVX_RES( STR_REPLACE_NONE ) ) );
3580*cdf0e10cSrcweir 		m_aReplaceLB.InsertEntry( String( SVX_RES( STR_REPLACE_INST ) ) );
3581*cdf0e10cSrcweir 		m_aReplaceLB.InsertEntry( String( SVX_RES( STR_REPLACE_DOC ) ) );
3582*cdf0e10cSrcweir 
3583*cdf0e10cSrcweir 
3584*cdf0e10cSrcweir 		// init the controls with the values of the submission
3585*cdf0e10cSrcweir 		if ( m_pItemNode && m_pItemNode->m_xPropSet.is() )
3586*cdf0e10cSrcweir 		{
3587*cdf0e10cSrcweir 			m_xSubmission = m_pItemNode->m_xPropSet;
3588*cdf0e10cSrcweir 			rtl::OUString sTemp;
3589*cdf0e10cSrcweir 			try
3590*cdf0e10cSrcweir 			{
3591*cdf0e10cSrcweir 				m_xSubmission->getPropertyValue( PN_SUBMISSION_ID ) >>= sTemp;
3592*cdf0e10cSrcweir 				m_aNameED.SetText( sTemp );
3593*cdf0e10cSrcweir 				m_xSubmission->getPropertyValue( PN_SUBMISSION_ACTION ) >>= sTemp;
3594*cdf0e10cSrcweir 				m_aActionED.SetText( sTemp );
3595*cdf0e10cSrcweir 				m_xSubmission->getPropertyValue( PN_SUBMISSION_REF ) >>= sTemp;
3596*cdf0e10cSrcweir 				m_aRefED.SetText( sTemp );
3597*cdf0e10cSrcweir 
3598*cdf0e10cSrcweir 				m_xSubmission->getPropertyValue( PN_SUBMISSION_METHOD ) >>= sTemp;
3599*cdf0e10cSrcweir                 sTemp = lcl_MethodString::get().toUI( sTemp );
3600*cdf0e10cSrcweir 				sal_uInt16 nPos = m_aMethodLB.GetEntryPos( String( sTemp ) );
3601*cdf0e10cSrcweir 				if ( LISTBOX_ENTRY_NOTFOUND == nPos )
3602*cdf0e10cSrcweir 					nPos = m_aMethodLB.InsertEntry( sTemp );
3603*cdf0e10cSrcweir 				m_aMethodLB.SelectEntryPos( nPos );
3604*cdf0e10cSrcweir 
3605*cdf0e10cSrcweir 				m_xSubmission->getPropertyValue( PN_SUBMISSION_BIND ) >>= sTemp;
3606*cdf0e10cSrcweir 				nPos = m_aBindLB.GetEntryPos( String( sTemp ) );
3607*cdf0e10cSrcweir 				if ( LISTBOX_ENTRY_NOTFOUND == nPos )
3608*cdf0e10cSrcweir 					nPos = m_aBindLB.InsertEntry( sTemp );
3609*cdf0e10cSrcweir 				m_aBindLB.SelectEntryPos( nPos );
3610*cdf0e10cSrcweir 
3611*cdf0e10cSrcweir 				m_xSubmission->getPropertyValue( PN_SUBMISSION_REPLACE ) >>= sTemp;
3612*cdf0e10cSrcweir                 sTemp = lcl_ReplaceString::get().toUI( sTemp );
3613*cdf0e10cSrcweir 				if ( sTemp.getLength() == 0 )
3614*cdf0e10cSrcweir 					sTemp = m_aReplaceLB.GetEntry(0); // first entry == "none"
3615*cdf0e10cSrcweir 				nPos = m_aReplaceLB.GetEntryPos( String( sTemp ) );
3616*cdf0e10cSrcweir 				if ( LISTBOX_ENTRY_NOTFOUND == nPos )
3617*cdf0e10cSrcweir 					nPos = m_aReplaceLB.InsertEntry( sTemp );
3618*cdf0e10cSrcweir 				m_aReplaceLB.SelectEntryPos( nPos );
3619*cdf0e10cSrcweir 			}
3620*cdf0e10cSrcweir 			catch ( Exception& )
3621*cdf0e10cSrcweir 			{
3622*cdf0e10cSrcweir 				DBG_ERRORFILE( "AddSubmissionDialog::FillAllBoxes(): exception caught" );
3623*cdf0e10cSrcweir 			}
3624*cdf0e10cSrcweir 		}
3625*cdf0e10cSrcweir 
3626*cdf0e10cSrcweir         m_aRefBtn.Enable( m_xTempBinding.is() );
3627*cdf0e10cSrcweir 	}
3628*cdf0e10cSrcweir 
3629*cdf0e10cSrcweir 	//========================================================================
3630*cdf0e10cSrcweir 	// class AddModelDialog
3631*cdf0e10cSrcweir 	//========================================================================
3632*cdf0e10cSrcweir 
3633*cdf0e10cSrcweir     AddModelDialog::AddModelDialog( Window* pParent, bool _bEdit ) :
3634*cdf0e10cSrcweir 
3635*cdf0e10cSrcweir 		ModalDialog( pParent, SVX_RES( RID_SVXDLG_ADD_MODEL ) ),
3636*cdf0e10cSrcweir 
3637*cdf0e10cSrcweir 		m_aModelFL		( this, SVX_RES( FL_MODEL ) ),
3638*cdf0e10cSrcweir 		m_aNameFT		( this, SVX_RES( FT_MODEL_NAME ) ),
3639*cdf0e10cSrcweir 		m_aNameED		( this, SVX_RES( ED_MODEL_NAME ) ),
3640*cdf0e10cSrcweir         m_aModifyCB     ( this, SVX_RES( CB_MODIFIES_DOCUMENT ) ),
3641*cdf0e10cSrcweir 		m_aButtonsFL	( this, SVX_RES( FL_DATANAV_BTN ) ),
3642*cdf0e10cSrcweir 		m_aOKBtn		( this, SVX_RES( BTN_DATANAV_OK ) ),
3643*cdf0e10cSrcweir 		m_aEscBtn		( this, SVX_RES( BTN_DATANAV_ESC ) ),
3644*cdf0e10cSrcweir 		m_aHelpBtn		( this, SVX_RES( BTN_DATANAV_HELP ) )
3645*cdf0e10cSrcweir 
3646*cdf0e10cSrcweir 	{
3647*cdf0e10cSrcweir         if ( _bEdit )
3648*cdf0e10cSrcweir             SetText( String( SVX_RES( STR_EDIT_TEXT ) ) );
3649*cdf0e10cSrcweir 
3650*cdf0e10cSrcweir         FreeResource();
3651*cdf0e10cSrcweir 	}
3652*cdf0e10cSrcweir 
3653*cdf0e10cSrcweir 	AddModelDialog::~AddModelDialog()
3654*cdf0e10cSrcweir 	{
3655*cdf0e10cSrcweir 	}
3656*cdf0e10cSrcweir 
3657*cdf0e10cSrcweir 	//========================================================================
3658*cdf0e10cSrcweir 	// class AddInstanceDialog
3659*cdf0e10cSrcweir 	//========================================================================
3660*cdf0e10cSrcweir 
3661*cdf0e10cSrcweir     AddInstanceDialog::AddInstanceDialog( Window* pParent, bool _bEdit ) :
3662*cdf0e10cSrcweir 
3663*cdf0e10cSrcweir 		ModalDialog( pParent, SVX_RES( RID_SVXDLG_ADD_INSTANCE ) ),
3664*cdf0e10cSrcweir 
3665*cdf0e10cSrcweir 		m_aInstanceFL		( this, SVX_RES( FL_INSTANCE ) ),
3666*cdf0e10cSrcweir 		m_aNameFT			( this, SVX_RES( FT_INST_NAME ) ),
3667*cdf0e10cSrcweir 		m_aNameED			( this, SVX_RES( ED_INST_NAME ) ),
3668*cdf0e10cSrcweir 		m_aURLFT			( this, SVX_RES( FT_INST_URL ) ),
3669*cdf0e10cSrcweir 		m_aURLED			( this, SVX_RES( ED_INST_URL ) ),
3670*cdf0e10cSrcweir 		m_aFilePickerBtn	( this, SVX_RES( PB_FILEPICKER ) ),
3671*cdf0e10cSrcweir 		m_aLinkInstanceCB	( this, SVX_RES( CB_INST_LINKINST ) ),
3672*cdf0e10cSrcweir 		m_aButtonsFL		( this, SVX_RES( FL_DATANAV_BTN ) ),
3673*cdf0e10cSrcweir 		m_aOKBtn			( this, SVX_RES( BTN_DATANAV_OK ) ),
3674*cdf0e10cSrcweir 		m_aEscBtn			( this, SVX_RES( BTN_DATANAV_ESC ) ),
3675*cdf0e10cSrcweir 		m_aHelpBtn			( this, SVX_RES( BTN_DATANAV_HELP ) )
3676*cdf0e10cSrcweir 
3677*cdf0e10cSrcweir 	{
3678*cdf0e10cSrcweir         if ( _bEdit )
3679*cdf0e10cSrcweir             SetText( String( SVX_RES( STR_EDIT_TEXT ) ) );
3680*cdf0e10cSrcweir 
3681*cdf0e10cSrcweir         FreeResource();
3682*cdf0e10cSrcweir 
3683*cdf0e10cSrcweir 		m_aURLED.DisableHistory();
3684*cdf0e10cSrcweir 		m_aFilePickerBtn.SetClickHdl( LINK( this, AddInstanceDialog, FilePickerHdl ) );
3685*cdf0e10cSrcweir 
3686*cdf0e10cSrcweir 		// load the filter name from fps_office resource
3687*cdf0e10cSrcweir 		m_sAllFilterName = String( ResId( STR_FILTERNAME_ALL, *CREATEVERSIONRESMGR(fps_office) ) );
3688*cdf0e10cSrcweir 	}
3689*cdf0e10cSrcweir 
3690*cdf0e10cSrcweir 	AddInstanceDialog::~AddInstanceDialog()
3691*cdf0e10cSrcweir 	{
3692*cdf0e10cSrcweir 	}
3693*cdf0e10cSrcweir 
3694*cdf0e10cSrcweir 	//------------------------------------------------------------------------
3695*cdf0e10cSrcweir 	IMPL_LINK( AddInstanceDialog, FilePickerHdl, PushButton *, EMPTYARG )
3696*cdf0e10cSrcweir 	{
3697*cdf0e10cSrcweir     	::sfx2::FileDialogHelper aDlg(
3698*cdf0e10cSrcweir             css::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 );
3699*cdf0e10cSrcweir 		INetURLObject aFile( SvtPathOptions().GetWorkPath() );
3700*cdf0e10cSrcweir 
3701*cdf0e10cSrcweir 		aDlg.AddFilter( m_sAllFilterName, DEFINE_CONST_UNICODE(FILEDIALOG_FILTER_ALL) );
3702*cdf0e10cSrcweir 		String sFilterName( DEFINE_CONST_UNICODE("XML") );
3703*cdf0e10cSrcweir 		aDlg.AddFilter( sFilterName, DEFINE_CONST_UNICODE("*.xml") );
3704*cdf0e10cSrcweir 		aDlg.SetCurrentFilter( sFilterName );
3705*cdf0e10cSrcweir 		aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
3706*cdf0e10cSrcweir 
3707*cdf0e10cSrcweir 		if( aDlg.Execute() == ERRCODE_NONE )
3708*cdf0e10cSrcweir 			m_aURLED.SetText( aDlg.GetPath() );
3709*cdf0e10cSrcweir 
3710*cdf0e10cSrcweir 		return 0;
3711*cdf0e10cSrcweir 	}
3712*cdf0e10cSrcweir 
3713*cdf0e10cSrcweir     //========================================================================
3714*cdf0e10cSrcweir     // class LinkedInstanceWarningBox
3715*cdf0e10cSrcweir     //========================================================================
3716*cdf0e10cSrcweir 
3717*cdf0e10cSrcweir     LinkedInstanceWarningBox::LinkedInstanceWarningBox( Window* pParent ) :
3718*cdf0e10cSrcweir 
3719*cdf0e10cSrcweir         MessBox( pParent, SVX_RES( RID_QRY_LINK_WARNING ) )
3720*cdf0e10cSrcweir 
3721*cdf0e10cSrcweir     {
3722*cdf0e10cSrcweir         SetText( Application::GetDisplayName() );
3723*cdf0e10cSrcweir         SetImage( QueryBox::GetStandardImage() );
3724*cdf0e10cSrcweir         AddButton( SVX_RESSTR( RID_STR_DATANAV_LINKWARN_BUTTON ), BUTTONID_OK, BUTTONDIALOG_DEFBUTTON );
3725*cdf0e10cSrcweir         AddButton( BUTTON_CANCEL, BUTTONID_CANCEL, BUTTONDIALOG_CANCELBUTTON );
3726*cdf0e10cSrcweir     }
3727*cdf0e10cSrcweir 
3728*cdf0e10cSrcweir //............................................................................
3729*cdf0e10cSrcweir }	// namespace svxform
3730*cdf0e10cSrcweir //............................................................................
3731*cdf0e10cSrcweir 
3732*cdf0e10cSrcweir 
3733