convert datanavigator sport to .ui
Change-Id: I14f9f8d8df9fc8246e7fc8c0b6762ca51dad67d9
diff --git a/include/svx/dialogs.hrc b/include/svx/dialogs.hrc
index ce486d9..bd2fbe1 100644
--- a/include/svx/dialogs.hrc
+++ b/include/svx/dialogs.hrc
@@ -138,6 +138,7 @@
#define RID_SVXSW_FRAMEPOSITIONS (RID_SVX_START + 289)
#define RID_SVXIL_FRAME (RID_SVX_START + 65)
#define RID_SVXIL_DATANAVI (RID_SVX_START + 66)
#define RID_SVXFLOAT_3D (RID_SVX_START + 209)
diff --git a/include/svx/fmresids.hrc b/include/svx/fmresids.hrc
index 5299c1c..82a792b 100644
--- a/include/svx/fmresids.hrc
+++ b/include/svx/fmresids.hrc
@@ -63,8 +63,6 @@
// Dialog-Id's -----------------------------------------------------------
#define RID_SVX_FMEXPLORER (RID_FORMS_START + 6)
#define RID_SVXWIN_DATANAVIGATOR (RID_FORMS_START + 19)
// Toolbars ------------------------------------------------------------
#define RID_SVXTBX_FORM_NAVIGATION (RID_FORMS_START + 1)
#define RID_SVXTBX_FORM_FILTER (RID_FORMS_START + 2)
diff --git a/svx/UIConfig_svx.mk b/svx/UIConfig_svx.mk
index 9545379..76e7f12 100644
--- a/svx/UIConfig_svx.mk
+++ b/svx/UIConfig_svx.mk
@@ -21,6 +21,7 @@ $(eval $(call gb_UIConfig_add_uifiles,svx,\
svx/uiconfig/ui/chineseconversiondialog \
svx/uiconfig/ui/chinesedictionary \
svx/uiconfig/ui/compressgraphicdialog \
svx/uiconfig/ui/datanavigator \
svx/uiconfig/ui/deleteheaderdialog \
svx/uiconfig/ui/deletefooterdialog \
svx/uiconfig/ui/docrecoverybrokendialog \
diff --git a/svx/inc/fmhelp.hrc b/svx/inc/fmhelp.hrc
index 2334002..35eb10d 100644
--- a/svx/inc/fmhelp.hrc
+++ b/svx/inc/fmhelp.hrc
@@ -36,24 +36,12 @@
#define UID_SEARCH_RECORDSTATUS "SVX_UID_SEARCH_RECORDSTATUS"
#define UID_FORMPROPBROWSER_FRAME "SVX_UID_FORMPROPBROWSER_FRAME"
#define UID_ABSOLUTE_RECORD_WINDOW "SVX_UID_ABSOLUTE_RECORD_WINDOW"
#define HID_DATA_NAVIGATOR_WIN "SVX_HID_DATA_NAVIGATOR_WIN"
#define HID_MN_XFORMS_MODELS_ADD "SVX_HID_MN_XFORMS_MODELS_ADD"
#define HID_MN_XFORMS_MODELS_EDIT "SVX_HID_MN_XFORMS_MODELS_EDIT"
#define HID_MN_XFORMS_MODELS_REMOVE "SVX_HID_MN_XFORMS_MODELS_REMOVE"
#define HID_MN_XFORMS_INSTANCES_ADD "SVX_HID_MN_XFORMS_INSTANCES_ADD"
#define HID_MN_XFORMS_INSTANCES_EDIT "SVX_HID_MN_XFORMS_INSTANCES_EDIT"
#define HID_MN_XFORMS_INSTANCES_REMOVE "SVX_HID_MN_XFORMS_INSTANCES_REMOVE"
#define HID_MN_XFORMS_SHOW_DETAILS "SVX_HID_MN_XFORMS_SHOW_DETAILS"
#define HID_XFORMS_TOOLBOX_ITEM_ADD "SVX_HID_XFORMS_TOOLBOX_ITEM_ADD"
#define HID_XFORMS_TOOLBOX_ITEM_ADD_ELEMENT "SVX_HID_XFORMS_TOOLBOX_ITEM_ADD_ELEMENT"
#define HID_XFORMS_TOOLBOX_ITEM_ADD_ATTRIBUTE "SVX_HID_XFORMS_TOOLBOX_ITEM_ADD_ATTRIBUTE"
#define HID_XFORMS_TOOLBOX_ITEM_EDIT "SVX_HID_XFORMS_TOOLBOX_ITEM_EDIT"
#define HID_XFORMS_TOOLBOX_ITEM_REMOVE "SVX_HID_XFORMS_TOOLBOX_ITEM_REMOVE"
#define HID_XFORMS_MODELS_LIST "SVX_HID_XFORMS_MODELS_LIST"
#define HID_XFORMS_MODELS_MENUBTN "SVX_HID_XFORMS_MODELS_MENUBTN"
#define HID_XFORMS_INSTANCES_MENUBTN "SVX_HID_XFORMS_INSTANCES_MENUBTN"
#define HID_XFORMS_MID_INSERT_CONTROL "SVX_HID_XFORMS_MID_INSERT_CONTROL"
#define HID_XFORMS_TAB_CONTROL "SVX_HID_XFORMS_TAB_CONTROL"
#define HID_FM_DELETEROWS "SVX_HID_FM_DELETEROWS"
#define HID_FM_INSERTCOL "SVX_HID_FM_INSERTCOL"
#define HID_FM_CHANGECOL "SVX_HID_FM_CHANGECOL"
diff --git a/svx/source/form/datanavi.cxx b/svx/source/form/datanavi.cxx
index 7a40de4..a0a2890 100644
--- a/svx/source/form/datanavi.cxx
+++ b/svx/source/form/datanavi.cxx
@@ -41,6 +41,7 @@
#include <sfx2/objsh.hxx>
#include <sfx2/bindings.hxx>
#include <sfx2/dispatch.hxx>
#include <vcl/layout.hxx>
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <com/sun/star/container/XSet.hpp>
#include <com/sun/star/datatransfer/XTransferable.hpp>
@@ -1342,61 +1343,39 @@ namespace svxform
}
}
// 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_xDataListener ( new DataListener( this ) )
DataNavigatorWindow::DataNavigatorWindow(Window* pParent, SfxBindings* pBindings)
: Window(pParent)
, m_pInstPage(NULL)
, m_pSubmissionPage(NULL)
, m_pBindingPage(NULL)
, m_nLastSelectedPos(LISTBOX_ENTRY_NOTFOUND)
, m_bShowDetails(false)
, m_bIsNotifyDisabled(false)
, m_aItemImageList(SVX_RES(RID_SVXIL_DATANAVI))
, 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();
m_pUIBuilder = new VclBuilder(this, getUIRootDir(), "svx/ui/datanavigator.ui", "DataNavigator");
get(m_pModelsBox, "modelslist");
get(m_pModelBtn, "modelsbutton");
get(m_pTabCtrl, "tabcontrol");
get(m_pInstanceBtn, "instances");
// handler
m_aModelsBox.SetSelectHdl( LINK( this, DataNavigatorWindow, ModelSelectHdl ) );
m_pModelsBox->SetSelectHdl( LINK( this, DataNavigatorWindow, ModelSelectHdl ) );
Link aLink = LINK( this, DataNavigatorWindow, MenuSelectHdl );
m_aModelBtn.SetSelectHdl( aLink );
m_aInstanceBtn.SetSelectHdl( aLink );
m_pModelBtn->SetSelectHdl( aLink );
m_pInstanceBtn->SetSelectHdl( aLink );
aLink = LINK( this, DataNavigatorWindow, MenuActivateHdl );
m_aModelBtn.SetActivateHdl( aLink );
m_aInstanceBtn.SetActivateHdl( aLink );
m_aTabCtrl.SetActivatePageHdl( LINK( this, DataNavigatorWindow, ActivatePageHdl ) );
m_pModelBtn->SetActivateHdl( aLink );
m_pInstanceBtn->SetActivateHdl( aLink );
m_pTabCtrl->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;
m_pTabCtrl->Show();
sal_Int32 nPageId = m_pTabCtrl->GetPageId("instance");
SvtViewOptions aViewOpt( E_TABDIALOG, CFGNAME_DATANAVIGATOR );
if ( aViewOpt.Exists() )
{
@@ -1404,12 +1383,13 @@ namespace svxform
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 );
Menu* pMenu = m_pInstanceBtn->GetPopupMenu();
sal_uInt16 nInstancesDetailsId = pMenu->GetItemId("instancesdetails");
pMenu->SetItemBits(nInstancesDetailsId, MIB_CHECKABLE );
pMenu->CheckItem(nInstancesDetailsId, m_bShowDetails );
m_aTabCtrl.SetCurPageId( static_cast< sal_uInt16 >( nPageId ) );
ActivatePageHdl( &m_aTabCtrl );
m_pTabCtrl->SetCurPageId( static_cast< sal_uInt16 >( nPageId ) );
ActivatePageHdl(m_pTabCtrl);
// get our frame
DBG_ASSERT( pBindings != NULL,
@@ -1430,7 +1410,7 @@ namespace svxform
DataNavigatorWindow::~DataNavigatorWindow()
{
SvtViewOptions aViewOpt( E_TABDIALOG, CFGNAME_DATANAVIGATOR );
aViewOpt.SetPageID( static_cast< sal_Int32 >( m_aTabCtrl.GetCurPageId() ) );
aViewOpt.SetPageID( static_cast< sal_Int32 >( m_pTabCtrl->GetCurPageId() ) );
Any aAny;
aAny <<= m_bShowDetails;
aViewOpt.SetUserItem(CFGNAME_SHOWDETAILS,aAny);
@@ -1452,7 +1432,7 @@ namespace svxform
IMPL_LINK( DataNavigatorWindow, ModelSelectHdl, ListBox *, pBox )
{
sal_Int32 nPos = m_aModelsBox.GetSelectEntryPos();
sal_Int32 nPos = m_pModelsBox->GetSelectEntryPos();
// pBox == NULL, if you want to force a new fill.
if ( nPos != m_nLastSelectedPos || !pBox )
{
@@ -1469,8 +1449,8 @@ namespace svxform
{
bool bIsDocModified = false;
Reference< css::xforms::XFormsUIHelper1 > xUIHelper;
sal_Int32 nSelectedPos = m_aModelsBox.GetSelectEntryPos();
OUString sSelectedModel( m_aModelsBox.GetEntry( nSelectedPos ) );
sal_Int32 nSelectedPos = m_pModelsBox->GetSelectEntryPos();
OUString sSelectedModel( m_pModelsBox->GetEntry( nSelectedPos ) );
Reference< css::xforms::XModel > xModel;
try
{
@@ -1486,112 +1466,47 @@ namespace svxform
m_bIsNotifyDisabled = true;
if ( &m_aModelBtn == pBtn )
if (m_pModelBtn == pBtn)
{
switch ( pBtn->GetCurItemId() )
OString sIdent(pBtn->GetCurItemIdent());
if (sIdent == "modelsadd")
{
case MID_MODELS_ADD :
AddModelDialog aDlg( this, false );
bool bShowDialog = true;
while ( bShowDialog )
{
AddModelDialog aDlg( this, false );
bool bShowDialog = true;
while ( bShowDialog )
{
bShowDialog = false;
if ( aDlg.Execute() == RET_OK )
{
OUString sNewName = aDlg.GetName();
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 ) );
OUString sMessText = aErrBox.GetMessText();
sMessText = sMessText.replaceFirst( 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(
OUString( "ExternalData" ),
makeAny( !bDocumentData ) );
sal_Int32 nNewPos = m_aModelsBox.InsertEntry( sNewName );
m_aModelsBox.SelectEntryPos( nNewPos );
ModelSelectHdl( &m_aModelsBox );
bIsDocModified = true;
}
catch ( Exception& )
{
SAL_WARN( "svx.form", "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 );
bool bExternalData = false;
OSL_VERIFY( xModelProps->getPropertyValue(
OUString( "ExternalData" ) ) >>= bExternalData );
bDocumentData = !bExternalData;
}
catch( const Exception& )
{
DBG_UNHANDLED_EXCEPTION();
}
aDlg.SetModifyDoc( bDocumentData );
bShowDialog = false;
if ( aDlg.Execute() == RET_OK )
{
if ( aDlg.GetModifyDoc() != bool( bDocumentData ) )
OUString sNewName = aDlg.GetName();
bool bDocumentData = aDlg.GetModifyDoc();
if ( m_pModelsBox->GetEntryPos( sNewName ) != LISTBOX_ENTRY_NOTFOUND )
{
bDocumentData = aDlg.GetModifyDoc();
// error: model name already exists
ErrorBox aErrBox( this, SVX_RES( RID_ERR_DOUBLE_MODELNAME ) );
OUString sMessText = aErrBox.GetMessText();
sMessText = sMessText.replaceFirst( MSG_VARIABLE, sNewName );
aErrBox.SetMessText( sMessText );
aErrBox.Execute();
bShowDialog = true;
}
else
{
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 );
// 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(
OUString( "ExternalData" ),
makeAny( !bDocumentData ) );
bIsDocModified = true;
}
catch( const Exception& )
{
DBG_UNHANDLED_EXCEPTION();
}
}
OUString sNewName = aDlg.GetName();
if ( !sNewName.isEmpty() && ( sNewName != sSelectedModel ) )
{
try
{
xUIHelper->renameModel( m_xFrameModel, sSelectedModel, sNewName );
m_aModelsBox.RemoveEntry( nSelectedPos );
nSelectedPos = m_aModelsBox.InsertEntry( sNewName );
m_aModelsBox.SelectEntryPos( nSelectedPos );
sal_Int32 nNewPos = m_pModelsBox->InsertEntry( sNewName );
m_pModelsBox->SelectEntryPos( nNewPos );
ModelSelectHdl(m_pModelsBox);
bIsDocModified = true;
}
catch ( Exception& )
@@ -1600,170 +1515,225 @@ namespace svxform
}
}
}
break;
}
case MID_MODELS_REMOVE :
}
else if (sIdent == "modelsedit")
{
AddModelDialog aDlg( this, true );
aDlg.SetName( sSelectedModel );
bool bDocumentData( false );
try
{
QueryBox aQBox( this, SVX_RES( RID_QRY_REMOVE_MODEL ) );
OUString sText = aQBox.GetMessText();
sText = sText.replaceFirst( MODELNAME, sSelectedModel );
aQBox.SetMessText( sText );
if ( aQBox.Execute() == RET_YES )
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 );
bool bExternalData = false;
OSL_VERIFY( xModelProps->getPropertyValue(
OUString( "ExternalData" ) ) >>= bExternalData );
bDocumentData = !bExternalData;
}
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(
OUString( "ExternalData" ),
makeAny( !bDocumentData ) );
bIsDocModified = true;
}
catch( const Exception& )
{
DBG_UNHANDLED_EXCEPTION();
}
}
OUString sNewName = aDlg.GetName();
if ( !sNewName.isEmpty() && ( sNewName != sSelectedModel ) )
{
try
{
xUIHelper->removeModel( m_xFrameModel, sSelectedModel );
xUIHelper->renameModel( m_xFrameModel, sSelectedModel, sNewName );
m_pModelsBox->RemoveEntry( nSelectedPos );
nSelectedPos = m_pModelsBox->InsertEntry( sNewName );
m_pModelsBox->SelectEntryPos( nSelectedPos );
bIsDocModified = true;
}
catch ( Exception& )
{
SAL_WARN( "svx.form", "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:
{
SAL_WARN( "svx.form", "DataNavigatorWindow::MenuSelectHdl(): wrong menu item" );
}
}
}
else if ( &m_aInstanceBtn == pBtn )
{
switch ( pBtn->GetCurItemId() )
else if (sIdent == "modelsremove")
{
case MID_INSTANCES_ADD :
QueryBox aQBox( this, SVX_RES( RID_QRY_REMOVE_MODEL ) );
OUString sText = aQBox.GetMessText();
sText = sText.replaceFirst( MODELNAME, sSelectedModel );
aQBox.SetMessText( sText );
if ( aQBox.Execute() == RET_YES )
{
AddInstanceDialog aDlg( this, false );
try
{
xUIHelper->removeModel( m_xFrameModel, sSelectedModel );
}
catch ( Exception& )
{
SAL_WARN( "svx.form", "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
}
m_pModelsBox->RemoveEntry( nSelectedPos );
if ( m_pModelsBox->GetEntryCount() <= nSelectedPos )
nSelectedPos = m_pModelsBox->GetEntryCount() - 1;
m_pModelsBox->SelectEntryPos( nSelectedPos );
ModelSelectHdl(m_pModelsBox);
bIsDocModified = true;
}
}
else
{
SAL_WARN( "svx.form", "DataNavigatorWindow::MenuSelectHdl(): wrong menu item" );
}
}
else if (m_pInstanceBtn == pBtn)
{
OString sIdent(pBtn->GetCurItemIdent());
if (sIdent == "instancesadd")
{
AddInstanceDialog aDlg( this, false );
if ( aDlg.Execute() == RET_OK )
{
sal_uInt16 nInst = GetNewPageId();
OUString sName = aDlg.GetName();
OUString sURL = aDlg.GetURL();
bool bLinkOnce = aDlg.IsLinkInstance();
try
{
Reference< css::xml::dom::XDocument > xNewInst =
xUIHelper->newInstance( sName, sURL, !bLinkOnce );
}
catch ( Exception& )
{
SAL_WARN( "svx.form", "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
}
ModelSelectHdl( NULL );
m_pTabCtrl->SetCurPageId( nInst );
XFormsPage* pPage = GetCurrentPage( nInst );
pPage->SetInstanceName(sName);
pPage->SetInstanceURL(sURL);
pPage->SetLinkOnce(bLinkOnce);
ActivatePageHdl(m_pTabCtrl);
bIsDocModified = true;
}
}
else if (sIdent == "instancesedit")
{
sal_uInt16 nId = 0;
XFormsPage* pPage = GetCurrentPage( nId );
if ( pPage )
{
AddInstanceDialog aDlg( this, true );
aDlg.SetName( pPage->GetInstanceName() );
aDlg.SetURL( pPage->GetInstanceURL() );
aDlg.SetLinkInstance( pPage->GetLinkOnce() );
OUString sOldName = aDlg.GetName();
if ( aDlg.Execute() == RET_OK )
{
sal_uInt16 nInst = GetNewPageId();
OUString sName = aDlg.GetName();
OUString sNewName = aDlg.GetName();
OUString sURL = aDlg.GetURL();
bool bLinkOnce = aDlg.IsLinkInstance();
try
{
Reference< css::xml::dom::XDocument > xNewInst =
xUIHelper->newInstance( sName, sURL, !bLinkOnce );
xUIHelper->renameInstance( sOldName,
sNewName,
sURL,
!bLinkOnce );
}
catch ( Exception& )
{
SAL_WARN( "svx.form", "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
}
ModelSelectHdl( NULL );
m_aTabCtrl.SetCurPageId( nInst );
XFormsPage* pPage = GetCurrentPage( nInst );
pPage->SetInstanceName(sName);
pPage->SetInstanceName(sNewName);
pPage->SetInstanceURL(sURL);
pPage->SetLinkOnce(bLinkOnce);
ActivatePageHdl( &m_aTabCtrl );
m_pTabCtrl->SetPageText( nId, sNewName );
bIsDocModified = true;
}
break;
}
case MID_INSTANCES_EDIT :
}
else if (sIdent == "instancesremove")
{
sal_uInt16 nId = 0;
XFormsPage* pPage = GetCurrentPage( nId );
if ( pPage )
{
sal_uInt16 nId = 0;
XFormsPage* pPage = GetCurrentPage( nId );
if ( pPage )
OUString sInstName = pPage->GetInstanceName();
QueryBox aQBox( this, SVX_RES( RID_QRY_REMOVE_INSTANCE ) );
OUString sMessText = aQBox.GetMessText();
sMessText = sMessText.replaceFirst( INSTANCENAME, sInstName );
aQBox.SetMessText( sMessText );
if ( aQBox.Execute() == RET_YES )
{
AddInstanceDialog aDlg( this, true );
aDlg.SetName( pPage->GetInstanceName() );
aDlg.SetURL( pPage->GetInstanceURL() );
aDlg.SetLinkInstance( pPage->GetLinkOnce() );
OUString sOldName = aDlg.GetName();
if ( aDlg.Execute() == RET_OK )
bool bDoRemove = false;
if (IsAdditionalPage(nId))
{
OUString sNewName = aDlg.GetName();
OUString sURL = aDlg.GetURL();
bool bLinkOnce = aDlg.IsLinkInstance();
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->renameInstance( sOldName,
sNewName,
sURL,
!bLinkOnce );
xUIHelper->removeInstance( sInstName );
}
catch ( Exception& )
catch (const Exception&)
{
SAL_WARN( "svx.form", "DataNavigatorWindow::MenuSelectHdl(): exception caught" );
}
pPage->SetInstanceName(sNewName);
pPage->SetInstanceURL(sURL);
pPage->SetLinkOnce(bLinkOnce);
m_aTabCtrl.SetPageText( nId, sNewName );
m_pTabCtrl->RemovePage( nId );
m_pTabCtrl->SetCurPageId(m_pTabCtrl->GetPageId("instance"));
ModelSelectHdl( NULL );
bIsDocModified = true;
}
}
break;
}
case MID_INSTANCES_REMOVE :
{
sal_uInt16 nId = 0;
XFormsPage* pPage = GetCurrentPage( nId );
if ( pPage )
{
OUString sInstName = pPage->GetInstanceName();
QueryBox aQBox( this, SVX_RES( RID_QRY_REMOVE_INSTANCE ) );
OUString sMessText = aQBox.GetMessText();
sMessText = sMessText.replaceFirst( 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& )
{
SAL_WARN( "svx.form", "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:
{
SAL_WARN( "svx.form", "DataNavigatorWindow::MenuSelectHdl(): wrong menu item" );
}
}
else if (sIdent == "instancesdetails")
{
m_bShowDetails = !m_bShowDetails;
PopupMenu* pMenu = m_pInstanceBtn->GetPopupMenu();
pMenu->CheckItem(pMenu->GetItemId("instancesdetails"), m_bShowDetails );
ModelSelectHdl(m_pModelsBox);
}
else
{
SAL_WARN( "svx.form", "DataNavigatorWindow::MenuSelectHdl(): wrong menu item" );
}
}
else
@@ -1778,22 +1748,28 @@ namespace svxform
return 0;
}
bool DataNavigatorWindow::IsAdditionalPage(sal_uInt16 nId) const
{
return m_pTabCtrl->GetPagePos(nId) >= 3;
}
IMPL_LINK( DataNavigatorWindow, MenuActivateHdl, MenuButton *, pBtn )
{
Menu* pMenu = pBtn->GetPopupMenu();
if ( &m_aInstanceBtn == pBtn )
if (m_pInstanceBtn == 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 );
sal_uInt16 nId(m_pTabCtrl->GetCurPageId());
bool bIsInstPage = (IsAdditionalPage(nId) || m_pTabCtrl->GetPageName(nId) == "instance");
pMenu->EnableItem( "instancesedit", bIsInstPage );
pMenu->EnableItem( "instancesremove",
bIsInstPage && m_pTabCtrl->GetPageCount() > MIN_PAGE_COUNT );
pMenu->EnableItem( "instancesdetails", bIsInstPage );
}
else if ( &m_aModelBtn == pBtn )
else if (m_pModelBtn == pBtn)
{
// we need at least one model!
pMenu->EnableItem( MID_MODELS_REMOVE, m_aModelsBox.GetEntryCount() > 1 );
pMenu->EnableItem("modelsremove", m_pModelsBox->GetEntryCount() > 1 );
}
else
{
@@ -1808,7 +1784,7 @@ namespace svxform
XFormsPage* pPage = GetCurrentPage( nId );
if ( pPage )
{
m_aTabCtrl.SetTabPage( nId, pPage );
m_pTabCtrl->SetTabPage( nId, pPage );
if ( m_xDataContainer.is() && !pPage->HasModel() )
SetPageModel();
}
@@ -1824,45 +1800,37 @@ namespace svxform
XFormsPage* DataNavigatorWindow::GetCurrentPage( sal_uInt16& rCurId )
{
rCurId = m_aTabCtrl.GetCurPageId();
rCurId = m_pTabCtrl->GetCurPageId();
XFormsPage* pPage = NULL;
switch ( rCurId )
OString sName(m_pTabCtrl->GetPageName(rCurId));
if (sName == "submissions")
{
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 ( !m_pSubmissionPage )
m_pSubmissionPage = new XFormsPage(m_pTabCtrl, this, DGTSubmission);
pPage = m_pSubmissionPage;
}
if ( rCurId > TID_INSTANCE )
else if (sName == "bindings")
{
sal_uInt16 nPos = m_aTabCtrl.GetPagePos( rCurId );
if ( !m_pBindingPage )
m_pBindingPage = new XFormsPage(m_pTabCtrl, this, DGTBinding);
pPage = m_pBindingPage;
}
else if (sName == "instance")
{
if ( !m_pInstPage )
m_pInstPage = new XFormsPage(m_pTabCtrl, this, DGTInstance);
pPage = m_pInstPage;
}
else
{
sal_uInt16 nPos = m_pTabCtrl->GetPagePos( rCurId );
if ( HasFirstInstancePage() && nPos > 0 )
nPos--;
if ( m_aPageList.size() > nPos )
pPage = m_aPageList[nPos];
else
{
pPage = new XFormsPage( &m_aTabCtrl, this, DGTInstance );
pPage = new XFormsPage(m_pTabCtrl, this, DGTInstance);
m_aPageList.push_back( pPage );
}
}
@@ -1908,7 +1876,7 @@ namespace svxform
Any aAny = m_xDataContainer->getByName( pNames[i] );
Reference< css::xforms::XModel > xFormsModel;
if ( aAny >>= xFormsModel )
m_aModelsBox.InsertEntry( xFormsModel->getID() );
m_pModelsBox->InsertEntry( xFormsModel->getID() );
}
}
}
@@ -1919,16 +1887,16 @@ namespace svxform
}
}
if ( m_aModelsBox.GetEntryCount() > 0 )
if ( m_pModelsBox->GetEntryCount() > 0 )
{
m_aModelsBox.SelectEntryPos(0);
ModelSelectHdl( &m_aModelsBox );
m_pModelsBox->SelectEntryPos(0);
ModelSelectHdl(m_pModelsBox);
}
}
void DataNavigatorWindow::SetPageModel()
{
OUString sModel( m_aModelsBox.GetSelectEntry() );
OUString sModel( m_pModelsBox->GetSelectEntry() );
try
{
Any aAny = m_xDataContainer->getByName( sModel );
@@ -1939,17 +1907,17 @@ namespace svxform
sal_uInt16 nId = 0;
XFormsPage* pPage = GetCurrentPage( nId );
DBG_ASSERT( pPage, "DataNavigatorWindow::SetPageModel(): no page" );
if ( nId >= TID_INSTANCE )
if (IsAdditionalPage(nId) || m_pTabCtrl->GetPageName(nId) == "instance")
// instance page
nPagePos = m_aTabCtrl.GetPagePos( nId );
nPagePos = m_pTabCtrl->GetPagePos( nId );
m_bIsNotifyDisabled = true;
OUString sText = pPage->SetModel( xFormsModel, nPagePos );
m_bIsNotifyDisabled = false;
if ( !sText.isEmpty() )
m_aTabCtrl.SetPageText( nId, sText );
m_pTabCtrl->SetPageText( nId, sText );
}
}
catch ( NoSuchElementException& )
catch (const NoSuchElementException& )
{
SAL_WARN( "svx.form", "DataNavigatorWindow::SetPageModel(): no such element" );
}
@@ -1961,7 +1929,7 @@ namespace svxform
void DataNavigatorWindow::InitPages()
{
OUString sModel( m_aModelsBox.GetSelectEntry() );
OUString sModel( m_pModelsBox->GetSelectEntry() );
try
{
Any aAny = m_xDataContainer->getByName( sModel );
@@ -2029,8 +1997,8 @@ namespace svxform
if ( bClearPages )
{
m_aPageList.clear();
while ( m_aTabCtrl.GetPageCount() > MIN_PAGE_COUNT )
m_aTabCtrl.RemovePage( m_aTabCtrl.GetPageId( 1 ) );
while ( m_pTabCtrl->GetPageCount() > MIN_PAGE_COUNT )
m_pTabCtrl->RemovePage( m_pTabCtrl->GetPageId( 1 ) );
}
}
@@ -2057,56 +2025,40 @@ namespace svxform
sTemp += OUString::number( nPageId );
sInstName = sTemp;
}
m_aTabCtrl.InsertPage( nPageId, sInstName, m_aTabCtrl.GetPageCount() - 2 );
m_pTabCtrl->InsertPage( nPageId, sInstName, m_pTabCtrl->GetPageCount() - 2 );
}
bool DataNavigatorWindow::HasFirstInstancePage() const
{
return ( m_aTabCtrl.GetPageId( 0 ) == TID_INSTANCE );
return (m_pTabCtrl->GetPageName(m_pTabCtrl->GetPageId(0)) == "instance");
}
sal_uInt16 DataNavigatorWindow::GetNewPageId() const
{
sal_uInt16 i, nMax = 0, nCount = m_aTabCtrl.GetPageCount();
sal_uInt16 i, nMax = 0, nCount = m_pTabCtrl->GetPageCount();
for ( i = 0; i < nCount; ++i )
{
if ( nMax < m_aTabCtrl.GetPageId(i) )
nMax = m_aTabCtrl.GetPageId(i);
if ( nMax < m_pTabCtrl->GetPageId(i) )
nMax = m_pTabCtrl->GetPageId(i);
}
return ( nMax + 1 );
}
void DataNavigatorWindow::Resize()
{
Window::Resize();
Size aOutSz = GetOutputSizePixel();
long nWidth = std::max( aOutSz.Width(), m_nMinWidth );
long nHeight = std::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 );
Window *pChild = GetWindow(WINDOW_FIRSTCHILD);
if (!pChild)
return;
VclContainer::setLayoutAllocation(*pChild, Point(0,0), GetSizePixel());
}
Size DataNavigatorWindow::GetOptimalSize() const
{
const Window *pChild = GetWindow(WINDOW_FIRSTCHILD);
if (!pChild)
return Window::GetOptimalSize();
return VclContainer::getLayoutRequisition(*pChild);
}
void DataNavigatorWindow::SetDocModified()
{
@@ -2116,7 +2068,6 @@ namespace svxform
pCurrentDoc->SetModified();
}
void DataNavigatorWindow::NotifyChanges( bool _bLoadAll )
{
if ( !m_bIsNotifyDisabled )
@@ -2127,7 +2078,7 @@ namespace svxform
RemoveBroadcaster();
m_xDataContainer.clear();
m_xFrameModel.clear();
m_aModelsBox.Clear();
m_pModelsBox->Clear();
m_nLastSelectedPos = LISTBOX_ENTRY_NOTFOUND;
// for a reload
LoadModels();
@@ -2192,7 +2143,6 @@ namespace svxform
{
SetHelpId( HID_DATA_NAVIGATOR_WIN );
SetText( SVX_RES( RID_STR_DATANAVIGATOR ) );
Size aSize = m_aDataWin.GetOutputSizePixel();
diff --git a/svx/source/form/datanavi.src b/svx/source/form/datanavi.src
index f4c071b..62ac609 100644
--- a/svx/source/form/datanavi.src
+++ b/svx/source/form/datanavi.src
@@ -19,6 +19,7 @@
#include "datanavi.hrc"
#include "globlmn.hrc"
#include "svx/dialogs.hrc"
#include "svx/fmresids.hrc"
#include "fmhelp.hrc"
@@ -43,138 +44,20 @@ ImageList RID_SVXIMGLIST_XFORMS_TBX
};
#undef IMG_LST
Window RID_SVXWIN_DATANAVIGATOR
ImageList RID_SVXIL_DATANAVI
{
OutputSize = TRUE ;
Hide = TRUE ;
SVLook = TRUE ;
DialogControl = TRUE ;
HelpId = HID_DATA_NAVIGATOR_WIN ;
Pos = MAP_APPFONT ( 0 , 0 ) ;
Size = MAP_APPFONT ( 300 , 400 ) ;
ListBox LB_MODELS
Prefix = "da";
MASKCOLOR
IdList =
{
HelpId = HID_XFORMS_MODELS_LIST ;
Pos = MAP_APPFONT ( 3 , 4 ) ;
Size = MAP_APPFONT ( 63 , 45 ) ;
DropDown = TRUE ;
DDExtraWidth = TRUE ;
IID_GROUP_CLOSED ;
IID_GROUP_OPEN ;
IID_ELEMENT ;
IID_ATTRIBUTE ;
IID_TEXT ;
IID_OTHER ;
};
MenuButton MB_MODELS
{
HelpId = HID_XFORMS_MODELS_MENUBTN ;
Pos = MAP_APPFONT ( 69 , 3 ) ;
Size = MAP_APPFONT ( 50 , 14 ) ;
Text [ en-US ] = "~Models";
ButtonMenu = Menu
{
ItemList =
{
MenuItem
{
Identifier = MID_MODELS_ADD ;
HelpId = HID_MN_XFORMS_MODELS_ADD ;
Text [ en-US ] = "~Add..." ;
};
MenuItem
{
Identifier = MID_MODELS_EDIT ;
HelpId = HID_MN_XFORMS_MODELS_EDIT ;
Text [ en-US ] = "~Edit..." ;
};
MenuItem
{
Identifier = MID_MODELS_REMOVE ;
HelpId = HID_MN_XFORMS_MODELS_REMOVE ;
Text [ en-US ] = "~Remove" ;
};
};
};
};
TabControl TC_ITEMS
{
HelpId = HID_XFORMS_TAB_CONTROL ;
Pos = MAP_APPFONT ( 3, 20 ) ;
TabStop = TRUE;
PageList =
{
PageItem
{
Identifier = TID_INSTANCE ;
Text [ en-US ] = "Instance";
};
PageItem
{
Identifier = TID_SUBMISSION ;
Text [ en-US ] = "Submissions";
};
PageItem
{
Identifier = TID_BINDINGS ;
Text [ en-US ] = "Bindings";
};
};
};
MenuButton MB_INSTANCES
{
HelpId = HID_XFORMS_INSTANCES_MENUBTN ;
Pos = MAP_APPFONT ( 69 , 133 ) ;
Size = MAP_APPFONT ( 50 , 14 ) ;
Text [ en-US ] = "~Instances";
ButtonMenu = Menu
{
ItemList =
{
MenuItem
{
Identifier = MID_INSTANCES_ADD ;
HelpId = HID_MN_XFORMS_INSTANCES_ADD ;
Text [ en-US ] = "~Add..." ;
};
MenuItem
{
Identifier = MID_INSTANCES_EDIT ;
HelpId = HID_MN_XFORMS_INSTANCES_EDIT ;
Text [ en-US ] = "~Edit..." ;
};
MenuItem
{
Identifier = MID_INSTANCES_REMOVE ;
HelpId = HID_MN_XFORMS_INSTANCES_REMOVE ;
Text [ en-US ] = "~Remove" ;
};
MenuItem
{
Separator = TRUE;
};
MenuItem
{
Identifier = MID_SHOW_DETAILS ;
HelpId = HID_MN_XFORMS_SHOW_DETAILS ;
Text [ en-US ] = "~Show Details" ;
};
};
};
};
#define IMG_LST2 \
IdList = \
{ \
IID_GROUP_CLOSED ; \
IID_GROUP_OPEN ; \
IID_ELEMENT ; \
IID_ATTRIBUTE ; \
IID_TEXT ; \
IID_OTHER ; \
}; \
IdCount = { 6 ; } ;
ImageList IL_ITEM_BMPS
{
Prefix = "da";
MASKCOLOR
IMG_LST2
};
IdCount = { 6 ; } ;
};
QueryBox RID_QRY_REMOVE_MODEL
diff --git a/svx/source/inc/datanavi.hrc b/svx/source/inc/datanavi.hrc
index a9ba599..2168994 100644
--- a/svx/source/inc/datanavi.hrc
+++ b/svx/source/inc/datanavi.hrc
@@ -39,30 +39,6 @@
#define IID_ITEM_EDIT 4
#define IID_ITEM_REMOVE 5
// class DataNavigatorWindow
// Controls
#define LB_MODELS 10
#define MB_MODELS 11
#define TC_ITEMS 12
#define MB_INSTANCES 13
// MenuItems
#define MID_MODELS_ADD 10
#define MID_MODELS_EDIT 11
#define MID_MODELS_REMOVE 12
#define MID_INSTANCES_ADD 20
#define MID_INSTANCES_EDIT 21
#define MID_INSTANCES_REMOVE 22
#define MID_SHOW_DETAILS 30
// TabPage Ids
#define TID_SUBMISSION 10
#define TID_BINDINGS 11
#define TID_INSTANCE 12
// ImageLists
#define IL_ITEM_BMPS 30
// ImageIndexes
#define IID_GROUP_CLOSED 1
#define IID_GROUP_OPEN 2
diff --git a/svx/source/inc/datanavi.hxx b/svx/source/inc/datanavi.hxx
index 43788ca..3a2d80c 100644
--- a/svx/source/inc/datanavi.hxx
+++ b/svx/source/inc/datanavi.hxx
@@ -19,6 +19,7 @@
#ifndef INCLUDED_SVX_SOURCE_INC_DATANAVI_HXX
#define INCLUDED_SVX_SOURCE_INC_DATANAVI_HXX
#include <vcl/builder.hxx>
#include <vcl/dialog.hxx>
#include <vcl/fixed.hxx>
#include <vcl/layout.hxx>
@@ -36,6 +37,7 @@
#include <sfx2/childwin.hxx>
#include <sfx2/ctrlitem.hxx>
#include <svx/dialmgr.hxx>
#include <svx/dialogs.hrc>
#include <svx/fmresids.hrc>
#include <svx/svxdllapi.h>
#include <rtl/ref.hxx>
@@ -322,27 +324,21 @@ namespace svxform
typedef std::vector< XFormsPage* > PageList;
typedef ::rtl::Reference < DataListener > DataListener_ref;
class DataNavigatorWindow : public Window
class DataNavigatorWindow : public Window, public VclBuilderContainer
{
private:
ListBox m_aModelsBox;
MenuButton m_aModelBtn;
TabControl m_aTabCtrl;
MenuButton m_aInstanceBtn;
ListBox* m_pModelsBox;
MenuButton* m_pModelBtn;
TabControl* m_pTabCtrl;
MenuButton* m_pInstanceBtn;
XFormsPage* m_pInstPage;
XFormsPage* m_pSubmissionPage;
XFormsPage* m_pBindingPage;
long m_nMinWidth;
long m_nMinHeight;
long m_nBorderHeight;
sal_Int32 m_nLastSelectedPos;
bool m_bShowDetails;
bool m_bIsNotifyDisabled;
Size m_a2Size;
Size m_a3Size;
ImageList m_aItemImageList;
PageList m_aPageList;
ContainerList m_aContainerList;
@@ -367,10 +363,13 @@ namespace svxform
void InitPages();
void CreateInstancePage( const PropertyValue_seq& _xPropSeq );
bool HasFirstInstancePage() const;
sal_uInt16 GetNewPageId() const;
sal_uInt16 GetNewPageId() const;
bool IsAdditionalPage(sal_uInt16 nPageId) const;
protected:
virtual void Resize() SAL_OVERRIDE;
virtual Size GetOptimalSize() const SAL_OVERRIDE;
public:
DataNavigatorWindow( Window* pParent, SfxBindings* pBindings );
diff --git a/svx/uiconfig/ui/datanavigator.ui b/svx/uiconfig/ui/datanavigator.ui
new file mode 100644
index 0000000..45d0c0c
--- /dev/null
+++ b/svx/uiconfig/ui/datanavigator.ui
@@ -0,0 +1,204 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.16.1 -->
<interface>
<requires lib="gtk+" version="3.0"/>
<object class="GtkBox" id="DataNavigator">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<child>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="border_width">0</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkGrid" id="grid2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="column_spacing">12</property>
<child>
<object class="GtkComboBoxText" id="modelslist">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="modelsbutton:modelsmenu">
<property name="label" translatable="yes">_Models</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="hexpand">True</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkNotebook" id="tabcontrol">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<child>
<placeholder/>
</child>
<child type="tab">
<object class="GtkLabel" id="instance">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Instance</property>
</object>
<packing>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child type="tab">
<object class="GtkLabel" id="submissions">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Submissions</property>
</object>
<packing>
<property name="position">1</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child type="tab">
<object class="GtkLabel" id="bindings">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Bindings</property>
</object>
<packing>
<property name="position">2</property>
<property name="tab_fill">False</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="instances:instancesmenu">
<property name="label" translatable="yes">_Instances</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">end</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<object class="GtkMenu" id="instancesmenu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="instancesadd">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Add...</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="instancesedit">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Edit...</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="instancesremove">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Remove...</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="menuitem1">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="instancesdetails">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Show Details</property>
<property name="use_underline">True</property>
</object>
</child>
</object>
<object class="GtkMenu" id="modelsmenu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="modelsadd">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Add...</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="modelsedit">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Edit...</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="modelsremove">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Remove</property>
<property name="use_underline">True</property>
</object>
</child>
</object>
</interface>