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