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