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

Generated by: LCOV version 1.11