2009-04-02 09:12:25 +0200 oj r270372 : CWS-TOOLING: rebase CWS dbaperf1 to trunk@270033 (milestone: DEV300:m45) 2009-03-17 10:20:34 +0100 oj r269577 : add parameter 2009-03-17 10:20:05 +0100 oj r269576 : add parameter 2009-03-12 12:32:24 +0100 oj r269387 : add missing ++ 2009-03-11 12:53:35 +0100 oj r269315 : compile error 2009-03-06 08:52:11 +0100 oj r268968 : #i99264# remove duplicate code 2009-03-06 08:20:08 +0100 oj r268966 : add missingheader 2009-03-06 08:17:41 +0100 oj r268965 : add header 2009-03-06 08:15:07 +0100 oj r268964 : #i99708# remove duplicate code 2009-03-06 07:24:11 +0100 oj r268963 : #i99708# remove duplicate code 2009-03-06 07:22:24 +0100 oj r268962 : #i99708# use tenary operator 2009-03-06 07:19:21 +0100 oj r268961 : remove unused rtl_logs 2009-03-06 07:15:55 +0100 oj r268960 : #i99708# extract getLength from for loop 2009-03-06 07:15:35 +0100 oj r268959 : #i99708# extract getLength from for loop 2009-03-06 07:14:57 +0100 oj r268958 : remove unused rtl_logs 2009-03-06 07:13:01 +0100 oj r268957 : insert DBG_ helper 2009-03-06 07:12:17 +0100 oj r268956 : remove unused rtl_logs 2009-03-06 07:10:26 +0100 oj r268955 : remove unused rtl_logs 2009-03-06 07:04:51 +0100 oj r268954 : #i99708# use tenary operator 2009-03-05 12:04:46 +0100 oj r268895 : comment RTL_LOG out 2009-03-05 09:05:07 +0100 oj r268874 : add rtl logfile 2009-03-04 14:21:18 +0100 oj r268828 : #i99708# make static inplace and some method calls in for loop removed 2009-03-04 14:20:34 +0100 oj r268827 : #i99708# impl double check pattern for getInfohelper 2009-03-02 09:31:42 +0100 oj r268636 : add rtl logfile 2009-03-02 08:18:37 +0100 oj r268633 : add rtl logfile 2009-02-27 11:22:16 +0100 oj r268570 : #i99709# change algorithm for marking objects 2009-02-27 11:17:04 +0100 oj r268568 : #i99708# some improvements to load forms, controls faster and replacement of size() call with !empty() which is much faster 2009-02-24 10:09:35 +0100 sb r268383 : #i99290# no longer care to set a sensible context class loader for native threads attached to the VM 2009-02-23 13:44:04 +0100 oj r268354 : #i76606# seekrow changes 2009-02-23 12:27:30 +0100 oj r268349 : deleted 2009-02-20 15:14:23 +0100 oj r268325 : #i76606# some code changes 2009-02-19 14:15:25 +0100 oj r268284 : #i76606# use of simple prep stmt instead of full blown rowset, when source and dest connection are the same use insert into ... ( select ... ) 2009-02-19 11:27:55 +0100 oj r268265 : #i76606# insert some RTL_LOG and setObject impl 2009-02-18 14:45:37 +0100 oj r268222 : #i99363# insert RTL_LOG 2009-02-18 14:45:18 +0100 oj r268221 : #i99363# insert RTL_LOG 2009-02-18 11:14:54 +0100 oj r268207 : #i99363# call some impl_ methods to avoid duplicate cechCache calls 2009-02-18 11:10:47 +0100 oj r268206 : #i99363# make isCount inline 2009-02-18 10:33:22 +0100 oj r268203 : #i99363# use bookmarkable if available and inserted some RTL_LOG 2009-02-18 10:32:57 +0100 oj r268202 : #i99363# use bookmarkable if available and inserted some RTL_LOG 2009-02-17 07:29:05 +0100 oj r267843 : #i96897# remove some dll public 2009-02-16 15:01:04 +0100 oj r267816 : #i96897# remove some dll public 2009-02-16 14:25:53 +0100 oj r267810 : #i99264# remove duplicate code 2009-02-16 14:25:33 +0100 oj r267809 : #i99264# remove duplicate code 2009-02-16 14:24:59 +0100 oj r267808 : #i99264# remove duplicate code 2009-02-13 10:56:17 +0100 oj r267703 : #i99191# comment the contextclassloader 2009-02-13 10:32:40 +0100 oj r267700 : reduce call to resultset meta data 2009-02-13 10:27:31 +0100 oj r267699 : reduce call to resultset meta data 2009-02-13 10:27:08 +0100 oj r267698 : reduce call to resultset meta data
3721 lines
151 KiB
C++
3721 lines
151 KiB
C++
/*************************************************************************
|
|
*
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* Copyright 2008 by Sun Microsystems, Inc.
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* $RCSfile: datanavi.cxx,v $
|
|
* $Revision: 1.18 $
|
|
*
|
|
* This file is part of OpenOffice.org.
|
|
*
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
* only, as published by the Free Software Foundation.
|
|
*
|
|
* OpenOffice.org is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License version 3 for more details
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
* <http://www.openoffice.org/license.html>
|
|
* for a copy of the LGPLv3 License.
|
|
*
|
|
************************************************************************/
|
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
#include "precompiled_svx.hxx"
|
|
|
|
#include "datanavi.hxx"
|
|
#include "fmservs.hxx"
|
|
|
|
#include "datanavi.hrc"
|
|
#include "fmresids.hrc"
|
|
#include "fmhelp.hrc"
|
|
#include <svx/svxids.hrc>
|
|
#include <tools/rcid.h>
|
|
#include <tools/diagnose_ex.h>
|
|
#include "xmlexchg.hxx"
|
|
#include <svx/dialmgr.hxx>
|
|
#include <svx/fmshell.hxx>
|
|
#include <svtools/miscopt.hxx>
|
|
#include <svtools/pathoptions.hxx>
|
|
#include <svtools/viewoptions.hxx>
|
|
#include <svtools/svtools.hrc>
|
|
#include <sfx2/app.hxx>
|
|
#include <sfx2/filedlghelper.hxx>
|
|
#include <sfx2/objitem.hxx>
|
|
#include <sfx2/viewfrm.hxx>
|
|
#include <sfx2/objsh.hxx>
|
|
#include <sfx2/bindings.hxx>
|
|
#include <sfx2/dispatch.hxx>
|
|
#include <com/sun/star/beans/PropertyAttribute.hpp>
|
|
#include <com/sun/star/container/XSet.hpp>
|
|
#include <com/sun/star/datatransfer/XTransferable.hpp>
|
|
#include <com/sun/star/frame/XController.hpp>
|
|
#include <com/sun/star/frame/XFramesSupplier.hpp>
|
|
#include <com/sun/star/frame/XModel.hpp>
|
|
#include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
|
|
#include <com/sun/star/xforms/XFormsSupplier.hpp>
|
|
#include <com/sun/star/xml/dom/XDocument.hpp>
|
|
#include <com/sun/star/xml/dom/DOMException.hpp>
|
|
#include <com/sun/star/form/binding/XValueBinding.hpp>
|
|
#include <comphelper/processfactory.hxx>
|
|
#include <rtl/logfile.hxx>
|
|
|
|
using namespace ::com::sun::star::beans;
|
|
using namespace ::com::sun::star::container;
|
|
using namespace ::com::sun::star::datatransfer;
|
|
using namespace ::com::sun::star::frame;
|
|
using namespace ::com::sun::star::uno;
|
|
using namespace ::com::sun::star::xml::dom::events;
|
|
using namespace ::svx;
|
|
|
|
namespace css = ::com::sun::star;
|
|
|
|
#define CFGNAME_DATANAVIGATOR DEFINE_CONST_UNICODE("DataNavigator")
|
|
#define CFGNAME_SHOWDETAILS DEFINE_CONST_UNICODE("ShowDetails")
|
|
#define MSG_VARIABLE DEFINE_CONST_UNICODE("%1")
|
|
#define MODELNAME DEFINE_CONST_UNICODE("$MODELNAME")
|
|
#define INSTANCENAME DEFINE_CONST_UNICODE("$INSTANCENAME")
|
|
#define ELEMENTNAME DEFINE_CONST_UNICODE("$ELEMENTNAME")
|
|
#define ATTRIBUTENAME DEFINE_CONST_UNICODE("$ATTRIBUTENAME")
|
|
#define SUBMISSIONNAME DEFINE_CONST_UNICODE("$SUBMISSIONNAME")
|
|
#define BINDINGNAME DEFINE_CONST_UNICODE("$BINDINGNAME")
|
|
|
|
//............................................................................
|
|
namespace svxform
|
|
{
|
|
//............................................................................
|
|
|
|
// properties of instance
|
|
#define PN_INSTANCE_MODEL ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Instance" ) )
|
|
#define PN_INSTANCE_ID ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ID" ) )
|
|
#define PN_INSTANCE_URL ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "URL" ) )
|
|
#define PN_INSTANCE_URLONCE ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "URLOnce" ) )
|
|
|
|
// properties of binding
|
|
#define PN_BINDING_ID ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "BindingID" ) )
|
|
#define PN_BINDING_EXPR ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "BindingExpression" ) )
|
|
#define PN_BINDING_MODEL ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Model" ) )
|
|
#define PN_BINDING_NAMESPACES ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ModelNamespaces" ) )
|
|
#define PN_BINDING_MODELID ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ModelID" ) )
|
|
#define PN_READONLY_EXPR ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ReadonlyExpression" ) )
|
|
#define PN_RELEVANT_EXPR ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "RelevantExpression" ) )
|
|
#define PN_REQUIRED_EXPR ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "RequiredExpression" ) )
|
|
#define PN_CONSTRAINT_EXPR ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ConstraintExpression" ) )
|
|
#define PN_CALCULATE_EXPR ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CalculateExpression" ) )
|
|
#define PN_BINDING_TYPE ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Type" ) )
|
|
#define PN_BINDING_READONLY ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ReadOnly" ) )
|
|
#define PN_BINDING_ENABLED ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Enabled" ) )
|
|
|
|
// properties of submission
|
|
#define PN_SUBMISSION_ID ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ID" ) )
|
|
#define PN_SUBMISSION_BIND ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Bind" ) )
|
|
#define PN_SUBMISSION_REF ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Ref" ) )
|
|
#define PN_SUBMISSION_ACTION ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Action" ) )
|
|
#define PN_SUBMISSION_METHOD ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Method" ) )
|
|
#define PN_SUBMISSION_MODEL ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Model" ) )
|
|
#define PN_SUBMISSION_REPLACE ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Replace" ) )
|
|
|
|
// submission methods
|
|
#define SUBMITMETHOD_POST ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "post" ) )
|
|
#define SUBMITMETHOD_GET ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "get" ) )
|
|
#define SUBMITMETHOD_PUT ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "put" ) )
|
|
|
|
// other const strings
|
|
#define TRUE_VALUE ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "true()" ) )
|
|
#define FALSE_VALUE ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "false()" ) )
|
|
#define NEW_ELEMENT ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "newElement" ) )
|
|
#define NEW_ATTRIBUTE ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "newAttribute" ) )
|
|
#define EVENTTYPE_SUBTREE ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DOMSubtreeModified" ) )
|
|
#define EVENTTYPE_CHARDATA ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DOMCharacterDataModified" ) )
|
|
#define EVENTTYPE_ATTR ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DOMAttrModified" ) )
|
|
|
|
#define MIN_PAGE_COUNT 3 // at least one instance, one submission and one binding page
|
|
|
|
struct ItemNode
|
|
{
|
|
Reference< css::xml::dom::XNode > m_xNode;
|
|
Reference< XPropertySet > m_xPropSet;
|
|
|
|
ItemNode( const Reference< css::xml::dom::XNode >& _rxNode ) :
|
|
m_xNode( _rxNode ) {}
|
|
ItemNode( const Reference< XPropertySet >& _rxSet ) :
|
|
m_xPropSet( _rxSet ) {}
|
|
|
|
DataGroupType GetDataGroupType() const;
|
|
};
|
|
|
|
//========================================================================
|
|
// class DataTreeListBox
|
|
//========================================================================
|
|
DataTreeListBox::DataTreeListBox( XFormsPage* pPage, DataGroupType _eGroup, const ResId& rResId ) :
|
|
|
|
SvTreeListBox( pPage, rResId ),
|
|
|
|
m_pXFormsPage ( pPage ),
|
|
m_eGroup ( _eGroup )
|
|
|
|
{
|
|
EnableContextMenuHandling();
|
|
|
|
if ( DGTInstance == m_eGroup )
|
|
SetDragDropMode( SV_DRAGDROP_CTRL_MOVE |SV_DRAGDROP_CTRL_COPY | SV_DRAGDROP_APP_COPY );
|
|
}
|
|
|
|
DataTreeListBox::~DataTreeListBox()
|
|
{
|
|
DeleteAndClear();
|
|
}
|
|
|
|
sal_Int8 DataTreeListBox::AcceptDrop( const AcceptDropEvent& /*rEvt*/ )
|
|
{
|
|
return DND_ACTION_NONE;
|
|
}
|
|
sal_Int8 DataTreeListBox::ExecuteDrop( const ExecuteDropEvent& /*rEvt*/ )
|
|
{
|
|
return DND_ACTION_NONE;
|
|
}
|
|
void DataTreeListBox::StartDrag( sal_Int8 /*_nAction*/, const Point& /*_rPosPixel*/ )
|
|
{
|
|
SvLBoxEntry* pSelected = FirstSelected();
|
|
if ( !pSelected )
|
|
// no drag without an entry
|
|
return;
|
|
|
|
if ( m_eGroup == DGTBinding )
|
|
// for the moment, bindings cannot be dragged.
|
|
// #i59395# / 2005-12-15 / frank.schoenheit@sun.com
|
|
return;
|
|
|
|
// GetServiceNameForNode() requires a datatype repository which
|
|
// will be automatically build if requested???
|
|
Reference< css::xforms::XModel > xModel( m_pXFormsPage->GetXFormsHelper(), UNO_QUERY );
|
|
Reference< css::xforms::XDataTypeRepository > xDataTypes =
|
|
xModel->getDataTypeRepository();
|
|
if(!xDataTypes.is())
|
|
return;
|
|
|
|
using namespace ::com::sun::star::uno;
|
|
typedef com::sun::star::form::binding::XValueBinding XValueBinding_t;
|
|
|
|
ItemNode *pItemNode = static_cast<ItemNode*>(pSelected->GetUserData());
|
|
|
|
if ( !pItemNode )
|
|
{
|
|
// the only known (and allowed?) case where this happens are sub-entries of a submission
|
|
// entry
|
|
DBG_ASSERT( DGTSubmission == m_eGroup, "DataTreeListBox::StartDrag: how this?" );
|
|
pSelected = GetParent( pSelected );
|
|
DBG_ASSERT( pSelected && !GetParent( pSelected ), "DataTreeListBox::StartDrag: what kind of entry *is* this?" );
|
|
// on the submission page, we have only top-level entries (the submission themself)
|
|
// plus direct children of those (facets of a submission)
|
|
pItemNode = pSelected ? static_cast< ItemNode* >( pSelected->GetUserData() ) : NULL;
|
|
if ( !pItemNode )
|
|
return;
|
|
}
|
|
|
|
OXFormsDescriptor desc;
|
|
desc.szName = GetEntryText(pSelected);
|
|
if(pItemNode->m_xNode.is()) {
|
|
// a valid node interface tells us that we need to create a control from a binding
|
|
desc.szServiceName = m_pXFormsPage->GetServiceNameForNode(pItemNode->m_xNode);
|
|
desc.xPropSet = m_pXFormsPage->GetBindingForNode(pItemNode->m_xNode);
|
|
DBG_ASSERT( desc.xPropSet.is(), "DataTreeListBox::StartDrag(): invalid node binding" );
|
|
}
|
|
else {
|
|
desc.szServiceName = FM_COMPONENT_COMMANDBUTTON;
|
|
desc.xPropSet = pItemNode->m_xPropSet;
|
|
}
|
|
OXFormsTransferable *pTransferable = new OXFormsTransferable(desc);
|
|
Reference< XTransferable > xEnsureDelete = pTransferable;
|
|
if(pTransferable) {
|
|
EndSelection();
|
|
pTransferable->StartDrag( this, DND_ACTION_COPY );
|
|
}
|
|
}
|
|
|
|
PopupMenu* DataTreeListBox::CreateContextMenu()
|
|
{
|
|
PopupMenu* pMenu = new PopupMenu( SVX_RES( RID_MENU_DATANAVIGATOR ) );
|
|
if ( DGTInstance == m_eGroup )
|
|
pMenu->RemoveItem( pMenu->GetItemPos( TBI_ITEM_ADD ) );
|
|
else
|
|
{
|
|
pMenu->RemoveItem( pMenu->GetItemPos( TBI_ITEM_ADD_ELEMENT ) );
|
|
pMenu->RemoveItem( pMenu->GetItemPos( TBI_ITEM_ADD_ATTRIBUTE ) );
|
|
|
|
if ( DGTSubmission == m_eGroup )
|
|
{
|
|
pMenu->SetItemText( TBI_ITEM_ADD, SVX_RESSTR( RID_STR_DATANAV_ADD_SUBMISSION ) );
|
|
pMenu->SetItemText( TBI_ITEM_EDIT, SVX_RESSTR( RID_STR_DATANAV_EDIT_SUBMISSION ) );
|
|
pMenu->SetItemText( TBI_ITEM_REMOVE, SVX_RESSTR( RID_STR_DATANAV_REMOVE_SUBMISSION ) );
|
|
}
|
|
else
|
|
{
|
|
pMenu->SetItemText( TBI_ITEM_ADD, SVX_RESSTR( RID_STR_DATANAV_ADD_BINDING ) );
|
|
pMenu->SetItemText( TBI_ITEM_EDIT, SVX_RESSTR( RID_STR_DATANAV_EDIT_BINDING ) );
|
|
pMenu->SetItemText( TBI_ITEM_REMOVE, SVX_RESSTR( RID_STR_DATANAV_REMOVE_BINDING ) );
|
|
}
|
|
}
|
|
m_pXFormsPage->EnableMenuItems( pMenu );
|
|
return pMenu;
|
|
}
|
|
|
|
void DataTreeListBox::ExcecuteContextMenuAction( USHORT _nSelectedPopupEntry )
|
|
{
|
|
m_pXFormsPage->DoMenuAction( _nSelectedPopupEntry );
|
|
}
|
|
|
|
void DataTreeListBox::RemoveEntry( SvLBoxEntry* _pEntry )
|
|
{
|
|
if ( _pEntry )
|
|
{
|
|
delete static_cast< ItemNode* >( _pEntry->GetUserData() );
|
|
SvTreeListBox::GetModel()->Remove( _pEntry );
|
|
}
|
|
}
|
|
|
|
void DataTreeListBox::DeleteAndClear()
|
|
{
|
|
ULONG i, nCount = GetEntryCount();
|
|
for ( i = 0; i < nCount; ++i )
|
|
{
|
|
SvLBoxEntry* pEntry = GetEntry(i);
|
|
if ( pEntry )
|
|
delete static_cast< ItemNode* >( pEntry->GetUserData() );
|
|
}
|
|
|
|
Clear();
|
|
}
|
|
|
|
//========================================================================
|
|
// class XFormsPage
|
|
//========================================================================
|
|
XFormsPage::XFormsPage( Window* pParent, DataNavigatorWindow* _pNaviWin, DataGroupType _eGroup ) :
|
|
|
|
TabPage( pParent, SVX_RES( RID_SVX_XFORMS_TABPAGES ) ),
|
|
|
|
m_aToolBox ( this, SVX_RES( TB_ITEMS ) ),
|
|
m_aItemList ( this, _eGroup, SVX_RES( LB_ITEMS ) ),
|
|
m_pNaviWin ( _pNaviWin ),
|
|
m_bHasModel ( false ),
|
|
m_eGroup ( _eGroup ),
|
|
m_TbxImageList ( SVX_RES( IL_TBX_BMPS ) ),
|
|
m_TbxHCImageList( SVX_RES( IL_TBX_BMPS_HC ) )
|
|
|
|
{
|
|
FreeResource();
|
|
|
|
const ImageList& rImageList =
|
|
GetBackground().GetColor().IsDark() ? m_TbxHCImageList : m_TbxImageList;
|
|
m_aToolBox.SetItemImage( TBI_ITEM_ADD, rImageList.GetImage( IID_ITEM_ADD ) );
|
|
m_aToolBox.SetItemImage( TBI_ITEM_ADD_ELEMENT, rImageList.GetImage( IID_ITEM_ADD_ELEMENT ) );
|
|
m_aToolBox.SetItemImage( TBI_ITEM_ADD_ATTRIBUTE, rImageList.GetImage( IID_ITEM_ADD_ATTRIBUTE ) );
|
|
m_aToolBox.SetItemImage( TBI_ITEM_EDIT, rImageList.GetImage( IID_ITEM_EDIT ) );
|
|
m_aToolBox.SetItemImage( TBI_ITEM_REMOVE, rImageList.GetImage( IID_ITEM_REMOVE ) );
|
|
|
|
if ( DGTInstance == m_eGroup )
|
|
m_aToolBox.RemoveItem( m_aToolBox.GetItemPos( TBI_ITEM_ADD ) );
|
|
else
|
|
{
|
|
m_aToolBox.RemoveItem( m_aToolBox.GetItemPos( TBI_ITEM_ADD_ELEMENT ) );
|
|
m_aToolBox.RemoveItem( m_aToolBox.GetItemPos( TBI_ITEM_ADD_ATTRIBUTE ) );
|
|
|
|
if ( DGTSubmission == m_eGroup )
|
|
{
|
|
m_aToolBox.SetItemText( TBI_ITEM_ADD, SVX_RESSTR( RID_STR_DATANAV_ADD_SUBMISSION ) );
|
|
m_aToolBox.SetItemText( TBI_ITEM_EDIT, SVX_RESSTR( RID_STR_DATANAV_EDIT_SUBMISSION ) );
|
|
m_aToolBox.SetItemText( TBI_ITEM_REMOVE, SVX_RESSTR( RID_STR_DATANAV_REMOVE_SUBMISSION ) );
|
|
}
|
|
else
|
|
{
|
|
m_aToolBox.SetItemText( TBI_ITEM_ADD, SVX_RESSTR( RID_STR_DATANAV_ADD_BINDING ) );
|
|
m_aToolBox.SetItemText( TBI_ITEM_EDIT, SVX_RESSTR( RID_STR_DATANAV_EDIT_BINDING ) );
|
|
m_aToolBox.SetItemText( TBI_ITEM_REMOVE, SVX_RESSTR( RID_STR_DATANAV_REMOVE_BINDING ) );
|
|
}
|
|
}
|
|
|
|
const Size aTbxSz( m_aToolBox.CalcWindowSizePixel() );
|
|
m_aToolBox.SetSizePixel( aTbxSz );
|
|
m_aToolBox.SetOutStyle( SvtMiscOptions().GetToolboxStyle() );
|
|
m_aToolBox.SetSelectHdl( LINK( this, XFormsPage, TbxSelectHdl ) );
|
|
Point aPos = m_aItemList.GetPosPixel();
|
|
aPos.Y() = aTbxSz.Height();
|
|
m_aItemList.SetPosPixel( aPos );
|
|
|
|
m_aItemList.SetSelectHdl( LINK( this, XFormsPage, ItemSelectHdl ) );
|
|
m_aItemList.SetNodeDefaultImages();
|
|
WinBits nBits = WB_BORDER | WB_TABSTOP | WB_HIDESELECTION | WB_NOINITIALSELECTION;
|
|
if ( DGTInstance == m_eGroup || DGTSubmission == m_eGroup )
|
|
nBits |= WB_HASBUTTONS | WB_HASLINES | WB_HASLINESATROOT | WB_HASBUTTONSATROOT;
|
|
m_aItemList.SetWindowBits( m_aItemList.GetStyle() | nBits );
|
|
m_aItemList.Show();
|
|
ItemSelectHdl( &m_aItemList );
|
|
}
|
|
//------------------------------------------------------------------------
|
|
XFormsPage::~XFormsPage()
|
|
{
|
|
}
|
|
//------------------------------------------------------------------------
|
|
IMPL_LINK( XFormsPage, TbxSelectHdl, ToolBox *, EMPTYARG )
|
|
{
|
|
DoToolBoxAction( m_aToolBox.GetCurItemId() );
|
|
return 0;
|
|
}
|
|
//------------------------------------------------------------------------
|
|
IMPL_LINK( XFormsPage, ItemSelectHdl, DataTreeListBox *, EMPTYARG )
|
|
{
|
|
EnableMenuItems( NULL );
|
|
return 0;
|
|
}
|
|
//------------------------------------------------------------------------
|
|
void XFormsPage::AddChildren(
|
|
SvLBoxEntry* _pParent, const ImageList& _rImgLst,
|
|
const Reference< css::xml::dom::XNode >& _xNode )
|
|
{
|
|
DBG_ASSERT( m_xUIHelper.is(), "XFormsPage::AddChildren(): invalid UIHelper" );
|
|
|
|
try
|
|
{
|
|
Reference< css::xml::dom::XNodeList > xNodeList = _xNode->getChildNodes();
|
|
if ( xNodeList.is() )
|
|
{
|
|
bool bShowDetails = m_pNaviWin->IsShowDetails();
|
|
sal_Int32 i, nNodeCount = xNodeList->getLength();
|
|
for ( i = 0; i < nNodeCount; ++i )
|
|
{
|
|
Reference< css::xml::dom::XNode > xChild = xNodeList->item(i);
|
|
css::xml::dom::NodeType eChildType = xChild->getNodeType();
|
|
Image aExpImg, aCollImg;
|
|
switch ( eChildType )
|
|
{
|
|
case css::xml::dom::NodeType_ATTRIBUTE_NODE:
|
|
aExpImg = aCollImg = _rImgLst.GetImage( IID_ATTRIBUTE );
|
|
break;
|
|
case css::xml::dom::NodeType_ELEMENT_NODE:
|
|
aExpImg = aCollImg = _rImgLst.GetImage( IID_ELEMENT );
|
|
break;
|
|
case css::xml::dom::NodeType_TEXT_NODE:
|
|
aExpImg = aCollImg = _rImgLst.GetImage( IID_TEXT );
|
|
break;
|
|
default:
|
|
aExpImg = aCollImg = _rImgLst.GetImage( IID_OTHER );
|
|
}
|
|
|
|
::rtl::OUString sName = m_xUIHelper->getNodeDisplayName( xChild, bShowDetails );
|
|
if ( sName.getLength() > 0 )
|
|
{
|
|
ItemNode* pNode = new ItemNode( xChild );
|
|
SvLBoxEntry* pEntry = m_aItemList.InsertEntry(
|
|
sName, aExpImg, aCollImg, _pParent, FALSE, LIST_APPEND, pNode );
|
|
if ( xChild->hasAttributes() )
|
|
{
|
|
Reference< css::xml::dom::XNamedNodeMap > xMap = xChild->getAttributes();
|
|
if ( xMap.is() )
|
|
{
|
|
aExpImg = aCollImg = _rImgLst.GetImage( IID_ATTRIBUTE );
|
|
sal_Int32 j, nMapLen = xMap->getLength();
|
|
for ( j = 0; j < nMapLen; ++j )
|
|
{
|
|
Reference< css::xml::dom::XNode > xAttr = xMap->item(j);
|
|
pNode = new ItemNode( xAttr );
|
|
::rtl::OUString sAttrName =
|
|
m_xUIHelper->getNodeDisplayName( xAttr, bShowDetails );
|
|
m_aItemList.InsertEntry(
|
|
sAttrName, aExpImg, aCollImg,
|
|
pEntry, FALSE, LIST_APPEND, pNode );
|
|
}
|
|
}
|
|
}
|
|
if ( xChild->hasChildNodes() )
|
|
AddChildren( pEntry, _rImgLst, xChild );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch( Exception& )
|
|
{
|
|
DBG_UNHANDLED_EXCEPTION();
|
|
}
|
|
}
|
|
//------------------------------------------------------------------------
|
|
bool XFormsPage::DoToolBoxAction( USHORT _nToolBoxID ) {
|
|
|
|
bool bHandled = false;
|
|
bool bIsDocModified = false;
|
|
m_pNaviWin->DisableNotify( true );
|
|
|
|
if ( TBI_ITEM_ADD == _nToolBoxID
|
|
|| TBI_ITEM_ADD_ELEMENT == _nToolBoxID
|
|
|| TBI_ITEM_ADD_ATTRIBUTE == _nToolBoxID )
|
|
{
|
|
bHandled = true;
|
|
Reference< css::xforms::XModel > xModel( m_xUIHelper, UNO_QUERY );
|
|
DBG_ASSERT( xModel.is(), "XFormsPage::DoToolBoxAction(): Action without model" );
|
|
if ( DGTSubmission == m_eGroup )
|
|
{
|
|
AddSubmissionDialog aDlg( this, NULL, m_xUIHelper );
|
|
if ( aDlg.Execute() == RET_OK && aDlg.GetNewSubmission().is() )
|
|
{
|
|
try
|
|
{
|
|
Reference< css::xforms::XSubmission > xNewSubmission = aDlg.GetNewSubmission();
|
|
Reference< XSet > xSubmissions( xModel->getSubmissions(), UNO_QUERY );
|
|
xSubmissions->insert( makeAny( xNewSubmission ) );
|
|
Reference< XPropertySet > xNewPropSet( xNewSubmission, UNO_QUERY );
|
|
SvLBoxEntry* pEntry = AddEntry( xNewPropSet );
|
|
m_aItemList.Select( pEntry, TRUE );
|
|
bIsDocModified = true;
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::DoToolBoxAction(): exception while adding submission" );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DataItemType eType = DITElement;
|
|
SvLBoxEntry* pEntry = m_aItemList.FirstSelected();
|
|
ItemNode* pNode = NULL;
|
|
Reference< css::xml::dom::XNode > xParentNode;
|
|
Reference< XPropertySet > xNewBinding;
|
|
USHORT nResId = 0;
|
|
bool bIsElement = true;
|
|
if ( DGTInstance == m_eGroup )
|
|
{
|
|
if ( m_sInstanceURL.Len() > 0 )
|
|
{
|
|
LinkedInstanceWarningBox aMsgBox( this );
|
|
if ( aMsgBox.Execute() != RET_OK )
|
|
return bHandled;
|
|
}
|
|
|
|
DBG_ASSERT( pEntry, "XFormsPage::DoToolBoxAction(): no entry" );
|
|
ItemNode* pParentNode = static_cast< ItemNode* >( pEntry->GetUserData() );
|
|
DBG_ASSERT( pParentNode, "XFormsPage::DoToolBoxAction(): no parent node" );
|
|
xParentNode = pParentNode->m_xNode;
|
|
Reference< css::xml::dom::XNode > xNewNode;
|
|
if ( TBI_ITEM_ADD_ELEMENT == _nToolBoxID )
|
|
{
|
|
try
|
|
{
|
|
nResId = RID_STR_DATANAV_ADD_ELEMENT;
|
|
xNewNode = m_xUIHelper->createElement( xParentNode, NEW_ELEMENT );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::DoToolBoxAction(): exception while create element" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
nResId = RID_STR_DATANAV_ADD_ATTRIBUTE;
|
|
bIsElement = false;
|
|
eType = DITAttribute;
|
|
try
|
|
{
|
|
xNewNode = m_xUIHelper->createAttribute( xParentNode, NEW_ATTRIBUTE );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::DoToolBoxAction(): exception while create attribute" );
|
|
}
|
|
}
|
|
|
|
try
|
|
{
|
|
xNewNode = xParentNode->appendChild( xNewNode );
|
|
}
|
|
catch ( css::xml::dom::DOMException& e )
|
|
{
|
|
if ( e.Code == css::xml::dom::DOMExceptionType_DOMSTRING_SIZE_ERR )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::DoToolBoxAction(): domexception: size error" );
|
|
}
|
|
DBG_ERRORFILE( "XFormsPage::DoToolBoxAction(): domexception while append child" );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::DoToolBoxAction(): exception while append child" );
|
|
}
|
|
|
|
try
|
|
{
|
|
Reference< css::xml::dom::XNode > xPNode;
|
|
if ( xNewNode.is() )
|
|
xPNode = xNewNode->getParentNode();
|
|
// attributes don't have parents in the DOM model
|
|
DBG_ASSERT( TBI_ITEM_ADD_ATTRIBUTE == _nToolBoxID
|
|
|| xPNode.is(), "XFormsPage::DoToolboxAction(): node not added" );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::DoToolboxAction(): exception caught" );
|
|
}
|
|
|
|
try
|
|
{
|
|
m_xUIHelper->getBindingForNode( xNewNode, sal_True );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::DoToolBoxAction(): exception while get binding for node" );
|
|
}
|
|
pNode = new ItemNode( xNewNode );
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
nResId = RID_STR_DATANAV_ADD_BINDING;
|
|
xNewBinding = xModel->createBinding();
|
|
Reference< XSet > xBindings( xModel->getBindings(), UNO_QUERY );
|
|
xBindings->insert( makeAny( xNewBinding ) );
|
|
pNode = new ItemNode( xNewBinding );
|
|
eType = DITBinding;
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::DoToolBoxAction(): exception while adding binding" );
|
|
}
|
|
}
|
|
|
|
AddDataItemDialog aDlg( this, pNode, m_xUIHelper );
|
|
aDlg.SetText( SVX_RESSTR( nResId ) );
|
|
aDlg.InitText( eType );
|
|
short nReturn = aDlg.Execute();
|
|
if ( DGTInstance == m_eGroup )
|
|
{
|
|
if ( RET_OK == nReturn )
|
|
{
|
|
SvLBoxEntry* pNewEntry = AddEntry( pNode, bIsElement );
|
|
m_aItemList.MakeVisible( pNewEntry );
|
|
m_aItemList.Select( pNewEntry, TRUE );
|
|
bIsDocModified = true;
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
Reference< css::xml::dom::XNode > xPNode;
|
|
Reference< css::xml::dom::XNode > xNode =
|
|
xParentNode->removeChild( pNode->m_xNode );
|
|
if ( xNode.is() )
|
|
xPNode = xNode->getParentNode();
|
|
DBG_ASSERT( !xPNode.is(), "XFormsPage::RemoveEntry(): node not removed" );
|
|
delete pNode;
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::DoToolboxAction(): exception caught" );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( RET_OK == nReturn )
|
|
{
|
|
SvLBoxEntry* pNewEntry = AddEntry( xNewBinding );
|
|
m_aItemList.Select( pNewEntry, TRUE );
|
|
bIsDocModified = true;
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
Reference< XSet > xBindings( xModel->getBindings(), UNO_QUERY );
|
|
xBindings->remove( makeAny( xNewBinding ) );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::DoToolboxAction(): exception caught" );
|
|
}
|
|
}
|
|
delete pNode;
|
|
}
|
|
}
|
|
}
|
|
else if ( TBI_ITEM_EDIT == _nToolBoxID )
|
|
{
|
|
bHandled = true;
|
|
SvLBoxEntry* pEntry = m_aItemList.FirstSelected();
|
|
if ( pEntry )
|
|
{
|
|
if ( DGTSubmission == m_eGroup && m_aItemList.GetParent( pEntry ) )
|
|
pEntry = m_aItemList.GetParent( pEntry );
|
|
ItemNode* pNode = static_cast< ItemNode* >( pEntry->GetUserData() );
|
|
if ( DGTInstance == m_eGroup || DGTBinding == m_eGroup )
|
|
{
|
|
if ( DGTInstance == m_eGroup && m_sInstanceURL.Len() > 0 )
|
|
{
|
|
LinkedInstanceWarningBox aMsgBox( this );
|
|
if ( aMsgBox.Execute() != RET_OK )
|
|
return bHandled;
|
|
}
|
|
|
|
AddDataItemDialog aDlg( this, pNode, m_xUIHelper );
|
|
DataItemType eType = DITElement;
|
|
USHORT nResId = RID_STR_DATANAV_EDIT_ELEMENT;
|
|
if ( pNode && pNode->m_xNode.is() )
|
|
{
|
|
try
|
|
{
|
|
css::xml::dom::NodeType eChildType = pNode->m_xNode->getNodeType();
|
|
if ( eChildType == css::xml::dom::NodeType_ATTRIBUTE_NODE )
|
|
{
|
|
nResId = RID_STR_DATANAV_EDIT_ATTRIBUTE;
|
|
eType = DITAttribute;
|
|
}
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::DoToolboxAction(): exception caught" );
|
|
}
|
|
}
|
|
else if ( DGTBinding == m_eGroup )
|
|
{
|
|
nResId = RID_STR_DATANAV_EDIT_BINDING;
|
|
eType = DITBinding;
|
|
}
|
|
aDlg.SetText( SVX_RESSTR( nResId ) );
|
|
aDlg.InitText( eType );
|
|
if ( aDlg.Execute() == RET_OK )
|
|
{
|
|
// Set the new name
|
|
String sNewName;
|
|
if ( DGTInstance == m_eGroup )
|
|
{
|
|
try
|
|
{
|
|
sNewName = m_xUIHelper->getNodeDisplayName(
|
|
pNode->m_xNode, m_pNaviWin->IsShowDetails() );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::DoToolboxAction(): exception caught" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
String sDelim( RTL_CONSTASCII_STRINGPARAM( ": " ) );
|
|
::rtl::OUString sTemp;
|
|
pNode->m_xPropSet->getPropertyValue( PN_BINDING_ID ) >>= sTemp;
|
|
sNewName += String( sTemp );
|
|
sNewName += sDelim;
|
|
pNode->m_xPropSet->getPropertyValue( PN_BINDING_EXPR ) >>= sTemp;
|
|
sNewName += String( sTemp );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::DoToolboxAction(): exception caught" );
|
|
}
|
|
}
|
|
|
|
m_aItemList.SetEntryText( pEntry, sNewName );
|
|
bIsDocModified = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AddSubmissionDialog aDlg( this, pNode, m_xUIHelper );
|
|
aDlg.SetText( SVX_RESSTR( RID_STR_DATANAV_EDIT_SUBMISSION ) );
|
|
if ( aDlg.Execute() == RET_OK )
|
|
{
|
|
EditEntry( pNode->m_xPropSet );
|
|
bIsDocModified = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if ( TBI_ITEM_REMOVE == _nToolBoxID )
|
|
{
|
|
bHandled = true;
|
|
if ( DGTInstance == m_eGroup && m_sInstanceURL.Len() > 0 )
|
|
{
|
|
LinkedInstanceWarningBox aMsgBox( this );
|
|
if ( aMsgBox.Execute() != RET_OK )
|
|
return bHandled;
|
|
}
|
|
bIsDocModified = RemoveEntry();
|
|
}
|
|
|
|
m_pNaviWin->DisableNotify( false );
|
|
EnableMenuItems( NULL );
|
|
if ( bIsDocModified )
|
|
m_pNaviWin->SetDocModified();
|
|
return bHandled;
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
SvLBoxEntry* XFormsPage::AddEntry( ItemNode* _pNewNode, bool _bIsElement )
|
|
{
|
|
SvLBoxEntry* pParent = m_aItemList.FirstSelected();
|
|
const ImageList& rImageList = GetBackground().GetColor().IsDark()
|
|
? m_pNaviWin->GetItemHCImageList()
|
|
: m_pNaviWin->GetItemImageList();
|
|
USHORT nImageID = ( _bIsElement ) ? IID_ELEMENT : IID_ATTRIBUTE;
|
|
Image aImage = rImageList.GetImage( nImageID );
|
|
::rtl::OUString sName;
|
|
try
|
|
{
|
|
sName = m_xUIHelper->getNodeDisplayName(
|
|
_pNewNode->m_xNode, m_pNaviWin->IsShowDetails() );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_UNHANDLED_EXCEPTION();
|
|
}
|
|
return m_aItemList.InsertEntry(
|
|
sName, aImage, aImage, pParent, FALSE, LIST_APPEND, _pNewNode );
|
|
}
|
|
//------------------------------------------------------------------------
|
|
class lcl_ResourceString
|
|
{
|
|
protected:
|
|
lcl_ResourceString()
|
|
{
|
|
}
|
|
|
|
lcl_ResourceString( const lcl_ResourceString& );
|
|
|
|
virtual ~lcl_ResourceString()
|
|
{
|
|
}
|
|
|
|
// load UI resources from resource file
|
|
void init()
|
|
{
|
|
// create a resource manager, for the svx resource file
|
|
// and the UI locale
|
|
ByteString aResourceFile( "svx" );
|
|
ResMgr* pResMgr = ResMgr::CreateResMgr(
|
|
aResourceFile.GetBuffer(),
|
|
Application::GetSettings().GetUILocale() );
|
|
|
|
// load the resources for the AddSubmission modal dialog.
|
|
// This will create our own resource context.
|
|
ResId aRes( RID_SVXDLG_ADD_SUBMISSION, *pResMgr );
|
|
aRes.SetRT( RSC_MODALDIALOG );
|
|
pResMgr->GetResource( aRes );
|
|
|
|
// now, we can access the local resources from the dialog's
|
|
// resource context
|
|
_initResources(pResMgr);
|
|
|
|
// clean up: remove context, and delete the resource manager
|
|
// ( Increment(..) is needed since PopContext() requires that
|
|
// the file pointer is at the end. )
|
|
pResMgr->Increment( pResMgr->GetRemainSize() );
|
|
pResMgr->PopContext();
|
|
delete pResMgr;
|
|
}
|
|
|
|
// load resources... to be overloaded in sub-classes
|
|
virtual void _initResources( ResMgr* pMgr ) = 0;
|
|
};
|
|
|
|
class lcl_ReplaceString : public lcl_ResourceString
|
|
{
|
|
rtl::OUString m_sDoc_UI;
|
|
rtl::OUString m_sInstance_UI;
|
|
rtl::OUString m_sNone_UI;
|
|
|
|
rtl::OUString m_sDoc_API;
|
|
rtl::OUString m_sInstance_API;
|
|
rtl::OUString m_sNone_API;
|
|
|
|
lcl_ReplaceString() :
|
|
lcl_ResourceString(),
|
|
m_sDoc_API( RTL_CONSTASCII_USTRINGPARAM("all") ),
|
|
m_sInstance_API( RTL_CONSTASCII_USTRINGPARAM("instance") ),
|
|
m_sNone_API( RTL_CONSTASCII_USTRINGPARAM("none") )
|
|
{
|
|
init();
|
|
}
|
|
|
|
lcl_ReplaceString( const lcl_ReplaceString& );
|
|
|
|
virtual ~lcl_ReplaceString()
|
|
{
|
|
}
|
|
|
|
// load UI resources from resource file
|
|
virtual void _initResources( ResMgr * pMgr )
|
|
{
|
|
// now, we can access the local resources from the dialog's
|
|
// resource context
|
|
m_sDoc_UI = String( ResId( STR_REPLACE_DOC, *pMgr ) );
|
|
m_sInstance_UI = String( ResId( STR_REPLACE_INST, *pMgr ) );
|
|
m_sNone_UI = String( ResId( STR_REPLACE_NONE, *pMgr ) );
|
|
}
|
|
|
|
public:
|
|
|
|
/** create and obtain the singleton instance */
|
|
static const lcl_ReplaceString& get()
|
|
{
|
|
// keep the singleton instance here
|
|
static lcl_ReplaceString* m_pInstance = NULL;
|
|
|
|
if( m_pInstance == NULL )
|
|
m_pInstance = new lcl_ReplaceString();
|
|
return *m_pInstance;
|
|
}
|
|
|
|
/** convert submission replace string from API value to UI value.
|
|
Use 'none' as default. */
|
|
rtl::OUString toUI( const rtl::OUString& rStr ) const
|
|
{
|
|
if( rStr == m_sDoc_API )
|
|
return m_sDoc_UI;
|
|
else if( rStr == m_sInstance_API )
|
|
return m_sInstance_UI;
|
|
else
|
|
return m_sNone_UI;
|
|
}
|
|
|
|
/** convert submission replace string from UI to API.
|
|
Use 'none' as default. */
|
|
rtl::OUString toAPI( const rtl::OUString& rStr ) const
|
|
{
|
|
if( rStr == m_sDoc_UI )
|
|
return m_sDoc_API;
|
|
else if( rStr == m_sInstance_UI )
|
|
return m_sInstance_API;
|
|
else
|
|
return m_sNone_API;
|
|
}
|
|
};
|
|
|
|
class lcl_MethodString : public lcl_ResourceString
|
|
{
|
|
rtl::OUString m_sPost_UI;
|
|
rtl::OUString m_sPut_UI;
|
|
rtl::OUString m_sGet_UI;
|
|
|
|
rtl::OUString m_sPost_API;
|
|
rtl::OUString m_sPut_API;
|
|
rtl::OUString m_sGet_API;
|
|
|
|
lcl_MethodString() :
|
|
lcl_ResourceString(),
|
|
m_sPost_API( RTL_CONSTASCII_USTRINGPARAM("post") ),
|
|
m_sPut_API( RTL_CONSTASCII_USTRINGPARAM("put") ),
|
|
m_sGet_API( RTL_CONSTASCII_USTRINGPARAM("get") )
|
|
{
|
|
init();
|
|
}
|
|
|
|
lcl_MethodString( const lcl_MethodString& );
|
|
|
|
virtual ~lcl_MethodString()
|
|
{
|
|
}
|
|
|
|
// load UI resources from resource file
|
|
virtual void _initResources(ResMgr* pMgr)
|
|
{
|
|
m_sPost_UI = String( ResId( STR_METHOD_POST, *pMgr ) );
|
|
m_sPut_UI = String( ResId( STR_METHOD_PUT, *pMgr ) );
|
|
m_sGet_UI = String( ResId( STR_METHOD_GET, *pMgr ) );
|
|
}
|
|
|
|
public:
|
|
|
|
/** create and obtain the singleton instance */
|
|
static const lcl_MethodString& get()
|
|
{
|
|
// keep the singleton instance here
|
|
static lcl_MethodString* m_pInstance = NULL;
|
|
|
|
if( m_pInstance == NULL )
|
|
m_pInstance = new lcl_MethodString();
|
|
return *m_pInstance;
|
|
}
|
|
|
|
/** convert from API to UI; put is default. */
|
|
rtl::OUString toUI( const rtl::OUString& rStr ) const
|
|
{
|
|
if( rStr == m_sGet_API )
|
|
return m_sGet_UI;
|
|
else if( rStr == m_sPost_API )
|
|
return m_sPost_UI;
|
|
else
|
|
return m_sPut_UI;
|
|
}
|
|
|
|
/** convert from UI to API; put is default */
|
|
rtl::OUString toAPI( const rtl::OUString& rStr ) const
|
|
{
|
|
if( rStr == m_sGet_UI )
|
|
return m_sGet_API;
|
|
else if( rStr == m_sPost_UI )
|
|
return m_sPost_API;
|
|
else
|
|
return m_sPut_API;
|
|
}
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
SvLBoxEntry* XFormsPage::AddEntry( const Reference< XPropertySet >& _rEntry )
|
|
{
|
|
SvLBoxEntry* pEntry = NULL;
|
|
const ImageList& rImageList = GetBackground().GetColor().IsDark()
|
|
? m_pNaviWin->GetItemHCImageList()
|
|
: m_pNaviWin->GetItemImageList();
|
|
Image aImage = rImageList.GetImage( IID_ELEMENT );
|
|
|
|
ItemNode* pNode = new ItemNode( _rEntry );
|
|
rtl::OUString sTemp;
|
|
|
|
if ( DGTSubmission == m_eGroup )
|
|
{
|
|
try
|
|
{
|
|
// ID
|
|
_rEntry->getPropertyValue( PN_SUBMISSION_ID ) >>= sTemp;
|
|
pEntry = m_aItemList.InsertEntry( sTemp, aImage, aImage, NULL, FALSE, LIST_APPEND, pNode );
|
|
// Action
|
|
_rEntry->getPropertyValue( PN_SUBMISSION_ACTION ) >>= sTemp;
|
|
String sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_ACTION );
|
|
sEntry += String( sTemp );
|
|
m_aItemList.InsertEntry( sEntry, aImage, aImage, pEntry );
|
|
// Method
|
|
_rEntry->getPropertyValue( PN_SUBMISSION_METHOD ) >>= sTemp;
|
|
sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_METHOD );
|
|
sEntry += String( lcl_MethodString::get().toUI( sTemp ) );
|
|
m_aItemList.InsertEntry( sEntry, aImage, aImage, pEntry );
|
|
// Ref
|
|
_rEntry->getPropertyValue( PN_SUBMISSION_REF ) >>= sTemp;
|
|
sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_REF );
|
|
sEntry += String( sTemp );
|
|
m_aItemList.InsertEntry( sEntry, aImage, aImage, pEntry );
|
|
// Bind
|
|
_rEntry->getPropertyValue( PN_SUBMISSION_BIND ) >>= sTemp;
|
|
sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_BIND );
|
|
sEntry += String( sTemp );
|
|
m_aItemList.InsertEntry( sEntry, aImage, aImage, pEntry );
|
|
// Replace
|
|
_rEntry->getPropertyValue( PN_SUBMISSION_REPLACE ) >>= sTemp;
|
|
sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_REPLACE );
|
|
sEntry += String( lcl_ReplaceString::get().toUI( sTemp ) );
|
|
m_aItemList.InsertEntry( sEntry, aImage, aImage, pEntry );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::AddEntry(Ref): exception caught" );
|
|
}
|
|
}
|
|
else // then Binding Page
|
|
{
|
|
try
|
|
{
|
|
String sDelim( RTL_CONSTASCII_STRINGPARAM( ": " ) );
|
|
::rtl::OUString sName;
|
|
_rEntry->getPropertyValue( PN_BINDING_ID ) >>= sTemp;
|
|
sName += String( sTemp );
|
|
sName += sDelim;
|
|
_rEntry->getPropertyValue( PN_BINDING_EXPR ) >>= sTemp;
|
|
sName += String( sTemp );
|
|
pEntry = m_aItemList.InsertEntry(
|
|
sName, aImage, aImage, NULL, FALSE, LIST_APPEND, pNode );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::AddEntry(Ref): exception caught" );
|
|
}
|
|
}
|
|
|
|
return pEntry;
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
void XFormsPage::EditEntry( const Reference< XPropertySet >& _rEntry )
|
|
{
|
|
SvLBoxEntry* pEntry = NULL;
|
|
rtl::OUString sTemp;
|
|
|
|
if ( DGTSubmission == m_eGroup )
|
|
{
|
|
try
|
|
{
|
|
pEntry = m_aItemList.FirstSelected();
|
|
|
|
// #i36262# may be called for submission entry *or* for
|
|
// submission children. If we don't have any children, we
|
|
// assume the latter case and use the parent
|
|
if( m_aItemList.GetEntry( pEntry, 0 ) == NULL )
|
|
{
|
|
pEntry = m_aItemList.GetModel()->GetParent( pEntry );
|
|
}
|
|
|
|
_rEntry->getPropertyValue( PN_SUBMISSION_ID ) >>= sTemp;
|
|
m_aItemList.SetEntryText( pEntry, sTemp );
|
|
|
|
_rEntry->getPropertyValue( PN_SUBMISSION_BIND ) >>= sTemp;
|
|
String sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_BIND );
|
|
sEntry += String( sTemp );
|
|
ULONG nPos = 0;
|
|
SvLBoxEntry* pChild = m_aItemList.GetEntry( pEntry, nPos++ );
|
|
m_aItemList.SetEntryText( pChild, sEntry );
|
|
_rEntry->getPropertyValue( PN_SUBMISSION_REF ) >>= sTemp;
|
|
sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_REF );
|
|
sEntry += String( sTemp );
|
|
pChild = m_aItemList.GetEntry( pEntry, nPos++ );
|
|
m_aItemList.SetEntryText( pChild, sEntry );
|
|
_rEntry->getPropertyValue( PN_SUBMISSION_ACTION ) >>= sTemp;
|
|
sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_ACTION );
|
|
sEntry += String( sTemp );
|
|
pChild = m_aItemList.GetEntry( pEntry, nPos++ );
|
|
m_aItemList.SetEntryText( pChild, sEntry );
|
|
_rEntry->getPropertyValue( PN_SUBMISSION_METHOD ) >>= sTemp;
|
|
sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_METHOD );
|
|
sEntry += String( lcl_MethodString::get().toUI( sTemp ) );
|
|
pChild = m_aItemList.GetEntry( pEntry, nPos++ );
|
|
m_aItemList.SetEntryText( pChild, sEntry );
|
|
_rEntry->getPropertyValue( PN_SUBMISSION_REPLACE ) >>= sTemp;
|
|
sEntry = SVX_RESSTR( RID_STR_DATANAV_SUBM_REPLACE );
|
|
sEntry += String( lcl_ReplaceString::get().toUI( sTemp ) );
|
|
pChild = m_aItemList.GetEntry( pEntry, nPos++ );
|
|
m_aItemList.SetEntryText( pChild, sEntry );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::EditEntry(): exception caught" );
|
|
}
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
bool XFormsPage::RemoveEntry()
|
|
{
|
|
bool bRet = false;
|
|
SvLBoxEntry* pEntry = m_aItemList.FirstSelected();
|
|
if ( pEntry &&
|
|
( DGTInstance != m_eGroup || m_aItemList.GetParent( pEntry ) ) )
|
|
{
|
|
Reference< css::xforms::XModel > xModel( m_xUIHelper, UNO_QUERY );
|
|
DBG_ASSERT( xModel.is(), "XFormsPage::RemoveEntry(): no model" );
|
|
ItemNode* pNode = static_cast< ItemNode* >( pEntry->GetUserData() );
|
|
DBG_ASSERT( pNode, "XFormsPage::RemoveEntry(): no node" );
|
|
|
|
if ( DGTInstance == m_eGroup )
|
|
{
|
|
try
|
|
{
|
|
DBG_ASSERT( pNode->m_xNode.is(), "XFormsPage::RemoveEntry(): no XNode" );
|
|
css::xml::dom::NodeType eChildType = pNode->m_xNode->getNodeType();
|
|
bool bIsElement = ( eChildType == css::xml::dom::NodeType_ELEMENT_NODE );
|
|
USHORT nResId = bIsElement ? RID_QRY_REMOVE_ELEMENT : RID_QRY_REMOVE_ATTRIBUTE;
|
|
String sVar = bIsElement ? ELEMENTNAME : ATTRIBUTENAME;
|
|
QueryBox aQBox( this, SVX_RES( nResId ) );
|
|
String sMessText = aQBox.GetMessText();
|
|
sMessText.SearchAndReplace(
|
|
sVar, m_xUIHelper->getNodeDisplayName( pNode->m_xNode, sal_False ) );
|
|
aQBox.SetMessText( sMessText );
|
|
if ( aQBox.Execute() == RET_YES )
|
|
{
|
|
SvLBoxEntry* pParent = m_aItemList.GetParent( pEntry );
|
|
DBG_ASSERT( pParent, "XFormsPage::RemoveEntry(): no parent entry" );
|
|
ItemNode* pParentNode = static_cast< ItemNode* >( pParent->GetUserData() );
|
|
DBG_ASSERT( pParentNode && pParentNode->m_xNode.is(), "XFormsPage::RemoveEntry(): no parent XNode" );
|
|
|
|
Reference< css::xml::dom::XNode > xPNode;
|
|
Reference< css::xml::dom::XNode > xNode =
|
|
pParentNode->m_xNode->removeChild( pNode->m_xNode );
|
|
if ( xNode.is() )
|
|
xPNode = xNode->getParentNode();
|
|
DBG_ASSERT( !xPNode.is(), "XFormsPage::RemoveEntry(): node not removed" );
|
|
bRet = true;
|
|
}
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::RemoveEntry(): exception caught" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DBG_ASSERT( pNode->m_xPropSet.is(), "XFormsPage::RemoveEntry(): no propset" );
|
|
bool bSubmission = ( DGTSubmission == m_eGroup );
|
|
USHORT nResId = bSubmission ? RID_QRY_REMOVE_SUBMISSION : RID_QRY_REMOVE_BINDING;
|
|
rtl::OUString sProperty = bSubmission ? PN_SUBMISSION_ID : PN_BINDING_ID;
|
|
String sSearch = bSubmission ? SUBMISSIONNAME : BINDINGNAME;
|
|
rtl::OUString sName;
|
|
try
|
|
{
|
|
pNode->m_xPropSet->getPropertyValue( sProperty ) >>= sName;
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::RemoveEntry(): exception caught" );
|
|
}
|
|
QueryBox aQBox( this, SVX_RES( nResId ) );
|
|
String sMessText = aQBox.GetMessText();
|
|
sMessText.SearchAndReplace( sSearch, String( sName ) );
|
|
aQBox.SetMessText( sMessText );
|
|
if ( aQBox.Execute() == RET_YES )
|
|
{
|
|
try
|
|
{
|
|
if ( bSubmission )
|
|
xModel->getSubmissions()->remove( makeAny( pNode->m_xPropSet ) );
|
|
else // then Binding Page
|
|
xModel->getBindings()->remove( makeAny( pNode->m_xPropSet ) );
|
|
bRet = true;
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::RemoveEntry(): exception caught" );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( bRet )
|
|
m_aItemList.RemoveEntry( pEntry );
|
|
}
|
|
|
|
return bRet;
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
long XFormsPage::Notify( NotifyEvent& rNEvt )
|
|
{
|
|
long nHandled = 0;
|
|
|
|
if ( rNEvt.GetType() == EVENT_KEYINPUT )
|
|
{
|
|
USHORT nCode = rNEvt.GetKeyEvent()->GetKeyCode().GetCode();
|
|
|
|
switch ( nCode )
|
|
{
|
|
case KEY_DELETE:
|
|
nHandled = DoMenuAction( TBI_ITEM_REMOVE );
|
|
break;
|
|
}
|
|
}
|
|
|
|
return nHandled ? nHandled : Window::Notify( rNEvt );
|
|
}
|
|
//------------------------------------------------------------------------
|
|
void XFormsPage::Resize()
|
|
{
|
|
Size aSize = GetOutputSizePixel();
|
|
Size aTbxSize = m_aToolBox.GetSizePixel();
|
|
aTbxSize.Width() = aSize.Width();
|
|
m_aToolBox.SetSizePixel( aTbxSize );
|
|
aSize.Width() -= 4;
|
|
aSize.Height() -= ( 4 + aTbxSize.Height() );
|
|
m_aItemList.SetPosSizePixel( Point( 2, 2 + aTbxSize.Height() ), aSize );
|
|
}
|
|
//------------------------------------------------------------------------
|
|
String XFormsPage::SetModel( const Reference< css::xforms::XModel >& _xModel, USHORT _nPagePos )
|
|
{
|
|
DBG_ASSERT( _xModel.is(), "XFormsPage::SetModel(): invalid model" );
|
|
|
|
m_xUIHelper = Reference< css::xforms::XFormsUIHelper1 >( _xModel, UNO_QUERY );
|
|
String sRet;
|
|
m_bHasModel = true;
|
|
const ImageList& rImageList = GetBackground().GetColor().IsDark()
|
|
? m_pNaviWin->GetItemHCImageList()
|
|
: m_pNaviWin->GetItemImageList();
|
|
|
|
switch ( m_eGroup )
|
|
{
|
|
case DGTInstance :
|
|
{
|
|
DBG_ASSERT( _nPagePos != TAB_PAGE_NOTFOUND, "XFormsPage::SetModel(): invalid page position" );
|
|
try
|
|
{
|
|
Reference< XContainer > xContainer( _xModel->getInstances(), UNO_QUERY );
|
|
if ( xContainer.is() )
|
|
m_pNaviWin->AddContainerBroadcaster( xContainer );
|
|
|
|
USHORT nIter = 0;
|
|
Reference< XEnumerationAccess > xNumAccess( _xModel->getInstances(), UNO_QUERY );
|
|
if ( xNumAccess.is() )
|
|
{
|
|
Reference < XEnumeration > xNum = xNumAccess->createEnumeration();
|
|
if ( xNum.is() && xNum->hasMoreElements() )
|
|
{
|
|
while ( xNum->hasMoreElements() )
|
|
{
|
|
if ( nIter == _nPagePos )
|
|
{
|
|
Sequence< PropertyValue > xPropSeq;
|
|
Any aAny = xNum->nextElement();
|
|
if ( aAny >>= xPropSeq )
|
|
sRet = LoadInstance( xPropSeq, rImageList );
|
|
else
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::SetModel(): invalid instance" );
|
|
}
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
xNum->nextElement();
|
|
nIter++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::SetModel(): exception caught" );
|
|
}
|
|
break;
|
|
}
|
|
|
|
case DGTSubmission :
|
|
{
|
|
DBG_ASSERT( TAB_PAGE_NOTFOUND == _nPagePos, "XFormsPage::SetModel(): invalid page position" );
|
|
try
|
|
{
|
|
Reference< XContainer > xContainer( _xModel->getSubmissions(), UNO_QUERY );
|
|
if ( xContainer.is() )
|
|
m_pNaviWin->AddContainerBroadcaster( xContainer );
|
|
|
|
Reference< XEnumerationAccess > xNumAccess( _xModel->getSubmissions(), UNO_QUERY );
|
|
if ( xNumAccess.is() )
|
|
{
|
|
Reference < XEnumeration > xNum = xNumAccess->createEnumeration();
|
|
if ( xNum.is() && xNum->hasMoreElements() )
|
|
{
|
|
while ( xNum->hasMoreElements() )
|
|
{
|
|
Reference< XPropertySet > xPropSet;
|
|
Any aAny = xNum->nextElement();
|
|
if ( aAny >>= xPropSet )
|
|
AddEntry( xPropSet );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::SetModel(): exception caught" );
|
|
}
|
|
break;
|
|
}
|
|
|
|
case DGTBinding :
|
|
{
|
|
DBG_ASSERT( TAB_PAGE_NOTFOUND == _nPagePos, "XFormsPage::SetModel(): invalid page position" );
|
|
try
|
|
{
|
|
Reference< XContainer > xContainer( _xModel->getBindings(), UNO_QUERY );
|
|
if ( xContainer.is() )
|
|
m_pNaviWin->AddContainerBroadcaster( xContainer );
|
|
|
|
Reference< XEnumerationAccess > xNumAccess( _xModel->getBindings(), UNO_QUERY );
|
|
if ( xNumAccess.is() )
|
|
{
|
|
Reference < XEnumeration > xNum = xNumAccess->createEnumeration();
|
|
if ( xNum.is() && xNum->hasMoreElements() )
|
|
{
|
|
Image aImage1 = rImageList.GetImage( IID_ELEMENT );
|
|
Image aImage2 = rImageList.GetImage( IID_ELEMENT );
|
|
String sDelim( RTL_CONSTASCII_STRINGPARAM( ": " ) );
|
|
while ( xNum->hasMoreElements() )
|
|
{
|
|
Reference< XPropertySet > xPropSet;
|
|
Any aAny = xNum->nextElement();
|
|
if ( aAny >>= xPropSet )
|
|
{
|
|
String sEntry;
|
|
rtl::OUString sTemp;
|
|
xPropSet->getPropertyValue( PN_BINDING_ID ) >>= sTemp;
|
|
sEntry += String( sTemp );
|
|
sEntry += sDelim;
|
|
xPropSet->getPropertyValue( PN_BINDING_EXPR ) >>= sTemp;
|
|
sEntry += String( sTemp );
|
|
|
|
ItemNode* pNode = new ItemNode( xPropSet );
|
|
m_aItemList.InsertEntry(
|
|
sEntry, aImage1, aImage2, NULL, FALSE, LIST_APPEND, pNode );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::SetModel(): exception caught" );
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
DBG_ERROR( "XFormsPage::SetModel: unknown group!" );
|
|
break;
|
|
}
|
|
|
|
EnableMenuItems( NULL );
|
|
|
|
return sRet;
|
|
}
|
|
//------------------------------------------------------------------------
|
|
void XFormsPage::ClearModel()
|
|
{
|
|
m_bHasModel = false;
|
|
m_aItemList.DeleteAndClear();
|
|
}
|
|
//------------------------------------------------------------------------
|
|
String XFormsPage::LoadInstance(
|
|
const Sequence< PropertyValue >& _xPropSeq, const ImageList& _rImgLst )
|
|
{
|
|
String sRet;
|
|
rtl::OUString sTemp;
|
|
rtl::OUString sInstModel = PN_INSTANCE_MODEL;
|
|
rtl::OUString sInstName = PN_INSTANCE_ID;
|
|
rtl::OUString sInstURL = PN_INSTANCE_URL;
|
|
const PropertyValue* pProps = _xPropSeq.getConstArray();
|
|
const PropertyValue* pPropsEnd = pProps + _xPropSeq.getLength();
|
|
for ( ; pProps != pPropsEnd; ++pProps )
|
|
{
|
|
if ( sInstModel.compareTo( pProps->Name ) == 0 )
|
|
{
|
|
Reference< css::xml::dom::XNode > xRoot;
|
|
if ( pProps->Value >>= xRoot )
|
|
{
|
|
try
|
|
{
|
|
Reference< XEventTarget > xTarget( xRoot, UNO_QUERY );
|
|
if ( xTarget.is() )
|
|
m_pNaviWin->AddEventBroadcaster( xTarget );
|
|
|
|
#if OSL_DEBUG_LEVEL > 0
|
|
css::xml::dom::NodeType eNodeType = xRoot->getNodeType(); (void)eNodeType;
|
|
#endif
|
|
::rtl::OUString sNodeName =
|
|
m_xUIHelper->getNodeDisplayName( xRoot, m_pNaviWin->IsShowDetails() );
|
|
if ( sNodeName.getLength() == 0 )
|
|
sNodeName = xRoot->getNodeName();
|
|
if ( xRoot->hasChildNodes() )
|
|
AddChildren( NULL, _rImgLst, xRoot );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::LoadInstance(): exception caught" );
|
|
}
|
|
}
|
|
}
|
|
else if ( sInstName.compareTo( pProps->Name ) == 0 && ( pProps->Value >>= sTemp ) )
|
|
m_sInstanceName = sRet = sTemp;
|
|
else if ( sInstURL.compareTo( pProps->Name ) == 0 && ( pProps->Value >>= sTemp ) )
|
|
m_sInstanceURL = sTemp;
|
|
}
|
|
|
|
return sRet;
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
bool XFormsPage::DoMenuAction( USHORT _nMenuID )
|
|
{
|
|
return DoToolBoxAction( _nMenuID );
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
void XFormsPage::EnableMenuItems( Menu* _pMenu )
|
|
{
|
|
BOOL bEnableAdd = FALSE;
|
|
BOOL bEnableEdit = FALSE;
|
|
BOOL bEnableRemove = FALSE;
|
|
|
|
SvLBoxEntry* pEntry = m_aItemList.FirstSelected();
|
|
if ( pEntry )
|
|
{
|
|
bEnableAdd = TRUE;
|
|
bool bSubmitChild = false;
|
|
if ( DGTSubmission == m_eGroup && m_aItemList.GetParent( pEntry ) )
|
|
{
|
|
pEntry = m_aItemList.GetParent( pEntry );
|
|
bSubmitChild = true;
|
|
}
|
|
ItemNode* pNode = static_cast< ItemNode* >( pEntry->GetUserData() );
|
|
if ( pNode && ( pNode->m_xNode.is() || pNode->m_xPropSet.is() ) )
|
|
{
|
|
bEnableEdit = TRUE;
|
|
bEnableRemove = ( bSubmitChild != true );
|
|
if ( DGTInstance == m_eGroup && !m_aItemList.GetParent( pEntry ) )
|
|
bEnableRemove = FALSE;
|
|
if ( pNode->m_xNode.is() )
|
|
{
|
|
try
|
|
{
|
|
css::xml::dom::NodeType eChildType = pNode->m_xNode->getNodeType();
|
|
if ( eChildType != css::xml::dom::NodeType_ELEMENT_NODE
|
|
&& eChildType != css::xml::dom::NodeType_DOCUMENT_NODE )
|
|
{
|
|
bEnableAdd = FALSE;
|
|
}
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::EnableMenuItems(): exception caught" );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if ( m_eGroup != DGTInstance )
|
|
bEnableAdd = TRUE;
|
|
|
|
m_aToolBox.EnableItem( TBI_ITEM_ADD, bEnableAdd );
|
|
m_aToolBox.EnableItem( TBI_ITEM_ADD_ELEMENT, bEnableAdd );
|
|
m_aToolBox.EnableItem( TBI_ITEM_ADD_ATTRIBUTE, bEnableAdd );
|
|
m_aToolBox.EnableItem( TBI_ITEM_EDIT, bEnableEdit );
|
|
m_aToolBox.EnableItem( TBI_ITEM_REMOVE, bEnableRemove );
|
|
|
|
if ( _pMenu )
|
|
{
|
|
_pMenu->EnableItem( TBI_ITEM_ADD, bEnableAdd );
|
|
_pMenu->EnableItem( TBI_ITEM_ADD_ELEMENT, bEnableAdd );
|
|
_pMenu->EnableItem( TBI_ITEM_ADD_ATTRIBUTE, bEnableAdd );
|
|
_pMenu->EnableItem( TBI_ITEM_EDIT, bEnableEdit );
|
|
_pMenu->EnableItem( TBI_ITEM_REMOVE, bEnableRemove );
|
|
}
|
|
if ( DGTInstance == m_eGroup )
|
|
{
|
|
USHORT nResId1 = RID_STR_DATANAV_EDIT_ELEMENT;
|
|
USHORT nResId2 = RID_STR_DATANAV_REMOVE_ELEMENT;
|
|
if ( pEntry )
|
|
{
|
|
ItemNode* pNode = static_cast< ItemNode* >( pEntry->GetUserData() );
|
|
if ( pNode && pNode->m_xNode.is() )
|
|
{
|
|
try
|
|
{
|
|
css::xml::dom::NodeType eChildType = pNode->m_xNode->getNodeType();
|
|
if ( eChildType == css::xml::dom::NodeType_ATTRIBUTE_NODE )
|
|
{
|
|
nResId1 = RID_STR_DATANAV_EDIT_ATTRIBUTE;
|
|
nResId2 = RID_STR_DATANAV_REMOVE_ATTRIBUTE;
|
|
}
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "XFormsPage::EnableMenuItems(): exception caught" );
|
|
}
|
|
}
|
|
}
|
|
m_aToolBox.SetItemText( TBI_ITEM_EDIT, SVX_RESSTR( nResId1 ) );
|
|
m_aToolBox.SetItemText( TBI_ITEM_REMOVE, SVX_RESSTR( nResId2 ) );
|
|
if ( _pMenu )
|
|
{
|
|
_pMenu->SetItemText( TBI_ITEM_EDIT, SVX_RESSTR( nResId1 ) );
|
|
_pMenu->SetItemText( TBI_ITEM_REMOVE, SVX_RESSTR( nResId2 ) );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//========================================================================
|
|
// class DataNavigatorWindow
|
|
//========================================================================
|
|
DataNavigatorWindow::DataNavigatorWindow( Window* pParent, SfxBindings* pBindings ) :
|
|
|
|
Window( pParent, SVX_RES( RID_SVXWIN_DATANAVIGATOR ) ),
|
|
|
|
m_aModelsBox ( this, SVX_RES( LB_MODELS ) ),
|
|
m_aModelBtn ( this, SVX_RES( MB_MODELS ) ),
|
|
m_aTabCtrl ( this, SVX_RES( TC_ITEMS ) ),
|
|
m_aInstanceBtn ( this, SVX_RES( MB_INSTANCES ) ),
|
|
|
|
m_pInstPage ( NULL ),
|
|
m_pSubmissionPage ( NULL ),
|
|
m_pBindingPage ( NULL ),
|
|
|
|
m_nMinWidth ( 0 ),
|
|
m_nMinHeight ( 0 ),
|
|
m_nBorderHeight ( 0 ),
|
|
m_nLastSelectedPos ( LISTBOX_ENTRY_NOTFOUND ),
|
|
m_bShowDetails ( false ),
|
|
m_bIsNotifyDisabled ( false ),
|
|
|
|
m_aItemImageList ( SVX_RES( IL_ITEM_BMPS ) ),
|
|
m_aItemHCImageList ( SVX_RES( IL_ITEM_BMPS_HC ) ),
|
|
m_xDataListener ( new DataListener( this ) )
|
|
|
|
{
|
|
FreeResource();
|
|
|
|
// init minimal metric
|
|
m_a2Size = LogicToPixel( Size( 2, 2 ), MAP_APPFONT );
|
|
m_a3Size = LogicToPixel( Size( 3, 3 ), MAP_APPFONT );
|
|
Size aOutSz = GetOutputSizePixel();
|
|
Size aLogSize = PixelToLogic( aOutSz, MAP_APPFONT );
|
|
m_nMinWidth = aLogSize.Width();
|
|
m_nMinHeight = aLogSize.Height();
|
|
m_nBorderHeight = 4*m_a3Size.Height() +
|
|
m_aModelBtn.GetSizePixel().Height() + m_aInstanceBtn.GetSizePixel().Height();
|
|
|
|
// handler
|
|
m_aModelsBox.SetSelectHdl( LINK( this, DataNavigatorWindow, ModelSelectHdl ) );
|
|
Link aLink = LINK( this, DataNavigatorWindow, MenuSelectHdl );
|
|
m_aModelBtn.SetSelectHdl( aLink );
|
|
m_aInstanceBtn.SetSelectHdl( aLink );
|
|
aLink = LINK( this, DataNavigatorWindow, MenuActivateHdl );
|
|
m_aModelBtn.SetActivateHdl( aLink );
|
|
m_aInstanceBtn.SetActivateHdl( aLink );
|
|
m_aTabCtrl.SetActivatePageHdl( LINK( this, DataNavigatorWindow, ActivatePageHdl ) );
|
|
m_aUpdateTimer.SetTimeout( 2000 );
|
|
m_aUpdateTimer.SetTimeoutHdl( LINK( this, DataNavigatorWindow, UpdateHdl ) );
|
|
|
|
// init tabcontrol
|
|
m_aTabCtrl.Show();
|
|
sal_Int32 nPageId = TID_INSTANCE;
|
|
SvtViewOptions aViewOpt( E_TABDIALOG, CFGNAME_DATANAVIGATOR );
|
|
if ( aViewOpt.Exists() )
|
|
{
|
|
nPageId = aViewOpt.GetPageID();
|
|
aViewOpt.GetUserItem(CFGNAME_SHOWDETAILS) >>= m_bShowDetails;
|
|
}
|
|
|
|
Menu* pMenu = m_aInstanceBtn.GetPopupMenu();
|
|
pMenu->SetItemBits( MID_SHOW_DETAILS, MIB_CHECKABLE );
|
|
pMenu->CheckItem( MID_SHOW_DETAILS, m_bShowDetails );
|
|
|
|
m_aTabCtrl.SetCurPageId( static_cast< USHORT >( nPageId ) );
|
|
ActivatePageHdl( &m_aTabCtrl );
|
|
|
|
// get our frame
|
|
DBG_ASSERT( pBindings != NULL,
|
|
"DataNavigatorWindow::LoadModels(): no SfxBindings; can't get frame" );
|
|
m_xFrame = Reference<XFrame>(
|
|
pBindings->GetDispatcher()->GetFrame()->GetFrame()->GetFrameInterface(),
|
|
UNO_QUERY );
|
|
DBG_ASSERT( m_xFrame.is(), "DataNavigatorWindow::LoadModels(): no frame" );
|
|
// add frameaction listener
|
|
Reference< XFrameActionListener > xListener(
|
|
static_cast< XFrameActionListener* >( m_xDataListener.get() ), UNO_QUERY );
|
|
m_xFrame->addFrameActionListener( xListener );
|
|
|
|
// load xforms models of the current document
|
|
LoadModels();
|
|
}
|
|
//------------------------------------------------------------------------
|
|
DataNavigatorWindow::~DataNavigatorWindow()
|
|
{
|
|
SvtViewOptions aViewOpt( E_TABDIALOG, CFGNAME_DATANAVIGATOR );
|
|
aViewOpt.SetPageID( static_cast< sal_Int32 >( m_aTabCtrl.GetCurPageId() ) );
|
|
Any aAny;
|
|
aAny <<= m_bShowDetails;
|
|
aViewOpt.SetUserItem(CFGNAME_SHOWDETAILS,aAny);
|
|
|
|
delete m_pInstPage;
|
|
delete m_pSubmissionPage;
|
|
delete m_pBindingPage;
|
|
|
|
sal_Int32 i, nCount = m_aPageList.size();
|
|
for ( i = 0; i < nCount; ++i )
|
|
delete m_aPageList[i];
|
|
Reference< XFrameActionListener > xListener(
|
|
static_cast< XFrameActionListener* >( m_xDataListener.get() ), UNO_QUERY );
|
|
m_xFrame->removeFrameActionListener( xListener );
|
|
RemoveBroadcaster();
|
|
m_xDataListener.clear();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
IMPL_LINK( DataNavigatorWindow, ModelSelectHdl, ListBox *, pBox )
|
|
{
|
|
USHORT nPos = m_aModelsBox.GetSelectEntryPos();
|
|
// pBox == NULL, if you want to force a new fill.
|
|
if ( nPos != m_nLastSelectedPos || !pBox )
|
|
{
|
|
m_nLastSelectedPos = nPos;
|
|
ClearAllPageModels( pBox != NULL );
|
|
InitPages();
|
|
SetPageModel();
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
// -----------------------------------------------------------------------
|
|
IMPL_LINK( DataNavigatorWindow, MenuSelectHdl, MenuButton *, pBtn )
|
|
{
|
|
bool bIsDocModified = false;
|
|
Reference< css::xforms::XFormsUIHelper1 > xUIHelper;
|
|
USHORT nSelectedPos = m_aModelsBox.GetSelectEntryPos();
|
|
::rtl::OUString sSelectedModel( m_aModelsBox.GetEntry( nSelectedPos ) );
|
|
Reference< css::xforms::XModel > xModel;
|
|
try
|
|
{
|
|
Any aAny = m_xDataContainer->getByName( sSelectedModel );
|
|
if ( aAny >>= xModel )
|
|
xUIHelper = Reference< css::xforms::XFormsUIHelper1 >( xModel, UNO_QUERY );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
|
|
}
|
|
DBG_ASSERT( xUIHelper.is(), "DataNavigatorWindow::MenuSelectHdl(): no UIHelper" );
|
|
|
|
m_bIsNotifyDisabled = true;
|
|
|
|
if ( &m_aModelBtn == pBtn )
|
|
{
|
|
switch ( pBtn->GetCurItemId() )
|
|
{
|
|
case MID_MODELS_ADD :
|
|
{
|
|
AddModelDialog aDlg( this, false );
|
|
bool bShowDialog = true;
|
|
while ( bShowDialog )
|
|
{
|
|
bShowDialog = false;
|
|
if ( aDlg.Execute() == RET_OK )
|
|
{
|
|
String sNewName = aDlg.GetName();
|
|
sal_Bool bDocumentData = aDlg.GetModifyDoc();
|
|
|
|
if ( m_aModelsBox.GetEntryPos( sNewName ) != LISTBOX_ENTRY_NOTFOUND )
|
|
{
|
|
// error: model name already exists
|
|
ErrorBox aErrBox( this, SVX_RES( RID_ERR_DOUBLE_MODELNAME ) );
|
|
String sMessText = aErrBox.GetMessText();
|
|
sMessText.SearchAndReplace( MSG_VARIABLE, sNewName );
|
|
aErrBox.SetMessText( sMessText );
|
|
aErrBox.Execute();
|
|
bShowDialog = true;
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
// add new model to frame model
|
|
Reference< css::xforms::XModel > xNewModel(
|
|
xUIHelper->newModel( m_xFrameModel, sNewName ), UNO_SET_THROW );
|
|
|
|
Reference< XPropertySet > xModelProps( xNewModel, UNO_QUERY_THROW );
|
|
xModelProps->setPropertyValue(
|
|
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ExternalData" ) ),
|
|
makeAny( sal_Bool( !bDocumentData ) ) );
|
|
|
|
USHORT nNewPos = m_aModelsBox.InsertEntry( sNewName );
|
|
m_aModelsBox.SelectEntryPos( nNewPos );
|
|
ModelSelectHdl( &m_aModelsBox );
|
|
bIsDocModified = true;
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case MID_MODELS_EDIT :
|
|
{
|
|
AddModelDialog aDlg( this, true );
|
|
aDlg.SetName( sSelectedModel );
|
|
|
|
bool bDocumentData( false );
|
|
try
|
|
{
|
|
Reference< css::xforms::XFormsSupplier > xFormsSupp( m_xFrameModel, UNO_QUERY_THROW );
|
|
Reference< XNameContainer > xXForms( xFormsSupp->getXForms(), UNO_SET_THROW );
|
|
Reference< XPropertySet > xModelProps( xXForms->getByName( sSelectedModel ), UNO_QUERY_THROW );
|
|
sal_Bool bExternalData = sal_False;
|
|
OSL_VERIFY( xModelProps->getPropertyValue(
|
|
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ExternalData" ) ) ) >>= bExternalData );
|
|
bDocumentData = ( bExternalData == sal_False );
|
|
}
|
|
catch( const Exception& )
|
|
{
|
|
DBG_UNHANDLED_EXCEPTION();
|
|
}
|
|
aDlg.SetModifyDoc( bDocumentData );
|
|
|
|
if ( aDlg.Execute() == RET_OK )
|
|
{
|
|
if ( aDlg.GetModifyDoc() != bool( bDocumentData ) )
|
|
{
|
|
bDocumentData = aDlg.GetModifyDoc();
|
|
try
|
|
{
|
|
Reference< css::xforms::XFormsSupplier > xFormsSupp( m_xFrameModel, UNO_QUERY_THROW );
|
|
Reference< XNameContainer > xXForms( xFormsSupp->getXForms(), UNO_SET_THROW );
|
|
Reference< XPropertySet > xModelProps( xXForms->getByName( sSelectedModel ), UNO_QUERY_THROW );
|
|
xModelProps->setPropertyValue(
|
|
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ExternalData" ) ),
|
|
makeAny( sal_Bool( !bDocumentData ) ) );
|
|
bIsDocModified = true;
|
|
}
|
|
catch( const Exception& )
|
|
{
|
|
DBG_UNHANDLED_EXCEPTION();
|
|
}
|
|
}
|
|
|
|
String sNewName = aDlg.GetName();
|
|
if ( sNewName.Len() > 0 && ( sNewName != String( sSelectedModel ) ) )
|
|
{
|
|
try
|
|
{
|
|
xUIHelper->renameModel( m_xFrameModel, sSelectedModel, sNewName );
|
|
|
|
m_aModelsBox.RemoveEntry( nSelectedPos );
|
|
nSelectedPos = m_aModelsBox.InsertEntry( sNewName );
|
|
m_aModelsBox.SelectEntryPos( nSelectedPos );
|
|
bIsDocModified = true;
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case MID_MODELS_REMOVE :
|
|
{
|
|
QueryBox aQBox( this, SVX_RES( RID_QRY_REMOVE_MODEL ) );
|
|
String sText = aQBox.GetMessText();
|
|
sText.SearchAndReplace( MODELNAME, sSelectedModel );
|
|
aQBox.SetMessText( sText );
|
|
if ( aQBox.Execute() == RET_YES )
|
|
{
|
|
try
|
|
{
|
|
xUIHelper->removeModel( m_xFrameModel, sSelectedModel );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
|
|
}
|
|
m_aModelsBox.RemoveEntry( nSelectedPos );
|
|
if ( m_aModelsBox.GetEntryCount() <= nSelectedPos )
|
|
nSelectedPos = m_aModelsBox.GetEntryCount() - 1;
|
|
m_aModelsBox.SelectEntryPos( nSelectedPos );
|
|
ModelSelectHdl( &m_aModelsBox );
|
|
bIsDocModified = true;
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): wrong menu item" );
|
|
}
|
|
}
|
|
}
|
|
else if ( &m_aInstanceBtn == pBtn )
|
|
{
|
|
switch ( pBtn->GetCurItemId() )
|
|
{
|
|
case MID_INSTANCES_ADD :
|
|
{
|
|
AddInstanceDialog aDlg( this, false );
|
|
if ( aDlg.Execute() == RET_OK )
|
|
{
|
|
USHORT nInst = GetNewPageId();
|
|
::rtl::OUString sName = aDlg.GetName();
|
|
::rtl::OUString sURL = aDlg.GetURL();
|
|
bool bLinkOnce = aDlg.IsLinkInstance();
|
|
try
|
|
{
|
|
Reference< css::xml::dom::XDocument > xNewInst =
|
|
xUIHelper->newInstance( sName, sURL, !bLinkOnce );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
|
|
}
|
|
ModelSelectHdl( NULL );
|
|
m_aTabCtrl.SetCurPageId( nInst );
|
|
XFormsPage* pPage = GetCurrentPage( nInst );
|
|
pPage->SetInstanceName(sName);
|
|
pPage->SetInstanceURL(sURL);
|
|
pPage->SetLinkOnce(bLinkOnce);
|
|
ActivatePageHdl( &m_aTabCtrl );
|
|
bIsDocModified = true;
|
|
}
|
|
break;
|
|
}
|
|
case MID_INSTANCES_EDIT :
|
|
{
|
|
USHORT nId = 0;
|
|
XFormsPage* pPage = GetCurrentPage( nId );
|
|
if ( pPage )
|
|
{
|
|
AddInstanceDialog aDlg( this, true );
|
|
aDlg.SetName( pPage->GetInstanceName() );
|
|
aDlg.SetURL( pPage->GetInstanceURL() );
|
|
aDlg.SetLinkInstance( pPage->GetLinkOnce() );
|
|
String sOldName = aDlg.GetName();
|
|
if ( aDlg.Execute() == RET_OK )
|
|
{
|
|
String sNewName = aDlg.GetName();
|
|
::rtl::OUString sURL = aDlg.GetURL();
|
|
bool bLinkOnce = aDlg.IsLinkInstance();
|
|
try
|
|
{
|
|
xUIHelper->renameInstance( sOldName,
|
|
sNewName,
|
|
sURL,
|
|
!bLinkOnce );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
|
|
}
|
|
pPage->SetInstanceName(sNewName);
|
|
pPage->SetInstanceURL(sURL);
|
|
pPage->SetLinkOnce(bLinkOnce);
|
|
m_aTabCtrl.SetPageText( nId, sNewName );
|
|
bIsDocModified = true;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case MID_INSTANCES_REMOVE :
|
|
{
|
|
USHORT nId = 0;
|
|
XFormsPage* pPage = GetCurrentPage( nId );
|
|
if ( pPage )
|
|
{
|
|
String sInstName = pPage->GetInstanceName();
|
|
QueryBox aQBox( this, SVX_RES( RID_QRY_REMOVE_INSTANCE ) );
|
|
String sMessText = aQBox.GetMessText();
|
|
sMessText.SearchAndReplace( INSTANCENAME, sInstName );
|
|
aQBox.SetMessText( sMessText );
|
|
if ( aQBox.Execute() == RET_YES )
|
|
{
|
|
bool bDoRemove = false;
|
|
if ( nId > TID_INSTANCE )
|
|
{
|
|
PageList::iterator aPageListEnd = m_aPageList.end();
|
|
PageList::iterator aFoundPage =
|
|
std::find( m_aPageList.begin(), aPageListEnd, pPage );
|
|
if ( aFoundPage != aPageListEnd )
|
|
{
|
|
m_aPageList.erase( aFoundPage );
|
|
delete pPage;
|
|
bDoRemove = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DELETEZ( m_pInstPage );
|
|
bDoRemove = true;
|
|
}
|
|
|
|
if ( bDoRemove )
|
|
{
|
|
try
|
|
{
|
|
xUIHelper->removeInstance( sInstName );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
|
|
}
|
|
m_aTabCtrl.RemovePage( nId );
|
|
m_aTabCtrl.SetCurPageId( TID_INSTANCE );
|
|
ModelSelectHdl( NULL );
|
|
bIsDocModified = true;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case MID_SHOW_DETAILS :
|
|
{
|
|
m_bShowDetails = !m_bShowDetails;
|
|
m_aInstanceBtn.GetPopupMenu()->CheckItem( MID_SHOW_DETAILS, m_bShowDetails );
|
|
ModelSelectHdl( &m_aModelsBox );
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): wrong menu item" );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::MenuSelectHdl(): wrong button" );
|
|
}
|
|
|
|
m_bIsNotifyDisabled = false;
|
|
|
|
if ( bIsDocModified )
|
|
SetDocModified();
|
|
return 0;
|
|
}
|
|
// -----------------------------------------------------------------------
|
|
IMPL_LINK( DataNavigatorWindow, MenuActivateHdl, MenuButton *, pBtn )
|
|
{
|
|
Menu* pMenu = pBtn->GetPopupMenu();
|
|
|
|
if ( &m_aInstanceBtn == pBtn )
|
|
{
|
|
bool bIsInstPage = ( m_aTabCtrl.GetCurPageId() >= TID_INSTANCE );
|
|
pMenu->EnableItem( MID_INSTANCES_EDIT, bIsInstPage );
|
|
pMenu->EnableItem( MID_INSTANCES_REMOVE,
|
|
bIsInstPage && m_aTabCtrl.GetPageCount() > MIN_PAGE_COUNT );
|
|
pMenu->EnableItem( MID_SHOW_DETAILS, bIsInstPage );
|
|
}
|
|
else if ( &m_aModelBtn == pBtn )
|
|
{
|
|
// we need at least one model!
|
|
pMenu->EnableItem( MID_MODELS_REMOVE, m_aModelsBox.GetEntryCount() > 1 );
|
|
}
|
|
else
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::MenuActivateHdl(): wrong button" );
|
|
}
|
|
return 0;
|
|
}
|
|
// -----------------------------------------------------------------------
|
|
IMPL_LINK( DataNavigatorWindow, ActivatePageHdl, TabControl *, EMPTYARG )
|
|
{
|
|
USHORT nId = 0;
|
|
XFormsPage* pPage = GetCurrentPage( nId );
|
|
if ( pPage )
|
|
{
|
|
m_aTabCtrl.SetTabPage( nId, pPage );
|
|
if ( m_xDataContainer.is() && !pPage->HasModel() )
|
|
SetPageModel();
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
// -----------------------------------------------------------------------
|
|
IMPL_LINK( DataNavigatorWindow, UpdateHdl, Timer *, EMPTYARG )
|
|
{
|
|
ModelSelectHdl( NULL );
|
|
return 0;
|
|
}
|
|
// -----------------------------------------------------------------------
|
|
XFormsPage* DataNavigatorWindow::GetCurrentPage( USHORT& rCurId )
|
|
{
|
|
rCurId = m_aTabCtrl.GetCurPageId();
|
|
XFormsPage* pPage = NULL;
|
|
switch ( rCurId )
|
|
{
|
|
case TID_SUBMISSION:
|
|
{
|
|
if ( !m_pSubmissionPage )
|
|
m_pSubmissionPage = new XFormsPage( &m_aTabCtrl, this, DGTSubmission );
|
|
pPage = m_pSubmissionPage;
|
|
break;
|
|
}
|
|
|
|
case TID_BINDINGS:
|
|
{
|
|
if ( !m_pBindingPage )
|
|
m_pBindingPage = new XFormsPage( &m_aTabCtrl, this, DGTBinding );
|
|
pPage = m_pBindingPage;
|
|
break;
|
|
}
|
|
|
|
case TID_INSTANCE:
|
|
{
|
|
if ( !m_pInstPage )
|
|
m_pInstPage = new XFormsPage( &m_aTabCtrl, this, DGTInstance );
|
|
pPage = m_pInstPage;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( rCurId > TID_INSTANCE )
|
|
{
|
|
USHORT nPos = m_aTabCtrl.GetPagePos( rCurId );
|
|
if ( HasFirstInstancePage() && nPos > 0 )
|
|
nPos--;
|
|
if ( m_aPageList.size() > nPos )
|
|
pPage = m_aPageList[nPos];
|
|
else
|
|
{
|
|
pPage = new XFormsPage( &m_aTabCtrl, this, DGTInstance );
|
|
m_aPageList.push_back( pPage );
|
|
}
|
|
}
|
|
|
|
return pPage;
|
|
}
|
|
// -----------------------------------------------------------------------
|
|
void DataNavigatorWindow::LoadModels()
|
|
{
|
|
if ( !m_xFrameModel.is() )
|
|
{
|
|
// get model of active frame
|
|
Reference< XController > xCtrl = m_xFrame->getController();
|
|
if ( xCtrl.is() )
|
|
{
|
|
try
|
|
{
|
|
m_xFrameModel = xCtrl->getModel();
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::LoadModels(): exception caught" );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( m_xFrameModel.is() )
|
|
{
|
|
try
|
|
{
|
|
::rtl::OUString sURL = m_xFrameModel->getURL();
|
|
Reference< css::xforms::XFormsSupplier > xFormsSupp( m_xFrameModel, UNO_QUERY );
|
|
if ( xFormsSupp.is() )
|
|
{
|
|
Reference< XNameContainer > xContainer = xFormsSupp->getXForms();
|
|
if ( xContainer.is() )
|
|
{
|
|
m_xDataContainer = xContainer;
|
|
Sequence< ::rtl::OUString > aNameList = m_xDataContainer->getElementNames();
|
|
sal_Int32 i, nCount = aNameList.getLength();
|
|
::rtl::OUString* pNames = aNameList.getArray();
|
|
for ( i = 0; i < nCount; ++i )
|
|
{
|
|
Any aAny = m_xDataContainer->getByName( pNames[i] );
|
|
Reference< css::xforms::XModel > xFormsModel;
|
|
if ( aAny >>= xFormsModel )
|
|
m_aModelsBox.InsertEntry( xFormsModel->getID() );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::LoadModels(): exception caught" );
|
|
}
|
|
}
|
|
|
|
if ( m_aModelsBox.GetEntryCount() > 0 )
|
|
{
|
|
m_aModelsBox.SelectEntryPos(0);
|
|
ModelSelectHdl( &m_aModelsBox );
|
|
}
|
|
}
|
|
// -----------------------------------------------------------------------
|
|
void DataNavigatorWindow::SetPageModel()
|
|
{
|
|
rtl::OUString sModel( m_aModelsBox.GetSelectEntry() );
|
|
try
|
|
{
|
|
Any aAny = m_xDataContainer->getByName( sModel );
|
|
Reference< css::xforms::XModel > xFormsModel;
|
|
if ( aAny >>= xFormsModel )
|
|
{
|
|
USHORT nPagePos = TAB_PAGE_NOTFOUND;
|
|
USHORT nId = 0;
|
|
XFormsPage* pPage = GetCurrentPage( nId );
|
|
DBG_ASSERT( pPage, "DataNavigatorWindow::SetPageModel(): no page" );
|
|
if ( nId >= TID_INSTANCE )
|
|
// instance page
|
|
nPagePos = m_aTabCtrl.GetPagePos( nId );
|
|
m_bIsNotifyDisabled = true;
|
|
String sText = pPage->SetModel( xFormsModel, nPagePos );
|
|
m_bIsNotifyDisabled = false;
|
|
if ( sText.Len() > 0 )
|
|
m_aTabCtrl.SetPageText( nId, sText );
|
|
}
|
|
}
|
|
catch ( NoSuchElementException& )
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::SetPageModel(): no such element" );
|
|
}
|
|
catch( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::SetPageModel(): unexpected exception" );
|
|
}
|
|
}
|
|
// -----------------------------------------------------------------------
|
|
void DataNavigatorWindow::InitPages()
|
|
{
|
|
rtl::OUString sModel( m_aModelsBox.GetSelectEntry() );
|
|
try
|
|
{
|
|
Any aAny = m_xDataContainer->getByName( sModel );
|
|
Reference< css::xforms::XModel > xModel;
|
|
if ( aAny >>= xModel )
|
|
{
|
|
Reference< XEnumerationAccess > xNumAccess( xModel->getInstances(), UNO_QUERY );
|
|
if ( xNumAccess.is() )
|
|
{
|
|
Reference < XEnumeration > xNum = xNumAccess->createEnumeration();
|
|
if ( xNum.is() && xNum->hasMoreElements() )
|
|
{
|
|
sal_Int32 nAlreadyLoadedCount = m_aPageList.size();
|
|
if ( !HasFirstInstancePage() && nAlreadyLoadedCount > 0 )
|
|
nAlreadyLoadedCount--;
|
|
sal_Int32 nIdx = 0;
|
|
while ( xNum->hasMoreElements() )
|
|
{
|
|
if ( nIdx > nAlreadyLoadedCount )
|
|
{
|
|
Sequence< PropertyValue > xPropSeq;
|
|
if ( xNum->nextElement() >>= xPropSeq )
|
|
CreateInstancePage( xPropSeq );
|
|
else
|
|
{
|
|
DBG_ERRORFILE( "DataNavigator::InitPages(): invalid instance" );
|
|
}
|
|
}
|
|
else
|
|
xNum->nextElement();
|
|
nIdx++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch ( NoSuchElementException& )
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::SetPageModel(): no such element" );
|
|
}
|
|
catch( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::SetPageModel(): unexpected exception" );
|
|
}
|
|
}
|
|
// -----------------------------------------------------------------------
|
|
void DataNavigatorWindow::ClearAllPageModels( bool bClearPages )
|
|
{
|
|
if ( m_pInstPage )
|
|
m_pInstPage->ClearModel();
|
|
if ( m_pSubmissionPage )
|
|
m_pSubmissionPage->ClearModel();
|
|
if ( m_pBindingPage )
|
|
m_pBindingPage->ClearModel();
|
|
|
|
sal_Int32 i, nCount = m_aPageList.size();
|
|
for ( i = 0; i < nCount; ++i )
|
|
{
|
|
XFormsPage* pPage = m_aPageList[i];
|
|
pPage->ClearModel();
|
|
if ( bClearPages )
|
|
delete pPage;
|
|
}
|
|
|
|
if ( bClearPages )
|
|
{
|
|
m_aPageList.clear();
|
|
while ( m_aTabCtrl.GetPageCount() > MIN_PAGE_COUNT )
|
|
m_aTabCtrl.RemovePage( m_aTabCtrl.GetPageId( 1 ) );
|
|
}
|
|
}
|
|
// -----------------------------------------------------------------------
|
|
void DataNavigatorWindow::CreateInstancePage( const Sequence< PropertyValue >& _xPropSeq )
|
|
{
|
|
rtl::OUString sInstName;
|
|
rtl::OUString sID( PN_INSTANCE_ID );
|
|
const PropertyValue* pProps = _xPropSeq.getConstArray();
|
|
const PropertyValue* pPropsEnd = pProps + _xPropSeq.getLength();
|
|
for ( ; pProps != pPropsEnd; ++pProps )
|
|
{
|
|
if ( sID.compareTo( pProps->Name ) == 0 )
|
|
{
|
|
pProps->Value >>= sInstName;
|
|
break;
|
|
}
|
|
}
|
|
|
|
USHORT nPageId = GetNewPageId();
|
|
if ( sInstName.getLength() == 0 )
|
|
{
|
|
DBG_ERRORFILE( "DataNavigatorWindow::CreateInstancePage(): instance without name" );
|
|
String sTemp = String::CreateFromAscii( "untitled" );
|
|
sTemp += String::CreateFromInt32( nPageId );
|
|
sInstName = sTemp;
|
|
}
|
|
m_aTabCtrl.InsertPage( nPageId, sInstName, m_aTabCtrl.GetPageCount() - 2 );
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
bool DataNavigatorWindow::HasFirstInstancePage() const
|
|
{
|
|
return ( m_aTabCtrl.GetPageId( 0 ) == TID_INSTANCE );
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
USHORT DataNavigatorWindow::GetNewPageId() const
|
|
{
|
|
USHORT i, nMax = 0, nCount = m_aTabCtrl.GetPageCount();
|
|
for ( i = 0; i < nCount; ++i )
|
|
{
|
|
if ( nMax < m_aTabCtrl.GetPageId(i) )
|
|
nMax = m_aTabCtrl.GetPageId(i);
|
|
}
|
|
return ( nMax + 1 );
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
void DataNavigatorWindow::Resize()
|
|
{
|
|
Window::Resize();
|
|
|
|
Size aOutSz = GetOutputSizePixel();
|
|
long nWidth = Max( aOutSz.Width(), m_nMinWidth );
|
|
long nHeight = Max( aOutSz.Height(), m_nMinHeight );
|
|
|
|
Size aSz = m_aModelsBox.GetSizePixel();
|
|
aSz.Width() = nWidth - 3*m_a3Size.Width() - m_aModelBtn.GetSizePixel().Width();
|
|
m_aModelsBox.SetSizePixel( aSz );
|
|
Point aPos = m_aModelBtn.GetPosPixel();
|
|
aPos.X() = m_aModelsBox.GetPosPixel().X() + aSz.Width() + m_a3Size.Width();
|
|
m_aModelBtn.SetPosPixel( aPos );
|
|
|
|
aSz = m_aTabCtrl.GetSizePixel();
|
|
aSz.Width() = nWidth - 2*m_a3Size.Width();
|
|
aSz.Height() = nHeight - m_nBorderHeight;
|
|
m_aTabCtrl.SetSizePixel( aSz );
|
|
// Instance button positioning
|
|
aPos = m_aInstanceBtn.GetPosPixel();
|
|
// right aligned
|
|
aPos.X() = nWidth - m_aInstanceBtn.GetSizePixel().Width() - m_a3Size.Width();
|
|
// under the tabcontrol
|
|
aPos.Y() = m_aTabCtrl.GetPosPixel().Y() + aSz.Height() + m_a3Size.Height();
|
|
m_aInstanceBtn.SetPosPixel( aPos );
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
void DataNavigatorWindow::SetDocModified()
|
|
{
|
|
SfxObjectShell* pCurrentDoc = SfxObjectShell::Current();
|
|
DBG_ASSERT( pCurrentDoc, "DataNavigatorWindow::SetDocModified(): no objectshell" );
|
|
if ( !pCurrentDoc->IsModified() && pCurrentDoc->IsEnableSetModified() )
|
|
pCurrentDoc->SetModified();
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
void DataNavigatorWindow::NotifyChanges( bool _bLoadAll )
|
|
{
|
|
if ( !m_bIsNotifyDisabled )
|
|
{
|
|
if ( _bLoadAll )
|
|
{
|
|
// reset all members
|
|
RemoveBroadcaster();
|
|
m_xDataContainer.clear();
|
|
m_xFrameModel.clear();
|
|
m_aModelsBox.Clear();
|
|
m_nLastSelectedPos = LISTBOX_ENTRY_NOTFOUND;
|
|
// for a reload
|
|
LoadModels();
|
|
}
|
|
else
|
|
m_aUpdateTimer.Start();
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
void DataNavigatorWindow::AddContainerBroadcaster( const XContainer_ref& xContainer )
|
|
{
|
|
Reference< XContainerListener > xListener(
|
|
static_cast< XContainerListener* >( m_xDataListener.get() ), UNO_QUERY );
|
|
xContainer->addContainerListener( xListener );
|
|
m_aContainerList.push_back( xContainer );
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
void DataNavigatorWindow::AddEventBroadcaster( const XEventTarget_ref& xTarget )
|
|
{
|
|
Reference< XEventListener > xListener(
|
|
static_cast< XEventListener* >( m_xDataListener.get() ), UNO_QUERY );
|
|
xTarget->addEventListener( EVENTTYPE_CHARDATA, xListener, true );
|
|
xTarget->addEventListener( EVENTTYPE_CHARDATA, xListener, false );
|
|
xTarget->addEventListener( EVENTTYPE_ATTR, xListener, true );
|
|
xTarget->addEventListener( EVENTTYPE_ATTR, xListener, false );
|
|
m_aEventTargetList.push_back( xTarget );
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
void DataNavigatorWindow::RemoveBroadcaster()
|
|
{
|
|
Reference< XContainerListener > xContainerListener(
|
|
static_cast< XContainerListener* >( m_xDataListener.get() ), UNO_QUERY );
|
|
sal_Int32 i, nCount = m_aContainerList.size();
|
|
for ( i = 0; i < nCount; ++i )
|
|
m_aContainerList[i]->removeContainerListener( xContainerListener );
|
|
Reference< XEventListener > xEventListener(
|
|
static_cast< XEventListener* >( m_xDataListener.get() ), UNO_QUERY );
|
|
nCount = m_aEventTargetList.size();
|
|
for ( i = 0; i < nCount; ++i )
|
|
{
|
|
m_aEventTargetList[i]->removeEventListener( EVENTTYPE_CHARDATA, xEventListener, true );
|
|
m_aEventTargetList[i]->removeEventListener( EVENTTYPE_CHARDATA, xEventListener, false );
|
|
m_aEventTargetList[i]->removeEventListener( EVENTTYPE_ATTR, xEventListener, true );
|
|
m_aEventTargetList[i]->removeEventListener( EVENTTYPE_ATTR, xEventListener, false );
|
|
}
|
|
}
|
|
|
|
//========================================================================
|
|
// class DataNavigator
|
|
//========================================================================
|
|
DBG_NAME(DataNavigator)
|
|
//------------------------------------------------------------------------
|
|
DataNavigator::DataNavigator( SfxBindings* _pBindings, SfxChildWindow* _pMgr, Window* _pParent ) :
|
|
|
|
SfxDockingWindow( _pBindings, _pMgr, _pParent,
|
|
WinBits(WB_STDMODELESS|WB_SIZEABLE|WB_ROLLABLE|WB_3DLOOK|WB_DOCKABLE) ),
|
|
SfxControllerItem( SID_FM_DATANAVIGATOR_CONTROL, *_pBindings ),
|
|
|
|
m_aDataWin( this, _pBindings )
|
|
|
|
{
|
|
DBG_CTOR(DataNavigator,NULL);
|
|
|
|
SetHelpId( HID_DATA_NAVIGATOR_WIN );
|
|
SetText( SVX_RES( RID_STR_DATANAVIGATOR ) );
|
|
|
|
Size aSize = m_aDataWin.GetOutputSizePixel();
|
|
Size aLogSize = PixelToLogic( aSize, MAP_APPFONT );
|
|
SfxDockingWindow::SetFloatingSize( aLogSize );
|
|
|
|
m_aDataWin.Show();
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
DataNavigator::~DataNavigator()
|
|
{
|
|
DBG_DTOR(DataNavigator,NULL);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
void DataNavigator::Update( FmFormShell* /*pFormShell*/ )
|
|
{
|
|
}
|
|
//-----------------------------------------------------------------------
|
|
void DataNavigator::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
|
|
{
|
|
if ( !pState || SID_FM_DATANAVIGATOR_CONTROL != nSID )
|
|
return;
|
|
|
|
if ( eState >= SFX_ITEM_AVAILABLE )
|
|
{
|
|
FmFormShell* pShell = PTR_CAST( FmFormShell,((SfxObjectItem*)pState)->GetShell() );
|
|
Update( pShell );
|
|
}
|
|
else
|
|
Update( NULL );
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
void DataNavigator::GetFocus()
|
|
{
|
|
SfxDockingWindow::GetFocus();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
sal_Bool DataNavigator::Close()
|
|
{
|
|
Update( NULL );
|
|
return SfxDockingWindow::Close();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
Size DataNavigator::CalcDockingSize( SfxChildAlignment eAlign )
|
|
{
|
|
if ( ( eAlign == SFX_ALIGN_TOP ) || ( eAlign == SFX_ALIGN_BOTTOM ) )
|
|
return Size();
|
|
|
|
return SfxDockingWindow::CalcDockingSize( eAlign );
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
SfxChildAlignment DataNavigator::CheckAlignment( SfxChildAlignment eActAlign, SfxChildAlignment eAlign )
|
|
{
|
|
switch ( eAlign )
|
|
{
|
|
case SFX_ALIGN_LEFT:
|
|
case SFX_ALIGN_RIGHT:
|
|
case SFX_ALIGN_NOALIGNMENT:
|
|
return eAlign;
|
|
default:
|
|
break;
|
|
}
|
|
return eActAlign;
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
void DataNavigator::Resize()
|
|
{
|
|
SfxDockingWindow::Resize();
|
|
|
|
Size aLogOutputSize = PixelToLogic( GetOutputSizePixel(), MAP_APPFONT );
|
|
Size aLogExplSize = aLogOutputSize;
|
|
aLogExplSize.Width() -= 2;
|
|
aLogExplSize.Height() -= 2;
|
|
|
|
Point aExplPos = LogicToPixel( Point(1,1), MAP_APPFONT );
|
|
Size aExplSize = LogicToPixel( aLogExplSize, MAP_APPFONT );
|
|
|
|
m_aDataWin.SetPosSizePixel( aExplPos, aExplSize );
|
|
}
|
|
|
|
|
|
//========================================================================
|
|
// class NavigatorFrameManager
|
|
//========================================================================
|
|
|
|
//-----------------------------------------------------------------------
|
|
SFX_IMPL_DOCKINGWINDOW( DataNavigatorManager, SID_FM_SHOW_DATANAVIGATOR )
|
|
|
|
//-----------------------------------------------------------------------
|
|
DataNavigatorManager::DataNavigatorManager(
|
|
Window* _pParent, sal_uInt16 _nId, SfxBindings* _pBindings, SfxChildWinInfo* _pInfo ) :
|
|
|
|
SfxChildWindow( _pParent, _nId )
|
|
|
|
{
|
|
pWindow = new DataNavigator( _pBindings, this, _pParent );
|
|
eChildAlignment = SFX_ALIGN_RIGHT;
|
|
pWindow->SetSizePixel( Size( 250, 400 ) );
|
|
( (SfxDockingWindow*)pWindow )->Initialize( _pInfo );
|
|
}
|
|
|
|
//========================================================================
|
|
// class AddDataItemDialog
|
|
//========================================================================
|
|
|
|
AddDataItemDialog::AddDataItemDialog(
|
|
Window* pParent, ItemNode* _pNode,
|
|
const Reference< css::xforms::XFormsUIHelper1 >& _rUIHelper ) :
|
|
|
|
ModalDialog( pParent, SVX_RES( RID_SVXDLG_ADD_DATAITEM ) ),
|
|
|
|
m_aItemFL ( this, SVX_RES( FL_ITEM ) ),
|
|
m_aNameFT ( this, SVX_RES( FT_NAME ) ),
|
|
m_aNameED ( this, SVX_RES( ED_NAME ) ),
|
|
m_aDefaultFT ( this, SVX_RES( FT_DEFAULT ) ),
|
|
m_aDefaultED ( this, SVX_RES( ED_DEFAULT ) ),
|
|
m_aDefaultBtn ( this, SVX_RES( PB_DEFAULT ) ),
|
|
m_aSettingsFL ( this, SVX_RES( FL_SETTINGS ) ),
|
|
m_aDataTypeFT ( this, SVX_RES( FT_DATATYPE ) ),
|
|
m_aDataTypeLB ( this, SVX_RES( LB_DATATYPE ) ),
|
|
m_aRequiredCB ( this, SVX_RES( CB_REQUIRED ) ),
|
|
m_aRequiredBtn ( this, SVX_RES( PB_REQUIRED ) ),
|
|
m_aRelevantCB ( this, SVX_RES( CB_RELEVANT ) ),
|
|
m_aRelevantBtn ( this, SVX_RES( PB_RELEVANT ) ),
|
|
m_aConstraintCB ( this, SVX_RES( CB_CONSTRAINT ) ),
|
|
m_aConstraintBtn( this, SVX_RES( PB_CONSTRAINT ) ),
|
|
m_aReadonlyCB ( this, SVX_RES( CB_READONLY ) ),
|
|
m_aReadonlyBtn ( this, SVX_RES( PB_READONLY ) ),
|
|
m_aCalculateCB ( this, SVX_RES( CB_CALCULATE ) ),
|
|
m_aCalculateBtn ( this, SVX_RES( PB_CALCULATE ) ),
|
|
m_aButtonsFL ( this, SVX_RES( FL_DATANAV_BTN ) ),
|
|
m_aOKBtn ( this, SVX_RES( BTN_DATANAV_OK ) ),
|
|
m_aEscBtn ( this, SVX_RES( BTN_DATANAV_ESC ) ),
|
|
m_aHelpBtn ( this, SVX_RES( BTN_DATANAV_HELP ) ),
|
|
|
|
m_xUIHelper ( _rUIHelper ),
|
|
m_pItemNode ( _pNode ),
|
|
m_eItemType ( DITNone ),
|
|
m_sFL_Element ( SVX_RES( STR_FIXEDLINE_ELEMENT ) ),
|
|
m_sFL_Attribute ( SVX_RES( STR_FIXEDLINE_ATTRIBUTE ) ),
|
|
m_sFL_Binding ( SVX_RES( STR_FIXEDLINE_BINDING ) ),
|
|
m_sFT_BindingExp( SVX_RES( STR_FIXEDTEXT_BINDING ) )
|
|
|
|
{
|
|
FreeResource();
|
|
m_aDataTypeLB.SetDropDownLineCount( 10 );
|
|
|
|
InitDialog();
|
|
InitFromNode();
|
|
InitDataTypeBox();
|
|
CheckHdl( NULL );
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
AddDataItemDialog::~AddDataItemDialog()
|
|
{
|
|
if ( m_xTempBinding.is() )
|
|
{
|
|
Reference< css::xforms::XModel > xModel( m_xUIHelper, UNO_QUERY );
|
|
if ( xModel.is() )
|
|
{
|
|
try
|
|
{
|
|
Reference < XSet > xBindings = xModel->getBindings();
|
|
if ( xBindings.is() )
|
|
xBindings->remove( makeAny( m_xTempBinding ) );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddDataItemDialog::Dtor(): exception caught" );
|
|
}
|
|
}
|
|
}
|
|
if( m_xUIHelper.is() && m_xBinding.is() )
|
|
{
|
|
// remove binding, if it does not convey 'useful' information
|
|
m_xUIHelper->removeBindingIfUseless( m_xBinding );
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
IMPL_LINK( AddDataItemDialog, CheckHdl, CheckBox *, pBox )
|
|
{
|
|
// Condition buttons are only enable if their check box is checked
|
|
m_aReadonlyBtn.Enable( m_aReadonlyCB.IsChecked() );
|
|
m_aRequiredBtn.Enable( m_aRequiredCB.IsChecked() );
|
|
m_aRelevantBtn.Enable( m_aRelevantCB.IsChecked() );
|
|
m_aConstraintBtn.Enable( m_aConstraintCB.IsChecked() );
|
|
m_aCalculateBtn.Enable( m_aCalculateCB.IsChecked() );
|
|
|
|
if ( pBox && m_xTempBinding.is() )
|
|
{
|
|
::rtl::OUString sTemp, sPropName;
|
|
if ( &m_aRequiredCB == pBox )
|
|
sPropName = PN_REQUIRED_EXPR;
|
|
else if ( &m_aRelevantCB == pBox )
|
|
sPropName = PN_RELEVANT_EXPR;
|
|
else if ( &m_aConstraintCB == pBox )
|
|
sPropName = PN_CONSTRAINT_EXPR;
|
|
else if ( &m_aReadonlyCB == pBox )
|
|
sPropName = PN_READONLY_EXPR;
|
|
else if ( &m_aCalculateCB == pBox )
|
|
sPropName = PN_CALCULATE_EXPR;
|
|
bool bIsChecked = ( pBox->IsChecked() != FALSE );
|
|
m_xTempBinding->getPropertyValue( sPropName ) >>= sTemp;
|
|
if ( bIsChecked && sTemp.getLength() == 0 )
|
|
sTemp = TRUE_VALUE;
|
|
else if ( !bIsChecked && sTemp.getLength() > 0 )
|
|
sTemp = ::rtl::OUString();
|
|
m_xTempBinding->setPropertyValue( sPropName, makeAny( sTemp ) );
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
IMPL_LINK( AddDataItemDialog, ConditionHdl, PushButton *, pBtn )
|
|
{
|
|
::rtl::OUString sTemp, sPropName;
|
|
if ( &m_aDefaultBtn == pBtn )
|
|
sPropName = PN_BINDING_EXPR;
|
|
else if ( &m_aRequiredBtn == pBtn )
|
|
sPropName = PN_REQUIRED_EXPR;
|
|
else if ( &m_aRelevantBtn == pBtn )
|
|
sPropName = PN_RELEVANT_EXPR;
|
|
else if ( &m_aConstraintBtn == pBtn )
|
|
sPropName = PN_CONSTRAINT_EXPR;
|
|
else if ( &m_aReadonlyBtn == pBtn )
|
|
sPropName = PN_READONLY_EXPR;
|
|
else if ( &m_aCalculateBtn == pBtn )
|
|
sPropName = PN_CALCULATE_EXPR;
|
|
AddConditionDialog aDlg( this, sPropName, m_xTempBinding );
|
|
bool bIsDefBtn = ( &m_aDefaultBtn == pBtn );
|
|
String sCondition;
|
|
if ( bIsDefBtn )
|
|
sCondition = m_aDefaultED.GetText();
|
|
else
|
|
{
|
|
m_xTempBinding->getPropertyValue( sPropName ) >>= sTemp;
|
|
if ( sTemp.getLength() == 0 )
|
|
sTemp = TRUE_VALUE;
|
|
sCondition = sTemp;
|
|
}
|
|
aDlg.SetCondition( sCondition );
|
|
|
|
if ( aDlg.Execute() == RET_OK )
|
|
{
|
|
String sNewCondition = aDlg.GetCondition();
|
|
if ( bIsDefBtn )
|
|
m_aDefaultED.SetText( sNewCondition );
|
|
else
|
|
{
|
|
|
|
m_xTempBinding->setPropertyValue(
|
|
sPropName, makeAny( ::rtl::OUString( sNewCondition ) ) );
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void copyPropSet( const Reference< XPropertySet >& xFrom, Reference< XPropertySet >& xTo )
|
|
{
|
|
DBG_ASSERT( xFrom.is(), "copyPropSet(): no source" );
|
|
DBG_ASSERT( xTo.is(), "copyPropSet(): no target" );
|
|
|
|
try
|
|
{
|
|
// get property names & infos, and iterate over target properties
|
|
Sequence< Property > aProperties = xTo->getPropertySetInfo()->getProperties();
|
|
sal_Int32 nProperties = aProperties.getLength();
|
|
const Property* pProperties = aProperties.getConstArray();
|
|
Reference< XPropertySetInfo > xFromInfo = xFrom->getPropertySetInfo();
|
|
for ( sal_Int32 i = 0; i < nProperties; ++i )
|
|
{
|
|
const ::rtl::OUString& rName = pProperties[i].Name;
|
|
|
|
// if both set have the property, copy the value
|
|
// (catch and ignore exceptions, if any)
|
|
if ( xFromInfo->hasPropertyByName( rName ) )
|
|
{
|
|
// don't set readonly properties
|
|
Property aProperty = xFromInfo->getPropertyByName( rName );
|
|
if ( ( aProperty.Attributes & PropertyAttribute::READONLY ) == 0 )
|
|
xTo->setPropertyValue(rName, xFrom->getPropertyValue( rName ));
|
|
}
|
|
// else: no property? then ignore.
|
|
}
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "copyPropSet(): exception caught" );
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
IMPL_LINK( AddDataItemDialog, OKHdl, OKButton *, EMPTYARG )
|
|
{
|
|
bool bIsHandleBinding = ( DITBinding == m_eItemType );
|
|
bool bIsHandleText = ( DITText == m_eItemType );
|
|
::rtl::OUString sNewName( m_aNameED.GetText() );
|
|
|
|
if ( ( !bIsHandleBinding && !bIsHandleText && !m_xUIHelper->isValidXMLName( sNewName ) ) ||
|
|
( bIsHandleBinding && sNewName.getLength() == 0 ) )
|
|
{
|
|
// Error and don't close the dialog
|
|
ErrorBox aErrBox( this, SVX_RES( RID_ERR_INVALID_XMLNAME ) );
|
|
String sMessText = aErrBox.GetMessText();
|
|
sMessText.SearchAndReplace( MSG_VARIABLE, sNewName );
|
|
aErrBox.SetMessText( sMessText );
|
|
aErrBox.Execute();
|
|
return 0;
|
|
}
|
|
|
|
::rtl::OUString sDataType( m_aDataTypeLB.GetSelectEntry() );
|
|
m_xTempBinding->setPropertyValue( PN_BINDING_TYPE, makeAny( sDataType ) );
|
|
|
|
if ( bIsHandleBinding )
|
|
{
|
|
// copy properties from temp binding to original binding
|
|
copyPropSet( m_xTempBinding, m_pItemNode->m_xPropSet );
|
|
try
|
|
{
|
|
::rtl::OUString sValue = m_aNameED.GetText();
|
|
m_pItemNode->m_xPropSet->setPropertyValue( PN_BINDING_ID, makeAny( sValue ) );
|
|
sValue = m_aDefaultED.GetText();
|
|
m_pItemNode->m_xPropSet->setPropertyValue( PN_BINDING_EXPR, makeAny( sValue ) );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddDataDialog::OKHdl(): exception caught" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// copy properties from temp binding to original binding
|
|
copyPropSet( m_xTempBinding, m_xBinding );
|
|
try
|
|
{
|
|
if ( bIsHandleText )
|
|
m_xUIHelper->setNodeValue( m_pItemNode->m_xNode, m_aDefaultED.GetText() );
|
|
else
|
|
{
|
|
Reference< css::xml::dom::XNode > xNewNode =
|
|
m_xUIHelper->renameNode( m_pItemNode->m_xNode, m_aNameED.GetText() );
|
|
m_xUIHelper->setNodeValue( xNewNode, m_aDefaultED.GetText() );
|
|
m_pItemNode->m_xNode = xNewNode;
|
|
}
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddDataDialog::OKHdl(): exception caught" );
|
|
}
|
|
}
|
|
// then close the dialog
|
|
EndDialog( RET_OK );
|
|
return 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
void AddDataItemDialog::InitDialog()
|
|
{
|
|
// set handler
|
|
Link aLink = LINK( this, AddDataItemDialog, CheckHdl );
|
|
m_aRequiredCB.SetClickHdl( aLink );
|
|
m_aRelevantCB.SetClickHdl( aLink );
|
|
m_aConstraintCB.SetClickHdl( aLink );
|
|
m_aReadonlyCB.SetClickHdl( aLink );
|
|
m_aCalculateCB.SetClickHdl( aLink );
|
|
|
|
aLink = LINK( this, AddDataItemDialog, ConditionHdl );
|
|
m_aDefaultBtn.SetClickHdl( aLink );
|
|
m_aRequiredBtn.SetClickHdl( aLink );
|
|
m_aRelevantBtn.SetClickHdl( aLink );
|
|
m_aConstraintBtn.SetClickHdl( aLink );
|
|
m_aReadonlyBtn.SetClickHdl( aLink );
|
|
m_aCalculateBtn.SetClickHdl( aLink );
|
|
|
|
m_aOKBtn.SetClickHdl( LINK( this, AddDataItemDialog, OKHdl ) );
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
void AddDataItemDialog::InitFromNode()
|
|
{
|
|
if ( m_pItemNode )
|
|
{
|
|
if ( m_pItemNode->m_xNode.is() )
|
|
{
|
|
try
|
|
{
|
|
// detect type of the node
|
|
css::xml::dom::NodeType eChildType = m_pItemNode->m_xNode->getNodeType();
|
|
switch ( eChildType )
|
|
{
|
|
case css::xml::dom::NodeType_ATTRIBUTE_NODE:
|
|
m_eItemType = DITAttribute;
|
|
break;
|
|
case css::xml::dom::NodeType_ELEMENT_NODE:
|
|
m_eItemType = DITElement;
|
|
break;
|
|
case css::xml::dom::NodeType_TEXT_NODE:
|
|
m_eItemType = DITText;
|
|
break;
|
|
default:
|
|
DBG_ERROR( "AddDataItemDialog::InitFronNode: cannot handle this node type!" );
|
|
break;
|
|
}
|
|
|
|
/** Get binding of the node and clone it
|
|
Then use this temporary binding in the dialog.
|
|
When the user click OK the temporary binding will be copied
|
|
into the original binding.
|
|
*/
|
|
|
|
Reference< css::xml::dom::XNode > xNode = m_pItemNode->m_xNode;
|
|
m_xBinding = m_xUIHelper->getBindingForNode( xNode, sal_True );
|
|
if ( m_xBinding.is() )
|
|
{
|
|
Reference< css::xforms::XModel > xModel( m_xUIHelper, UNO_QUERY );
|
|
if ( xModel.is() )
|
|
{
|
|
m_xTempBinding = m_xUIHelper->cloneBindingAsGhost( m_xBinding );
|
|
Reference < XSet > xBindings = xModel->getBindings();
|
|
if ( xBindings.is() )
|
|
xBindings->insert( makeAny( m_xTempBinding ) );
|
|
}
|
|
}
|
|
|
|
if ( m_eItemType != DITText )
|
|
{
|
|
::rtl::OUString sName( m_xUIHelper->getNodeName( m_pItemNode->m_xNode ) );
|
|
m_aNameED.SetText( sName );
|
|
}
|
|
m_aDefaultED.SetText( m_pItemNode->m_xNode->getNodeValue() );
|
|
}
|
|
catch( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddDataItemDialog::InitFromNode(): exception caught" );
|
|
}
|
|
}
|
|
else if ( m_pItemNode->m_xPropSet.is() )
|
|
{
|
|
m_eItemType = DITBinding;
|
|
Reference< css::xforms::XModel > xModel( m_xUIHelper, UNO_QUERY );
|
|
if ( xModel.is() )
|
|
{
|
|
try
|
|
{
|
|
m_xTempBinding = m_xUIHelper->cloneBindingAsGhost( m_pItemNode->m_xPropSet );
|
|
Reference < XSet > xBindings = xModel->getBindings();
|
|
if ( xBindings.is() )
|
|
xBindings->insert( makeAny( m_xTempBinding ) );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddDataItemDialog::InitFromNode(): exception caught" );
|
|
}
|
|
}
|
|
rtl::OUString sTemp;
|
|
try
|
|
{
|
|
Reference< XPropertySetInfo > xInfo = m_pItemNode->m_xPropSet->getPropertySetInfo();
|
|
if ( xInfo->hasPropertyByName( PN_BINDING_ID ) )
|
|
{
|
|
m_pItemNode->m_xPropSet->getPropertyValue( PN_BINDING_ID ) >>= sTemp;
|
|
m_aNameED.SetText( sTemp );
|
|
m_pItemNode->m_xPropSet->getPropertyValue( PN_BINDING_EXPR ) >>= sTemp;
|
|
m_aDefaultED.SetText( sTemp );
|
|
}
|
|
else if ( xInfo->hasPropertyByName( PN_SUBMISSION_BIND ) )
|
|
{
|
|
m_pItemNode->m_xPropSet->getPropertyValue( PN_SUBMISSION_ID ) >>= sTemp;
|
|
m_aNameED.SetText( sTemp );
|
|
}
|
|
}
|
|
catch( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddDataItemDialog::InitFromNode(): exception caught" );
|
|
}
|
|
|
|
Size a3and1Sz = LogicToPixel( Size( 3, 1 ), MAP_APPFONT );
|
|
Size aNewSz = m_aDefaultED.GetSizePixel();
|
|
Point aNewPnt = m_aDefaultED.GetPosPixel();
|
|
aNewPnt.Y() += a3and1Sz.Height();
|
|
aNewSz.Width() -= ( m_aDefaultBtn.GetSizePixel().Width() + a3and1Sz.Width() );
|
|
m_aDefaultED.SetPosSizePixel( aNewPnt, aNewSz );
|
|
m_aDefaultBtn.Show();
|
|
}
|
|
|
|
if ( m_xTempBinding.is() )
|
|
{
|
|
::rtl::OUString sTemp;
|
|
try
|
|
{
|
|
if ( ( m_xTempBinding->getPropertyValue( PN_REQUIRED_EXPR ) >>= sTemp )
|
|
&& sTemp.getLength() > 0 )
|
|
m_aRequiredCB.Check( TRUE );
|
|
if ( ( m_xTempBinding->getPropertyValue( PN_RELEVANT_EXPR ) >>= sTemp )
|
|
&& sTemp.getLength() > 0 )
|
|
m_aRelevantCB.Check( TRUE );
|
|
if ( ( m_xTempBinding->getPropertyValue( PN_CONSTRAINT_EXPR ) >>= sTemp )
|
|
&& sTemp.getLength() > 0 )
|
|
m_aConstraintCB.Check( TRUE );
|
|
if ( ( m_xTempBinding->getPropertyValue( PN_READONLY_EXPR ) >>= sTemp )
|
|
&& sTemp.getLength() > 0 )
|
|
m_aReadonlyCB.Check( TRUE );
|
|
if ( ( m_xTempBinding->getPropertyValue( PN_CALCULATE_EXPR ) >>= sTemp )
|
|
&& sTemp.getLength() > 0 )
|
|
m_aCalculateCB.Check( TRUE );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddDataItemDialog::InitFromNode(): exception caught" );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( DITText == m_eItemType )
|
|
{
|
|
long nDelta = m_aButtonsFL.GetPosPixel().Y() - m_aSettingsFL.GetPosPixel().Y();
|
|
size_t i = 0;
|
|
Window* pWinsForHide[] =
|
|
{
|
|
&m_aSettingsFL, &m_aDataTypeFT, &m_aDataTypeLB, &m_aRequiredCB,
|
|
&m_aRequiredBtn, &m_aRelevantCB, &m_aRelevantBtn, &m_aConstraintCB,
|
|
&m_aConstraintBtn, &m_aReadonlyCB, &m_aReadonlyBtn, &m_aCalculateCB,
|
|
&m_aCalculateBtn
|
|
};
|
|
Window** pCurrent = pWinsForHide;
|
|
for ( ; i < sizeof( pWinsForHide ) / sizeof( pWinsForHide[ 0 ] ); ++i, ++pCurrent )
|
|
(*pCurrent)->Hide();
|
|
|
|
Window* pWinsForMove[] =
|
|
{
|
|
&m_aButtonsFL, &m_aOKBtn, &m_aEscBtn, &m_aHelpBtn
|
|
};
|
|
pCurrent = pWinsForMove;
|
|
for ( i = 0; i < sizeof( pWinsForMove ) / sizeof( pWinsForMove[ 0 ] ); ++i, ++pCurrent )
|
|
{
|
|
Point aNewPos = (*pCurrent)->GetPosPixel();
|
|
aNewPos.Y() -= nDelta;
|
|
(*pCurrent)->SetPosPixel( aNewPos );
|
|
}
|
|
Size aNewWinSz = GetSizePixel();
|
|
aNewWinSz.Height() -= nDelta;
|
|
SetSizePixel( aNewWinSz );
|
|
|
|
m_aNameFT.Disable();
|
|
m_aNameED.Disable();
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
void AddDataItemDialog::InitDataTypeBox()
|
|
{
|
|
if ( m_eItemType != DITText )
|
|
{
|
|
Reference< css::xforms::XModel > xModel( m_xUIHelper, UNO_QUERY );
|
|
if ( xModel.is() )
|
|
{
|
|
try
|
|
{
|
|
Reference< css::xforms::XDataTypeRepository > xDataTypes =
|
|
xModel->getDataTypeRepository();
|
|
if ( xDataTypes.is() )
|
|
{
|
|
Sequence< ::rtl::OUString > aNameList = xDataTypes->getElementNames();
|
|
sal_Int32 i, nCount = aNameList.getLength();
|
|
::rtl::OUString* pNames = aNameList.getArray();
|
|
for ( i = 0; i < nCount; ++i )
|
|
m_aDataTypeLB.InsertEntry( pNames[i] );
|
|
}
|
|
|
|
if ( m_xTempBinding.is() )
|
|
{
|
|
rtl::OUString sTemp;
|
|
if ( m_xTempBinding->getPropertyValue( PN_BINDING_TYPE ) >>= sTemp )
|
|
{
|
|
USHORT nPos = m_aDataTypeLB.GetEntryPos( String( sTemp ) );
|
|
if ( LISTBOX_ENTRY_NOTFOUND == nPos )
|
|
nPos = m_aDataTypeLB.InsertEntry( sTemp );
|
|
m_aDataTypeLB.SelectEntryPos( nPos );
|
|
}
|
|
}
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddDataItemDialog::InitDataTypeBox(): exception caught" );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void AddDataItemDialog::InitText( DataItemType _eType )
|
|
{
|
|
String sText;
|
|
|
|
switch ( _eType )
|
|
{
|
|
case DITAttribute :
|
|
{
|
|
sText = m_sFL_Attribute;
|
|
break;
|
|
}
|
|
|
|
case DITBinding :
|
|
{
|
|
sText = m_sFL_Binding;
|
|
m_aDefaultFT.SetText( m_sFT_BindingExp );
|
|
break;
|
|
}
|
|
|
|
default:
|
|
{
|
|
sText = m_sFL_Element;
|
|
}
|
|
}
|
|
|
|
m_aItemFL.SetText( sText );
|
|
}
|
|
|
|
//========================================================================
|
|
// class AddConditionDialog
|
|
//========================================================================
|
|
|
|
AddConditionDialog::AddConditionDialog(
|
|
Window* pParent, const ::rtl::OUString& _rPropertyName,
|
|
const Reference< XPropertySet >& _rPropSet ) :
|
|
|
|
ModalDialog( pParent, SVX_RES( RID_SVXDLG_ADD_CONDITION ) ),
|
|
|
|
m_aConditionFT ( this, SVX_RES( FT_CONDITION ) ),
|
|
m_aConditionED ( this, SVX_RES( ED_CONDITION ) ),
|
|
m_aResultFT ( this, SVX_RES( FT_RESULT ) ),
|
|
m_aResultWin ( this, SVX_RES( FT_RESULT_PREVIEW ) ),
|
|
m_aEditNamespacesBtn( this, SVX_RES( PB_EDIT_NAMESPACES ) ),
|
|
m_aButtonsFL ( this, SVX_RES( FL_DATANAV_BTN ) ),
|
|
m_aOKBtn ( this, SVX_RES( BTN_DATANAV_OK ) ),
|
|
m_aEscBtn ( this, SVX_RES( BTN_DATANAV_ESC ) ),
|
|
m_aHelpBtn ( this, SVX_RES( BTN_DATANAV_HELP ) ),
|
|
|
|
m_sPropertyName ( _rPropertyName ),
|
|
m_xBinding ( _rPropSet )
|
|
|
|
{
|
|
FreeResource();
|
|
|
|
DBG_ASSERT( m_xBinding.is(), "AddConditionDialog::Ctor(): no Binding" );
|
|
|
|
m_aResultWin.SetBackground( m_aConditionED.GetBackground() );
|
|
m_aConditionED.SetModifyHdl( LINK( this, AddConditionDialog, ModifyHdl ) );
|
|
m_aEditNamespacesBtn.SetClickHdl( LINK( this, AddConditionDialog, EditHdl ) );
|
|
m_aOKBtn.SetClickHdl( LINK( this, AddConditionDialog, OKHdl ) );
|
|
m_aResultTimer.SetTimeout( 500 );
|
|
m_aResultTimer.SetTimeoutHdl( LINK( this, AddConditionDialog, ResultHdl ) );
|
|
|
|
if ( m_sPropertyName.getLength() > 0 )
|
|
{
|
|
try
|
|
{
|
|
rtl::OUString sTemp;
|
|
if ( ( m_xBinding->getPropertyValue( m_sPropertyName ) >>= sTemp )
|
|
&& sTemp.getLength() > 0 )
|
|
{
|
|
m_aConditionED.SetText( sTemp );
|
|
}
|
|
else
|
|
{
|
|
//! m_xBinding->setPropertyValue( m_sPropertyName, makeAny( TRUE_VALUE ) );
|
|
m_aConditionED.SetText( TRUE_VALUE );
|
|
}
|
|
|
|
Reference< css::xforms::XModel > xModel;
|
|
if ( ( m_xBinding->getPropertyValue( PN_BINDING_MODEL ) >>= xModel ) && xModel.is() )
|
|
m_xUIHelper = Reference< css::xforms::XFormsUIHelper1 >( xModel, UNO_QUERY );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddConditionDialog::Ctor(): exception caught" );
|
|
}
|
|
}
|
|
|
|
DBG_ASSERT( m_xUIHelper.is(), "AddConditionDialog::Ctor(): no UIHelper" );
|
|
ResultHdl( &m_aResultTimer );
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
AddConditionDialog::~AddConditionDialog()
|
|
{
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
IMPL_LINK( AddConditionDialog, EditHdl, PushButton *, EMPTYARG )
|
|
{
|
|
Reference< XNameContainer > xNameContnr;
|
|
try
|
|
{
|
|
m_xBinding->getPropertyValue( PN_BINDING_NAMESPACES ) >>= xNameContnr;
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddDataItemDialog::EditHdl(): exception caught" );
|
|
}
|
|
NamespaceItemDialog aDlg( this, xNameContnr );
|
|
aDlg.Execute();
|
|
try
|
|
{
|
|
m_xBinding->setPropertyValue( PN_BINDING_NAMESPACES, makeAny( xNameContnr ) );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddDataItemDialog::EditHdl(): exception caught" );
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
IMPL_LINK( AddConditionDialog, OKHdl, OKButton *, EMPTYARG )
|
|
{
|
|
/*!!!
|
|
try
|
|
{
|
|
if ( m_xBinding.is() )
|
|
m_xBinding->setPropertyValue( m_sPropertyName, makeAny( ::rtl::OUString( m_aConditionED.GetText() ) ) );
|
|
}
|
|
catch( const Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddConditionDialog, OKHdl: caught an exception!" );
|
|
}
|
|
*/
|
|
EndDialog( RET_OK );
|
|
return 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
IMPL_LINK( AddConditionDialog, ModifyHdl, MultiLineEdit *, EMPTYARG )
|
|
{
|
|
m_aResultTimer.Start();
|
|
return 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
IMPL_LINK( AddConditionDialog, ResultHdl, Timer *, EMPTYARG )
|
|
{
|
|
String sCondition = m_aConditionED.GetText().EraseLeadingChars().EraseTrailingChars();
|
|
String sResult;
|
|
if ( sCondition.Len() > 0 )
|
|
{
|
|
try
|
|
{
|
|
sResult = m_xUIHelper->getResultForExpression( m_xBinding, ( m_sPropertyName == PN_BINDING_EXPR ), sCondition );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddConditionDialog::ResultHdl(): exception caught" );
|
|
}
|
|
}
|
|
m_aResultWin.SetText( sResult );
|
|
return 0;
|
|
}
|
|
|
|
//========================================================================
|
|
// class NamespaceItemDialog
|
|
//========================================================================
|
|
|
|
NamespaceItemDialog::NamespaceItemDialog(
|
|
AddConditionDialog* _pCondDlg, Reference< XNameContainer >& _rContainer ) :
|
|
|
|
ModalDialog( _pCondDlg, SVX_RES( RID_SVXDLG_NAMESPACE_ITEM ) ),
|
|
|
|
m_aNamespacesFT ( this, SVX_RES( FT_NAMESPACES ) ),
|
|
m_aNamespacesList ( this, SVX_RES( LB_NAMESPACES ) ),
|
|
m_aAddNamespaceBtn ( this, SVX_RES( PB_ADD_NAMESPACE ) ),
|
|
m_aEditNamespaceBtn ( this, SVX_RES( PB_EDIT_NAMESPACE ) ),
|
|
m_aDeleteNamespaceBtn ( this, SVX_RES( PB_DELETE_NAMESPACE ) ),
|
|
m_aButtonsFL ( this, SVX_RES( FL_DATANAV_BTN ) ),
|
|
m_aOKBtn ( this, SVX_RES( BTN_DATANAV_OK ) ),
|
|
m_aEscBtn ( this, SVX_RES( BTN_DATANAV_ESC ) ),
|
|
m_aHelpBtn ( this, SVX_RES( BTN_DATANAV_HELP ) ),
|
|
|
|
m_pConditionDlg ( _pCondDlg ),
|
|
m_rNamespaces ( _rContainer )
|
|
|
|
{
|
|
static long aStaticTabs[]= { 3, 0, 35, 200 };
|
|
m_aNamespacesList.SvxSimpleTable::SetTabs( aStaticTabs );
|
|
String sHeader = String( SVX_RES( STR_HEADER_PREFIX ) );
|
|
sHeader += '\t';
|
|
sHeader += String( SVX_RES( STR_HEADER_URL ) );
|
|
m_aNamespacesList.InsertHeaderEntry(
|
|
sHeader, HEADERBAR_APPEND, HIB_LEFT /*| HIB_FIXEDPOS | HIB_FIXED*/ );
|
|
|
|
FreeResource();
|
|
|
|
m_aNamespacesList.SetSelectHdl( LINK( this, NamespaceItemDialog, SelectHdl ) );
|
|
Link aLink = LINK( this, NamespaceItemDialog, ClickHdl );
|
|
m_aAddNamespaceBtn.SetClickHdl( aLink );
|
|
m_aEditNamespaceBtn.SetClickHdl( aLink );
|
|
m_aDeleteNamespaceBtn.SetClickHdl( aLink );
|
|
m_aOKBtn.SetClickHdl( LINK( this, NamespaceItemDialog, OKHdl ) );
|
|
|
|
LoadNamespaces();
|
|
SelectHdl( &m_aNamespacesList );
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
NamespaceItemDialog::~NamespaceItemDialog()
|
|
{
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
IMPL_LINK( NamespaceItemDialog, SelectHdl, SvxSimpleTable *, EMPTYARG )
|
|
{
|
|
BOOL bEnable = ( m_aNamespacesList.FirstSelected() != NULL );
|
|
m_aEditNamespaceBtn.Enable( bEnable );
|
|
m_aDeleteNamespaceBtn.Enable( bEnable );
|
|
|
|
return 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
IMPL_LINK( NamespaceItemDialog, ClickHdl, PushButton *, pBtn )
|
|
{
|
|
if ( &m_aAddNamespaceBtn == pBtn )
|
|
{
|
|
ManageNamespaceDialog aDlg( this, m_pConditionDlg, false );
|
|
if ( aDlg.Execute() == RET_OK )
|
|
{
|
|
String sEntry = aDlg.GetPrefix();
|
|
sEntry += '\t';
|
|
sEntry += aDlg.GetURL();
|
|
m_aNamespacesList.InsertEntry( sEntry );
|
|
}
|
|
}
|
|
else if ( &m_aEditNamespaceBtn == pBtn )
|
|
{
|
|
ManageNamespaceDialog aDlg( this, m_pConditionDlg, true );
|
|
SvLBoxEntry* pEntry = m_aNamespacesList.FirstSelected();
|
|
DBG_ASSERT( pEntry, "NamespaceItemDialog::ClickHdl(): no entry" );
|
|
String sPrefix( m_aNamespacesList.GetEntryText( pEntry, 0 ) );
|
|
aDlg.SetNamespace(
|
|
sPrefix,
|
|
m_aNamespacesList.GetEntryText( pEntry, 1 ) );
|
|
if ( aDlg.Execute() == RET_OK )
|
|
{
|
|
// if a prefix was changed, mark the old prefix as 'removed'
|
|
if( sPrefix != aDlg.GetPrefix() )
|
|
m_aRemovedList.push_back( sPrefix );
|
|
|
|
m_aNamespacesList.SetEntryText( aDlg.GetPrefix(), pEntry, 0 );
|
|
m_aNamespacesList.SetEntryText( aDlg.GetURL(), pEntry, 1 );
|
|
}
|
|
}
|
|
else if ( &m_aDeleteNamespaceBtn == pBtn )
|
|
{
|
|
SvLBoxEntry* pEntry = m_aNamespacesList.FirstSelected();
|
|
DBG_ASSERT( pEntry, "NamespaceItemDialog::ClickHdl(): no entry" );
|
|
::rtl::OUString sPrefix( m_aNamespacesList.GetEntryText( pEntry, 0 ) );
|
|
m_aRemovedList.push_back( sPrefix );
|
|
m_aNamespacesList.GetModel()->Remove( pEntry );
|
|
}
|
|
else
|
|
{
|
|
DBG_ERRORFILE( "NamespaceItemDialog::ClickHdl(): invalid button" );
|
|
}
|
|
|
|
SelectHdl( &m_aNamespacesList );
|
|
return 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
IMPL_LINK( NamespaceItemDialog, OKHdl, OKButton *, EMPTYARG )
|
|
{
|
|
try
|
|
{
|
|
// update namespace container
|
|
sal_Int32 i, nRemovedCount = m_aRemovedList.size();
|
|
for( i = 0; i < nRemovedCount; ++i )
|
|
m_rNamespaces->removeByName( m_aRemovedList[i] );
|
|
|
|
sal_Int32 nEntryCount = m_aNamespacesList.GetEntryCount();
|
|
for( i = 0; i < nEntryCount; ++i )
|
|
{
|
|
SvLBoxEntry* pEntry = m_aNamespacesList.GetEntry(i);
|
|
::rtl::OUString sPrefix( m_aNamespacesList.GetEntryText( pEntry, 0 ) );
|
|
::rtl::OUString sURL( m_aNamespacesList.GetEntryText( pEntry, 1 ) );
|
|
|
|
if ( m_rNamespaces->hasByName( sPrefix ) )
|
|
m_rNamespaces->replaceByName( sPrefix, makeAny( sURL ) );
|
|
else
|
|
m_rNamespaces->insertByName( sPrefix, makeAny( sURL ) );
|
|
}
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "NamespaceItemDialog::OKHdl(): exception caught" );
|
|
}
|
|
// and close the dialog
|
|
EndDialog( RET_OK );
|
|
return 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
void NamespaceItemDialog::LoadNamespaces()
|
|
{
|
|
try
|
|
{
|
|
Sequence< ::rtl::OUString > aAllNames = m_rNamespaces->getElementNames();
|
|
const ::rtl::OUString* pAllNames = aAllNames.getConstArray();
|
|
const ::rtl::OUString* pAllNamesEnd = pAllNames + aAllNames.getLength();
|
|
for ( ; pAllNames != pAllNamesEnd; ++pAllNames )
|
|
{
|
|
::rtl::OUString sURL;
|
|
::rtl::OUString sPrefix = *pAllNames;
|
|
if ( m_rNamespaces->hasByName( sPrefix ) )
|
|
{
|
|
Any aAny = m_rNamespaces->getByName( sPrefix );
|
|
if ( aAny >>= sURL )
|
|
{
|
|
String sEntry( sPrefix );
|
|
sEntry += '\t';
|
|
sEntry += String( sURL );
|
|
|
|
m_aNamespacesList.InsertEntry( sEntry );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "NamespaceItemDialog::LoadNamespaces(): exception caught" );
|
|
}
|
|
}
|
|
|
|
//========================================================================
|
|
// class ManageNamespaceDialog
|
|
//========================================================================
|
|
|
|
ManageNamespaceDialog::ManageNamespaceDialog(
|
|
Window* pParent, AddConditionDialog* _pCondDlg, bool _bIsEdit ) :
|
|
|
|
ModalDialog( pParent, SVX_RES( RID_SVXDLG_MANAGE_NAMESPACE ) ),
|
|
|
|
m_aPrefixFT ( this, SVX_RES( FT_PREFIX ) ),
|
|
m_aPrefixED ( this, SVX_RES( ED_PREFIX ) ),
|
|
m_aUrlFT ( this, SVX_RES( FT_URL ) ),
|
|
m_aUrlED ( this, SVX_RES( ED_URL ) ),
|
|
m_aButtonsFL ( this, SVX_RES( FL_DATANAV_BTN ) ),
|
|
m_aOKBtn ( this, SVX_RES( BTN_DATANAV_OK ) ),
|
|
m_aEscBtn ( this, SVX_RES( BTN_DATANAV_ESC ) ),
|
|
m_aHelpBtn ( this, SVX_RES( BTN_DATANAV_HELP ) ),
|
|
|
|
m_pConditionDlg ( _pCondDlg )
|
|
|
|
{
|
|
if ( _bIsEdit )
|
|
SetText( String( SVX_RES( STR_EDIT_TEXT ) ) );
|
|
|
|
FreeResource();
|
|
|
|
m_aOKBtn.SetClickHdl( LINK( this, ManageNamespaceDialog, OKHdl ) );
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
ManageNamespaceDialog::~ManageNamespaceDialog()
|
|
{
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
IMPL_LINK( ManageNamespaceDialog, OKHdl, OKButton *, EMPTYARG )
|
|
{
|
|
String sPrefix = m_aPrefixED.GetText();
|
|
|
|
try
|
|
{
|
|
if ( !m_pConditionDlg->GetUIHelper()->isValidPrefixName( sPrefix ) )
|
|
{
|
|
ErrorBox aErrBox( this, SVX_RES( RID_ERR_INVALID_XMLPREFIX ) );
|
|
String sMessText = aErrBox.GetMessText();
|
|
sMessText.SearchAndReplace( MSG_VARIABLE, sPrefix );
|
|
aErrBox.SetMessText( sMessText );
|
|
aErrBox.Execute();
|
|
return 0;
|
|
}
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "ManageNamespacesDialog::OKHdl(): exception caught" );
|
|
}
|
|
|
|
// no error so close the dialog
|
|
EndDialog( RET_OK );
|
|
return 0;
|
|
}
|
|
|
|
//========================================================================
|
|
// class AddSubmissionDialog
|
|
//========================================================================
|
|
|
|
AddSubmissionDialog::AddSubmissionDialog(
|
|
Window* pParent, ItemNode* _pNode,
|
|
const Reference< css::xforms::XFormsUIHelper1 >& _rUIHelper ) :
|
|
|
|
ModalDialog( pParent, SVX_RES( RID_SVXDLG_ADD_SUBMISSION ) ),
|
|
|
|
m_aSubmissionFL ( this, SVX_RES( FL_SUBMISSION ) ),
|
|
m_aNameFT ( this, SVX_RES( FT_SUBMIT_NAME ) ),
|
|
m_aNameED ( this, SVX_RES( ED_SUBMIT_NAME ) ),
|
|
m_aActionFT ( this, SVX_RES( FT_SUBMIT_ACTION ) ),
|
|
m_aActionED ( this, SVX_RES( ED_SUBMIT_ACTION ) ),
|
|
m_aMethodFT ( this, SVX_RES( FT_SUBMIT_METHOD ) ),
|
|
m_aMethodLB ( this, SVX_RES( LB_SUBMIT_METHOD ) ),
|
|
m_aRefFT ( this, SVX_RES( FT_SUBMIT_REF ) ),
|
|
m_aRefED ( this, SVX_RES( ED_SUBMIT_REF ) ),
|
|
m_aRefBtn ( this, SVX_RES( PB_SUBMIT_REF ) ),
|
|
m_aBindFT ( this, SVX_RES( FT_SUBMIT_BIND ) ),
|
|
m_aBindLB ( this, SVX_RES( LB_SUBMIT_BIND ) ),
|
|
m_aReplaceFT ( this, SVX_RES( FT_SUBMIT_REPLACE ) ),
|
|
m_aReplaceLB ( this, SVX_RES( LB_SUBMIT_REPLACE ) ),
|
|
|
|
m_aButtonsFL ( this, SVX_RES( FL_DATANAV_BTN ) ),
|
|
m_aOKBtn ( this, SVX_RES( BTN_DATANAV_OK ) ),
|
|
m_aEscBtn ( this, SVX_RES( BTN_DATANAV_ESC ) ),
|
|
m_aHelpBtn ( this, SVX_RES( BTN_DATANAV_HELP ) ),
|
|
|
|
m_pItemNode ( _pNode ),
|
|
m_xUIHelper ( _rUIHelper )
|
|
|
|
{
|
|
FillAllBoxes(); // we need local resources here, so call before FreeResource!!!
|
|
|
|
FreeResource();
|
|
|
|
m_aRefBtn.SetClickHdl( LINK( this, AddSubmissionDialog, RefHdl ) );
|
|
m_aOKBtn.SetClickHdl( LINK( this, AddSubmissionDialog, OKHdl ) );
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
AddSubmissionDialog::~AddSubmissionDialog()
|
|
{
|
|
// #i38991# if we have added a binding, we need to remove it as well.
|
|
if( m_xCreatedBinding.is() && m_xUIHelper.is() )
|
|
m_xUIHelper->removeBindingIfUseless( m_xCreatedBinding );
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
IMPL_LINK( AddSubmissionDialog, RefHdl, PushButton *, EMPTYARG )
|
|
{
|
|
AddConditionDialog aDlg( this, PN_BINDING_EXPR, m_xTempBinding );
|
|
aDlg.SetCondition( m_aRefED.GetText() );
|
|
if ( aDlg.Execute() == RET_OK )
|
|
m_aRefED.SetText( aDlg.GetCondition() );
|
|
|
|
return 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
IMPL_LINK( AddSubmissionDialog, OKHdl, OKButton *, EMPTYARG )
|
|
{
|
|
rtl::OUString sName(m_aNameED.GetText());
|
|
if(!sName.getLength()) {
|
|
|
|
ErrorBox aErrorBox(this,SVX_RES(RID_ERR_EMPTY_SUBMISSIONNAME));
|
|
aErrorBox.SetText( Application::GetDisplayName() );
|
|
aErrorBox.Execute();
|
|
return 0;
|
|
}
|
|
|
|
if ( !m_xSubmission.is() )
|
|
{
|
|
DBG_ASSERT( !m_xNewSubmission.is(),
|
|
"AddSubmissionDialog::OKHdl(): new submission already exists" );
|
|
|
|
// add a new submission
|
|
Reference< css::xforms::XModel > xModel( m_xUIHelper, UNO_QUERY );
|
|
if ( xModel.is() )
|
|
{
|
|
try
|
|
{
|
|
m_xNewSubmission = xModel->createSubmission();
|
|
m_xSubmission = Reference< XPropertySet >( m_xNewSubmission, UNO_QUERY );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddSubmissionDialog::OKHdl(): exception caught" );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( m_xSubmission.is() )
|
|
{
|
|
rtl::OUString sTemp = m_aNameED.GetText();
|
|
try
|
|
{
|
|
m_xSubmission->setPropertyValue( PN_SUBMISSION_ID, makeAny( sTemp ) );
|
|
sTemp = m_aActionED.GetText();
|
|
m_xSubmission->setPropertyValue( PN_SUBMISSION_ACTION, makeAny( sTemp ) );
|
|
sTemp = lcl_MethodString::get().toAPI( m_aMethodLB.GetSelectEntry() );
|
|
m_xSubmission->setPropertyValue( PN_SUBMISSION_METHOD, makeAny( sTemp ) );
|
|
sTemp = m_aRefED.GetText();
|
|
m_xSubmission->setPropertyValue( PN_SUBMISSION_REF, makeAny( sTemp ) );
|
|
String sEntry = m_aBindLB.GetSelectEntry();
|
|
sEntry.Erase( sEntry.Search( ':' ) );
|
|
sTemp = sEntry;
|
|
m_xSubmission->setPropertyValue( PN_SUBMISSION_BIND, makeAny( sTemp ) );
|
|
sTemp = lcl_ReplaceString::get().toAPI( m_aReplaceLB.GetSelectEntry() );
|
|
m_xSubmission->setPropertyValue( PN_SUBMISSION_REPLACE, makeAny( sTemp ) );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddSubmissionDialog::OKHdl(): exception caught" );
|
|
}
|
|
}
|
|
|
|
EndDialog( RET_OK );
|
|
return 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
void AddSubmissionDialog::FillAllBoxes()
|
|
{
|
|
// method box
|
|
m_aMethodLB.InsertEntry( String( SVX_RES( STR_METHOD_POST ) ) );
|
|
m_aMethodLB.InsertEntry( String( SVX_RES( STR_METHOD_PUT ) ) );
|
|
m_aMethodLB.InsertEntry( String( SVX_RES( STR_METHOD_GET ) ) );
|
|
m_aMethodLB.SelectEntryPos(0);
|
|
|
|
// binding box
|
|
Reference< css::xforms::XModel > xModel( m_xUIHelper, UNO_QUERY );
|
|
if ( xModel.is() )
|
|
{
|
|
try
|
|
{
|
|
Reference< XEnumerationAccess > xNumAccess( xModel->getBindings(), UNO_QUERY );
|
|
if ( xNumAccess.is() )
|
|
{
|
|
Reference < XEnumeration > xNum = xNumAccess->createEnumeration();
|
|
if ( xNum.is() && xNum->hasMoreElements() )
|
|
{
|
|
String sDelim( RTL_CONSTASCII_STRINGPARAM( ": " ) );
|
|
while ( xNum->hasMoreElements() )
|
|
{
|
|
Reference< XPropertySet > xPropSet;
|
|
Any aAny = xNum->nextElement();
|
|
if ( aAny >>= xPropSet )
|
|
{
|
|
String sEntry;
|
|
rtl::OUString sTemp;
|
|
xPropSet->getPropertyValue( PN_BINDING_ID ) >>= sTemp;
|
|
sEntry += String( sTemp );
|
|
sEntry += sDelim;
|
|
xPropSet->getPropertyValue( PN_BINDING_EXPR ) >>= sTemp;
|
|
sEntry += String( sTemp );
|
|
m_aBindLB.InsertEntry( sEntry );
|
|
|
|
if ( !m_xTempBinding.is() )
|
|
m_xTempBinding = xPropSet;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddSubmissionDialog::FillAllBoxes(): exception caught" );
|
|
}
|
|
}
|
|
|
|
// #i36342# we need a temporary binding; create one if no existing binding
|
|
// is found
|
|
if( !m_xTempBinding.is() )
|
|
{
|
|
m_xCreatedBinding = m_xUIHelper->getBindingForNode(
|
|
Reference<css::xml::dom::XNode>(
|
|
xModel->getDefaultInstance()->getDocumentElement(),
|
|
UNO_QUERY_THROW ),
|
|
sal_True );
|
|
m_xTempBinding = m_xCreatedBinding;
|
|
}
|
|
|
|
// replace box
|
|
m_aReplaceLB.InsertEntry( String( SVX_RES( STR_REPLACE_NONE ) ) );
|
|
m_aReplaceLB.InsertEntry( String( SVX_RES( STR_REPLACE_INST ) ) );
|
|
m_aReplaceLB.InsertEntry( String( SVX_RES( STR_REPLACE_DOC ) ) );
|
|
|
|
|
|
// init the controls with the values of the submission
|
|
if ( m_pItemNode && m_pItemNode->m_xPropSet.is() )
|
|
{
|
|
m_xSubmission = m_pItemNode->m_xPropSet;
|
|
rtl::OUString sTemp;
|
|
try
|
|
{
|
|
m_xSubmission->getPropertyValue( PN_SUBMISSION_ID ) >>= sTemp;
|
|
m_aNameED.SetText( sTemp );
|
|
m_xSubmission->getPropertyValue( PN_SUBMISSION_ACTION ) >>= sTemp;
|
|
m_aActionED.SetText( sTemp );
|
|
m_xSubmission->getPropertyValue( PN_SUBMISSION_REF ) >>= sTemp;
|
|
m_aRefED.SetText( sTemp );
|
|
|
|
m_xSubmission->getPropertyValue( PN_SUBMISSION_METHOD ) >>= sTemp;
|
|
sTemp = lcl_MethodString::get().toUI( sTemp );
|
|
USHORT nPos = m_aMethodLB.GetEntryPos( String( sTemp ) );
|
|
if ( LISTBOX_ENTRY_NOTFOUND == nPos )
|
|
nPos = m_aMethodLB.InsertEntry( sTemp );
|
|
m_aMethodLB.SelectEntryPos( nPos );
|
|
|
|
m_xSubmission->getPropertyValue( PN_SUBMISSION_BIND ) >>= sTemp;
|
|
nPos = m_aBindLB.GetEntryPos( String( sTemp ) );
|
|
if ( LISTBOX_ENTRY_NOTFOUND == nPos )
|
|
nPos = m_aBindLB.InsertEntry( sTemp );
|
|
m_aBindLB.SelectEntryPos( nPos );
|
|
|
|
m_xSubmission->getPropertyValue( PN_SUBMISSION_REPLACE ) >>= sTemp;
|
|
sTemp = lcl_ReplaceString::get().toUI( sTemp );
|
|
if ( sTemp.getLength() == 0 )
|
|
sTemp = m_aReplaceLB.GetEntry(0); // first entry == "none"
|
|
nPos = m_aReplaceLB.GetEntryPos( String( sTemp ) );
|
|
if ( LISTBOX_ENTRY_NOTFOUND == nPos )
|
|
nPos = m_aReplaceLB.InsertEntry( sTemp );
|
|
m_aReplaceLB.SelectEntryPos( nPos );
|
|
}
|
|
catch ( Exception& )
|
|
{
|
|
DBG_ERRORFILE( "AddSubmissionDialog::FillAllBoxes(): exception caught" );
|
|
}
|
|
}
|
|
|
|
m_aRefBtn.Enable( m_xTempBinding.is() );
|
|
}
|
|
|
|
//========================================================================
|
|
// class AddModelDialog
|
|
//========================================================================
|
|
|
|
AddModelDialog::AddModelDialog( Window* pParent, bool _bEdit ) :
|
|
|
|
ModalDialog( pParent, SVX_RES( RID_SVXDLG_ADD_MODEL ) ),
|
|
|
|
m_aModelFL ( this, SVX_RES( FL_MODEL ) ),
|
|
m_aNameFT ( this, SVX_RES( FT_MODEL_NAME ) ),
|
|
m_aNameED ( this, SVX_RES( ED_MODEL_NAME ) ),
|
|
m_aModifyCB ( this, SVX_RES( CB_MODIFIES_DOCUMENT ) ),
|
|
m_aButtonsFL ( this, SVX_RES( FL_DATANAV_BTN ) ),
|
|
m_aOKBtn ( this, SVX_RES( BTN_DATANAV_OK ) ),
|
|
m_aEscBtn ( this, SVX_RES( BTN_DATANAV_ESC ) ),
|
|
m_aHelpBtn ( this, SVX_RES( BTN_DATANAV_HELP ) )
|
|
|
|
{
|
|
if ( _bEdit )
|
|
SetText( String( SVX_RES( STR_EDIT_TEXT ) ) );
|
|
|
|
FreeResource();
|
|
}
|
|
|
|
AddModelDialog::~AddModelDialog()
|
|
{
|
|
}
|
|
|
|
//========================================================================
|
|
// class AddInstanceDialog
|
|
//========================================================================
|
|
|
|
AddInstanceDialog::AddInstanceDialog( Window* pParent, bool _bEdit ) :
|
|
|
|
ModalDialog( pParent, SVX_RES( RID_SVXDLG_ADD_INSTANCE ) ),
|
|
|
|
m_aInstanceFL ( this, SVX_RES( FL_INSTANCE ) ),
|
|
m_aNameFT ( this, SVX_RES( FT_INST_NAME ) ),
|
|
m_aNameED ( this, SVX_RES( ED_INST_NAME ) ),
|
|
m_aURLFT ( this, SVX_RES( FT_INST_URL ) ),
|
|
m_aURLED ( this, SVX_RES( ED_INST_URL ) ),
|
|
m_aFilePickerBtn ( this, SVX_RES( PB_FILEPICKER ) ),
|
|
m_aLinkInstanceCB ( this, SVX_RES( CB_INST_LINKINST ) ),
|
|
m_aButtonsFL ( this, SVX_RES( FL_DATANAV_BTN ) ),
|
|
m_aOKBtn ( this, SVX_RES( BTN_DATANAV_OK ) ),
|
|
m_aEscBtn ( this, SVX_RES( BTN_DATANAV_ESC ) ),
|
|
m_aHelpBtn ( this, SVX_RES( BTN_DATANAV_HELP ) )
|
|
|
|
{
|
|
if ( _bEdit )
|
|
SetText( String( SVX_RES( STR_EDIT_TEXT ) ) );
|
|
|
|
FreeResource();
|
|
|
|
m_aURLED.DisableHistory();
|
|
m_aFilePickerBtn.SetClickHdl( LINK( this, AddInstanceDialog, FilePickerHdl ) );
|
|
|
|
// load the filter name from svtools resource
|
|
ByteString aResMgrName( "svt" );
|
|
ResMgr* pSvtResMgr = ResMgr::CreateResMgr(
|
|
aResMgrName.GetBuffer(), Application::GetSettings().GetUILocale() );
|
|
m_sAllFilterName = String( ResId( STR_FILTERNAME_ALL, *pSvtResMgr ) );
|
|
}
|
|
|
|
AddInstanceDialog::~AddInstanceDialog()
|
|
{
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
IMPL_LINK( AddInstanceDialog, FilePickerHdl, PushButton *, EMPTYARG )
|
|
{
|
|
::sfx2::FileDialogHelper aDlg(
|
|
css::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 );
|
|
INetURLObject aFile( SvtPathOptions().GetWorkPath() );
|
|
|
|
aDlg.AddFilter( m_sAllFilterName, DEFINE_CONST_UNICODE(FILEDIALOG_FILTER_ALL) );
|
|
String sFilterName( DEFINE_CONST_UNICODE("XML") );
|
|
aDlg.AddFilter( sFilterName, DEFINE_CONST_UNICODE("*.xml") );
|
|
aDlg.SetCurrentFilter( sFilterName );
|
|
aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
|
|
|
|
if( aDlg.Execute() == ERRCODE_NONE )
|
|
m_aURLED.SetText( aDlg.GetPath() );
|
|
|
|
return 0;
|
|
}
|
|
|
|
//========================================================================
|
|
// class LinkedInstanceWarningBox
|
|
//========================================================================
|
|
|
|
LinkedInstanceWarningBox::LinkedInstanceWarningBox( Window* pParent ) :
|
|
|
|
MessBox( pParent, SVX_RES( RID_QRY_LINK_WARNING ) )
|
|
|
|
{
|
|
SetText( Application::GetDisplayName() );
|
|
SetImage( QueryBox::GetStandardImage() );
|
|
AddButton( SVX_RESSTR( RID_STR_DATANAV_LINKWARN_BUTTON ), BUTTONID_OK, BUTTONDIALOG_DEFBUTTON );
|
|
AddButton( BUTTON_CANCEL, BUTTONID_CANCEL, BUTTONDIALOG_CANCELBUTTON );
|
|
}
|
|
|
|
//............................................................................
|
|
} // namespace svxform
|
|
//............................................................................
|
|
|
|
|