LCOV - code coverage report
Current view: top level - svx/source/form - datanavi.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 1750 0.0 %
Date: 2014-04-14 Functions: 0 125 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10