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