summaryrefslogtreecommitdiff
path: root/dbaccess
diff options
context:
space:
mode:
authorAndrzej J.R. Hunt <andrzej@ahunt.org>2013-07-30 12:27:10 +0200
committerLuboš Luňák <l.lunak@suse.cz>2013-08-02 13:38:46 +0000
commit04d1e80ac7091ec2bf31c8617e832d5fe15350be (patch)
tree08aecc7774387622804cfe8154b3cfee3fdae380 /dbaccess
parent34eae8ddb00920266c3830013586101d7ce41c05 (diff)
Add embedded database selector to db setup dialog.
This allows for choosing between the HSQLDB driver (currently default) and the firebird driver for embedded databases. Change-Id: I3734440fedf9f07b28f9cfd806dafbe6610393f7 Reviewed-on: https://gerrit.libreoffice.org/5199 Reviewed-by: Luboš Luňák <l.lunak@suse.cz> Tested-by: Luboš Luňák <l.lunak@suse.cz>
Diffstat (limited to 'dbaccess')
-rw-r--r--dbaccess/source/ui/dlg/dbwizsetup.cxx22
-rw-r--r--dbaccess/source/ui/dlg/generalpage.cxx148
-rw-r--r--dbaccess/source/ui/dlg/generalpage.hxx10
-rw-r--r--dbaccess/source/ui/inc/dbwizsetup.hxx2
-rw-r--r--dbaccess/uiconfig/ui/generalpagewizard.ui59
5 files changed, 209 insertions, 32 deletions
diff --git a/dbaccess/source/ui/dlg/dbwizsetup.cxx b/dbaccess/source/ui/dlg/dbwizsetup.cxx
index e14fedf66728..86b2c998354c 100644
--- a/dbaccess/source/ui/dlg/dbwizsetup.cxx
+++ b/dbaccess/source/ui/dlg/dbwizsetup.cxx
@@ -337,7 +337,7 @@ void ODbTypeWizDialogSetup::activateDatabasePath()
{
case OGeneralPageWizard::eCreateNew:
{
- sal_Int32 nCreateNewDBIndex = m_pCollection->getIndexOf( m_pCollection->getEmbeddedDatabase() );
+ sal_Int32 nCreateNewDBIndex = m_pCollection->getIndexOf( m_pGeneralPage->GetSelectedType() );
if ( nCreateNewDBIndex == -1 )
nCreateNewDBIndex = m_pCollection->getIndexOf( OUString("sdbc:dbase:") );
OSL_ENSURE( nCreateNewDBIndex != -1, "ODbTypeWizDialogSetup::activateDatabasePath: the GeneralPage should have prevented this!" );
@@ -802,28 +802,10 @@ sal_Bool ODbTypeWizDialogSetup::SaveDatabaseDocument()
}
//-------------------------------------------------------------------------
- OUString ODbTypeWizDialogSetup::getDefaultDatabaseType() const
- {
- OUString sEmbeddedURL = m_pCollection->getEmbeddedDatabase();
- ::connectivity::DriversConfig aDriverConfig(getORB());
- try
- {
- if ( aDriverConfig.getDriverFactoryName(sEmbeddedURL).isEmpty() || !m_pImpl->getDriver(sEmbeddedURL).is() )
- sEmbeddedURL = OUString("sdbc:dbase:");
- }
- catch(const Exception&)
- {
- sEmbeddedURL = OUString("sdbc:dbase:");
- }
-
- return sEmbeddedURL;
- }
-
- //-------------------------------------------------------------------------
void ODbTypeWizDialogSetup::CreateDatabase()
{
OUString sUrl;
- OUString eType = getDefaultDatabaseType();
+ OUString eType = m_pGeneralPage->GetSelectedType();
if ( m_pCollection->isEmbeddedDatabase(eType) )
{
sUrl = eType;
diff --git a/dbaccess/source/ui/dlg/generalpage.cxx b/dbaccess/source/ui/dlg/generalpage.cxx
index 2d2044e075e1..ad09e8d8e9ab 100644
--- a/dbaccess/source/ui/dlg/generalpage.cxx
+++ b/dbaccess/source/ui/dlg/generalpage.cxx
@@ -65,20 +65,24 @@ namespace dbaui
,m_eLastMessage ( smNone )
,m_bDisplayingInvalid ( sal_False )
,m_bInitTypeList ( true )
+ ,m_bInitEmbeddedDBList ( true )
,m_pDatasourceType ( NULL )
+ ,m_pEmbeddedDBType ( NULL )
,m_pCollection ( NULL )
{
get( m_pDatasourceType, "datasourceType" );
+ get( m_pEmbeddedDBType, "embeddeddbList" );
get( m_pSpecialMessage, "specialMessage" );
// extract the datasource type collection from the item set
DbuTypeCollectionItem* pCollectionItem = PTR_CAST(DbuTypeCollectionItem, _rItems.GetItem(DSID_TYPECOLLECTION));
if (pCollectionItem)
m_pCollection = pCollectionItem->getCollection();
- OSL_ENSURE(m_pCollection, "OGeneralPage::OGeneralPage : really need a DSN type collection !");
+ SAL_WARN_IF(!m_pCollection, "dbaaccess", "OGeneralPage::OGeneralPage : really need a DSN type collection !");
// do some knittings
m_pDatasourceType->SetSelectHdl(LINK(this, OGeneralPage, OnDatasourceTypeSelected));
+ m_pEmbeddedDBType->SetSelectHdl(LINK(this, OGeneralPage, OnEmbeddedDBTypeSelected));
}
//-------------------------------------------------------------------------
@@ -148,6 +152,46 @@ namespace dbaui
}
//-------------------------------------------------------------------------
+ void OGeneralPage::initializeEmbeddedDBList()
+ {
+ if ( m_bInitEmbeddedDBList )
+ {
+ m_bInitEmbeddedDBList = false;
+ m_pEmbeddedDBType->Clear();
+
+ if ( m_pCollection )
+ {
+ DisplayedTypes aDisplayedTypes;
+
+ ::dbaccess::ODsnTypeCollection::TypeIterator aEnd = m_pCollection->end();
+ for ( ::dbaccess::ODsnTypeCollection::TypeIterator aTypeLoop = m_pCollection->begin();
+ aTypeLoop != aEnd;
+ ++aTypeLoop
+ )
+ {
+ const OUString sURLPrefix = aTypeLoop.getURLPrefix();
+ if ( !sURLPrefix.isEmpty() )
+ {
+ OUString sDisplayName = aTypeLoop.getDisplayName();
+ if ( m_pEmbeddedDBType->GetEntryPos( sDisplayName ) == LISTBOX_ENTRY_NOTFOUND
+ && m_pCollection->isEmbeddedDatabase( sURLPrefix ) )
+ {
+ aDisplayedTypes.push_back( DisplayedTypes::value_type( sURLPrefix, sDisplayName ) );
+ }
+ }
+ }
+ ::std::sort( aDisplayedTypes.begin(), aDisplayedTypes.end(), DisplayedTypeLess() );
+ DisplayedTypes::const_iterator aDisplayEnd = aDisplayedTypes.end();
+ for ( DisplayedTypes::const_iterator loop = aDisplayedTypes.begin();
+ loop != aDisplayEnd;
+ ++loop
+ )
+ insertEmbeddedDBTypeEntryData( loop->eType, loop->sDisplayName );
+ }
+ }
+ }
+
+ //-------------------------------------------------------------------------
void OGeneralPage::setParentTitle(const OUString&)
{
}
@@ -192,8 +236,10 @@ namespace dbaui
void OGeneralPage::implInitControls( const SfxItemSet& _rSet, sal_Bool _bSaveValue )
{
initializeTypeList();
+ initializeEmbeddedDBList();
m_pDatasourceType->SelectEntry( getDatasourceName( _rSet ) );
+ m_pEmbeddedDBType->SelectEntry( getEmbeddedDBName( _rSet ) );
// notify our listener that our type selection has changed (if so)
// FIXME: how to detect that it did not changed? (fdo#62937)
@@ -207,6 +253,55 @@ namespace dbaui
}
//-------------------------------------------------------------------------
+ OUString OGeneralPage::getEmbeddedDBName( const SfxItemSet& _rSet )
+ {
+ // first check whether or not the selection is invalid or readonly (invalid implies readonly, but not vice versa)
+ sal_Bool bValid, bReadonly;
+ getFlags( _rSet, bValid, bReadonly );
+
+ // if the selection is invalid, disable everything
+ String sName,sConnectURL;
+ m_bDisplayingInvalid = !bValid;
+ if ( bValid )
+ {
+ // collect some items and some values
+ SFX_ITEMSET_GET( _rSet, pNameItem, SfxStringItem, DSID_NAME, sal_True );
+ SFX_ITEMSET_GET( _rSet, pUrlItem, SfxStringItem, DSID_CONNECTURL, sal_True );
+ assert( pUrlItem );
+ assert( pNameItem );
+ sName = pNameItem->GetValue();
+ sConnectURL = pUrlItem->GetValue();
+ }
+
+ m_eNotSupportedKnownType = ::dbaccess::DST_UNKNOWN;
+ implSetCurrentType( OUString() );
+
+ // compare the DSN prefix with the registered ones
+ OUString sDisplayName;
+
+ if (m_pCollection && bValid)
+ {
+ implSetCurrentType( m_pCollection->getEmbeddedDatabase() );
+ sDisplayName = m_pCollection->getTypeDisplayName( m_eCurrentSelection );
+ }
+
+ // select the correct datasource type
+ if ( m_pCollection->isEmbeddedDatabase( m_eCurrentSelection )
+ && ( LISTBOX_ENTRY_NOTFOUND == m_pEmbeddedDBType->GetEntryPos( sDisplayName ) )
+ )
+ { // this indicates it's really a type which is known in general, but not supported on the current platform
+ // show a message saying so
+ // eSpecialMessage = smUnsupportedType;
+ insertDatasourceTypeEntryData( m_eCurrentSelection, sDisplayName );
+ // remember this type so we can show the special message again if the user selects this
+ // type again (without changing the data source)
+ m_eNotSupportedKnownType = m_pCollection->determineType( m_eCurrentSelection );
+ }
+
+ return sDisplayName;
+ }
+
+ //-------------------------------------------------------------------------
OUString OGeneralPage::getDatasourceName( const SfxItemSet& _rSet )
{
// first check whether or not the selection is invalid or readonly (invalid implies readonly, but not vice versa)
@@ -221,8 +316,8 @@ namespace dbaui
// collect some items and some values
SFX_ITEMSET_GET( _rSet, pNameItem, SfxStringItem, DSID_NAME, sal_True );
SFX_ITEMSET_GET( _rSet, pUrlItem, SfxStringItem, DSID_CONNECTURL, sal_True );
- OSL_ENSURE( pUrlItem, "OGeneralPage::getDatasourceName: missing the type attribute !" );
- OSL_ENSURE( pNameItem, "OGeneralPage::getDatasourceName: missing the type attribute !" );
+ assert( pUrlItem );
+ assert( pNameItem );
sName = pNameItem->GetValue();
sConnectURL = pUrlItem->GetValue();
}
@@ -295,6 +390,16 @@ namespace dbaui
}
// -----------------------------------------------------------------------
+ void OGeneralPage::insertEmbeddedDBTypeEntryData(const OUString& _sType, String sDisplayName)
+ {
+ // insert a (temporary) entry
+ sal_uInt16 nPos = m_pEmbeddedDBType->InsertEntry(sDisplayName);
+ if ( nPos >= m_aEmbeddedURLPrefixes.size() )
+ m_aEmbeddedURLPrefixes.resize(nPos+1);
+ m_aEmbeddedURLPrefixes[nPos] = _sType;
+ }
+
+ // -----------------------------------------------------------------------
void OGeneralPage::fillWindows(::std::vector< ISaveValueWrapper* >& _rControlList)
{
_rControlList.push_back( new ODisableWrapper<FixedText>( m_pSpecialMessage ) );
@@ -326,6 +431,27 @@ namespace dbaui
}
//-------------------------------------------------------------------------
+ IMPL_LINK( OGeneralPage, OnEmbeddedDBTypeSelected, ListBox*, _pBox )
+ {
+ // get the type from the entry data
+ sal_uInt16 nSelected = _pBox->GetSelectEntryPos();
+ if (nSelected >= m_aEmbeddedURLPrefixes.size() )
+ {
+ SAL_WARN("dbaui.OGeneralPage", "Got out-of-range value '" << nSelected << "' from the DatasourceType selection ListBox's GetSelectEntryPos(): no corresponding URL prefix");
+ return 0L;
+ }
+ const OUString sURLPrefix = m_aEmbeddedURLPrefixes[ nSelected ];
+
+ setParentTitle( sURLPrefix );
+ // let the impl method do all the stuff
+ onTypeSelected( sURLPrefix );
+ // tell the listener we were modified
+ callModifiedHdl();
+ // outta here
+ return 0L;
+ }
+
+ //-------------------------------------------------------------------------
IMPL_LINK( OGeneralPage, OnDatasourceTypeSelected, ListBox*, _pBox )
{
// get the type from the entry data
@@ -406,6 +532,7 @@ namespace dbaui
,m_pRB_CreateDatabase ( NULL )
,m_pRB_OpenExistingDatabase ( NULL )
,m_pRB_ConnectDatabase ( NULL )
+ ,m_pFT_EmbeddedDBLabel ( NULL )
,m_pFT_DocListLabel ( NULL )
,m_pLB_DocumentList ( NULL )
,m_pPB_OpenDatabase ( NULL )
@@ -416,6 +543,7 @@ namespace dbaui
get( m_pRB_CreateDatabase, "createDatabase" );
get( m_pRB_OpenExistingDatabase, "openExistingDatabase" );
get( m_pRB_ConnectDatabase, "connectDatabase" );
+ get( m_pFT_EmbeddedDBLabel, "embeddeddbLabel" );
get( m_pFT_DocListLabel, "docListLabel" );
get( m_pLB_DocumentList, "documentList" );
get( m_pPB_OpenDatabase, "openDatabase" );
@@ -445,7 +573,7 @@ namespace dbaui
m_pRB_CreateDatabase->Check();
// do some knittings
- m_pRB_CreateDatabase->SetClickHdl( LINK( this, OGeneralPageWizard, OnSetupModeSelected ) );
+ m_pRB_CreateDatabase->SetClickHdl( LINK( this, OGeneralPageWizard, OnCreateDatabaseModeSelected ) );
m_pRB_ConnectDatabase->SetClickHdl( LINK( this, OGeneralPageWizard, OnSetupModeSelected ) );
m_pRB_OpenExistingDatabase->SetClickHdl( LINK( this, OGeneralPageWizard, OnSetupModeSelected ) );
m_pLB_DocumentList->SetSelectHdl( LINK( this, OGeneralPageWizard, OnDocumentSelected ) );
@@ -487,6 +615,7 @@ namespace dbaui
if ( !bValid || bReadonly )
{
+ m_pFT_EmbeddedDBLabel->Enable( false );
m_pDatasourceType->Enable( false );
m_pPB_OpenDatabase->Enable( false );
m_pFT_DocListLabel->Enable( false );
@@ -494,6 +623,7 @@ namespace dbaui
}
else
{
+ m_aControlDependencies.enableOnRadioCheck( *m_pRB_CreateDatabase, *m_pEmbeddedDBType, *m_pFT_EmbeddedDBLabel );
m_aControlDependencies.enableOnRadioCheck( *m_pRB_ConnectDatabase, *m_pDatasourceType );
m_aControlDependencies.enableOnRadioCheck( *m_pRB_OpenExistingDatabase, *m_pPB_OpenDatabase, *m_pFT_DocListLabel, *m_pLB_DocumentList );
}
@@ -508,6 +638,7 @@ namespace dbaui
//-------------------------------------------------------------------------
OUString OGeneralPageWizard::getDatasourceName(const SfxItemSet& _rSet)
{
+ // Sets jdbc as the default selected databse on startup.
if (m_pRB_CreateDatabase->IsChecked() )
return m_pCollection->getTypeDisplayName( OUString( "jdbc:" ) );
@@ -590,6 +721,15 @@ namespace dbaui
}
//-------------------------------------------------------------------------
+ IMPL_LINK( OGeneralPageWizard, OnCreateDatabaseModeSelected, RadioButton*, /*_pBox*/ )
+ {
+ if ( m_aCreationModeHandler.IsSet() )
+ m_aCreationModeHandler.Call( this );
+ OnEmbeddedDBTypeSelected(m_pEmbeddedDBType);
+ return 1L;
+ }
+
+ //-------------------------------------------------------------------------
IMPL_LINK( OGeneralPageWizard, OnSetupModeSelected, RadioButton*, /*_pBox*/ )
{
if ( m_aCreationModeHandler.IsSet() )
diff --git a/dbaccess/source/ui/dlg/generalpage.hxx b/dbaccess/source/ui/dlg/generalpage.hxx
index 197b1bc5dc22..719aa471f298 100644
--- a/dbaccess/source/ui/dlg/generalpage.hxx
+++ b/dbaccess/source/ui/dlg/generalpage.hxx
@@ -58,17 +58,22 @@ namespace dbaui
Link m_aTypeSelectHandler; /// to be called if a new type is selected
sal_Bool m_bDisplayingInvalid : 1; // the currently displayed data source is deleted
bool m_bInitTypeList : 1;
+ bool m_bInitEmbeddedDBList : 1;
bool approveDatasourceType( const OUString& _sURLPrefix, OUString& _inout_rDisplayName );
void insertDatasourceTypeEntryData( const OUString& _sType, String sDisplayName );
+ void insertEmbeddedDBTypeEntryData( const OUString& _sType, String sDisplayName );
protected:
ListBox* m_pDatasourceType;
+ ListBox* m_pEmbeddedDBType;
::dbaccess::ODsnTypeCollection*
m_pCollection; /// the DSN type collection instance
::std::vector< OUString>
m_aURLPrefixes;
+ ::std::vector< OUString>
+ m_aEmbeddedURLPrefixes;
public:
/// set a handler which gets called every time the user selects a new type
@@ -83,6 +88,7 @@ namespace dbaui
virtual void implInitControls( const SfxItemSet& _rSet, sal_Bool _bSaveValue );
virtual OUString getDatasourceName( const SfxItemSet& _rSet );
+ virtual OUString getEmbeddedDBName( const SfxItemSet& _rSet );
virtual bool approveDatasourceType( ::dbaccess::DATASOURCE_TYPE eType, OUString& _inout_rDisplayName );
// <method>OGenericAdministrationPage::fillControls</method>
@@ -92,6 +98,7 @@ namespace dbaui
void onTypeSelected(const OUString& _sURLPrefix);
void initializeTypeList();
+ void initializeEmbeddedDBList();
void implSetCurrentType( const OUString& _eType );
@@ -101,6 +108,7 @@ namespace dbaui
virtual void setParentTitle( const OUString& _sURLPrefix );
DECL_LINK(OnDatasourceTypeSelected, ListBox*);
+ DECL_LINK(OnEmbeddedDBTypeSelected, ListBox*);
};
//=========================================================================
@@ -149,6 +157,7 @@ namespace dbaui
RadioButton* m_pRB_OpenExistingDatabase;
RadioButton* m_pRB_ConnectDatabase;
+ FixedText* m_pFT_EmbeddedDBLabel;
FixedText* m_pFT_DocListLabel;
OpenDocumentListBox* m_pLB_DocumentList;
OpenDocumentButton* m_pPB_OpenDatabase;
@@ -182,6 +191,7 @@ namespace dbaui
virtual bool approveDatasourceType( ::dbaccess::DATASOURCE_TYPE eType, OUString& _inout_rDisplayName );
protected:
+ DECL_LINK( OnCreateDatabaseModeSelected, RadioButton* );
DECL_LINK( OnSetupModeSelected, RadioButton* );
DECL_LINK( OnDocumentSelected, ListBox* );
DECL_LINK( OnOpenDocument, PushButton* );
diff --git a/dbaccess/source/ui/inc/dbwizsetup.hxx b/dbaccess/source/ui/inc/dbwizsetup.hxx
index f9360c817664..706abdc56b9a 100644
--- a/dbaccess/source/ui/inc/dbwizsetup.hxx
+++ b/dbaccess/source/ui/inc/dbwizsetup.hxx
@@ -177,8 +177,6 @@ private:
void createUniqueFolderName(INetURLObject* pURL);
::dbaccess::DATASOURCE_TYPE VerifyDataSourceType(const ::dbaccess::DATASOURCE_TYPE _DatabaseType) const;
- OUString getDefaultDatabaseType() const;
-
void updateTypeDependentStates();
sal_Bool callSaveAsDialog();
sal_Bool IsConnectionUrlRequired();
diff --git a/dbaccess/uiconfig/ui/generalpagewizard.ui b/dbaccess/uiconfig/ui/generalpagewizard.ui
index 0e41080c64d2..0fcd59182095 100644
--- a/dbaccess/uiconfig/ui/generalpagewizard.ui
+++ b/dbaccess/uiconfig/ui/generalpagewizard.ui
@@ -59,10 +59,12 @@
<child>
<object class="GtkRadioButton" id="createDatabase">
<property name="label" translatable="yes">Create a n_ew database</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="margin_left">12</property>
+ <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
<property name="active">True</property>
@@ -75,12 +77,53 @@
</packing>
</child>
<child>
+ <object class="GtkBox" id="embeddeddbBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">48</property>
+ <property name="spacing">8</property>
+ <child>
+ <object class="GtkLabel" id="embeddeddbLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Embedded Database:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="embeddeddbList">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="entry_text_column">0</property>
+ <property name="id_column">1</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkRadioButton" id="openExistingDatabase">
<property name="label" translatable="yes">Open an existing database _file</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="margin_left">12</property>
+ <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
<property name="active">True</property>
@@ -90,7 +133,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">4</property>
+ <property name="position">5</property>
</packing>
</child>
<child>
@@ -131,32 +174,36 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">5</property>
+ <property name="position">6</property>
</packing>
</child>
<child>
<object class="dbulo-OpenDocumentButton" id="openDatabase">
<property name="label" translatable="yes">Open</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">start</property>
<property name="margin_left">48</property>
+ <property name="use_action_appearance">False</property>
<property name="always_show_image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">6</property>
+ <property name="position">7</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="connectDatabase">
<property name="label" translatable="yes">Connect to an e_xisting database</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="margin_left">12</property>
+ <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
<property name="active">True</property>
@@ -166,7 +213,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">7</property>
+ <property name="position">8</property>
</packing>
</child>
<child>
@@ -181,7 +228,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">8</property>
+ <property name="position">9</property>
</packing>
</child>
<child>
@@ -192,7 +239,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">9</property>
+ <property name="position">10</property>
</packing>
</child>
</object>